jueves, 10 de febrero de 2011

CLASE 5

LA SENTENCIA IF

+DADO QUE LAS EXPRESIONES LOGICAS TOMAN EL VALOR VERDDERO O FALSO, ES NECESARIO UNA SENTENCIA DE CONTROL QUE DIRIJA A LA COMPUTADORA PARA EJECUTAR UNA SENTENCIA SI LA EXPRESION ES VERDADERO YOTRA EN CASO DE SER FALSA. PARA ELLO EXISTE EN PASCAL LA SENTENCIA DE CONTROL CONDICIONAL if-then-else, O ESTRUCTURA SELECTIVA.

DIAGRAMA DE FLUJO

ESCRITURA DEL if

if expresion logica

then

sentencia A

else

sentencia B

DIAGRAMA DE SINTAXIS


EJEMPLO:

program numeros;

var

numero: real;

begin

writeln (´introduzca un numero´);

read (numero); . end.

if numero > 0.0

then

writeln (´el numero intro es positivo´);

else

writeln (´el numero intro es positivo´);

write (´esto se imprime si numero es positivo o negativo´);

end.

NOTA: SI SOLO SE DESEA QUE UNA DETERMINADA ACCION SOLO SE EJECUTE SI UNA CONDICION ES VERDADERA Y NO REALIZAR NINGUNA OTRA SI LA CONDISION ES FALSA, SE OMITE DEL FORMATO LA CLAUSULA else.

SENTENCIAS COMPUESTAS

+EN LUGAR DE REALIZAR SOLO UNA ACCION, CUANDO SE CUMPLA O NO UNA CONDICION, SE PODRA DESEAR REALIZAR VARIAS ACCIONES. ESTO SE HACE MEDIANTE SENTENCIAS COMPUESTAS.

+UNA SENTENCIA COMPUESTA ES UN CONJUNTO DE SENTENCIAS SEPARADAS POR PUNTOS Y COMAS Y ENCERRADAS POR LAS PALABRAS begin y end.

+FORMATO DE UNA SENTENCIA COMPUESTA:

begin

sentencia 1;

sentencia 2;

sentencia n

end (no punto)


begin

Read (Numero);

N:= N+1;

Write ( ´El numero es´, Numero :4 );

Bandera=1.

end

EJEMPLO:

program Numeros;

var

x:integer;

begin

Read (x);

if x > o

then

begin

WriteLn (x,´es positivo´);

WriteLn (´en esta ocasion´, x, ´es positivo´)

end

else

begin

WriteLn ( x, ´es negativo´);

WriteLn (´o bien es cero´)

end;

end.

LA SENTENCIA VACÍA

+PASCAL TIENE UNA SENTENCIA QUE NO HACE ABSOLUTAMENTE NADA, ESTA ES LA SENTENCIA NULA O VACÍA.LOS PUNTOS Y COMAS SEPARAN SENTENCIAS EN PASCAL.

+SUPONGAMOS QUE SE ESCRIBE PUNTO Y COMA AL FINAL DE LA SENTENCIA DE ASIGNACIÓN .


begin

ReadLn (x);

Total:= Total + x; {sentencia vacía}

end

+COMO END NO ES UNA SENTENCIA, EL NUEVO PUNTO Y COMA NO APARECE COMO SEPARACIÓN DE DOS SENTENCIAS. EL COMPILADOR DECIDE QUE HAY UNA SENTENCIA ENTRE LA SENTENCIA DE ASIGNACIÓN Y END, ES DECIR, LA SENTENCIA NULA QUE NO PRODUZCA NINGUNA ACCIÓN NI CAMBIO.

SENTENCIAS if ANIDADAS

+LA SENTENCIA QUE SIGUE A LA PALABRA RESERVADA THEN O ELSE PUEDE SER CUALQUIERA, INCLUSO OTRA SENTENCIA if-then-else. CUANDO UNA O AMBAS BIFORCACIONES DE UNA SENTENCIA if-then-else CONTIENEN TAMBIÉN UNA SENTENCIA if-then-else, SE DICE QUE DICHAS SENTENCIAS if ESTÁN ANIDADAS Y AL PROCESO ANIDAMIENTO. EL ANIDAMIENTO SE PUEDE UTILIZAR PARA CONSTRUIR DECISIONES CON DIFERENTES ALTERNATIVAS.

Modelo 1

if CONDICIÓN 1

then

sentencias x

else

if condición 2

then

sentencias y

else

sentencias z

