Pascal/Turbo Pascal - Revision, por favor

   
Vista:

Revision, por favor

Publicado por Alejandro (7 intervenciones) el 19/10/2013 12:03:47
Buenas. Me encuentro escribiendo este mensaje debido a que me han pedido que realice un programa bastante sencillo, pero estoy ante un problema que no logro identificar. El programa no es mas que pedir un numero por pantalla y:
-Sumar las cifras pares.
-Sumar cifras impares en posiciones impares.
-Sumar cifras pares en posiciones pares.
El codigo del programa esta practicamente acabado:

program prog;
var
a1,a2,a3:integer;
sum1,sum2,sum3:integer;
cont1,cont2:integer;
begin
cont1:=0;
cont2:=0;
sum1:=0;
sum2:=0;
sum3:=0;
writeln('Introduzca numero');
readln(a1);
a2:=a1;
a3:=a3;
while a1<>0 do
if ((a1 mod 2)=0) then
begin
sum1:=sum1+(a1 mod 10);
a1:=a1 div 10;
end
else
a1:=a1 div 10;
writeln('Suma de cifras pares: ',sum1);
while a2<>0 do
begin
cont1:=cont1+1;
if (((a2 mod 2)=1) and ((cont1 mod 2)=1)) then
begin
sum2:=sum2+(a2 mod 10);
a2:=a2 div 10;
end
else
a2:=a2 div 10;
end;
writeln('Suma de cifras impares en posiciones impares: ',sum2);
while a3<>0 do
begin
cont1:=cont2+1;
if ((a3 mod 2)=0) and ((cont2 mod 2)=0) then
begin
sum3:=sum3+(a3 mod 10);
a3:=a3 div 10;
end
else
a3:=a3 div 10;
end;
writeln('Suma de cifras pares en posiciones pares: ',sum3);
readln;
end.


El problema esta a la hora de probarlo. Yo escribo el numero 85582 y en las variables a2 y a3 se me guarda 20046. No se porque se me guarda ese numero. Pense que lo habia hecho bien, peroesta visto que no. Una solucion que puedo implementar es:

a2:=0;
a3:=0;
a2:=a2+a1;
a3:=a3+a1;

De esta forma yo tengo este problema, pero preferiria ahorrarme el hacerlo. Por favor, necesito que alguien me indique donde esta el problema. Muchas gracias
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

Revision, por favor

Publicado por ramon (2072 intervenciones) el 20/10/2013 13:24:19
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
{Primero Aclaro el resultado que indicas es causa de que un integer no puede con el numero entrado
 si lo pones en longint el problema desaparece.
 Te dejo este programa para ver si te ayuda}
 
 program numeros;
   uses
      crt;
   var
     parpar, pares, impares, numero : longint;
     cadena : string[18];
     cont   : integer;
     resup, resuipip, resupp : integer;
 
  begin
     clrscr;
     pares := 0;
     impares := 0;
     parpar := 0;
     writeln('***** Entre Un Numero *****');
     writeln;
     write('    Numero : ');
     readln(numero);
     str(numero,cadena);
     writeln('    ',cadena);
     for resup := 1 to length(cadena) do
     begin
     if cadena[resup] in['2','4','6','8'] then
     pares := pares + (ord(cadena[resup]) - 48);
     if (cadena[resup] in['1','3','5','7','9']) and (resup mod 2 <> 0) then
     impares := impares + (ord(cadena[resup]) - 48);
     if (cadena[resup] in['2','4','6','8']) and (resup mod 2 = 0) then
     parpar := parpar + (ord(cadena[resup]) - 48);
     end;
     clrscr;
     writeln('***** Los Resultados Son *****');
     writeln;
     writeln('   Elnumero Entrado         = ',numero);
     writeln('   Total Pares              = ',pares);
     writeln('   Total Impares En Impares = ',impares);
     writeln('   Total Pares En Parpar    = ',parpar);
     writeln;
     writeln('<<<<< Pulse Una Tecla >>>>>');
     readkey;
   end.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Revision, por favor

Publicado por Alejandro (7 intervenciones) el 20/10/2013 16:04:34
Vale, muchas gracias. El problema estaba en declarar las variables a1,a2,a3 como longint en vez de integer.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar