COMPUTACION 2009 C lase 3
4/26/2015 Computación - Fac. Ingeniería - UNMDP2 Marca Cilindrada Precio Stock HONDA dax 5000 $ 7 HONDA $ 2 SUZUKI $ 3 HARLEY_D $ 0 KAWASAKI $ 3 Marca Cilindrada Precio Stock HONDA dax 5000 $ 7 HONDA $ 2 SUZUKI $ 3 HARLEY_D $ 0 KAWASAKI $ 3
4/26/2015 Computación - Fac. Ingeniería - UNMDP3 Problema 1: Queremos una moto que valga menos de $ Cómo lo averiguamos? Preguntemos usando una expresión relacional: Si el precio< entonces compro la moto; sino, no la compro
4/26/2015 Computación - Fac. Ingeniería - UNMDP4 Problema 2: Queremos una moto que valga menos de $ y que sea una HONDA Cómo lo averiguamos? Preguntemos usando una expresión lógica: Si el (precio< 20000) AND (marca=HONDA) entonces compro la moto; sino, no la compro
4/26/2015 Computación - Fac. Ingeniería - UNMDP5 HD Procesador Monitor Precio Quantu 160G Intel Pentium II 266 Samsung LCD 2700 $ IBM 9.1G Intel Celeron 466 Philips plano $ Compak 9G Athlon 2400 Viewsonic $ Carry 20G AMD 2000 Rowland $ Quantum 80G Intel P. CORE Duo Philips $
4/26/2015 Computación - Fac. Ingeniería - UNMDP6 Problema 3: Queremos una computadora que tenga un disco rígido con por lo menos 120 gigabaytes y que no valga mas de 2200 $. Cómo lo averiguamos? Preguntemos usando una expresión lógica: Si el (HD> =120) AND (precio<=2200) entonces compro la computadora; sino, no la compro
Programa PASCAL SENTENCIAS DATOS Expresiones Tipos Declaración de variables Declaración de variables Asignación Entrada/Salida Aritméticas Lógica Relacionales Caracter Estandar Integer Real Char Boolean Del programador Decisión Enumerados Subrangos String Repetición
Sentencias de decisión (son dos) IF- THEN- ELSE CASE
Precio < VERDADERA Compro la moto Continua el programa
Precio<20000 FALSA No compro la moto Continua el programa
expresion logica verdadera Ejecuta la sentencia1 Continua el programa IF
expresion logica falsa Ejecuta la sentencia2 Continua el programa IF
expresion logica verdadera falsa Ejecuta la sentencia1 Ejecuta la sentencia2 Continua el programa IF
expresion logica THEN ELSE Ejecuta la sentencia1 Ejecuta la sentencia2 Continua el programa IF
4/26/2015 Computación - Fac. Ingeniería - UNMDP15 De aquí en mas se usará la palabra sentencia para indicar tanto una sentencia simple como compuesta ( o estructurada) La sentencia IF especifica que sentencia1(que sigue a THEN) debe ejecutarse solo si una cierta condición (= expresión lógica) es verdadera. Si es falsa, entonces se ejecuta sentencia2, que sigue al símbolo ELSE Sentencia IF-THEN-ELSE
4/26/2015 Computación - Fac. Ingeniería - UNMDP16 Sentencia de decisión Una sentencia de decisión es una sentencia estructurada (o compuesta). Esto significa que esta sentencia contiene otras sentencias Su función principal es decidir que sentencia/s se debe ejecutar siguiendo el resultado de una expresión. Tener en cuenta que cada vez que se evalua la expresión logica, se ejecuta la sentencia que sigue a THEN o la sentencia que sigue a ELSE, pero NO AMBAS.
4/26/2015 Computación - Fac. Ingeniería - UNMDP17 IF expresión lógica THEN sentencia1 ELSE sentencia2; Sintaxis de la sentencia IF-THEN- ELSE
Motos Program Motos; Var precio:real; compro:boolean; Begin WRITE('Ingrese precio'); READLN(precio); IF precio<=20000 THEN compro:=true ELSE compro:=false; End. Este punto y coma es obligatorio si a continuación hay otra sentencia; sino es asi, es opcional. Recordar que END no es sentencia
EJEMPLO: Se lee un par de coordenadas (x,y) de un punto del plano. Verificar si se encuentra en el interior o en el exterior de la circunferencia centrada en el origen y con radio 5. Escribir un cartel aclaratorio en cada caso. Program circunferencia; Var x,y:real; Begin WRITE('Ingrese dos valores reales'); READLN(x,y); IF x*x+y*y<=25 THEN writeln('punto dentro de la circunfer.') ELSE writeln(‘punto fuera de la circunfer.’); End.
EJEMPLO: Se lee un par de coordenadas (x,y) de un punto del plano. Si el punto se encuentra en el interior de la circunferencia centrada en el origen y con radio 5 escribir el valor de x 2 +y 2 ; en caso contrario aclararlo. Escribir un cartel aclaratorio en los dos casos. EJEMPLO: Se lee un par de coordenadas (x,y) de un punto del plano. Si el punto se encuentra en el interior de la circunferencia centrada en el origen y con radio 5 escribir el valor de x 2 +y 2 ; en caso contrario aclararlo. Escribir un cartel aclaratorio en los dos casos.
Program circunferencia; Var x,y,d:real; Begin WRITE('Ingrese dos valores reales'); READLN(x,y); d:=x*x+y*y; IF d<=25 THEN begin writeln('punto dentro circ.'); writeln(‘x*x+y*y=‘,d) end ELSE writeln(‘pto fuera de la circ.’) End. Sentencia compuesta: debe encerrarse entre los parentesis begin y end. Significa que si la condición es verdadera debe ejecutarse dos sentencias No se debe escribir punto y coma (;). Aquí no termina la sentencia IF-THEN-ELSE. Se debe colocar ; para separar las dos sentencias
4/26/2015 Computación - Fac. Ingeniería - UNMDP22 IF expresión lógica THEN sentencia; Si solo nos interesa ejecutar una sentencia cuando la expresión booleana es verdadera, se usa una estructura IF simplificada. Esta sentencia simplificada solo posee la sentencia que sigue a THEN: Sintaxis de la estructura IF-THEN
4/26/2015 Computación - Fac. Ingeniería - UNMDP23 Ejemplo de IF-THEN Dada una ecuación cuadrática, estimar e imprimir las raices complejas (solo parte de un programa). d:= b*b - 4*a*c ; IF d < 0 THEN begin real:= -b/(2*a); imag:= sqrt(abs(d))/(2*a); writeln(‘x=‘,real,’+/-’,imag,’ i’) end;
Observación Evitar el abuso de IF cuando se usa variables booleanas. Veamoslo con un ejemplo: sea encontrado una variable booleana IF a=b THEN encontrado:= true ELSE encontrado:=false; Mas simple y en forma equivalente tenemos: encontrado:= a=b;
4/26/2015 Computación - Fac. Ingeniería - UNMDP25 Como ya vimos, sentencia1 y sentencia2 puede ser una sentencia simple o una estructurada. Por lo tanto la sentencia IF-THEN- ELSE puede ser otra estructura de decisión. En este caso tendremos sentencias IF anidadas. Sentencias condicionales anidadas
4/26/2015 Computación - Fac. Ingeniería - UNMDP26 IF expresion logica THEN begin sentencia/s (IF,asignacion,E/S) end ELSE begin sentencia/s (IF,asignacion,E/S) END;
Analizar si la suma de dos números cualesquiera es positiva o negativa. En caso de ser cero, indicar que estos son números opuestos. Program anidamiento; Var a,b,suma:real; BEGIN READLN(a,b); suma:=a+b; IF suma>0 THEN writeln('suma positiva') ELSE IF suma<0 THEN writeln('suma Negativa') ELSE writeln('numeros Opuestos') END.
En el ejemplo anterior hemos tenido 3 condiciones mutuamente excluyentes: suma>0 suma<0 suma=0 Cada una de ellas desata acciones distintas. En estos casos el anidamiento de IF bien desarrollado evita preguntas superfluas (por ejemplo preguntar suma=0 porque la única opción que tenemos en el segundo ELSE es ese caso) Observación 1
OBSERVACION 2 A fin de evitar la ambigüedad sintáctica que surge de la construcción: IF exp_booleana1 THEN IF exp_booleana2 THEN sentencia1 ELSE sentencia2; Conviene usar la indentación y si desea puede poner los parentesis BEGIN/END a fin de incrementar la legibilidad y evitar la ambigüedad. Nos queda la construcción equivalente: IF exp_booleana1 THEN BEGIN IF exp_booleana2 THEN sentencia1 ELSE sentencia2 END;
Podemos aumentar la legibilidad de un programa usando apropiadamente las expresiones booleanas. OBSERVACION 3: el buen uso de las expresiones booleanas Ejemplo:imprimir el mínimo de tres números a,b,c (solo un caso): Podemos usar dos IF anidados IF a<b THEN IF a<c THEN writeln(a); O bien definir una expresión booleana mas compleja y usar UN solo IF: IF (a<b) and (a<c) THEN writeln(a);
4/26/2015 Computación - Fac. Ingeniería - UNMDP31 SENTENCIA CASE: estructura de decisión múltiple Cuando tenemos varias sentencias mutuamente excluyentes (mas de dos), con probabilidad de selección pareja, usamos CASE (con algunas restricciones).
4/26/2015 Computación - Fac. Ingeniería - UNMDP32 Ejemplo Un cobrador de peaje tiene el siguiente cuadro de categorías y lo que debe cobrar: Categoría Vehículo Tarifa 1 y 2 Bici y motos Gratis 3 Autos Autos con trailer 5 5 Camiones 10
4/26/2015 Computación - Fac. Ingeniería - UNMDP33 PROGRAM peaje; TYPE Tipo=1..5;{tipo de dato enumerado} VAR Cate:tipo; Tarifa:real; error:boolean; Programa PASCAL usando IF anidados
BEGIN error:=false; READLN(cate); IF (cate=1)or(cate=2)THEN tarifa:=0 ELSE IF cate=3 THEN tarifa:=2.5 ELSE IF cate=4 THEN Tarifa:=5 ELSE IF cate=5 THEN Tarifa:=10 ELSE error:=true; IF error THEN WRITELN(‘Nro. Equivocado’) ELSE WRITELN(‘La TARIFA es =’,tarifa) END.
4/26/2015 Computación - Fac. Ingeniería - UNMDP35 Selección múltiple: CASE La sentencia CASE permite seleccionar una de entre varias sentencias según un selector. El selector es una expresión ordinal. No puede ser del tipo real.
4/26/2015 Computación - Fac. Ingeniería - UNMDP36 CASE selector OF Lista de ctes.1 : sentencia 1; Lista de ctes.2 : sentencia 2; Lista de ctes.n : sentencia n; ELSE sentencia m END; Sintaxis de CASE
4/26/2015 Computación - Fac. Ingeniería - UNMDP37 PROGRAM peaje; TYPE Tipo=1..5; VAR Cate:tipo; Tarifa:real; error:boolean; BEGIN READLN(cate); error:=false; CASE cate OF 1,2 :tarifa:=0; 3 :tarifa:=2.5; 4 :tarifa:=5; 5 :tarifa:=10; ELSE error:=true END; IF error THEN WRITELN(‘Nro. Equivocado’) ELSE WRITELN(‘La tarifa es =’,tarifa) END. Los IF anidados pueden ser llevados a la sentencia CASE equivalente:
4/26/2015 Computación - Fac. Ingeniería - UNMDP38 CASE selecciona como siguiente sentencia a ejecutarse aquella cuya etiqueta (las ctes.) es igual al valor actual del selector Si el valor actual de selector (que es una expresión) no encuentra un valor igual en alguna de las listas de constantes ejecuta la sentencia que sigue a ELSE. ELSE es opcional El tipo de dato de la expresion selector debe ser ordinal (se excluye el tipo real y string) Cada constante debe ser única dentro de cada CASE. No usar intervalos de la forma 0.5<x<2.5 como etiqueta (de la lista de constantes) CASE selecciona como siguiente sentencia a ejecutarse aquella cuya etiqueta (las ctes.) es igual al valor actual del selector Si el valor actual de selector (que es una expresión) no encuentra un valor igual en alguna de las listas de constantes ejecuta la sentencia que sigue a ELSE. ELSE es opcional El tipo de dato de la expresion selector debe ser ordinal (se excluye el tipo real y string) Cada constante debe ser única dentro de cada CASE. No usar intervalos de la forma 0.5<x<2.5 como etiqueta (de la lista de constantes) OBSERVACIONES:
4/26/2015 Computación - Fac. Ingeniería - UNMDP39 Sintaxis de CASE: tipos de selector y etiquetas constantes CASE selector OF ´a´..´z´ :sentencia1; ´A´..´J´ :sentencia 2; ´Z´ :sentencia 3; ´4´ :sentencia 4; ´1´,´2´,´3´ :sentencia 5; ELSE sentencia 6 END; Tipo char
4/26/2015 Computación - Fac. Ingeniería - UNMDP40 Sintaxis de CASE: tipos de selector y etiquetas constantes CASE selector OF 4,5,6 :sentencia1; 1 :sentencia 2; :sentencia 3; ELSE sentencia 4 END; Tipo integer
4/26/2015 Computación - Fac. Ingeniería - UNMDP41 Ejemplo 50<= cilindrada < 300 la moto es poco potente 300 <= cilindrada < 700 la moto es potente 700 <= cilindrada <1500 la moto es muy potente
4/26/2015 Computación - Fac. Ingeniería - UNMDP42 PROGRAM motos; VAR Categoria:string[15]; cilindrada:integer; error:boolean; BEGIN READLN(cilindrada); error:=false; CASE cilindrada OF :categoria:=‘poco potente’; :categoria:=‘potente’; :categoria:=‘muy potente’; ELSE error:=true END; IF error THEN WRITELN(‘valor equivocado’) ELSE WRITELN(‘La categoria es =’, categoria) END.