Introducción a la programación

advertisement
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
Descargar