Hola, soy nuevo en pascal y en otro foro preguntaron esto :
Como validar datos nunericos para que, si alguien ingresa una letra, el compilador no tire un error...
Ante que nadie respodia, yo ofreci esto
Esta bien ?
Program CharToInt;
USES Crt;
{ð=-=-=-=-=-=-=-=-=-=< CONVERTIR UNA CADENA EN INTEGER >=-=-=-=-=-=-=-=-=-=ð
Y bueno, este codigo fue lo mejor que se me ocurrio.
Pero duden de todo lo que hice ya que aun me falta mucho por aprender !
Fijense que es todo un trabajo de hormiga tan solo para 2 digitos.
Pueden extender la capacidad a mas digitos, no es dificil, pero si tedioso.
Huelga aclarar que si alguien tiene criticas para hacerme sobre este
codigo, seran bienvenidas, ya que para aprender estoy...
En este foro o a
i77@writeme.comð=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=ð}
CONST
MaxDigitos = 2;
VAR
i, Num : Word;
CadStr : Array[0..MaxDigitos] of Char;
BEGIN
ClrScr;
i := 0;
Write('Ingrese un valor : ');
{Leo todo como caracteres para que el compilador no me tire un
error si el usuario ingresa un caracter en lugar de un numero}
While(Not Eoln) Do
begin
Read(CadStr
);
Inc(i);
end;
WriteLn;
{ð=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=ð
Y tooooooodo lo que sigue desde ahora, es la conversion de char a integer.
Ah! fijate los valores que estan entre '' comillas simples.
Cualquier cosa que le ingreses distinto de 0..9, no lo tendra en cuenta.
ð=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=ð}
(* Lectura y asignacion para 1 solo digito *)
For i := 0 To High(CadStr) Do
begin
case CadStr of
'0' : Num := 0;
'1' : Num := 1;
'2' : Num := 2;
'3' : Num := 3;
'4' : Num := 4;
'5' : Num := 5;
'6' : Num := 6;
'7' : Num := 7;
'8' : Num := 8;
'9' : Num := 9;
end;
end;
(*=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=ð
Lectura y asignacion para 2 digitos...
Fijate que en este caso, antes de asigar un valor a Num, primero me
fijo en que valor se habia ingresado antes, y asignar en consecuencia
ð=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=*)
Case CadStr[1] of
'0' : begin
case CadStr[0] of
'1' : Num := 0 + 10;
'2' : Num := 0 + 20;
'3' : Num := 0 + 30;
'4' : Num := 0 + 40;
'5' : Num := 0 + 50;
'6' : Num := 0 + 60;
'7' : Num := 0 + 70;
'8' : Num := 0 + 80;
'9' : Num := 0 + 90;
end;
end;
'1' : begin
case CadStr[0] of
'1' : Num := 1 + 10;
'2' : Num := 1 + 20;
'3' : Num := 1 + 30;
'4' : Num := 1 + 40;
'5' : Num := 1 + 50;
'6' : Num := 1 + 60;
'7' : Num := 1 + 70;
'8' : Num := 1 + 80;
'9' : Num := 1 + 90;
end;
end;
'2' : begin
case CadStr[0] of
'1' : Num := 2 + 10;
'2' : Num := 2 + 20;
'3' : Num := 2 + 30;
'4' : Num := 2 + 40;
'5' : Num := 2 + 50;
'6' : Num := 2 + 60;
'7' : Num := 2 + 70;
'8' : Num := 2 + 80;
'9' : Num := 2 + 90;
end;
end;
'3' : begin
case CadStr[0] of
'1' : Num := 3 + 10;
'2' : Num := 3 + 20;
'3' : Num := 3 + 30;
'4' : Num := 3 + 40;
'5' : Num := 3 + 50;
'6' : Num := 3 + 60;
'7' : Num := 3 + 70;
'8' : Num := 3 + 80;
'9' : Num := 3 + 90;
end;
end;
'4' : begin
case CadStr[0] of
'1' : Num := 4 + 10;
'2' : Num := 4 + 20;
'3' : Num := 4 + 30;
'4' : Num := 4 + 40;
'5' : Num := 4 + 50;
'6' : Num := 4 + 60;
'7' : Num := 4 + 70;
'8' : Num := 4 + 80;
'9' : Num := 4 + 90;
end;
end;
'5' : begin
case CadStr[0] of
'1' : Num := 5 + 10;
'2' : Num := 5 + 20;
'3' : Num := 5 + 30;
'4' : Num := 5 + 40;
'5' : Num := 5 + 50;
'6' : Num := 5 + 60;
'7' : Num := 5 + 70;
'8' : Num := 5 + 80;
'9' : Num := 5 + 90;
end;
end;
'6' : begin
case CadStr[0] of
'1' : Num := 6 + 10;
'2' : Num := 6 + 20;
'3' : Num := 6 + 30;
'4' : Num := 6 + 40;
'5' : Num := 6 + 50;
'6' : Num := 6 + 60;
'7' : Num := 6 + 70;
'8' : Num := 6 + 80;
'9' : Num := 6 + 90;
end;
end;
'7' : begin
case CadStr[0] of
'1' : Num := 7 + 10;
'2' : Num := 7 + 20;
'3' : Num := 7 + 30;
'4' : Num := 7 + 40;
'5' : Num := 7 + 50;
'6' : Num := 7 + 60;
'7' : Num := 7 + 70;
'8' : Num := 7 + 80;
'9' : Num := 7 + 90;
end;
end;
'8' : begin
case CadStr[0] of
'1' : Num := 8 + 10;
'2' : Num := 8 + 20;
'3' : Num := 8 + 30;
'4' : Num := 8 + 40;
'5' : Num := 8 + 50;
'6' : Num := 8 + 60;
'7' : Num := 8 + 70;
'8' : Num := 8 + 80;
'9' : Num := 8 + 90;
end;
end;
'9' : begin
case CadStr[0] of
'1' : Num := 9 + 10;
'2' : Num := 9 + 20;
'3' : Num := 9 + 30;
'4' : Num := 9 + 40;
'5' : Num := 9 + 50;
'6' : Num := 9 + 60;
'7' : Num := 9 + 70;
'8' : Num := 9 + 80;
'9' : Num := 9 + 90;
end;
end;
End;
{ð=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=ð
Bueno, y lo que sigue es una prueba de que esto funciona.
Queda en vos extender la capacidad de digitos y/o convertir esto en un
procedimiento para poder ser usado en un fuente o una unit; osea, adaptalo
o modificalo segun tu necesidad. Espero haber ayudado con este codigo. Bye!
ð=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=ð}
Write('Ingresaste el numero [',Num,'] ...y ', Num,' * ');
TextColor(LightBlue+128);
Write('77 ');
NormVideo;
Num := Num * 77;
Write('= ',Num);
Repeat Until KeyPressed; {pausa}
END.