Foros del Web » Programación para mayores de 30 ;) » C/C++ »

Calcular una media en C++

Estas en el tema de Calcular una media en C++ en el foro de C/C++ en Foros del Web. Aquí está el código. El mecanismo es simple; a partir de N números, quiero hacer una media entre todos ellos. Aquí el código: Código: #include ...
  #1 (permalink)  
Antiguo 21/03/2008, 07:09
 
Fecha de Ingreso: marzo-2008
Mensajes: 2
Antigüedad: 16 años, 1 mes
Puntos: 0
Pregunta Calcular una media en C++

Aquí está el código. El mecanismo es simple; a partir de N números, quiero hacer una media entre todos ellos. Aquí el código:

Código:
#include <iostream>
using namespace std;

int main(){
    char calificacion[1];
    int suma = 0, iteracion=1;
    float promedio;
    while(calificacion[0]!='\n'){
        calificacion[0] = (char)calificacion[0];
        cout<<"\nTeclea tu calificacion "<<iteracion<<" : ";
        cin.get();
        cin.get(calificacion,1,'\n');
        calificacion[0] = (int)calificacion[0];
        suma+=calificacion[0];
        iteracion++;
    }
    promedio=(float)suma/(iteracion-1);
    cout<<"El promedio de calificaciones es: "<<promedio<<endl;
    cin.get();
    system("PAUSE");
    return 0;
}
El caso es que defino la variable calificación como un char para que en un momento dado, cuando dé al enter sin introducir ningún número se interrumpa el bucle while y me haga la media con los números que le haya dado (como veis, antes hago un cast pasando la variable calificacion de char a int, de manera que los números puedan sumarse.) Por ejemplo:

Teclea tu calificacion 1: 3
Teclea tu calificacion 2: 5
Teclea tu calificacion 3:

El promedio es: 4

Nótese que la tercera vez que me pide un valor doy enter para que termine el bucle while. Pues bien, en el momento en que introduzco el primer valor y le doy al enter, pasa lo siguiente:

Teclea tu calificacion 1: 3
Teclea tu calificacion 2:
Teclea tu calificacion 3:
Teclea tu calificacion 4:
Teclea tu calificacion 5:
... (y así hasta "infinito"):

Vamos, que empieza a "correr" la lista continuamente en lugar de esperar a que introduzca un número y dé al enter.

¿Dónde está el fallo?

P.D. Por cierto, la variable calificación la he definido en forma de array de manera que haya dos valores: el número y el valor '\n' (que es el que recibe del enter), en ese orden, de manera que el programa no termine cuando le doy al enter después de escribir un número. Notad que éste debe terminar cuando doy al enter sin escribir nada antes.
  #2 (permalink)  
Antiguo 22/03/2008, 08:23
 
Fecha de Ingreso: febrero-2008
Mensajes: 241
Antigüedad: 16 años, 2 meses
Puntos: 1
Re: Calcular una media en C++

Pues el fallo esta en que el while se hace infinito, no se por que te complicas tanto la vida, siplemente para salio ponque tipee "0" o "-1" y con un if y una variable "salida"lo controlas, así te ahorras de char, vectores y se simplifica e menos de 15 lineas de codigo
  #3 (permalink)  
Antiguo 23/03/2008, 09:57
 
Fecha de Ingreso: marzo-2008
Mensajes: 2
Antigüedad: 16 años, 1 mes
Puntos: 0
Re: Calcular una media en C++

Cita:
Iniciado por jd_zuri Ver Mensaje
Pues el fallo esta en que el while se hace infinito, no se por que te complicas tanto la vida, siplemente para salio ponque tipee "0" o "-1" y con un if y una variable "salida"lo controlas, así te ahorras de char, vectores y se simplifica e menos de 15 lineas de codigo
while(calificacion[0]!='\n')

Fíjate que sólo se debería de hacer infinito mientras no dé al enter sin escribir el número (en teoría), además, luego meto el cin.get() para que el bucle se vaya parando y así pueda ir escribiendo números.

PD: Sé que hay formas mucho más sencillas de hacerlo, pero a mí me interesa hacerlo por este método, que para detener el programa haya que darle al enter dos veces (el primero después de que el programa te pregunte por el número y el segundo cuando el programa te vuelve a preguntar). Es sólo por darle un toque más "profesional" al programa.
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 02:42.