COMPUTACION 2009 Clase 3 Marca Cilindrada Precio Stock

  • Slides: 42
Download presentation
COMPUTACION 2009 Clase 3

COMPUTACION 2009 Clase 3

Marca Cilindrada Precio Stock HONDA dax 5000 $ 7 HONDA 220 7800. 50 $

Marca Cilindrada Precio Stock HONDA dax 5000 $ 7 HONDA 220 7800. 50 $ 2 SUZUKI 450 14000 $ 3 HARLEY_D 800 50000 $ 0 KAWASAKI 10/29/2021 650 30000 $ Computación - Fac. Ingeniería UNMDP 3 2

Problema 1: Ø Ø Ø Queremos una moto que valga menos de 20000 $

Problema 1: Ø Ø Ø Queremos una moto que valga menos de 20000 $ Cómo lo averiguamos? Preguntemos usando una expresión relacional: Si el precio< 20000 entonces compro la moto; sino, no la compro 10/29/2021 Computación - Fac. Ingeniería UNMDP 3

Problema 2: Ø Ø Ø Queremos una moto que valga menos de 20000 $

Problema 2: Ø Ø Ø Queremos una moto que valga menos de 20000 $ 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 10/29/2021 Computación - Fac. Ingeniería UNMDP 4

HD Procesador Monitor Quantu 160 G Intel Pentium II 266 Samsung LCD Precio 2700

HD Procesador Monitor Quantu 160 G Intel Pentium II 266 Samsung LCD Precio 2700 $ IBM 9. 1 G Intel Celeron 466 Philips plano 1890. 10 $ Compak 9 G Athlon 2400 Viewsonic 17 2500 $ Carry 20 G AMD 2000 Rowland 17 Quantum 80 G Intel P. CORE Duo 10/29/2021 Philips 17 Computación - Fac. Ingeniería UNMDP 1500. 90 $ 2800 $ 5

Problema 3: Queremos una computadora que tenga un disco rígido con por lo menos

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 Ø 10/29/2021 Computación - Fac. Ingeniería UNMDP 6

Programa PASCAL SENTENCIAS Asignación DATOS Declaración de variables Repetición Entrada/Salida Tipos Decisión Expresiones Aritméticas

Programa PASCAL SENTENCIAS Asignación DATOS Declaración de variables Repetición Entrada/Salida Tipos Decisión Expresiones Aritméticas Lógica Del programador Estandar Relacionales Caracter Enumerados Subrangos String Real Boolean Char Integer

Sentencias de decisión (son dos) IF-THEN -ELSE CASE

Sentencias de decisión (son dos) IF-THEN -ELSE CASE

Precio < 20000 VERDADERA Compro la moto Continua el programa

Precio < 20000 VERDADERA Compro la moto Continua el programa

FALSA Precio<20000 No compro la moto Continua el programa

FALSA Precio<20000 No compro la moto Continua el programa

IF expresion logica verdadera Ejecuta la sentencia 1 Continua el programa

IF expresion logica verdadera Ejecuta la sentencia 1 Continua el programa

IF falsa expresion logica Ejecuta la sentencia 2 Continua el programa

IF falsa expresion logica Ejecuta la sentencia 2 Continua el programa

IF falsa expresion logica Ejecuta la sentencia 2 verdadera Ejecuta la sentencia 1 Continua

IF falsa expresion logica Ejecuta la sentencia 2 verdadera Ejecuta la sentencia 1 Continua el programa

IF ELSE expresion logica Ejecuta la sentencia 2 THEN Ejecuta la sentencia 1 Continua

IF ELSE expresion logica Ejecuta la sentencia 2 THEN Ejecuta la sentencia 1 Continua el programa

Sentencia IF-THEN-ELSE ØLa sentencia IF especifica que sentencia 1(que sigue a THEN) debe ejecutarse

Sentencia IF-THEN-ELSE ØLa sentencia IF especifica que sentencia 1(que sigue a THEN) debe ejecutarse solo si una cierta condición (= expresión lógica) es verdadera. ØSi es falsa, entonces se ejecuta sentencia 2, que sigue al símbolo ELSE De aquí en mas se usará la palabra sentencia para indicar tanto una sentencia simple como compuesta ( o estructurada) 10/29/2021 Computación - Fac. Ingeniería UNMDP 15

