Ver Mensaje Individual
  #3 (permalink)  
Antiguo 04/05/2014, 01:29
Avatar de vangodp
vangodp
 
Fecha de Ingreso: octubre-2013
Mensajes: 934
Antigüedad: 11 años, 5 meses
Puntos: 38
Respuesta: Problema con while en C

hay varios errores ahí no de programación sino de lógica.

si quieres obtener una media pues deberas que dividir algo por algo no o sea el numero entrado dividido por la cantidad que es el contador.

Bien te voy a decir lo que he visto malo y lo arreglas.
cuando pongo el 5 cuatro veces y lo vas sumando tendria que dar 20 pero cuando al seguiente bucle le pongo el -1 para salir es como si le estoy sumando un -1 :S

debes poner algo que haga una comprobacion que si el valor entrado es diferente de -1 solo entonces se incrementa y hace la suma por que ambos funcionan una vez mas para que pulses ese -1.
si pongo 5 5 5 5 y después -1 es como sumar 5+5+5+5+-1 eso es fatal :O
Ademas el contador tambien funciona una vez mas para el -1 si son 4 numeros entrados esta dividiendo por 5 fatalfatal jeje

eso se arregla así:
Código C++:
Ver original
  1. if (grade != -1){
  2.            total = total + grade;//adds the grade typed by the user to the total
  3.            counter = counter + 1;//adds one to the counter
  4.         }


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.     while( grade != -1) {
  18.         puts( "Please type the grade and press enter. To finish type \"-1\"." );//asks user to type a grade
  19.         scanf( "%d", &grade );//stores the grade typed by the user into the grade variable
  20.        
  21.         if (grade != -1){ //Mi solucion
  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.        
  26.     }//end while
  27.  
  28.     printf( "total%d, contador%d\n", total, counter ); // con esta linea ves lo que vale ambos valores antes de hacer el (total / counter), hacer comprobaciones sirve para tener un mayor control. prueba añadir esta linea a tu programa anterior y lo veras lo que digo XDD
  29.    
  30.     //termination phase
  31.     //if counter is not equal to zero, calculate the average and print it, if not print "No grades were entered"
  32.     if( counter != 0){
  33.         average = ( float ) (total / counter); // Aemas encerrar (total/counter) para obligar a hacer el calculo antes del cast
  34.         printf( "Average is %.2f\n", average );
  35.     }//end if
  36.     else{
  37.         puts( "No grades were entered" );
  38.     }//end else
  39. }//end main

Ademas he señalado algo que es encerrar (total / counter) para obligar a que haga el calculo antes del cast (float).

El programa parece funcionar ahora.