Pascal/Turbo Pascal - problema con pascal

 
Vista:

problema con pascal

Publicado por victor (10 intervenciones) el 24/04/2008 22:54:47
Hola estoy con este programa y me falla el bucle repeat-until , resulta que llega al final a la condicion y en vez de preguntar si o no , salta otra vez al principio sin evaluar la condicion , me podeis decir en donde fallo?? sal2s

Program personal;


Var

nombre: string[40];
edad: integer;
peso: integer;
altura: real;
relativo: real;
seguir: char;

Const

pesomin= 20;
pesomax= 26;

begin

repeat
writeln;
writeln('Introduzca su nombre:');
read (nombre);
writeln ('Introduzca su edad:');
read (edad);
writeln ('Introduzca su peso');
read (peso);
writeln ('Introduzca su altura:');
read (altura);
relativo:=peso/(altura*altura);
writeln();
writeln ('Nombre: ',nombre,' Edad: ',edad,' Peso: ', peso,' Altura: ', altura:0:2);
writeln ('Su peso relativo es:',relativo:0:2);

if (relativo > pesomax) then

writeln('peso por encima de lo recomendado')
else
if (relativo < pesomin) then
writeln(' peso por debajo de lo recomendado')

else
writeln('Su peso es correcto');

writeln;
writeln ('Desea continuar (S/N)?: ');
readln (seguir);

until seguir= 'n';

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 pascal

Publicado por ELI (14 intervenciones) el 24/04/2008 23:27:43
Hola me parece que le hace falta en el programa BEGIN... 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:problema con pascal

Publicado por victor (10 intervenciones) el 24/04/2008 23:36:14
Tenia entendido que repeat-until no tienen que llevar begin -end ya delimitan por si solo.
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 pascal

Publicado por eli (14 intervenciones) el 24/04/2008 23:47:35
Hay algo que está mal estructurado...
y yo estoy tratando de ver me parece que todo está bien

hay que tener mucho cuidado con el uso depunto y coma y el begin end en las condiciones

fijate en este otro programa

program Arma_cuadro_segun_usuario;
uses crt;
{construye un cuadro segun tama¤o y color indicado por el usuario}
var
co,x,y,mx,my,l,c,pl,cl:integer;
res:char;
begin
Repeat
textbackground(0);{coloca el color del fondo de la pantalla en negro}
clrscr;
textcolor(green);
gotoxy(30,5);write('Armare un cuadro segun sus indicaciones');
textcolor(white);
gotoxy(20,7);write('Ingrese cantidad de lineas =>'); readln(y);
gotoxy(20,9);write('Ingrese cantidad de columnas =>');readln(x);
gotoxy(20,11);write('Ingrese numero del color deseado=>');readln(co);
my:=y div 2;
mx:=x div 2;
pl:=12-my;
cl:=40-mx;
clrscr;
textbackground(co);
for l:=1 to y do
begin
gotoxy(40-mx,pl+l);write(' ');
gotoxy(40+mx,pl+l);write(' ');
end;
for c:=0 to x do
begin
gotoxy(cl+c,12-my);write(' ');
gotoxy(cl+c,12+my);write(' ');
end;
textcolor(white);
gotoxy(30,24);writeln('desea otro cuadro s/n');
readln(res);
until (res='N') or (res='n');
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:problema con pascal

Publicado por Diego Romero (996 intervenciones) el 24/04/2008 23:54:14
Tu problema es que estás haciendo un ReadLn de un tipo char, el ReadLn finaliza cuando se presiona la tecla enter enviando el caracter #13 y como el tipo char almacena un solo caracter, el último tipeado, a la variable seguir va a parar siempre el #13 y no lo que a simple vista parece indicar.

La solución es este método:

Write('Desea continuar? (S/N): ');
seguir:=upcase(readkey);
WriteLn;
until seguir='N';

para mantener la misma forma que estás usando.

Upcase es una función que convierte un caracter alfabetico a su correspondiente mayúscula y readkey espera a que se presione una tecla y devuelve esa sola tecla sin esperar por enter. Debes declarar la unidad crt para poder usar readkey.
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 pascal

Publicado por victor (10 intervenciones) el 25/04/2008 08:56:45
Diego muchísimas gracias por tu explicación el problema es que estoy haciendo un curso de iniciación a la programación y se supone que todavía no puedo poner lo de readkey porque todavía no la he dado. No podría haber otro error en el programa con lo que hay escrito sin tener que añadir nada nuevo?. Gracias y un saludo.

p.d: Si en vez de poner ReadLn pusiera solamente read y a la vez cambio el char de seguir por string crees que valdría asi? ,lo probaré en cuanto pueda..sal2
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 pascal

Publicado por Diego Romero (996 intervenciones) el 25/04/2008 10:01:34
Sí, es la mejor solución si no puedes usar readkey, pero usa ReadLn con los strings.
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 pascal

Publicado por victor (10 intervenciones) el 25/04/2008 10:08:42
Probaré como dices muchas gracias por tus contestaciones y la rapidez en publicarlas..sal2
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 pascal

Publicado por victor (10 intervenciones) el 28/04/2008 23:00:47
Efectivamente era ese el problema muchas gracias diego y eli por vuestra ayuda un saludo.
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