• Domingo 22 de Diciembre de 2024, 11:50

Autor Tema:  Re: Validar datos en pascal  (Leído 7902 veces)

i77

  • Nuevo Miembro
  • *
  • Mensajes: 1
    • Ver Perfil
Re: Validar datos en pascal
« en: Martes 6 de Agosto de 2002, 20:04 »
0
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.
Pascal Live !

mau

  • Miembro activo
  • **
  • Mensajes: 69
  • Nacionalidad: cr
    • Ver Perfil
    • http://abcdioses.noneto.com
Re: Validar datos en pascal
« Respuesta #1 en: Viernes 9 de Agosto de 2002, 23:38 »
0
HOla amigo, creo que sí tengo una manera más fácil de hacer lo que propones, pero antes te quiero decir que has hecho un buen trabajo porque lo intentaste y cumpliste.
Ahora debes de trabajar con la lógica.
Supongo que no conoces la instrucción "readkey" , con ella lo que quieres hacer es cosa de juego!
TE explico
Con "Read" lees una variable ejemplo read(variable)
pero con "readkey" lees cualquier cosa del teclado, no es necesario que pongas una variable.
Entonces!!!
Creas una variable Numero y una variable de caracter (para poder leer cualquier cosa)

Var
caracter: char
numero: integer;

Y para comprobar en la ejecución lo haces con una "condición"

Ejemplo

Begin
readkey (caracter);

If (caracter >= 0 ) or (caracter <=9) then
caracter := numero;
else
Writeln ('no has digitado un numero');


End.

Creo qeu el código ha de estar mál escrito, pues desde hace años no programo nada en pascal, pero de seguro qeu tu estas mas fresquito en esto y sabrás corregir errorres y depurar el codigo.

Saludos:
atte: Mau
http://abcdioses.noneto.com
Mau
Programador en VB, SQL, Sybase
Web-Master  de ABCDioses
http]

Niklauser

  • Nuevo Miembro
  • *
  • Mensajes: 4
    • Ver Perfil
Re: Validar datos en pascal
« Respuesta #2 en: Viernes 6 de Septiembre de 2002, 00:30 »
0
Mas facil...
Lees todos los datos con un

Variable := Readkey

Despues , si es necesaria una conversion a numeros con lo que ingresaste haces:

 Str(A, B)
y convertis un string en numeros
(ideal para ser usado en el modo grafico
con OutTextXY por ejemplo)


o a la inversa usando
Val (A, B, C)


Fijate en la ayuda on-line del
Turbo Pascal 7 y listo...

VippeR

  • Nuevo Miembro
  • *
  • Mensajes: 4
    • Ver Perfil
Validar datos en pascal
« Respuesta #3 en: Martes 1 de Abril de 2003, 07:32 »
0
un poko tarde pero por si acaso...
porke no utilizas el procedimiento val????