[C con Clase] Duda al ejecutar un programa

Davidson, Steven srd4121 en njit.edu
Mie Oct 14 16:08:37 CEST 2015


Hola Betto,

Has cometido un error en el uso de las variables. Escribes:

cin >> c;
for (c = 0; c <= n; c++)

cuando deberías usar otra variable para controlar las iteraciones, porque
'c' se usa para controlar el bucle. Lo que está ocurriendo es que se
ignorará el valor en 'c' al llegar al bucle 'for', ya que lo reasignas a 0.
Esto sería,

for( int i=0; i<=c; i++ )

La razón de la aparente aleatoriedad del comportamiento del programa es que
'n' no tiene un valor inicializado ni asignado previamente a ser usado.
Esto implica que usará cualquier valor ahí guardado en memoria; es decir,
contiene "basura", y por tanto recibes "basura".

Como último matiz, aconsejo usar 'float' para guardar el promedio. Esto
implica que tendrás que forzar una división entre 'float', involucrando un
"cásting"; por ejemplo,

float prom = (float)suma / can;

También aconsejo acostumbrarte a usar los operadores de acumulación
especializados como por ejemplo, ++ y +=; esto es,

can++;
suma += n;


Espero que esto te ayude.

Steven


2015-10-14 9:27 GMT-04:00 Betto Rodriguez <segovia.al en gmail.com>:

> Hola!
> Tengo un pequeño programa que hace exactamente esto:
> "Leer N números y hallar e imprimir la suma, la cantidad y el promedio de
> todos los números que son mayores que 0 y menores que 100."
>
> El problema que tengo es que cuando lo ejecuto  la primera vez funciona
> correctamente, pero si lo cierro y lo vuelvo a ejecutar no respeta el
>  ciclo for.
> Por ejemplo si la primera vez indique que lea 5 números cuando vuelvo a
> ejecutar el programa y le indico que lea solamente 3 el quiere leer 5
> variables.
> He verificado mucho y no se de que pueda tratarse, también he probado en
> otras computadoras y es lo mismo. Como IDE actualmente uso Dev C++ 5.11 y
> compilador TDM-GCC para 64 bits, Sistema Operativo Windows 10.
>
> A continuación les dejo el código integro:
>
> #include <iostream>
> #include <cstdlib>
>
> using namespace std;
>
> int main()
> {
> int n;
> int c;
> int can = 0;
> int suma = 0;
> int prom = 0;
> cout << "Ingrese la cantidad de numeros a leer: ";
> cin >> c;
> for (c = 0; c <= n; c++)
> {
> cout << "Ingrese numeros: ";
> cin >> n;
> if (n > 0 && n < 100)
> {
> can = can + 1;
> suma = suma + n;
> }
> }
> prom = suma/ can;
> cout << "Suma: " << suma << endl;
> cout << "Promedio: " << prom << endl;
> system ("pause");
> return 0;
> }
>
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://listas.conclase.net/pipermail/cconclase_listas.conclase.net/attachments/20151014/f2265559/attachment.html>


Más información sobre la lista de distribución Cconclase