Pascal/Turbo Pascal - Problema con un programa

   
Vista:

Problema con un programa

Publicado por Borja (4 intervenciones) el 28/10/2009 18:59:17
Wenas, soy novato en esto de programar en pascal. Me han mandao que hag unprograma que al escribir yo un numero arabigo me lo cambie a romanos. He visto alguno por ahi pero son muy complicados y es imposible que se crea el profesor que lo he hecho yo. Yo he hecho esto a ver si me podeis ayuar, no funciona, meto el numero y no hace nada:

program romanos;
var n:integer;
var cont:integer;
begin
writeln('Escriba el numero que desee: ');
readln(cont);
cont:=n;
while n>0 do
if (n<10000) and (n>=1000) then
begin
write('M');
n:=n-1000;
end;
if (n<1000) and (n>=900) then
begin
write('CM');
n:=n-900;
end;
if (n<900) and (n>=500) then
begin
write('D');
n:=n-500;
end;
if (n<500) and (n>=400) then
begin
write('CD');
n:=n-400;
end;
if (n<400) and (n>=100) then
begin
write('C');
n:=n-100;
end;
if (n<100) and (n>=90) then
begin
write('XC');
n:=n-90;
end;
if (n<90) and (n>=50) then
begin
write('L');
n:=n-50;
end;
if (n<50) and (n>=40) then
begin
write('XL');
n:=n-40;
end;
if (n<40) and (n>=10) then
begin
write('X');
n:=n-10;
end;
if (n<10) and (n>=9) then
begin
write('IX');
n:=n-9;
end;
if (n<9) and (n>=5) then
begin
write('V');
n:=n-5;
end;
if (n<5) and (n>=4) then
begin
write('IV');
n:=n-4;
end;
if (n<4) and (n>=1) then
begin
write('I');
n:=n-1;
end;
readln;
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:Problema con un programa

Publicado por Alexis (44 intervenciones) el 29/10/2009 16:26:52
writeln('Escriba el numero que desee: ');
readln(cont);
cont:=n;

Allí tienes un error de lógica. La variable cont es la variable que alamcena en memoria lo que ingrese el usuario por el teclado, luego tu código le asigna a esta variable el valor n pero n es igual a cero (0) pues nunca le asignas un valor.

Creo que lo que querías hacer era esto:

writeln('Escriba el numero que desee: ');
readln(cont);
n:=cont;

Pues en tu if utilizas y modificas es el valor de n.

Intentalo así y luego comentas que tal.
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:Problema con un programa

Publicado por Borja (4 intervenciones) el 29/10/2009 23:42:15
es verdad, esque al pincipio cont le iba a llamar al contador y n al numero pero luego cambie y se me olvido cambiar esa parte tambien. De todas maneras aunque cambie eso me sigue sin funcionar. Le pongo 1 y no pone nada y se bloquea. Le pongo 1346 y me pone M y se bloqua... :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:Problema con un programa

Publicado por Alexis (44 intervenciones) el 30/10/2009 01:50:22
Tuve que copiar tu codigo para ver que le pasa. El programa no se bloquea, sólo entra en un ciclo while infinito, es decir, un ciclo while en el que la condicion de salida nunca se cumple.

Lo que debes hacer es cambiar la condición de salida del while

while (n<>0) do

y listo!!!

Ahora te invito a optimizar tu codigo utilizando

else if

y mejor aún, utilizando la sentencia

case

Saludos!!!
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:Problema con un programa

Publicado por Borja (4 intervenciones) el 30/10/2009 12:48:07
Muchas gracias, se me ha solucionado el problema. Tenia que cambiar lo de n<>0 y tambien tenia que poner entre cada bucle de acciones un else :D gracias por la ayuda
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