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

Algoritmo en Pascal Numeros Pares e Impares

Estas en el tema de Algoritmo en Pascal Numeros Pares e Impares en el foro de C/C++ en Foros del Web. Bueno antes que nada buenas noches. Les comento mi problema, en el terciario (analista de sistema) me dijeron que resuelva este ejercicio: 1) Dada una ...
  #1 (permalink)  
Antiguo 16/04/2013, 02:05
 
Fecha de Ingreso: abril-2013
Mensajes: 2
Antigüedad: 11 años
Puntos: 0
Algoritmo en Pascal Numeros Pares e Impares

Bueno antes que nada buenas noches.
Les comento mi problema, en el terciario (analista de sistema) me dijeron que resuelva este ejercicio:

1) Dada una lista N de Numeros Enteros calcular el promedio de los numeros Pares y el promedio de los impares.

Como es mi primer año, me resulta dificil programar, aplique todos mis conocimientos y despues de 5 horas pude hacerlo funcionar pero tiene un bug o error, que no se como solucionar:

Bueno estaba usando el geany e hice este codigo:

Program PromedioParesImpares (input,output);

VAR
AcuPares, AcuImpares:Real;
I, N, Num:Integer;
Contador, Contador2:Integer;
Begin

AcuPares:=0;
Contador:=0;
AcuImpares:=0;
Contador2:=0;
I:=1;

write ('Ingrese el conjunto de Numeros Naturales: ');
read (N);

FOR I:=1 TO N DO

begin
Write ('Ingrese el numero: ');
Readln (Num);

IF (NUM MOD 2=0) then
AcuPares:= AcuPares + Num; //Acumulador Numeros Pares//
IF (NUM MOD 2=0) then
Contador:= Contador +1; //Contador Numeros Impares//
IF (NUM MOD 2=1) then
AcuImpares:= AcuImpares + Num; //Acumulador Numeros Impares//
IF (NUM MOD 2=1) then
Contador2:= Contador2 +1; //Contador Numeros Impares//

end;

Writeln;
writeln ('Promedio Numeros Pares: ',AcuPares/Contador:0:2);
writeln;
writeln ('Promedio Numeros Impares: ',AcuImPares/Contador2:0:2);

END.


Realice la "prueba de escritorio y funciona bien", el problema ocurre cuando ingreso solo numeros pares; me sale este error:

http://fotos.subefotos.com/ed7c3aca26a07586ea853f27ce8e5a64o.png


]Y lo mismo ocurre cuando solo ingreso numeros impares:[/color]

http://fotos.subefotos.com/87210fc128f1974d58e03bb3854aa008o.png

Cuando ingreso numeros pares e impares el programa funciona bien xD.

http://fotos.subefotos.com/469a9031b911c24fca63b2e1b345dfb8o.png

Bueno algun consejo me servira mucho para poder terminarlo, nose si el codigo esta bien, pero para mi es un buen paso para poder empesar,
  #2 (permalink)  
Antiguo 16/04/2013, 08:11
Avatar de Malenko
Moderador
 
Fecha de Ingreso: enero-2008
Mensajes: 5.323
Antigüedad: 16 años, 3 meses
Puntos: 606
Respuesta: Algoritmo en Pascal Numeros Pares e Impares

Cuando no tienes numeros pares o impares, el contador es 0. Y si haces una división entre 0 siempre te dará error. Eso es lo que tienes que controlar ;)
__________________
Aviso: No se resuelven dudas por MP!
  #3 (permalink)  
Antiguo 16/04/2013, 12:31
 
Fecha de Ingreso: abril-2013
Mensajes: 2
Antigüedad: 11 años
Puntos: 0
Respuesta: Algoritmo en Pascal Numeros Pares e Impares

Cita:
Iniciado por Malenko Ver Mensaje
Cuando no tienes numeros pares o impares, el contador es 0. Y si haces una división entre 0 siempre te dará error. Eso es lo que tienes que controlar ;)
Hola Malenko gracias por responder:

Lo que hice fue:

Agregar esta linea al final: Y funciona, ya no tengo el error en ninguno de los 2 casos. Nose si esta bien el procedimiento que hice o existe otro mas corto, vos q opinas?

IF (Contador>0) then
writeln ('Promedio Numeros Pares: ',AcuPares/Contador:0:2);
IF (Contador=0) then
writeln ('No ingreso numeros pares. ');
writeln;
IF (Contador2>0) then
writeln ('Promedio Numeros Impares: ',AcuImPares/Contador2:0:2);
IF (Contador2=0) then
writeln ('No ingreso numeros Impares. ');


Hice la prueba de escritorio y no me dio problemas.
  #4 (permalink)  
Antiguo 17/04/2013, 03:41
Avatar de Malenko
Moderador
 
Fecha de Ingreso: enero-2008
Mensajes: 5.323
Antigüedad: 16 años, 3 meses
Puntos: 606
Respuesta: Algoritmo en Pascal Numeros Pares e Impares

Yo haria algo parecido a esto. Faltará parte del codigo (declaración de variables) y que hace tiempo que no programo en TurboPascal, pero es para que te hagas una idea ;)

Código:
PromedioPares := 0;

IF (Contador>0) THEN
 PromedioPares := AcuPares/Contador;

writeln ('Promedio Numeros Pares: ', PromedioPares);
Es una buena práctica inicializar los variables al valor por defecto que tendrian que tener. Tu, por defecto, siempre partes de que no tienes numeros pares/impares y por tanto el promedio inicial es 0.

Luego, la segunda "mejora" consiste en actualizar la variable solo cuando es necesario, es decir, solo cuando el contador es > 0.

Por ultimo, utilizas un unic WriteLn para escribir el promedio, independientemente del valor.
__________________
Aviso: No se resuelven dudas por MP!

Etiquetas: pascal
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 12:51.