sábado, 17 de octubre de 2009

TUTORIAL#3 (MANEJO DE OPERADORES LOGICOS CON ESTRUCTURAS REPETITIVAS Y DE CONTROL)

En el tutorial #1 se había comentado acerca de los operadores lógicos y de su posterior utilización en programas de turbo pascal. A continuación se harán demostraciones practicas del uso de dichos operadores y estructuras.


ejemplo#1

crear una aplicacion de pascal que cumpla las siguientes condiciones:

- pedir la edad de una persona por teclado y verificar que si es mayor de 18 y de sexo 'M' diga que es 'hombre mayor de edad', de lo contrario diga que es 'mujer mayor de edad'. Adicionalmente se debe controlar que no se digite edad cero y que solo se pueda ingresar sexo 'M' para masculino y 'F' para femenino.

Program sexo;
uses
wincrt;
var
edad:
shortint;{no debe ser de punto flotante porque no existen edades segmentadas}
mas,sexo:
char;
Begin
REPEAT
clrscr;
writeln('digite la edad de la persona:: ');readln(edad);
if (edad<=0) then
begin
clrscr;
writeln('valor de edad invalido..por favor intente de nuevo');
end;
UNTIL (edad>0);
{para que termine el ciclo cuando la edad pase de cero, y sea entero el numero}
REPEAT
writeln('digite el sexo de la persona::');readln(sexo);
if (sexo<>'M')or(sexo<>'F') then
{se usa 'or' en la comparación para que se defina dentro de las dos opciones propuestas }
begin
clrscr;
writeln('valor de sexo invalido..por favor intente de nuevo');
end
else
begin
if (sexo='M') then
begin
writeln('la persona es hombre y tiene ',
edad,'años');
end
else
begin
writeln('la persona es mujer y tiene ',
edad,'años');
end;
end;
UNTIL (sexo='M')or(sexo='F');
{para que termine el ciclo cuando se haya ingresado alguno de los dos campos validos}
End.

los puntos que hay que tener en cuenta aqui son:

  • la declaración de la edad tiene que ser de tipo entero y no flotante, nunca se ha escuchado a alguien decir que tiene 3.54 años o 23.01 años, las edades son las que se cumplen a cabalidad dentro de los 12 meses establecidos.
  • la utilización de 'menor igual a' en vez de 'menor que' en la siguiente validación if(edad<=0) then nos permite establecer que también no se ingrese la edad cero en el programa que se codifico anteriormente
  • la condición de los repeat-until debe ir acorde al cumplimiento de las validaciones que se hagan inicialmente para que una vez cumplidos salgan de eses ciclo y continúen con el resto del programa.

ejemplo#2

codificar un programa en pascal que defina el mayor, el intermedio y el menor de tres números enteros ingresados por teclado, asimismo diga un mensaje si los tres números ingresados por teclado son iguales.


Program igualdad;
uses
wincrt;
var
n1,n2,n3:integer;

mas:char;
Begin
REPEAT
clrscr;
writeln('digite primer numero:: ');readln(n1);
writeln('digite primer numero:: ');readln(n2);
writeln('digite primer numero:: ');readln(n3);

{Por cada mensaje que muestro, también mando a pedir datos consecutivamente de dicho numero}


if (n1>n2) then
begin
if (n1>n3) then
begin

writeln('el primer numero es el mayor');

if (n2>n3) then

begin

writeln('el segundo numero es el intermedio y el tercero el ultimo');
end

else

begin

writeln('el segundo numero es el menor y el tercero el intermedio');
end;

end
else

if (n2>n3) then

begin

writeln('el segundo numero es el mayor');
if (n1>n3) then

begin

writeln('el primer numero es el intermedio y el tercero el ultimo');
end

else

begin

writeln('el numero es el menor y el tercero el intermedio');
end;

end;

end;

writeln('Desea seguir comparando mas números?');readln(mas);

mas:=TOUPPER(mas);

UNTIL (mas='N');
END.

Observamos que utilizamos muchos ciclos de REPEAT-UNTIL e if, pero para variar un poco mas la cosa, les voy a mostrar el mismo ejemplo pero voy a cambiar al REPEAT-UNTIL por unWHILE. Es casi lo mismo, pero la utilización es un poco distinta para hacer que funcionen pascal, veamos ahora el ejemplo con un WHILE.

Program igualdad_2;
uses
wincrt;
var
n1,n2,n3:integer;

mas:char;
Begin

mas:='S';
WHILE (mas='S')

Begin
clrscr;
writeln('digite primer numero:: ');readln(n1);
writeln('digite primer numero:: ');readln(n2);
writeln('digite primer numero:: ');readln(n3);

{por cada mensaje que muestro, también mando a pedir datos consecutivamente de dicho numero}


if (n1>n2) then
begin
if (n1>n3) then
begin

writeln('el primer numero es el mayor');

if (n2>n3) then

begin

writeln('el segundo numero es el intermedio y el tercero el ultimo');
end

else

begin

writeln('el segundo numero es el menor y el tercero el intermedio');
end;

end
else

if (n2>n3) then

begin

writeln('el segundo numero es el mayor');
if (n1>n3) then

begin

writeln('el primer numero es el intermedio y el tercero el ultimo');
end

else

begin

writeln('el numero es el menor y el tercero el intermedio');
end;

end;

end;

writeln('Desea seguir comparando mas números?');readln(mas);

mas:=TOUPPER(mas);

END;
END.

Ahora una cosa mas, fíjense que después de pedir si se desea o no continuar con el programa, hay una asignación de mas a través de una palabra reservada llamada toupper. Esto sirve para que lo que recogía por teclado me lo convierta a mayúsculas.

Esto tiene el propósito meramente de validación, me explico, es como para estar seguro de que el usuario pueda ingresar su opción tanto como en minúscula así como en mayúscula, y el programa junto con el usuario no se vayan a bloquear por este detalle.

Y retomado lo del WHILE, observen que la única diferencia con respecto a REPEAT-UNTILes solamente que en el WHILE se declara la condición booleana de la variable mas:'S'; para que pueda entrar por primera vez al bloque de comparaciones, si tu no agregas la condición booleana de entrada el programa no funcionara correctamente.

SIGUIENTE>>
ANTERIOR
MENU PRINCIPAL

No hay comentarios:

Publicar un comentario