Pascal/Turbo Pascal - Ayuda Programa!

 
Vista:

Ayuda Programa!

Publicado por usuaria (27 intervenciones) el 23/09/2006 02:55:07
Holas, haber si alguien me puede ayudar...cuando corro el siguiente programa aveces me lo corre bien y otras veces no ingreso los numeros y se me sale (me aparece el cartel de exitcode=201)...hay algo mal en el codigo??? grax!

Program Clase;
Uses
crt;
Type
mitipo=integer;
Var
mayor,menor,Num1,Num2:mitipo;

Procedure Cargar (var num1,num2:mitipo);

Begin
Writeln ('Ingrese el primer numero');
Readln (Num1);
Writeln ('Ingrese el sesgundo numero');
Readln (Num2);
End;

Function Primo (num:mitipo):boolean;
Var
i:integer;
prim:boolean;

Begin
prim:=true;
i:=2;

While ( num > i) and (prim) do
begin
if (num mod i) = 0 then
prim := not prim;
i:=i+1;
primo:=prim;
End;

End;

Procedure Divisor (num1,num2:mitipo);

Begin
if (num1 mod num2 =0) then
Writeln (num1, ' es divisible por ', num2)
else
If (num2 mod num1 =0) then
Writeln (num2, ' es divisible por',num1)
else
Writeln ('ninguno divide');
End;

Procedure MenorMayor (num1,num2:mitipo;var menor,mayor:integer);
Begin
If (num1 > num2) then
begin
mayor:=num1;
menor:=num2
end
else
begin
mayor:=num2;
menor:=num1;
end;
End;

Function Potencia (num1,num2:mitipo; menor,mayor:integer):integer;
Var
i,pot:integer;
Begin
pot:=1;
MenorMayor (num1,num2,menor,mayor);
For i:=1 to mayor do
pot:=pot * menor;
potencia:=pot;
End;

Begin
ClrScr;
Cargar (num1,num2);
ClrScr;
Writeln (num1, ' es primo? ', primo(num1));
Writeln (num2, ' es primo? ', primo(num2));
Divisor (num1,num2);
menor:=0;mayor:=0;
Writeln ('potencia', Potencia(num1,num2,menor,mayor));
Readkey;

End.
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

RE:Ayuda Programa!

Publicado por Diego Romero (996 intervenciones) el 23/09/2006 08:01:56
Por el número de error viendo a la pasada el código me parece que el error se debe a que en el programa se trata de almacenar un valor fuera del rango admitido por el tipo Integer. Y me parece que el error te salta en esta línea:
pot:=pot * menor;
Cuando a la función Potencia() le pasas los valores, por ejemplo, 3 y 10 eso significa que calculara 3 elevado a la 10 cuyo resultado excede por lejos lo que puede almacenar un integer, de allí que salte el error 201 en tiempo de ejecución (range check error).
Las soluciones pueden ser dos o ambas a la vez dependiendo de tus necesidades.
En vez de usar integer, usa longint.
Antes de pasar los valores a la función controla que no superen ciertos rangos.
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

RE:Ayuda Programa!

Publicado por usuaria (27 intervenciones) el 23/09/2006 15:12:05
GRACIAS!!!! se me habia pasado el tema de tipo de datos :) :) ahora eso ya me anda, pero ahora se me presento un nuevo problemita, y es q no me llama a una funcions. Es decir hasta la parte de potencia todo perfecto y ahi se me termina el programa, no me hace la parte de Division. Puse comentarios entre llaves pa q sepan q parte es la q me falla. Desde Ya MUCHASGRACIAS!!! : )
Program Clase;
Uses
crt;
Type
mitipo=longint;
Var
mayor,menor,Num1,Num2:mitipo;

Procedure Cargar (var num1,num2:mitipo);

Begin
Writeln ('Ingrese el primer numero');
Readln (Num1);
Writeln ('Ingrese el sesgundo numero');
Readln (Num2);
End;

Function Primo (num:mitipo):boolean;
Var
i:integer;
prim:boolean;

Begin
prim:=true;
i:=2;

While ( num > i) and (prim) do
begin
if (num mod i) = 0 then
prim := not prim;
i:=i+1;
primo:=prim;
End;

End;

Procedure Divisor (num1,num2:mitipo);

Begin
if (num1 mod num2 =0) then
Writeln (num1, ' es divisible por ', num2)
else
If (num2 mod num1 =0) then
Writeln (num2, ' es divisible por',num1)
else
Writeln ('ninguno divide');
End;

Procedure MenorMayor (num1,num2:mitipo;var menor,mayor:mitipo);
Begin
If (num1 > num2) then
begin
mayor:=num1;
menor:=num2
end
else
begin
mayor:=num2;
menor:=num1;
end;
End;