Sentencia de decisión ØUna sentencia de decisión es una sentencia estructurada (o compuesta). Esto

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. 10/29/2021 Computación - Fac. Ingeniería UNMDP 16

Sintaxis de la sentencia IF-THENELSE IF expresión lógica THEN sentencia 1 ELSE sentencia 2;

Sintaxis de la sentencia IF-THENELSE IF expresión lógica THEN sentencia 1 ELSE sentencia 2; 10/29/2021 Computación - Fac. Ingeniería UNMDP 17

Program Motos; Motos Var precio: real; compro: boolean; Begin WRITE('Ingrese precio'); READLN(precio); IF precio<=20000

Program Motos; Motos Var precio: real; compro: boolean; Begin WRITE('Ingrese precio'); READLN(precio); IF precio<=20000 THEN compro: =true ELSE Este punto y coma es compro: =false; obligatorio si a continuación End. 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.

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.

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.

compuesta: debe Program circunferencia; Sentencia encerrarse entre los parentesis begin y end. Var Significa

compuesta: debe Program circunferencia; Sentencia encerrarse entre los parentesis begin y end. Var Significa que si la condición x, y, d: real; es verdadera debe ejecutarse dos sentencias Begin WRITE('Ingrese dos valores reales'); READLN(x, y); d: =x*x+y*y; Se debe colocar ; para separar las dos sentencias IF d<=25 THEN begin writeln('punto dentro circ. '); writeln(‘x*x+y*y=‘, d) end ELSE writeln(‘pto fuera de la circ. ’) End. No se debe escribir punto y coma (; ). Aquí no termina la sentencia IF-THEN-ELSE.

Sintaxis de la estructura IF-THEN ØSi solo nos interesa ejecutar una sentencia cuando la

Sintaxis de la estructura IF-THEN Ø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: IF expresión lógica THEN sentencia; 10/29/2021 Computación - Fac. Ingeniería UNMDP 22

Ejemplo de IF-THEN ØDada una ecuación cuadrática, estimar e imprimir las raices complejas (solo

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; 10/29/2021 Computación - Fac. Ingeniería UNMDP 23

Observación ØEvitar el abuso de IF cuando se usa variables booleanas. ØVeamoslo con un

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;

Sentencias condicionales anidadas ØComo ya vimos, sentencia 1 y sentencia 2 puede ser una

Sentencias condicionales anidadas ØComo ya vimos, sentencia 1 y sentencia 2 puede ser una sentencia simple o una estructurada. Por lo tanto la sentencia IF-THENELSE puede ser otra estructura de decisión. ØEn este caso tendremos sentencias IF anidadas. 10/29/2021 Computación - Fac. Ingeniería UNMDP 25

IF expresion logica THEN begin sentencia/s (IF, asignacion, E/S) end ELSE begin sentencia/s (IF,

IF expresion logica THEN begin sentencia/s (IF, asignacion, E/S) end ELSE begin sentencia/s (IF, asignacion, E/S) END; 10/29/2021 Computación - Fac. Ingeniería UNMDP 26

Program anidamiento; Var a, b, suma: real; BEGIN READLN(a, b); suma: =a+b; IF suma>0

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. 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.

Observación 1 ØEn el ejemplo anterior hemos tenido 3 condiciones mutuamente excluyentes: suma>0 suma<0

Observación 1 Ø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)

OBSERVACION 2 A fin de evitar la ambigüedad sintáctica que surge de la construcción:

OBSERVACION 2 A fin de evitar la ambigüedad sintáctica que surge de la construcción: IF exp_booleana 1 THEN IF exp_booleana 2 THEN sentencia 1 ELSE sentencia 2; 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_booleana 1 THEN BEGIN IF exp_booleana 2 THEN sentencia 1 ELSE sentencia 2 END;

OBSERVACION 3: el buen uso de las expresiones booleanas ØPodemos aumentar la legibilidad de

OBSERVACION 3: el buen uso de las expresiones booleanas ØPodemos aumentar la legibilidad de un programa usando apropiadamente 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);

