Ver Mensaje Individual
  #2 (permalink)  
Antiguo 04/05/2014, 00:48
Avatar de Drewermerc
Drewermerc
 
Fecha de Ingreso: febrero-2014
Mensajes: 185
Antigüedad: 11 años
Puntos: 5
Respuesta: Problema con while en C

hola amigo.
bueno tu codigo quedaria asi si lo quiseras hacer mateniendo tu estructura actual de programa.
bueno no te daba el promedio correcto porque te voy a tratar de poner un ejemplo:
la primera vez que que pedias la calificacion se la sumabas a totatal algo asi.
ingresa calificaciones
3
lo que hacias era hacer esta suma
como total vale 0 entonces seria asi.
total = 0 + 3;
entonces total vale tres

buelves a preguntas.
ingresa la calificacion para alir preciona -1
-1

ahora la suma seria asi.
total = 3 -1;
por que menos uno por que fue el valor que se introdujo y se guardo en grade
y la suma es total = total +grade; como grade vale -1 y total 3 entonces da un resultado de 2.

ese es uno de lo problemas.
el otro es cadavez que repites while counter aunmenta uno entonces si agolo siguiente:
introduce el numero preciona -1 para salir.
3
introduce el numero preciona -1 para salir.
-1
entonces aqui cunte ya vale dos por que uno fue por la calificacion y otro por que tube que decirle -1 para poder salir del while.

la divicion seri asi
average = total/counter:
que en realidad serea asi.
average = 2/2;
por eso da resultados erroneas por que las suma y la divicion estban mas echas.

buno y la solucion solo es sumarle uno a total y restarle uno a counter para que los valores ya sean los verdaderos.

con esto creo que ya sabrias por que el otro codigo esta bien.
por que primero pregunta la primera calificacion despues inicia el while y hace la suma e incremeta count en 1 entonces al intoducir la ultima calificacion como se intoduce -1 se sale del while y entonces ya no se ejcuta la suma de nuevo por eso no se le resta -1 y pues como el while se repite solo las veces exactas count queda con su valor corecto y al acer la divicion todo sale bien.

bueno espero que te me haya entendido.
Código C:
Ver original
  1. //3.8 CLASS AVERAGE PROGRAM WITH SENTINEL CONTROLLED REPETITION
  2. #include <stdio.h>
  3.  
  4. int main (void)
  5. {
  6.     int counter;//number of grades entered
  7.     int grade;//grades value
  8.     int total;//sum of grades
  9.     float average;//average
  10.  
  11.     //initialization phase
  12.     total = 0;
  13.     counter = 0;
  14.     grade = 0;
  15.    
  16.     //processing phase
  17.    
  18.    
  19.     while( grade != -1) {
  20.         puts( "Please type the grade and press enter. To finish type \"-1\"." );//asks user to type a grade
  21.         scanf( "%d", &grade );//stores the grade typed by the user into the grade variable
  22.         total = total + grade;//adds the grade typed by the user to the total
  23.         counter = counter +1;//adds one to the counter
  24.        
  25.     }//end while
  26.    
  27.     //termination phase
  28.     //if counter is not equal to zero, calculate the average and print it, if not print "No grades were entered"
  29.     if( counter != 0){
  30.         counter = counter -1;
  31.         total = total +1;
  32.         printf("%d %d\n", counter, total);
  33.        
  34.         average = ( float )total / counter;
  35.         printf( "Average is %.2f\n", average );
  36.     }//end if
  37.     else{
  38.         puts( "No grades were entered" );
  39.     }//end else
  40. }//end main
saludos drewermerc.