Módulo 6: Condicionales y otros Tecnologías en la Educación Matemática Dr. Carlos Gonzalía DCIC - UNS Técnologías en la educación matemática Dr. Carlos Gonzalía 1 de
Copyright Copyright 2010 M. Capobianco, C. Gonzalía Se asegura la libertad para copiar, distribuir y modificar este documento de acuerdo a los términos de la GNU Free Documentation License, Versión 1.2 o cualquiera posterior publicada por la Free Software Foundation, sin secciones invariantes ni textos de cubierta delantera o trasera. Una copia de esta licencia está siempre disponible en la página http://www.gnu.org/copyleft/fdl.html. Técnologías en la educación matemática Dr. Carlos Gonzalía 2
Tipos de datos en Pascal Tipo de dato: es el conjunto de valores que puede tomar un dato (en Pascal: una variable, una constante o una función) Tipos predefinidos en Pascal: Integer: es un subconjunto de los números enteros Real: es un subconjunto de los números reales Boolean: es el conjunto {true, false} (valores lógicos) Char: es el conjunto de caracteres del código ASCII (letras, dígitos, y símbolos) Técnologías en la educación matemática Dr. Carlos Gonzalía 3
Ejercicios de repaso Escribir las siguiente expresiones aritméticas en lenguaje Pascal: 2x+3y 2-4z x+y x-y z x.y a.x+b.y 3 a.w-b.y -a+b r 2-1 a-1 2 + a Técnologías en la educación matemática Dr. Carlos Gonzalía 4
Ejercicios de repaso Escribir un programa en Pascal para intercambiar el contenido de dos variables leídas por teclado Para cada uno de los siguientes casos, definir dos constantes utilizando nombres significativos: precios, años, días, letras Técnologías en la educación matemática Dr. Carlos Gonzalía 5
Tipos de datos en Pascal Indicar un tipo de dato apropiado para cada una de las siguientes variables Precio: Es_Nro_Primo: Letra: Dia: Mes: NombreDia: NombreMes: ColorPrimario: PaloDeBarajaEspanola: NumeroDeCarta: Técnologías en la educación matemática Dr. Carlos Gonzalía 6
Tipos de datos en Pascal Tipos Predefinidos REAL BOOLEAN: {true, false}, CHAR: {código ASCII} INTEGER: {-32768,..., 0, 1,... 32767} Tipos definidos por el programador Tipos enumerados Tipos subrangos nos permiten ser más específicos, dando claridad y abstracción Técnologías en la educación matemática Dr. Carlos Gonzalía 7
Dónde se definen PROGRAM <nombre>; CONST {aquí se definen las constantes} TYPE {aquí el programador define los tipos } VAR {aquí declara las variables con su tipo}... Técnologías en la educación matemática Dr. Carlos Gonzalía 8
Redefinición de tipos El programador puede redefinir tipos TYPE Entero = integer; Logico = boolean; NroReal = real; VAR Letra = char; Precio : NroReal; Num: Entero; Es_Primo, Es_Par: Logico; Inicial: Letra;.... Inicial := A ; Es_Par := (Num MOD 2 ) = 0 Técnologías en la educación matemática Dr. Carlos Gonzalía 9
Convenciones Se puede anteponer una T a las definiciones de tipos (no es obligatorio, pero sí recomendable hacerlo) TYPE TEntero = integer; TLogico = boolean; TNroReal = real; TLetra = char; VAR Precio: TNroReal; Num: TEntero; esprimo: TLogico; Inicial: TLetra;.... Técnologías en la educación matemática Dr. Carlos Gonzalía 10
Tipos enumerados El programador puede definir nuevos tipos, enumerando los valores que lo forman Esos valores deben ser identificadores de Pascal Este tipo definido por el usuario se denomina enumerado Técnologías en la educación matemática Dr. Carlos Gonzalía 11
Tipos enumerados <nombre-tipo-enum> = ( ident-1, ident-2,..., ident-n) nombre del tipo (identificador) valores posibles para el tipo (lista de identificadores separados con coma) Ejemplo Computadoras = (IBM, Compaq, Toshiba, Sun, Apple) Técnologías en la educación matemática Dr. Carlos Gonzalía 12
Ejemplos TYPE TipoColorprimario = (rojo, azul,amarillo); TipoPaloBaraja = (Oro,Copa,Espada,Basto); TDiasSemana = (lunes,martes,miercoles,jueves, viernes,sabado,domingo); VAR NombreDia: TDiasSemana; ColorPrimario: TipoColorPrimario; PaloDeCarta: TipoPaloBaraja;... NombreDia := lunes; PaloDeCarta:=Basto; Técnologías en la educación matemática Dr. Carlos Gonzalía 13
Tipos enumerados Cuidado! Pascal prohibe utilizar las sentencias write, writeln, read o readln con tipos enumerados definidos por el programador. Si V es una variable de un tipo enumerado definido por el programador, entonces... read(v) readln(v) write(v) writeln(v) Técnologías en la educación matemática Dr. Carlos Gonzalía 14
Tipos subrangos Los tipos ordinales son todos aquellos donde los elementos están ordenados (según cierto criterio) Cada elemento (excepto el último) tiene un sucesor y cada elemento (excepto el primero) tiene un predecesor Tipos ordinales predefinidos: integer, boolean, char El programador puede definir nuevos tipos subrangos, indicando un valor inicial y un valor final de un tipo ordinal cualquiera Técnologías en la educación matemática Dr. Carlos Gonzalía 15
Tipos ordinales Ej: INTEGER predecesor sucesor -32768-32767... 0 2... 1 32766 MaxInt Ej: CHAR predecesor sucesor... A... Z a b c... Técnologías en la educación matemática Dr. Carlos Gonzalía 16
Tipos Subrangos <nombre-subrango> = <valor-inicio>.. <valor-tope> Ejemplo nombre del tipo (identificador) valores posibles para el tipo (todos los valores desde valor_inicio hasta valor_tope) NotaAprobado = 4..10; Técnologías en la educación matemática Dr. Carlos Gonzalía 17
Ejemplos TYPE TNumeroMes = 1..12; TNumeroDeCarta = 1..12; TLetrasMayusculas = A.. Z ; TDiasSemana = (lun,mar,mie,jue,vie,sab,dom); TDiasLaborables = lun.. vie ; TFinDeSemana = sab..dom; Técnologías en la educación matemática Dr. Carlos Gonzalía 18
Tipos Ordinales Tipos Ordinales BOOLEAN: {false, true}, CHAR: {código ASCII} INTEGER: {-32768,..., 0, 1,... 32767} Tipos enumerados Tipos subrangos Por qué REAL no es ordinal? Operaciones Características Pueden usarse los operadores relacionales < <= > >= <> Pueden usarse las funciones pred, ord y succ Técnologías en la educación matemática Dr. Carlos Gonzalía 19
Funciones para tipos ordinales ORD(V): dado un valor V de un tipo ordinal T, devuelve la posición de V en la sucesión de valores de T Ejemplos: ORD( B ) es 66 ORD(3) es 3 Técnologías en la educación matemática Dr. Carlos Gonzalía 20
Dado el tipo Ejemplos Tdias=(lun, mar, mie, jue, vie, sab, dom) ord(lun) es 0 ord(mar) es 1 ord(dom) es 6 ord(false) es 0 y ord(true) es 1 lun < mar y sab < dom Técnologías en la educación matemática Dr. Carlos Gonzalía 21
Funciones para tipos ordinales PRED(V): dado un valor V de un tipo ordinal T, devuelve el valor anterior a V en la sucesión de valores de T PRED( B ) es A, PRED(3) es 2 y PRED(true) es false En Tdias=(lun, mar, mie, jue, vie, sab,dom) pred(dom)es sab pred(sab) es vie pred(lun) no existe Técnologías en la educación matemática Dr. Carlos Gonzalía 22
Funciones para tipos ordinales SUCC(V): dado un valor V de un tipo ordinal T, devuelve el valor siguiente a V en la sucesión de valores de T SUCC( A ) es B, SUCC(3) es 4 y SUCC(false) es true En Tdias=(lun, mar, mie, jue, vie, sab,dom) succ(lun) es mar succ(sab) es dom succ(dom) no existe Técnologías en la educación matemática Dr. Carlos Gonzalía 23
Ejercicios Definir tipos enumerados para representar los siguientes datos: a)las provincias argentinas. b)los días de la semana. c)los meses del año. d)las cuatro estaciones del año. e)las vocales. f)los colores del arco iris. g)los doce signos del zodíaco. Técnologías en la educación matemática Dr. Carlos Gonzalía 24
Ejercicios Definir tipos subrangos para representar datos como los siguientes. Se pueden usar los enumerados definidos anteriormente. Las provincias de la mesopotamia argentina. Los días laborales de la semana. Los días del fin de semana. Las letras mayúsculas Los enteros no negativos. Los números naturales de tres cifras. Técnologías en la educación matemática Dr. Carlos Gonzalía 25
Sentencias de control Las sentencias de control nos permiten especificar el flujo de control del programa Las sentencias de control en Pascal, que permiten programación estructurada son: Asignación Secuencia Condicionales Repetitivas Llamadas a procedimientos Técnologías en la educación matemática Dr. Carlos Gonzalía 26
Sentencias simples y compuestas Sentencia o proposición simple compuesta a:=1 BEGIN <sentencia1>; <sentencia2>;... <sentenciak> END Técnologías en la educación matemática Dr. Carlos Gonzalía 27
Sentencia compuesta Permite definir una secuencia de acciones. Comienza con BEGIN y termina con END Las sentencias que forman una sentencia compuesta se separan una de otra con punto y coma Técnologías en la educación matemática Dr. Carlos Gonzalía 28
Ejemplo BEGIN PrecioBase := 200; Iva:= Precio * 0.20; PrecioFinal:= PrecioBase + Iva; END Técnologías en la educación matemática Dr. Carlos Gonzalía 29
Uso del punto y coma El punto y coma se lo utiliza en Pascal como un separador de sentencias writeln( Hola! ); i := 1; j:=2; k:= 3; writeln( Nada más ); equivalente writeln( Hola! ); i := 1; j:=2; k:= 3; writeln( Nada más ); Técnologías en la educación matemática Dr. Carlos Gonzalía 30
Uso del punto y coma Qué sucede cuando nos olvidamos de un punto y coma? Cómo nos advierte el compilador de los errores sintácticos? Técnologías en la educación matemática Dr. Carlos Gonzalía 31
Condicionales en Pascal SI <condición> ENTONCES < secuencia de acciones > SI NO Algoritmos < secuencia de acciones > Pascal IF <expresión BOOLEAN> THEN < sentencia(simple o compuesta) > ELSE < sentencia (simple o compuesta > Técnologías en la educación matemática Dr. Carlos Gonzalía 32
Ejemplo ALGORITMO Intercambio; DATOS DE ENTRADA: DATOS DE SALIDA: DATOS AUXILIARES: A,B,AUX COMIENZO PIDO(A) PIDO(B) SI A = B ENTONCES MOSTRAR( IGUALES ) SINO AUX A A B B AUX FIN. PROGRAM Intercambio; VAR A,B,AUX: INTEGER; BEGIN READLN(A); READLN(B); IF A = B THEN WRITE( IGUALES ) ELSE BEGIN AUX := A; A := B; B := AUX; END; END. Técnologías en la educación matemática Dr. Carlos Gonzalía 33
Ejercicios Escribir un programa para que dados tres números a, b, y c, calcule el producto de a y b si la diferencia entre a y b es mayor que c, de lo contrario, calcule el cociente entre a y b. Escribir un programa para determinar si un número n es par. Escribir un programa que reciba dos números naturales n y d, y determine si n es divisible por d. Técnologías en la educación matemática Dr. Carlos Gonzalía 34
Ejercicios Dado el sueldo básico de un empleado, escribir un programa que calcule el monto final que debe abonársele sabiendo que si el sueldo básico es de p pesos por mes, debe agregarse un incremento calculado como un porcentaje a partir de p según la categoría a la que pertenezca: 0 < p < 800 : 10% 800 <= p <2000 : 5% 2000=p : 3% Técnologías en la educación matemática Dr. Carlos Gonzalía 35
Ejercicios Definir el tipo enumerado LetrasGriegas con identificadores ALFA, BETA, DELTA, GAMMA y OMEGA ordenados en forma tal que respeten el siguientes conjunto de criterios. Recordar que el ordinal del primer valor definido en el enumerado es 0 Pred(DELTA) es GAMMA OMEGA < GAMMA es False Ord(BETA) es 2 Succ(OMEGA) es ALFA Técnologías en la educación matemática Dr. Carlos Gonzalía 36
Ejercicios En una materia de la escuela, un alumno aprueba un examen con A, B o C y lo desaprueba si se saca D o E. Cuál de las siguientes definiciones de tipos es conveniente usar para una variable que represente la nota de un alumno? Por qué? a)type Notas=(A,B,C,D,E); b)type Notas='A'..'E'; c)type Notas=char; Técnologías en la educación matemática Dr. Carlos Gonzalía 37
Expresiones de los condicionales Puedo utilizar los operadores lógicos AND (y) OR (o) NOT (no) Puedo utilizar los símbolos: =, >, y < El símbolo se escribe <> El símbolo se escribe >= o => Técnologías en la educación matemática Dr. Carlos Gonzalía 38
Ejercicio Escribir un programa en Pascal que sume todos los números divisibles por 3 y por 5 menores que un tope dado Técnologías en la educación matemática Dr. Carlos Gonzalía 39
Condicionales anidados El bloque de sentencias que figura siguiendo a un then o a un else en el condicional puede a su vez contener otros condicionales Esto da lugar a un anidamiento de condicionales Técnologías en la educación matemática Dr. Carlos Gonzalía 40
Condicionales anidados SI <condicion> ENTONCES SINO <acción> <acción > SI <condicion 1> ENTONCES SINO SI < condicion 2 > ENTONCES <acción 1> SINO <acción 2> SI < condicion 3 > ENTONCES <acción 4> SINO <acción 5> Técnologías en la educación matemática Dr. Carlos Gonzalía 41
Condicionales anidados Son equivalentes los siguientes algoritmos? CONDICIONALES SI ( A > 10 ) ENTONCES <ACCION 1 > SI ( B = 0 ) ENTONCES <ACCION 2> SI ( C > 20 ) ENTONCES <ACCION 3> CONDICIONALES ANIDADOS SI ( A > 10 ) ENTONCES <ACCION 1> SINO SI ( B = 0 ) ENTONCES <ACCION 2> SINO SI ( C > 20 ) ENTONCES <ACCION 3> REALIZAR UNA TRAZA CON A = 20, B = 10, C = 100 A = 1, B = 0, C = 100 A = 1, B = 0, C = 1 Técnologías en la educación matemática Dr. Carlos Gonzalía 42
Condicionales anidados Cada ELSE corresponde siempre al IF-THEN más cercano Debe prestarse especial atención a cómo utilizar BEGIN y END para agrupar sentencias Es muy importante usar la identación adecuada. Facilita al programador la lectura del programa fuente Técnologías en la educación matemática Dr. Carlos Gonzalía 43
Ejercicios Desarrollar un programa en Pascal para calcular la suma, resta, producto y división de fracciones. El programa deberá pedir la operación deseada. Escribir un programa en Pascal para determinar si una fecha dada es válida Técnologías en la educación matemática Dr. Carlos Gonzalía 44
Ejercicios Escribir un programa en Pascal para determinar si dos fechas son iguales Escribir un programa en Pascal para hallar la fecha siguiente a una fecha dada Técnologías en la educación matemática Dr. Carlos Gonzalía 45
Sentencia CASE IF (mes=11) or (mes=4) or (mes=6) or (mes=9) THEN cant_dias:=30 ELSE IF (mes=1) or (mes=3) or (mes=5) or (mes=7) or (mes=8) or (mes=10) or (mes=12) THEN cant_dias:=31 ELSE IF (mes=2) THEN cant_dias:=29 CASE mes OF 11,4,6,9:cant_dias:=30; 1,3,5,7,8,10,12: cant_dias :=31 2: cant_dias := 29; END; Técnologías en la educación matemática Dr. Carlos Gonzalía 46
Sentencia CASE - sintaxis CASE <expresion ordinal> OF <constantes> : <sentencia> ; <constantes> : <sentencia> ;... END; Donde <constantes> puede ser: a) una secuencia de valores individuales. Por ejemplo: 1,2,3,4,5 b) sub-intervalos ej: 1..5 Técnologías en la educación matemática Dr. Carlos Gonzalía 47
Ejemplo TYPE TipoClima=(muyfrio, frio,templado,calido); VAR Clima:TipoClima; Temperatura:integer;... READ(Temperatura); CASE Temperatura OF -20..5: Clima :=muyfrio; 6..15: Clima := frio; 16..25: Clima:= templado; 26..40: Clima:= calido; END; Técnologías en la educación matemática Dr. Carlos Gonzalía 48
Casos Especiales Extensión Común VAR MES: 1..12; Opciones repetidas VAR M: INTEGER; CASE MES OF 2: maximodia:= 29; 11,4,6,9: maximodia:=30; ELSE maximodia:=31 END; CASE M OF 1,2: write( chico ); 2,3: write( grande ); END; El ELSE se ejecuta cuando el valor no corresponde a ninguna opción Si la opción está repetida, se selecciona sólo la primera. Técnologías en la educación matemática Dr. Carlos Gonzalía 49
Ejemplo Programa en Pascal que solicita por teclado una letra cualquiera, e imprime por pantalla si la letra ingresada es una vocal o una consonante PROGRAM Letras; VAR Letra: A.. Z ; BEGIN write( Ingrese una letra: ); readln(letra); CASE Letra OF A, E, I, O, U : writeln( Es una vocal! ); ELSE writeln(!es una consonante! ); END {case} END. Técnologías en la educación matemática Dr. Carlos Gonzalía 50
Ejercicios Escriba un programa que transforme una nota numérica en los siguientes valores: aprobado (6 a 8), excelente (9 a 10), desaprobado (1 a 6) Realice dos versiones del programa, una usando IF-THEN- ELSE y otra usando CASE. Idem al ejemplo anterior pero para un puntaje de 0 a 100. Escriba un programa que reconozca si una letra ingresada por teclado es mayúscula o minúscula Técnologías en la educación matemática Dr. Carlos Gonzalía 51