Function Potencia (num1,num2,menor,mayor:mitipo):longint;
Var
i,pot:integer;
Begin
pot:=1;
MenorMayor (num1,num2,menor,mayor);
For i:=1 to mayor do
pot:=pot * menor;
potencia:=pot;
End;

Function Division (num1,num2,menor,mayor:mitipo):integer; {NO LLEGA A ENTRAR}
Var
resu:integer;
Begin
resu:=0;

Repeat
resu:= mayor - menor;
Until (resu < 0);

Division:=resu;
End;


Begin
ClrScr;
Cargar (num1,num2);
ClrScr;
Writeln (num1, ' es primo? ', primo(num1));
Writeln (num2, ' es primo? ', primo(num2));
Divisor (num1,num2);
menor:=0;mayor:=0;
Writeln ('potencia', Potencia(num1,num2,menor,mayor));
Writeln ('division', Division(num1,num2,menor,mayor)); {NO ANDA ESTA PARTE}
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

RE:Ayuda Programa!

Publicado por Diego Romero (996 intervenciones) el 23/09/2006 22:53:20
Bueno pues, sucede que entras en un ciclo infinito.

Repeat
resu:= mayor - menor;
Until (resu < 0);

resu nunca se hace menor a cero porque la resta da siempre cero. Esto se debe a que antes de llamar a la función Division() los parámetros mayor y menor toman valor cero (cero menos cero igual cero).

Te sugiero lo siguiente. En el IDE de Turbo Pascal tienes una opción en el menú "Debug" que se llama Watch, esto te abre una ventana donde con la tecla insert puedes escribir el nombre de una variable o parámetro.
Con la tecla F5 marcas una línea del código fuente donde quieres que la ejecución se pause, luego usa las teclas F7 y F8 para ejecutar sentencia por sentencia y puedes ver en la ventana de Watch qué valores toman las variables que anotaste allí.

De todos modos, el ciclo repeat que pones allí no tiene sentido mientras el resultado de la resta no lo reintroduces en la ecuación.
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

RE:Ayuda Programa!

Publicado por usuaria (27 intervenciones) el 24/09/2006 22:34:22
hola, ya solucione el tema de resu, pero lo q no logro es q el principal me llame a la funcion me imprime hasta potencia nomas..la linea de division no sale nada..

Program Clase;
Uses
crt;
Type
mitipo=longint;
Var
mayor,menor,Num1,Num2:mitipo;

Procedure Cargar (var num1,num2:mitipo);

Begin
Writeln ('Ingrese el primer numero');
Readln (Num1);
Writeln ('Ingrese el sesgundo numero');
Readln (Num2);
End;

Function Primo (num:mitipo):boolean;
Var
i:integer;
prim:boolean;

Begin
prim:=true;
i:=2;

While ( num > i) and (prim) do
begin
if (num mod i) = 0 then
prim := not prim;
i:=i+1;
primo:=prim;
End;

End;

Procedure Divisor (num1,num2:mitipo);

Begin
if (num1 mod num2 =0) then
Writeln (num1, ' es divisible por ', num2)
else
If (num2 mod num1 =0) then
Writeln (num2, ' es divisible por',num1)
else
Writeln ('ninguno divide');
End;

Procedure MenorMayor (num1,num2:mitipo;var menor,mayor:mitipo);
Begin
If (num1 > num2) then
begin
mayor:=num1;
menor:=num2
end
else
begin
mayor:=num2;
menor:=num1;
end;
End;

Function Potencia (num1,num2,menor,mayor:mitipo):longint;
Var
i,pot:longint;
Begin
pot:=1;
MenorMayor (num1,num2,menor,mayor);
For i:=1 to mayor do
pot:=pot * menor;
potencia:=pot;
End;

Function Division (num1,num2,menor,mayor:mitipo):integer;
Var
resu:integer;
Begin
resu:=0;
MenorMayor (num1,num2,menor,mayor);

Repeat
resu:= mayor - menor;
Until (resu < 0);

Division:= resu+mayor;
End;


Begin
ClrScr;
Cargar (num1,num2);
ClrScr;
Writeln (num1, ' es primo? ', primo(num1));
Writeln (num2, ' es primo? ', primo(num2));
Divisor (num1,num2);
menor:=0;
mayor:=0;
Writeln ('potencia', Potencia(num1,num2,menor,mayor));
Writeln ('division', Division(num1,num2,menor,mayor));
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

RE:Ayuda Programa!

Publicado por Diego Romero (996 intervenciones) el 25/09/2006 01:38:10
Pues yo veo que el problema que te comenté persiste :S.
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

RE:Ayuda Programa!

Publicado por juance (12 intervenciones) el 26/09/2006 02:28:13
HOLA:
Por favor intentemos dar respuetas que tengan algún tipo de sentido.
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