Tema 1 : Conceptos Introducción a la programación Sergi Jordà Curso de postgrado “Programación Orientada al Multimedia” Institut Universitari de l’Audiovisual Universitat Pompeu Fabra • • • • • • Lenguaje de programación Programa • • Un programa informático es un conjunto • de instrucciones escritas en un lenguaje de programación, para que sean ejecutadas en un ordenador Un programa es el resultado final de un proceso que se inicia con el planteamiento de un problema (que deberá ser posteriormente resuelto por un ordenador) • • • • Lenguajes de bajo nivel • • • • Aunque pudiera parecer que los ordenadores entienden múltiples lenguajes, en realidad, sólo entienden uno, denominado “lenguaje máquina” o ensamblador Este lenguaje varían de una máquina a otra (dependiendo del tipo de procesador) Esto es así, porque cada procesador entiende tan sólo un número finito (varios centenares) de instrucciones propias Los ensambladores se denominan lenguajes de bajo nivel por estar más cerca de la máquina Programa Lenguaje de programación Lenguajes de bajo nivel – Ensamblador Lenguajes de alto nivel Lenguajes compilados Lenguajes interpretados sub: mov #numa,r0 mov #numb,r1 jsr pc,compare bhi higha mov #numb,r0 mov #numa,r1 br startsub higha: mov #numa,r0 mov #numb,r1 startsub: mov (r0)+,places tst (r1)+ mov r0, -(sp) clr carry sublp: sub (r1)+,(r0) sub carry,(r0)+ bpl nocrr2 bic #100000, -2(r0) mov #1,carry br sublpend Fragmento de programa en Ensamblador Para que el ordenador entienda y pueda ejecutar un programa, éste deberá estar escrito en un lenguaje especial, comprensible para el ordenador Los ordenadores no entienden matices, no resuelven contradicciones, ni realizan deducciones fruto de la experiencia. Por ello, los programas deberán estar escritos de una forma rigurosa § Sin errores sintácticos § Sin contradicciones § Sin omisiones Los errores sintácticos producen programas incomprensibles para el ordenador è programas que no se pueden ejecutar Las contradicciones u omisiones (errores lógicos), producen programas que posiblemente no se ejecuten como el programador ha previsto. Suelen ser por ello, más difíciles de detectar Los ordenadores son quisquillosos. Una simple coma (,) de más, de menos, o fuera de lugar, puede producir errores sintácticos o errores lógicos (dependiendo del contexto, del lenguaje, etc.) Ventajas/Inconvenientes del Ensamblador • Contras § Los programas en Ensamblador son difíciles de escribir (y de leer) § Dado que las instrucciones de los procesadores son muy elementales, cualquier acción sencilla requiere de múltiples instrucciones (líneas) § Los programas no son nada portables (de un tipo de máquina a otro) • Pros § Al evitar “intermediarios” los programas bien escritos se ejecutan más rápido que con cualquier otro lenguaje 1 Traductores: Intérpretes vs. Compiladores Lenguajes de alto nivel • • • • Hasta mediados de los 60s todos los programas se escribían en Ensamblador Conforme los programas se hacen mayores y más complejos surge la necesidad de poderlos escribir de una forma más sencilla y eficaz è nacen nuevos lenguajes de programación con nuevas sintaxis más cercanas al lenguaje natural se denominan de alto nivel por estar más cerca del humano que de la máquina • Para poder escribir en esos lenguajes diferentes del ensamblador, debemos disponer de programas traductores que conviertan lo que hemos escrito en ese lenguaje, a lenguaje ensamblador Estos lenguajes son más portables, ya que lo único que hay que hacer es crear un nuevo programa traductor para cada máquina • Existen básicamente 2 formas de realizar esta traducción: § Paso a paso conforme se va ejecutando el programa, instrucción a instrucción (interpretación) § Se traduce todo el programa, antes de ejecutarlo (compilación) Esto nos lleva a distinguir entre § lenguajes interpretados ? § lenguajes compilados ? Traductores: Intérpretes vs. Compiladores Intérpretes vs. Compiladores : Pros, Contras • • • Existen básicamente 2 formas de realizar esta traducción: § Paso a paso conforme se va ejecutando el programa, instrucción a instrucción (interpretación) § Se traduce todo el programa, antes de ejecutarlo (compilación) Esto nos lleva a distinguir entre § lenguajes interpretados (e.g. javascript…) § lenguajes compilados (e.g. C…) NB. otros lenguajes (e.g. Visual Basic, Lingo, Java…) adoptan estrategias a mitad de camino Tema 2 : Elementos de un lenguaje • Escribir un programa es similar a escribir una receta de cocina, aunque con instrucciones comprensibles para la máquina, que es la que hará de cocinero • Como en una receta, en un programa las instrucciones se ejecutan una a una, correlativamente • • • • • • (+C) Los programas compilados se ejecutan + rápido (+C) En los programas compilados, los errores sintácticos se detectan antes de ejecutar el programa (en la compilación) (-I) Los programas interpretados, no pueden ocultar el código fuente (cómo están escritos: e.g. cut&paste de javascript) (-I) Los programas interpretados, necesitan del programa intérprete en la máquina en la que se van a ejecutar (+I) Los programas interpretados permiten un ciclo de desarrollo más rápido e “interactivo” (+I) Los programas interpretados son potencialmente menos “peligrosos” (el interprete puede prohibir determinadas acciones) Programa “Tortilla” 1. 2. 3. 4. 5. 6. 7. 8. Coger uno huevo Romperle la cáscara y verter el interior en un plato Añadir un poco de sal Batirlo con un tenedor Calentar un poco de aceite en una sartén Cuando esté caliente, añadir el huevo batido a la sartén Ir doblando el huevo con un tenedor durante unos segundos Retirar el huevo y ponerlo en un plato Este programa está cargado de ambigüedades que una máquina no sabría resolver • Ambigüedades de cantidad: un poco de sal, un poco de aceite… • De tiempo: unos segundos… • Parte de la idea de que nuestro lenguaje tiene un conocimiento muy elevado del mundo de la cocina: sabe lo que son los elementos que aparecen (huevo, plato, sal, tenedor, sartén, aceite), los que no aparecen explícitamente (fuego…), las propiedades de estos objetos (caliente…) y las acciones que se toman sobre ellos (coger, romper, añadir, batir, calentar, doblar, retirar…) 2 Programa “Tortilla” 1. 2. 3. 4. 5. 6. 7. 8. Coger uno huevo Romperle la cáscara y verter el interior en un plato Añadir un pocode sal Batirlo con un tenedor Calentar un poco de aceite en una sartén Cuando esté caliente, añadir el huevo batido a la sartén Ir doblando el huevo con un tenedor durante unos segundos Retirar el huevo y ponerlo en un plato Este programa está cargado de ambigüedades que una máquina no sabría resolver • Ambigüedades de cantidad: un poco de sal, un poco de aceite… • De tiempo: unos segundos… • Parte de la idea de que nuestro lenguaje tiene un conocimiento muy elevado del mundo de la cocina: sabe lo que son los elementos que aparecen (huevo, plato, sal, tenedor, sartén, aceite), los que no aparecen explícitamente (fuego…), las propiedades de estos objetos (caliente…) y las acciones que se toman sobre ellos (coger, romper, añadir, batir, calentar, doblar, retirar…) Programa “Tortilla” : Dificultades • • Elementos de un lenguaje • • • Un programa no siempre ejecuta todas sus líneas, ni lo hace siempre en el mismo orden è debe tomar decisiones en función de resultados, entradas del usuario…. [e.g. diferencias entre una animación Flash secuencial y un programa Flash interactivo] En nuestra tortilla, por ejemplo, hubiésemos podido dar la opción a hacer una tortilla mayor § Si tenemos más hambre el número de huevos es igual a 2 ó 3 Una de las principales dificultades a la hora de comenzar a programar es comprender que para una máquina, nada es obvio. Todo debe estar detallado, y sin ambigüedades ni contradicciones… Aunque… algunas de las anteriores acciones parecen suficientemente básicas como para que “sí que puedan estar en un lenguaje de programación” (coger, añadir, retirar, poner...) Estructuras de control • • • Lo que hemos visto son estructuras de control Están presentes en todos los lenguajes Hay 2 tipos básicos § Condicionales (IF, SWITCH…) § De repetición (FOR, WHILE, REPEAT…) Un programa a menudo debe también realizar tareas repetidas § un determinado número de veces à durante unos segundos § mientras se cumpla una condición § hasta que se cumpla otra condición (esto es equivalente a mientras no se cumpla) § NB. Los nombres, sintaxis, variantes… de estas estructuras pueden variar ligeramente de un lenguaje a otro ejemplo: cuando esté caliente, añadir el huevo batido esto se escribiría normalmente como: • De momento estudiaremos sólo la estructura condicional Mientras NO esté caliente, esperar Añadir el huevo batido Estructura Condicional IF condicion THEN …………… …………… ENDIF --------------------------if (condicion) { …………… …………… } --------------------------IF condicion THEN …………… …………… ELSE …………… …………… ENDIF • Hemos puesto 2 ejemplos (Lingo o Basic vs. JavaScript, C, Java…) • Cambia la “ortografía” pero la estructuras son idénticas • Ambas se pueden ampliar con la instrucción ELSE, que indica la serie de acciones a realizar en caso alternativo Condicionales anidadas Es posible escribir de nuevo un IF después de un ELSE, con lo que se obtienen estructuras del tipo IF condicion1 THEN …………. ELSE IF condicion2 THEN ………… ELSE IF condicion3 THEN ………... ENDIF ……….. El programa sólo entrará a evaluar una condición, en el caso de que la anterior sea falsa. Cuando una condición sea verdadera, después de ejecutar las acciones correspondientes, el programa saltará a la instrucción de después del ENDIF 3 Variables “Tortilla condicional” Para terminar con la “tortilla” podríamos escribir algo como: IF “de patatas” THEN Este ejemplo sigue siendo Usar 4 huevos poco riguroso (de patatas, ELSE IF “más hambre” THEN más hambre…), pero permite Usar 2 huevos estudiar determinados ELSE aspectos fundamentales: Usar 1 huevo (1) El orden de las END condiciones podría cambiar el resultado (2) Las lineas de tipo Usar N Por ejemplo, si ponemos la condición “más hambre” antes que huevos, introducen 2 nuevos “de patatas ”, no nos permitirá hacer conceptos: tortilla de patatas cuando Variable (huevo) y asignación una tengamos más hambre… (de un valor a la variable huevo) • Una variable permite almacenar datos temporalmente • Una variable se distingue por un nombre (e.g. huevos) • Desde el punto de vista del ordenador, lo que hacemos al crear una variable es asignar un nombre a una zona de la memoria que guardará esos datos • Las reglas específicas sobre la declaración de variables varían de un lenguaje a otro § En la mayoría, es obligatorio declarar las variables antes de us arlas (aunque no en Lingo) § En muchos lenguajes, las variables pueden ser de tipos diferentes (numérico entero, numérico real, texto…) y hay que indicarlo en el momento de declararlas § Eso es así porqué los tamaños de las variables varían dependiendo del tipo que son • Algunos lenguajes distinguen entre mayúsculas y minúsculas. En esos • • casos, hay que ir con cuidado a la hora de declararlas (e.g. Huevos y huevos, serían 2 variables diferentes) Los nombres de variables NUNCA pueden contener espacios, ni caracteres especiales que se usen en el lenguaje (e.g. *) Los nombres de las variables NUNCA pueden coincidir con el de alguna instrucción del lenguaje Tipos y declaración de variables • • • • Numéricos: para realizar cálculos/operaciones matemáticas § Enteros (números sin decimales) § Reales (números con decimales) Alfanuméricos (o de texto): para tratar con texto y caracteres en nombres, mensajes, frases, etc. Lógicos (o booleanos): para tratar condiciones, sólo admiten 2 valores (FALSO, VERDADERO) En nuestros ejemplos utilizaremos la siguiente sintaxis a la hora de declarar una variable var huevos tipo entero Operadores • Los operadores permiten realizar cálculos matématicos y lógicos • Operadores aritméticos: + , - , * , / , mod Asignación • • • Nosotros utilizaremos el símbolo ß • Este s ímbolo indica claramente que la dirección de la asignación es siempre de derecha a izquierda y lo distingue de la igualdad, ya que una asignación NO es una ecuación matem ática • La línea huevos = huevos + 1 sería imposible en matemáticas (ninguna variable puede ser igual a si misma m ás uno) • La línea huevos ß huevos + 1 , indica que incrementamos en 1 el valor de la variable huevos • No podemos usar una expresión compleja en la parte izquierda de una asignación. Algo como huevos + 1 ß huevos no tiene sentido (y da error) ya que a la izquierda necesitamos una variable que pueda guardar el resultado Operadores aritméticos • • Operadores lógicos y relacionales: = , <> , > , < , >= , <= , AND , OR , NOT Dependiendo del lenguajes, algunos de estos operadores se representan mediante símbolos diferentes var x tipo real var y tipo entero var z tipo real (z valdría 2,5) • El operador – funciona también como operador unitario (i.e. NO binario) para realizar el cambio de signo • De los restantes operadores aritméticos, el único que necesite comentario, tal vez sea el MOD, que calcula el resto de la división entera, como se muestra en el siguiente ejemplo (y algunos más dependiendo del lenguaje) • Diferentes reglas rigen sobre estos operadores dependiendo del lenguaje En algunos lenguajes, la combinación de diferentes tipos de datos se trata de forma diferente (por ejemplo la división da resultados enteros o reales dependiendo de los tipos de los operandos , etc.) var x tipo entero var y tipo entero var z tipo real xß5 yß2 zßx/y (z valdría 2) (y algunos más dependiendo del lenguaje) • Una vez declarada la variable, la línea “Usar 4 huevos ” se debe entender como asignar 4 a la variable huevos Para ello se utiliza el operador asignación Algunos lenguajes utilizan el símbolo = mientras que otros utilizan un signo diferente para diferenciarlo de la igualdad (que se utiliza, como veremos, para comprobar si 2 expresiones, variables, etc. son iguales) 4 Operador MOD IF x MOD 2 = 1 THEN PRINT “x es impar” ELSE PRINT “x es par” ENDIF • • Hemos asumido una instrucción PRINT (que no existe de esta forma en todos los lenguajes) Hemos utilizado constantes (2 y 1). Se utilizan en TODOS los lenguajes Operador relacionales • • • • = , <> , > , < , >= , <= se utilizan para realizar comparaciones En algunos lenguajes el operador “igual que” se escribe == en lugar de = En algunos lenguajes el operador “diferente de” se escribe != en lugar de <> Estos operadores devuelven valores lógicos o booleanos (VERDADERO o FALSO) Operadores lógicos Tabla booleanas • Se utilizan para construir expresiones • • • lógicas más complejas Se rigen por la lógica de Boole (que afortunadamente coincide con la lógica “del sentido común”) Así, la expresión A AND B es cierta sólo si tanto A como B son ciertas Mientras que para que A OR B sea cierta, basta con que lo sea una de las 2 AND V F OR V F V V F V V V F F F F V F NOT V F F V NB. En algunos lenguajes existe además el operador XOR ú OR exclusivo, mucho menos utilizado Uso de Operadores Relaciones y Lógicos • • Los operadores relaciones y lógicos, se suelen utilizar dentro de condiciones para evaluar (por ejemplo con un IF), pero la mayoría de lenguajes permiten también su uso con variables var par as booleano var x as entero par ß (x MOD 2 = 0) Algunos lenguajes permiten incluso combinarlos con operadores aritméticos. En estos casos, VERDADERO vale 1 y FALSO vale 0 Precedencia en los Operadores • • • • Todos los operadores (aritméticos , lógicos y relacionales) tienen unas reglas de precedencia que se aplican cuando varios actuan juntos Así por ejemplo a + b * c es equivalente a a + (b * c) porque la precedencia de la multiplicación es superior a la de la suma Sin embargo, para evitar dudas y problemas , cuando manejemos expresiones con varios operadores , lo mejor es poner siempre paréntesis y forzar así la precedencia que nosotros deseemos (los paréntesis son “gratis”, es decir NO hacen que un programa vaya más lento) Escribiremos pues a + (b * c) ó (a + b)*c según lo que deseemos , y no dejarermos que sea la máquina la que lo deduzca 5 Ejercicio • Ejercicio • Dada una instrucción INPUT_NUM, que permita introducir un número por teclado, escribir un programa que tome un número, diga si es positivo o negativo, y en caso de que fuera negativo lo convierta a positivo (i.e. calcule su valor absoluto) var x as entero xß INPUT_NUM --lo que sigue a los 2 guiones es un comentario IF x<0 THEN PRINT “es negativo” x ß (x * -1) --también se podría escribir: xß-x ELSE PRINT “es positivo” ENDIF var x as entero xß INPUT_NUM --lo que sigue a los 2 guiones es un comentario IF x<0 THEN PRINT “es negativo” x ß (x * -1) --también se podría escribir: xß-x ELSE PRINT “es positivo” ENDIF Comentarios Notas sobre Entradas y Salidas Programación Orientada a Eventos • Por muy bien estructurado y escrito que esté un programa, inevitablemente, • • • • algunos fragmentos se vuelven oscuros (pasado un cierto tiempo, incluso para el que lo programó…) Para facilitar la relectura, modificación… de un programa, existen los comentarios Los comentarios son lineas de texto que comienzan por un símbolo que le indica al ordenador que lo que sigue “no es para él” • Estos símbolos varían con el lenguaje • Nosotros hemos utilizado -- que es lo que se utiliza en Lingo • Otros lenguajes usan otros símbolos § // en C, C++, Java y JavaScript § REM en Basic § ….. • • Los comentarios NUNCA ralentizan la ejecución de un programa, por lo que su uso es más que recomendable • • Escribir un programa que tome 3 números de teclado, e indique: 1. 2. 3. 4. var var var var var var var Dada una instrucción INPUT_NUM, que permita introducir un número por teclado, escribir un programa que tome un número, diga si es positivo o negativo, y en caso de que fuera negativo lo convierta a positivo (i.e. calcule su valor absoluto) Cuantos números diferentes hay (3,2 ó 1) Cuanto vale el mayor Cuanto vale el menor Cuanto vale el promedio x1 as entero x2 as entero x3 as entero diferentes as entero mayor as entero menor as entero promedio as real diferentes = 3 Ejercicio -- sigue…. IF x3>mayor THEN mayor ß x3 ELSE IF x3< menor THEN menor ß x3 ELSE IF (x3 = x1) OR (x3 = x2) THEN diferentes ß diferentes – 1 ENDIF Hemos utilizado las instrucciones “inventadas ” INPUT_NUM y PRINT A parte de que en muchos lenguajes , estas acciones pueden tener nombres diferentes , lo cierto es que en los entornos actuales , con ventanas y ratón, las cosas no funcionan exactamente de esta forma: § Los programas no esperan a que el usuario introduzca un dato, ni a que que clique el ratón § Más adelante, cuando estudiemos LINGO, veremos otro tipo de paradigma de programación, que se denomina ORIENTADO A EVENTOS De momento, seguiremos trabajando de “esta manera” (i.e. esperando datos del usuario) como se hacía en los tiempos en que los sistemas operativos tenían interfaces textuales , y los ordenadores ejecutaban un único programa a la vez… Escribir un programa que tome 3 números de teclado, e indique: 1. 2. 3. 4. var var var var var var var Cuantos números diferentes hay (3,2 ó 1) Cuanto vale el mayor Cuanto vale el menor Cuanto vale el promedio x1 as entero x2 as entero x3 as entero diferentes as entero mayor as entero menor as entero promedio as real diferentes = 3 promedio ß (x1+x2+x3) / 3.0 x1ßINPUT_NUM x2ßINPUT_NUM x3ßINPUT_NUM IF x2 > x1 THEN mayor ß x2 menor ß x1 ELSE IF x2<x1 THEN mayor ß x1 menor ß x2 ELSE -- son iguales diferentes ß diferentes – 1 mayor ß menor ß x1 --o x2 (son iguales) ENDIF PRINT “diferentes =“, diferentes PRINT “mayor = “, mayor PRINT “menor =“, menor PRINT “promedio =“, promedio NOTAS: No hemos explicado que PRINT pueda utilizarse así para combinar textos constantes (en este caso entrecomillados) con valores de variables. Dependiendo del lenguaje, esto podr á escribirse de forma más o menos parecida Ejercicio -- sigue…. IF x3>mayor THEN mayor ß x3 ELSE IF x3< menor THEN menor ß x3 ELSE IF (x3 = x1) OR (x3 = x2) THEN diferentes ß diferentes – 1 ENDIF promedio ß (x1+x2+x3) / 3.0 x1ßINPUT_NUM x2ßINPUT_NUM x3ßINPUT_NUM IF x2 > x1 THEN mayor ß x2 menor ß x1 ELSE IF x2<x1 THEN mayor ß x1 menor ß x2 ELSE -- son iguales diferentes ß diferentes – 1 mayor ß menor ß x1 --o x2 (son iguales) ENDIF PRINT “diferentes =“, diferentes PRINT “mayor = “, mayor PRINT “menor =“, menor PRINT “promedio =“, promedio NOTAS: No hemos explicado que PRINT pueda utilizarse así para combinar textos constantes (en este caso entrecomillados) con valores de variables. Dependiendo del lenguaje, esto podr á escribirse de forma más o menos parecida 6 • • Escribir un programa que tome 3 números de teclado, e indique: 1. 2. 3. 4. var var var var var var var Cuantos números diferentes hay (3,2 ó 1) Cuanto vale el mayor Cuanto vale el menor Cuanto vale el promedio Ejercicio 1. 2. 3. 4. -- sigue…. IF x3>mayor THEN mayor ß x3 x1 as entero x2 as entero x3 as entero diferentes as entero mayor as entero menor as entero promedio as real var var var var var var var ELSE IF x3< menor THEN menor ß x3 ELSE IF (x3 = x1) OR (x3 = x2) THEN diferentes ß diferentes – 1 ENDIF diferentes = 3 Escribir un programa que tome 3 números de teclado, e indique: Cuantos números diferentes hay (3,2 ó 1) Cuanto vale el mayor Cuanto vale el menor Cuanto vale el promedio • menor ß x3 ELSE IF (x3 = x1) OR (x3 = x2) THEN diferentes ß diferentes – 1 ENDIF promedio ß (x1+x2+x3) / 3.0 x1ßINPUT_NUM x2ßINPUT_NUM x3ßINPUT_NUM PRINT “mayor = “, mayor PRINT “menor =“, menor var var var var var var var Cuantos números diferentes hay (3,2 ó 1) Cuanto vale el mayor Cuanto vale el menor Cuanto vale el promedio En la mayoría de lenguajes es posiblerealizar varias asignaciones “en cadena” en una misma línea . • Ejercicio -- sigue…. IF x3>mayor THEN mayor ß x3 x1 as entero x2 as entero x3 as entero diferentes as entero mayor as entero menor as entero promedio as real menor ß x3 ELSE IF (x3 = x1) OR (x3 = x2) THEN diferentes ß diferentes – 1 ENDIF diferentes = 3 PRINT “mayor = “, mayor 1. 2. 3. 4. Cuantos números diferentes hay (3,2 ó 1) Cuanto vale el mayor Cuanto vale el menor Cuanto vale el promedio • PRINT “mayor = “, mayor x2 5 3 6 5 x3 10 2 6 5 PRINT “menor =“, menor PRINT “promedio =“, promedio En algunos lenguajes, paraque el resultado de una divisi ón sea real, al menos uno de los operandos debe serlo. Por este motivo hemos puesto 3.0 en lugar de 3 mayor IF x3>mayor THEN menor ß x3 diferentes ß diferentes – 1 ENDIF promedio ß (x1+x2+x3) / 3.0 PRINT “diferentes =“, diferentes PRINT “mayor = “, mayor IF x2 > x1 THEN mayor ß x2 menor ß x1 ELSE IF x2<x1 THEN mayor ß x1 menor ß x2 ELSE -- son iguales diferentes ß diferentes – 1 mayor ß menor ß x1 --o x2 (son iguales) ENDIF PRINT “menor =“, menor PRINT “promedio =“, promedio No hemos explicado que PRINT pueda utilizarse así para combinar textos constantes (en este caso entrecomillados) con valores de variables. Dependiendo del lenguaje, esto podr á escribirse de forma más o menos parecida Lo que sigue… Cuando un algoritmo no es obvio, conviene hacer un seguimiento para comprobar su validez Una forma de hacerlo es dibujar una tabla con los valores de las variables e irla completando conforme avanza el programa x1 1 3 6 9 Ejercicio -- sigue…. ELSE IF (x3 = x1) OR (x3 = x2) THEN x1ßINPUT_NUM x2ßINPUT_NUM x3ßINPUT_NUM Comprobación • En este caso, puede estar entre los dos ]menor,mayor [ o ser igual a uno de los extremos. Miramos este último caso para ver si es necesario restar uno a diferentes ELSE IF x3< menor THEN diferentes = 3 PRINT “diferentes =“, diferentes IF x2 > x1 THEN mayor ß x2 menor ß x1 ELSE IF x2<x1 THEN mayor ß x1 menor ß x2 ELSE -- son iguales diferentes ß diferentes – 1 mayor ß menor ß x1 --o x2 (son iguales) ENDIF PRINT “promedio =“, promedio mayor ß x3 x1 as entero x2 as entero x3 as entero diferentes as entero mayor as entero menor as entero promedio as real promedio ß (x1+x2+x3) / 3.0 x1ßINPUT_NUM x2ßINPUT_NUM x3ßINPUT_NUM PRINT “menor =“, menor Escribir un programa que tome 3 números de teclado, e indique: var var var var var var var ELSE IF x3< menor THEN PRINT “diferentes =“, diferentes IF x2 > x1 THEN mayor ß x2 menor ß x1 ELSE IF x2<x1 THEN mayor ß x1 menor ß x2 ELSE -- son iguales diferentes ß diferentes – 1 mayor ß menor ß x1 --o x2 (son iguales) ENDIF PRINT “promedio =“, promedio Escribir un programa que tome 3 números de teclado, e indique: 1. 2. 3. 4. IF x3>mayor THEN ELSE IF x3< menor THEN diferentes = 3 PRINT “diferentes =“, diferentes IF x2 > x1 THEN mayor ß x2 menor ß x1 ELSE IF x2<x1 THEN mayor ß x1 menor ß x2 ELSE -- son iguales diferentes ß diferentes – 1 mayor ß menor ß x1 --o x2 (son iguales) ENDIF -- sigue…. mayor ß x3 x1 as entero x2 as entero x3 as entero diferentes as entero mayor as entero menor as entero promedio as real promedio ß (x1+x2+x3) / 3.0 x1ßINPUT_NUM x2ßINPUT_NUM x3ßINPUT_NUM Ejercicio menor dif. • El último ejercicio hubiese podido • escribirse de forma más flexible y óptima, utilizando conceptos que todavía no hemos visto, como son los bucles iterativos y las funciones… Lo veremos en el próximo tema 7 Ejercicios propuestos 1. 2. Escribir un programa que invierta el contenido de dos variables numéricas Evaluar el siguiente programa para cada uno de los 3 casos que se indican (indica cual será el valor de x, y, z en cada uno de los 3 casos ) IF (x<5 OR y>2) AND z>3 THEN xß1 IF (z-y ) > 0 THEN zß0 ENDIF y ßy + z ELSE xß2 z ß y +z ENDIF 3. Escribir un programa que permita introducir un valor numérico, y que indique si éste es divisible por 2, por 3, por 5 y por 7 (siempre que el número sea mayor que 2, 3, 5 ó 7 respectivamente) a) x=4 y=1 z=4 b) x=4 y=5 z=4 c) x=1 y=3 z=1 8