• Viernes 19 de Abril de 2024, 12:13

Autor Tema:  Problema Restriccion  (Leído 1282 veces)

pablo_ace

  • Nuevo Miembro
  • *
  • Mensajes: 1
    • Ver Perfil
Problema Restriccion
« en: Viernes 6 de Junio de 2008, 03:54 »
0
Tengo un programa que consiste en crear altas de receptores y extender el archivo de receptores ya existentes con las altas nuevas.
El problema que tengo es que me especifican que en el campo pais tienen que ir Argentina, Chile, Uruguay y Paraguay. Esta armado un case of pero creo que esta mal  (x eso esta con // al comienzo). Esta hecho con if pero tambien creo q esta mal porque el programa anda pero si pongo p.ej. Japon, el programa sigue sin realizar la restriccion. Les paso el codigo a ver donde esta la falla.
Gracias de antemano!!

ACA ESTA EL CODIGO:
program Untitled;
uses crt;
type
Ts30 = string[30];
Ts9 = string[9];
Tvector = Array [1..3] of char;

TregReceptor = Record
ApellidoNombre: Ts30;
Mail: Ts30;
Pais: Ts9;
Acontecimiento: Tvector;
End;

TarchReceptores = file of TregReceptor;

Procedure ASIGNARABRIR (Var archout, archrec: TarchReceptores);
Begin
Assign (archout,'c:\nuevorec.dat');
Assign (archrec, 'c:\receptores.dat');
Rewrite (archout);
Reset (archrec);
End;

Function PAISCORRECTO (pais: string[9]): boolean;
begin
//case pais of
// 'argentina','ARGENTINA': PAISCORRECTO:= true;
// 'chile', 'CHILE': PAISCORRECTO:= true;
// 'paraguay', 'PARAGUAY': PAISCORRECTO:= true;
// 'uruguay', 'URUGUAY': PAISCORRECTO:= true;
// end;
if(pais = 'argentina') or (pais='ARGENTINA') THEN PAISCORRECTO:=false;
if (pais = 'chile') or (pais='CHILE') THEN PAISCORRECTO:=false;
if (pais= 'chile') or (pais= 'CHILE') THEN PAISCORRECTO:=false;
if (pais= 'paraguay') or (pais= 'PARAGUAY') THEN PAISCORRECTO:=false;
if (pais= 'uruguay')or (pais= 'URUGUAY')  THEN PAISCORRECTO:=false;
end;


Procedure ALTAS (Var archout: TarchReceptores; Var rec: TregReceptor);
var
respuesta:boolean;
letra: char;

Begin
        respuesta:=true;
        Writeln ('Ingrese su Nombre y Apellido');
        Readln (rec.apellidonombre);
                while rec.apellidonombre<>'' do
                        begin
                        Writeln ('Ingrese el Mail');
                        Readln (rec.mail);
                                while (respuesta)  do
                                 begin
                                 Writeln ('Ingrese el Pais de Residencia');
                                 readln(rec.pais);
                                 respuesta:= PAISCORRECTO(rec.pais);
                                 if (respuesta= true) then writeln ('Pais inexistente.');
                                 end ;
                                 respuesta:= true;
        writeln;
        Writeln ('Si desea tarjeta de Navidad sin animacion presione A, si desea con animacion presione D');
        Readln (rec.acontecimiento[1]);
        Writeln ('Si desea tarjeta de San Valentin sin animacion presione A, si desea con animacion D');
        Readln (rec.acontecimiento[2]);
        Writeln ('Si desea tarjeta de Año Nuevo sin animacion presione A, si desea con animacion D');
        Readln (rec.acontecimiento[3]);
        Write (archout, rec);
        Writeln ('Ingrese su Nombre y Apellido');
        Readln (rec.apellidonombre);
                        end
end;

Procedure EXTENDERRECEPTORES (Var archout,archrec: TarchReceptores; Var rec: TregReceptor; Var n:longint);
Begin
seek (archout, 0);
while not eof (archout) do
begin
n:= filesize (archrec);
seek (archrec,n);
read (archout, rec);
write (archrec, rec);
end;
end;

Procedure CERRAR (Var archrec, archout: TarchReceptores);
Begin
Close (archrec);
Close (archout);
end;

Var
archout: Tarchreceptores;
archrec: TarchReceptores;
rec: TregReceptor;
n:longint;

Begin
clrscr;
ASIGNARABRIR (archout, archrec);
ALTAS (archout, rec);
EXTENDERRECEPTORES (archout, archrec, rec, n);
CERRAR (archrec, archout);

End.

danifg

  • Nuevo Miembro
  • *
  • Mensajes: 8
    • Ver Perfil
Re: Problema Restriccion
« Respuesta #1 en: Viernes 6 de Junio de 2008, 14:45 »
0
Yo haría esto: un procedimiento que pase el nombre del país a mayúsculas (porque si no hay que comprobar si está en mayúsculas, minúsculas... y hay muchas posibilidades), y después pasas esa cadena a la función


{------------------------------------------------------------------------------------------------------------------------}


PROCEDURE pasaCadenaAmayusculas (VAR cadena : string);


VAR

  i : integer,


BEGIN

  FOR i := 1 TO length (cadena) DO

    cadena := upcase (cadena);

END;


{------------------------------------------------------------------------------------------------------------------------}

FUNCTION paisCorrecto (pais : string) : boolean;


VAR

  resultado : boolean;


BEGIN

  resultado := (pais = 'ARGENTINA') OR (pais = 'CHILE') OR (pais = 'URUGUAY') OR (pais = 'PARAGUAY');

{O mejor, si has estudiado conjuntos, haces un conjunto con los países posibles y sería tan fácil como

resultado := pais IN paisesPosibles;}

  paisCorrecto := resultado;

END;


{------------------------------------------------------------------------------------------------------------------------}

Nota: Los comentarios entre llaves sirven para varias líneas, lo digo por cómo has comentado tu CASE. También, si sabes que sólo falla esa función, pega aquí en el foro sólo esa función, nos facilita las cosas a los que vamos a leer el código :p