SENTENCIA CASE: estructura de decisión múltiple Cuando tenemos varias sentencias mutuamente excluyentes (mas de

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). 10/29/2021 Computación - Fac. Ingeniería UNMDP 31

Ejemplo Un cobrador de peaje tiene el siguiente cuadro de categorías y lo que

Ejemplo Un cobrador de peaje tiene el siguiente cuadro de categorías y lo que debe cobrar: Categoría 1 y 2 3 4 5 10/29/2021 Vehículo Bici y motos Autos con trailer Camiones Computación - Fac. Ingeniería UNMDP Tarifa Gratis 2. 50 5 10 32

Programa PASCAL usando IF anidados PROGRAM peaje; TYPE Tipo=1. . 5; {tipo de dato

Programa PASCAL usando IF anidados PROGRAM peaje; TYPE Tipo=1. . 5; {tipo de dato enumerado} VAR Cate: tipo; Tarifa: real; error: boolean; 10/29/2021 Computación - Fac. Ingeniería UNMDP 33

BEGIN error: =false; READLN(cate); IF (cate=1)or(cate=2)THEN tarifa: =0 ELSE IF cate=3 THEN tarifa: =2.

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.

Selección múltiple: CASE n n La sentencia CASE permite seleccionar una de entre varias

Selección múltiple: CASE n n 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. 10/29/2021 Computación - Fac. Ingeniería UNMDP 35

Sintaxis de CASE selector OF Lista de ctes. 1 : sentencia 1; Lista de

Sintaxis de 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; 10/29/2021 Computación - Fac. Ingeniería UNMDP 36

PROGRAM peaje; TYPE Tipo=1. . 5; Los IF anidados pueden ser VAR llevados a

PROGRAM peaje; TYPE Tipo=1. . 5; Los IF anidados pueden ser VAR llevados a la sentencia CASE Cate: tipo; Tarifa: real; equivalente: 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. Computación - Fac. Ingeniería 10/29/2021 UNMDP 37

OBSERVACIONES: ØCASE selecciona como siguiente sentencia a ejecutarse aquella cuya etiqueta (las ctes. )

OBSERVACIONES: Ø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 Computación - Fac. Ingeniería UNMDP (de 10/29/2021 la lista de constantes) 38

Sintaxis de CASE: tipos de selector y etiquetas constantes Tipo char CASE selector OF

Sintaxis de CASE: tipos de selector y etiquetas constantes Tipo char CASE selector OF ´a´. . ´z´ : sentencia 1; ´A´. . ´J´ : sentencia 2; ´Z´ : sentencia 3; ´ 4´ : sentencia 4; ´ 1´, ´ 2´, ´ 3´ : sentencia 5; ELSE sentencia 6 END; 10/29/2021 Computación - Fac. Ingeniería UNMDP 39

Sintaxis de CASE: tipos de selector y etiquetas constantes Tipo integer CASE selector OF

Sintaxis de CASE: tipos de selector y etiquetas constantes Tipo integer CASE selector OF 4, 5, 6 : sentencia 1; 1 : sentencia 2; 10. . 30 : sentencia 3; ELSE sentencia 4 END; 10/29/2021 Computación - Fac. Ingeniería UNMDP 40

Ejemplo 50<= cilindrada < 300 la moto es poco potente 300 <= cilindrada <

Ejemplo 50<= cilindrada < 300 la moto es poco potente 300 <= cilindrada < 700 la moto es potente 700 <= cilindrada <1500 la moto es muy potente 10/29/2021 Computación - Fac. Ingeniería UNMDP 41

PROGRAM motos; VAR Categoria: string[15]; cilindrada: integer; error: boolean; BEGIN READLN(cilindrada); error: =false; CASE

PROGRAM motos; VAR Categoria: string[15]; cilindrada: integer; error: boolean; BEGIN READLN(cilindrada); error: =false; CASE cilindrada OF 50. . 299 : categoria: =‘poco potente’; 300. . 699 : categoria: =‘potente’; 700. . 1500 : categoria: =‘muy potente’; ELSE error: =true END; IF error THEN WRITELN(‘valor equivocado’) ELSE WRITELN(‘La categoria es =’, categoria) Computación - Fac. Ingeniería END. 10/29/2021 UNMDP 42