Modelo 2

if CONDICIÓN 1

then

sentencias x

else if condición 2

then

sentencias y

else if...

EJEMPLO: SE DESEA HACER UN PROGRAMA QUE LEA UN NUMERO Y DETERMINE SI ÉSTE ES POSITIVO, NEGATIVO, O CERO.

program IdentificadordeNumeros;

var

Numero: integer;

begin

WriteLn (´Introduzca un numero´);

read (Numero);

if (Numero <>

then

WriteLn (´El numero´, Numero,´es positivo´)

else

if (Numero <>

then

WriteLn (´El numero´, Numero,´es negativo´)

else

WriteLn (´El numero es cero´);

end.


EJEMPLO 2:

DADOS TRES NUMEROS ENTEROS, DETERMINAR CUÁL ES EL MAYOR (LOS TRES NUMEROS SE SUPONEN DISTINTOS)

program MayorNumero ;

var

Num1, Num2, Num3: integer; {valores de entrada}

El mayor : integer; {valores de salida}

begin

{ introducción de los datos en memoria}

WriteLn (´Introduzca tres numeros enteros´);

ReadLn ( Num1,Num2,Num3);

{determinar el numero mayor}

if Num1 > Num2

then

if Num1 > Num3

then

El mayor := Num1

else

El mayor := Num3

else

if Num2 > Num3

then

El mayor := Num 2

else

El mayor := Num3;

{visualizacion del numero mayor}

WriteLn (´El numero mayor es : ´, El mayor es : ´, El mayor);

end.





La sentencia Case (Clase 6)

+ La sentencia case se utiliza para elegir entre diferentes alternativas. Una sentencia case se compone de varias sentencias simples. Cuando case se ejecuta, una (y sólo una) de las sentencias simples se selecciona y ejecuta.


+ Formato


case selector of
lista de constantes 1: sentencia 1;

lista de constantes 2: sentencia 2;

.

.

.
lista de constantes n: sentencia n;


[else


sentencia x]


end;


+ Reglas


1.- La expresión selector se evalúa y se compara con las listas de constantes; Las listas de constantes son listas de uno o más valores de selector separados por comas. Sólo se ejecuta una sentencia. Si el valor del selector esta en lista constantes 1, se ejecuta sentencia 1. El control se pasa seguidamente a la primera sentencia a continuación de end. Cada sentencia puede ser a su vez una sentencia Pascal simple o compuesta.


2.- La claúsula else es opcional como en la sentencia if.


3.- Si el valor del selector no está comprendido en ninguna lista de constantes y no existe la claúsula else, no sucede nada y sigue el flujo del programa; Si el valor del selector no coincide con alguna constante, se ejecuta (n) la(s) sentencia(s) a continuación de la claúsula else.


4.- El selector debe ser de tipo ordinal (integer, char, boolean, enumerado). Los números reales no pueden ser utilizados ya que que no son ordinales. Los valores ordinales de los límites inferiores y superiores deben estar dentro del rango -32786 a 32767. Por lo tanto los tipos string, longint y word no son válidos.


5.- Todas las constantes case deben ser únicas y de un tipo ordinal compatible con el tipo de selector.


6.- Cada sentencia, excepto la última, deben ir seguidas de punto y coma.


+ Diagrama de Sintaxis Case






+ Ejemplos:

WriteLn ('Introduzca un valor');
ReadLn (Valor)
case valor of
'+': Resultado:=Resultado + 5;
'-': Resultado:=Resultado - 5;
'*': Resultado:=Resultado * 5;
'/': Resultado:=Resultado / 5;
end;

case Caracter_Leido of

'0' ... '9' : Write ('cifra');
'a' ... 'z' : Write ('Minuscula´');
'A' ... 'Z' : Write ('Mayuscula');
end;

case Caracter OF
'a', 'e', 'i', 'o', 'u' : Write ('es vocal');
else
Write ('es otro caracter')
end;

+Sentencias if anidadas VS sentencias case
1.- Se pueden utilizar sentencias if anidadas, en lugar de la sentencia case para realizar una decisión de alternativa multiple. La sentencia case, es más legible y práctica.

2.- Los programas deben presentar con mucha frecuencia menís, donde se presentan al usuario opciones entre las cuales debe elegir una, en estos casos la sentencia case resulta de gran utilidad.

EJERCICIO
Hacer un programa que presente un menú en donde las opciones representen a la operacion suma, resta, mult y división y acepte valores para realizar cada una de ellas.