Pascal

Buen día.una pregunta, en un ejercicio que estoy haciendo necesito leer un numero con readln osea el usuario debe digitar un numero, pero si pone una letra se me cae el programa. ¿Como hago para validar que lo que se diguita sea un numero y no una letra o letras.
2

2 Respuestas

4.575 pts. licenciado en informatica, egresado hace 2
Ese error es de usuario y no de programación por eso es que hasta donde se pascal no lo tiene controlado, lo que se puede hacer es implementar en un bucle el recibir carácter por carácter a capturar, si escriben una letra mandar un mensaje, si escriben números seguir recibiendo hasta la longitud deseada o hasta que presione enter... otra forma es implementando directivas de compilación pero para eso se tendría que ver que clase de error es el que te bota...
0 pts.
El siguiente programa lee un número entre 0 y 255 impidiendo que se introduzcan letras o cualquier signo de puntuación, colocándolo en una posición concreta de la pantalla.
program M255;
uses
Crt;
Var
x,y :Integer;
Num :Byte;
Function Maquina(x , y :Integer):Byte;
Var
Cad : String;
Num, Estado : Char;
i,com,n : Integer;
Fin : Boolean;
Procedure Escribir(Var Cad :String ; Num : Char; Var i: Integer);
begin
Cad:=Cad+Num;
Write(Num);
i:=i+1;
end;
Procedure Borrar(Var Cad : String ; Var I : Integer);
begin
delete(Cad,i,1);
i:=i-1;
Gotoxy(x+i,y);
Write(' ');
end;
Begin
ClrScr;
Gotoxy(x,y-1);
Writeln('Introduzca un n£mero entre 1 y 255');
Estado:='A';
Cad:='';
i:=0;
Fin:=False;
repeat
Num:=Readkey;
Gotoxy(x+i,y);
Case Estado of
'A': Case Num of
'0': begin
Escribir(Cad,Num,I);
delete(Cad,i,1);
i:=i-1;
end;
'1': Begin
Estado:='B';
Escribir(Cad,Num,I);
end;
'2': Begin
Estado:='C';
Escribir(Cad,Num,I);
end;
'3'..'9':Begin
Estado:='D';
Escribir(Cad,Num,I);
end;
#8 :if i>0 then
Borrar(Cad,i)
else
begin
Write(' ');
Delete(Cad,i+1,1);
end;
#13: if Cad = '' then
begin
Gotoxy(x,y+1);
Write('Debe introducir almenos un n£mero');
Delay(1000);
Gotoxy(x,y+1);
Write(' ');
end
else
Fin:=True;
else
Write(#7);
end;
'B': Case Num of
'0'..'9': begin
Estado:='E';
Escribir(Cad,Num,I);
end;
#8 : begin
Estado:='A';
Borrar(Cad,i);
end;
#13: fin:=True;
else
Write(#7);
end;
'C': Case Num of
'0'..'4': begin
Estado:='G';
Escribir(Cad,Num,I);
End;
'5': begin
Estado:='H';
Escribir(Cad,Num,I);
end;
'6'..'9': begin
Estado:='I';
Escribir(Cad,Num,I);
end;
#8 : begin
Estado:='A';
Borrar(Cad,i);
end;
#13: fin:=True;
else
Write(#7);
end;
'D': Case Num of
'0'..'9': begin
Estado:='L';
Escribir(Cad,Num,I);
end;
#8 : begin
Estado:='A';
Borrar(Cad,i);
end;
#13: fin:=True;
else
Write(#7);
end;
'E': Case Num of
'0'..'9': begin
Estado:='F';
Escribir(Cad,Num,I);
end;
#8 : begin
Estado:='B';
Borrar(Cad,i);
end;
#13: fin:=True;
else
Write(#7);
end;
'G': Case Num of
'0'..'9': begin
Estado:='J';
Escribir(Cad,Num,I);
end;
#8 : begin
Estado:='C';
Borrar(Cad,i);
end;
#13: fin:=True;
else
Write(#7);
end;
'H': Case Num of
'0'..'5': begin
Estado:='K';
Escribir(Cad,Num,I);
end;
#8 : begin
Estado:='C';
Borrar(Cad,i);
end;
#13: fin:=True;
else
Write(#7);
end;
'I': Case Num of
#8 : begin
Estado:='C';
Borrar(Cad,i);
end;
#13: fin:=True;
else
Write(#7);
end;
'F': Case Num of
#8 : begin
Estado:='E';
Borrar(Cad,i);
end;
#13: fin:=True;
else
Write(#7);
end;
'J': Case Num of
#8 : begin
Estado:='G';
Borrar(Cad,i);
end;
#13: fin:=True;
else
Write(#7);
end;
'K': Case Num of
#8 : begin
Estado:='H';
Borrar(Cad,i);
end;
#13: fin:=True;
else
Write(#7);
end;
'L': Case Num of
#8 : begin
Estado:='D';
Borrar(Cad,i);
end;
#13: fin:=True;
else
Write(#7);
end;
end;
until Fin;
Val(Cad,n,com);
Maquina:=n;
end;
begin
ClrScr;
Write('Introduzca la posici¢n de la x en pantalla: ');
Readln(x);
Write('Introduzca la posici¢n de la y en pantalla: ');
Readln(y);
ClrScr;
Num:=Maquina(x,y);
Gotoxy(20,24);
Write(Num);
readln;
end.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas