2
ÍNDICE
Fundamentos de Informática E.U.P. Universidad de Sevilla (I.T. Diseño Industrial)
Concepto de Algoritmo Datos: Variables y Constantes Tipo de datos compuestos: Vectores y Matrices Representación de Algoritmos
Introducción a la Algorítmica y a la la Programación en MATLAB
Programación Estructurada
1
Diagrama de Flujo, Pseudo código Lenguajes de programación: MATLAB Estructura Secuencial Estructura Selectiva Simple (If) Doble (If-else) Múltiple Estructura Repetitiva While (Mient (Mientras) ras) Forr (P Fo (Par ara) a)
3
4
EJEMPLO DE ALGORITMO INTUITIVO: RECETA DE COCINA
CONCEPTO DE ALGORITMO (1)
Calabacines rehogados
Un algoritmo es un conjunto de acciones acciones que determinan secuencia de los pasos pasos aa seguir para determinan la secuencia resolver un problema específico. Otras definiciones:
Conjunto de reglas en cierto orden para resolver un problema. Una forma de describir la solución de un problema en pasos sucesivos.. sucesivos
Pelar los calabacines y cortar en rodajas Añadir sal a los calabacines Poner los calabacines en una sartén con aceite a medio fuego Mover los calabacines hasta que estén trasparentes Sacar de la sartén y escurrir el aceite Añadir queso parmesano rallado; sino se dispone de parmesano, utilizar queso curado.
1. 2. 3. 4. 5. 6.
Cualquier error no funcionará. Pensar ej. Elementos del algoritmo
Los pasos de un algoritmo deben estar definidos:
con precisi ó ón n, no deben existir ambigüedades que den origen a elegir una decisión equivocada. con un orden estricto . La alteración de tal orden conduciría a que el algoritmo no resolviera el problema correctamente
COCINA Ingredientes Ingredientes intermedios Acciones Orde Or denn de de eje ejecu cuci ción ón de la lass acc accio ione ness
PROGRAMACIÓN Entrada Variables, Constantes Sentencias Secu Se cuen enci cial alid idad ad
5
EJEMPLO DE ALGORITMO INTUITIVO: ¿Qué pasa cuando no se especifica bien un algoritmo?
6
EJEMPLO DE ALGORITMO INTUITIVO: ¿Qué pasa cuando no se especifica bien un un algoritmo?
Un ejemplo de algoritmo: ¿está bien especificado?
El algoritmo del ejemplo anterior está mal especificado:
1. Sal Sal de de cas casaa 2. Ve a la tien tienda da y pide pide dulce dulces. s. 3. Si la ttienda ienda no tiene, tiene, vuelve vuelve al punto 2 4. Vu Vuel elve ve a cas casa. a.
2. Ve a la tienda y pide dulces. 3. Si la tienda no tiene, vuelve al punto 2
OK Va a ser que no
7
EJEMPLO DE ALGORITMO INTUITIVO: ¿Qué pasa cuando no se especifica bien un algoritmo? El algoritmo bien especificado especificado sería el siguiente:
Ahora sí que Ahora le has cogido el truco
OK
8
Conceptos básicos: ¿Qué pasa cuando no no se especifica bien bien un algoritmo? Resultado de la ejecución del algoritmo bien especificado:
1. Sal Sal de de cas casaa 2. Ve a la la tienda más cercana que no hayas visitado y pide dulces. 3. Si la la tienda tienda no no tiene tiene y tú no est estás ás cansado, vuelve al punto 2 4. Vu Vuel elve ve a ca casa sa
2. Ve a la tienda y pide dulces. 3. Si la tienda no tiene, vuelve al punto 2
13
REPRESENTACIÓN DE LOS ALGORITMOS (1)
REPRESENTACIÓN DE LOS ALGORITMOS (1)
PSEUDOCÓDIGO:
Existen diversas herramientas para representar un algoritmo:
Es
Lenguajes de descripción de algoritmos:
Diagramas de Flujo
Pseudocódigo
Lenguajes de implementación de algoritmos:
14
Son los lenguajes de programación, entre los que se encuentra el de MATLAB (otros ejemplos: C, JAVA,PHP,Perl,Javascript,...)
una mezcla de lenguaje de programación y español (o cualquier otro idioma). Lo importante es entender el algoritmo y comprobar que sea correcto. La SINTAXIS usada no es tan importante por tratarse de un lenguaje informal. Ventajas: El lenguaje está cercano a nuestro idioma. Fácil comprensión del código. Desventaja: No es ejecutable directamente en un ordenador.
15
16
REPRESENTACIÓN DE LOS ALGORITMOS (1)
REPRESENTACIÓN DE LOS ALGORITMOS (2)
PSEUDOCÓDIGO (Ejemplo):
DIAGRAMA DE FLUJO:
1. ALGORITMO Problema1 2. ENTRADA
a, b, c
3. SALIDA
p, s
4.
LEE a
5.
LEE b
6.
LEE c
7.
p ← (a + b + c) / 2
8.
s ← sqrt ( p * (p-a) * (p-b) * (p-c) )
9.
ESCRIBE p , s
10. FIN
Es
un lenguaje gráfico que sirve para expresar la solución del algoritmo. La SINTAXIS usada sí es importante. Ventajas: Muy gráfico. Permite entender de un vistazo la solución algorítmica. Desventajas: Ocupa mucho espacio. No es ejecutable en un ordenador.
17
18
REPRESENTACIÓN DE LOS ALGORITMOS (2)
REPRESENTACIÓN DE LOS ALGORITMOS (3)
DIAGRAMA DE FLUJO (Ejemplo): ALUMNO INTERESADO EN HACER EVALUACIÓNALTERNATIVA
ALUMNO INTERESADO EN HACER SÓLO EVALUACIÓN CLÁSICA
EX. PARCIAL BLOQUE TEMÁTICO 1 >= 3.5
NO
SI EX. PARCIAL BLOQUE TEMÁTICO 2 >= 3.5
NO
SI EVALUACIÓN BLOQUE TEMÁTICO 3 >=3.5
NO
SI NOTA FINAL= (Nota Blq1 * 0.15) + (Nota Blq2 * 0.6)+ (Nota Blq3*0.25)
SI
LENGUAJE DE PROGRAMACIÓN: un lenguaje PROCESABLE POR EL Es ORDENADOR que sirve para expresar el código del algoritmo. La SINTAXIS usada sí es MUY importante. Ventaja: Es ejecutable en un ordenador. Desventajas: La sintaxis suele estar en inglés, pero es fácil acostumbrarse (son sólo un conjunto limitado de palabras reservadas). La sintaxis es estricta. Hay que aprenderla bien, y también aprender a detectar los errores.
, s e a s v a r a i l t r c e a a p n r u t e o s d l n e a e d n i t ó n i s ó i c s i a a c u p l r i o a u a v g l e e r s e n o e i e p d t a e o r u n u p t a a n o y g n i o s m r u e a l a a p l l E
Evaluación Clásica
Nota FINAL >=5
Un único examen en las convocatorias oficiales
NO
APROBADO, NOTABLE, SOBRESALIENTE
(60% Bloque 2)+ (40% Bloques 1 y 3)
SI
Nota FINAL >=5
APROBADO, NOTABLE, SOBRESALIENTE
NO SUSPENSO
19
20
Introducción a la programación imperativa (1)
REPRESENTACIÓN DE LOS ALGORITMOS (3)
LENGUAJE DE PROGRAMACIÓN (Ejemplo: MATLAB)
Hay dos grandes “paradigmas de la programación”:
function result= negativo() img1=imread('foto.jpg');
img2=img1 [numfil,numcol,canales]=size(img2); image(img1);
for i=1:numfil for j=1:numcol for k=1:canales
img2(i,j,k)= 255 - img1(i,j,k); img2(i,j,k)= 255 - img1(i,j,k); img2(i,j,k)= 255 - img1(i,j,k); end end end
Programación Imperativa (es la más básica y la que aprenderemos en nuestro curso) Programación Orientada a Objetos (es más avanzada, y hace uso de la programación imperativa)
En cualquiera de los dos paradigmas el ordenador sólo reconoce el lenguaje máquina (lenguaje ensamblador). Las programadores tienen dificultades para trabajar con el lenguaje máquina por estar muy cercano a la arquitectura del ordenador (CPU, Sistema Operativo,etc.). Solución: lenguajes de programación de alto nivel (Ej: lenguaje C, MATLAB, JAVA,…)
figure image(img2) imwrite (img2,imagen_resultante.jpg);
Pueden sustituir varias instrucciones del lenguaje máquina por una sola instrucción de un lenguaje más cercano al lenguaje matemático de fácil compresión para el programador Más fácil desarrollo y mantenimiento del software. No es necesario conocer el hardware del ordenador Portabilidad
25
26
DATOS: VARIABLES Y CONSTANTES
En MATLAB una variable se crea la primera vez que se utiliza.
Los nombres distinguen mayúsculas de minúsculas
DATOS: VARIABLES Y CONSTANTES
Ej: La variable Var1 no es la misma que las variables VAR1, var1,…
CONSEJOS PARA CREAR NOMBRES DE VARIABLES: Utilizar siempre nombres en minúsculas. No usar caracteres raros ni acentos ni la letra ñ.
A las variables hay que darles un valor inicial en una sentencia de asignación : nombre_de_variable= expresión_o_valor donde el nombre_de_variable siempre tiene que estar a la izquierda de la asignación Ej: x=3; y=5; y=x % la variable y tomará el valor 3 % si invertimos el orden x=y entonces la x tomará el valor 5
Ej: anio %en lugar de año
Si el nombre de la variable está compuesto por más de una palabra usar un guión bajo _ para unirlas.
En MATLAB una variable se crea la primera vez que se utiliza.
Ej (incorrecto): x=z+1 %dará un error porque la variable z no tiene valor inicial y por tanto no se le puede sumar 1. Es decir, una variable no debe aparecer por primera vez en lectura (como la variable z) antes que en escritura.
Ej: nombre_empleado %en lugar de nombre empleado que MATLAB interpretaría como dos variables nombre y empleado.
Ej (correcto):
x=2 x=x+1 % al final x valdrá 3. Es correcto porque en la variable x se escribió primero un valor inicial 2.
27
DATOS: VARIABLES Y CONSTANTES
En MATLAB la variable ans (del inglés answer) contiene el valor de la última operación calculada por el programa en ejecución.
28
SENTENCIA DE ASIGNACIÓN
En la sentencia de asignación : nombre_de_variable= expresion_o_valor
Esta variable es creada automáticamente por MATLAB y no podemos crear otra variable con el mismo nombre.
Ej: al ejecutar la operación 1+3*8 en MATLAB nos devolverá el valor resultante en la variable ans, a no ser que la metamos explícitamente en una variable creada por nosotros: >> 1+3*8 ans = 25
>> n=1+3*8 n= 25
nombre_de_variable: nombre de variable definida previamente en alguna sentencia de declaración. ‘=‘ operador de asignación. Indica que el valor calculado en expresión debe ser almacenado en nombre_de_variable. expresion_o_valor: indica cómo se calcula el valor a almacenar.
29
30
SENTENCIA DE ASIGNACIÓN
SENTENCIA DE ASIGNACIÓN
CUIDADO! No confundir la asignación con una comparación de igualdad.
Para la asignación se emplea un único =
Ej: x=z
%da a x el valor que tenga z
donde la expresion_o_valor puede ser:
Para la comparación se emplea doble ==
En la sentencia de asignación : nombre_de_variable= expresion_o_valor
Ej: x==z %compara si x e z tienen el mismo valor
Para la desigualdad se usa ~=
Ej: x~=z %compara si x e z tienen distinto valor
un valor una expresión aritmética , una expresión lógica (que expresa una condición, y está sujeta al Álgebra de Boole ) o una mezcla, es decir una expresión aritmético-lógica .
31
32
EXPRESIONES ARITMÉTICAS Expresión ARITMÉTICA
Resultado de la expresión
Constante
El resultado de la expresión es el valor de la constante
Nombre_de_Variable
El resultado de la expresión es el valor de la variable
Expresión1 + Expresión2
Suma Expresión1 y Expresión2 , que son, a su vez, expresiones más pequeñas
Expresión1 – Expresión2
Resta Expresión2 a Expresión1
Expresión1 * Expresión2
Multiplica Expresión1 y Expresión2
Expresión1 / Expresión2
Divide Expresión1 entre Expresión2
EXPRESIONES LÓGICAS (CONDICIONES)
Se modelan como variables y/o expresiones del Álgebra de Boole una expresión de condición es cierta ó falsa.
Expresión RELACIONAL Operando1 > Operando2
- Expresión funcion (lista_parámetros )
El resultado es la Expresión cambiada de signo El resultado de la expresión es el valor devuelto por la función
Resultado de la expresión Es verdadero si Operando1 ES MAYOR QUE Operando2
Operando1 >= Operando2 Es verdadero si Operando1 ES Operando1 < Operando2
MAYOR O IGUAL QUE Operando2
Es verdadero si Operando1 ES MENOR QUE Operando2
Operando1 <= Operando2 Es verdadero si Operando1 ES
MENOR O IGUAL QUE Operando2
Operando1 == Operando2 Es verdadero si Operando1 ES
IGUAL QUE Operando2
Operando1 ~= Operando2 Es verdadero si Operando1 ES DISTINTO QUE Operando2
37
Álgebra de Boole
Álgebra de Boole
Leyes fundamentales
Leyes fundamentales
Demostración de la Ley de Absorción
Utilidad del Álgebra de Boole en programación: Ejemplos prácticos:
A | (A & B) = A Esto quiere decir que nos da igual lo que valga B Si A==0 0 | (0 & B)
%el valor 0 en (0 & B) hace que este operando sea falso. Por tanto 0 | 0 vale 0, es decir no importa qué valor tiene B. Prima el valor de A.
Comprobar si una variable num está en el intervalo [0,10] (num >=0) & (num<=10)
Comprobar si una variable num está fuera del intervalo [0,10], es decir la condición contraria a la anterior.
Si A==1 1 | (1 & B) %el valor 1 | (lo que sea) hace que el resultado sea directamente verdadero. Es decir no importa qué valor tiene B. Prima el valor de A.
~((num >=0) & (num<=10)) y aplicando las Leyes de De Morgan queda
Ejercicio para el alumno: De forma análoga a la mostrada en la demostración anterior A | (A & B) = A, pruebe a demostrar que la siguiente ley de absorción también es cierta: A & (A | B) = A
(num<0) | (num >10)
39
40
EXPRESIONES ARITMÉTICAS Y LÓGICAS (ORDEN DE PRIORIDAD) Operador
Precedencia de los operadores:
-(operador
Ej: 3*2+1 no es igual que 3*(2+1)
FUNCIONES DE DE MATLAB Prioridad
unario
MATLAB ofrece una serie de funciones que se pueden utilizar/llamar directamente en nuestro código. Estas funciones se agrupan dentro de librerías. Las funciones reciben unos parámetros de entrada y devuelven uno o más resultados. Ej: rem(), floor(), ceil(), round(), factorial(),…
Ej: rem(15,3) %devuelve el resto de la división entera de 15/3
Alta
de signo)
~ *
/
+
-
<
IMPORTANTE: Los paréntesis alteran el orden de evaluación de la expresión
38
<= >= ==
> ~=
& |
Baja
41
FUNCIONES DE MATLAB
SALIDA DE DATOS POR PANTALLA
Para saber cómo usar una función concreta de las que tiene MATLAB poner en la ventana de comandos: help nombre_comando
42
Ej: help rem IMPORTANTE: En la ayuda de MATLAB las funciones aparecen con nombres en mayúsculas, pero en realidad se emplean en minúsculas.
Para saber el nombre de todas las variables activas en un momento dado de la ejecución de un programa, usar el comando who . Para eliminar las variables activas en un momento dado de la ejecución de un programa, usar el comando clear . Para distinguirlas de otras palabras reservadas las nombraremos como nombre_funcion() es decir seguidas de dos paréntesis ( ).
Un programa puede imprimir por pantalla el valor de una variable. En MATLAB se utiliza la función disp() usando como argumento un texto entre comillas simples ‘ ’ .
Ej: disp(‘Hola mundo’); Ej: disp (var1); % siendo var1 el nombre de una variable
Para saber más sobre esta función ejecutar en la ventana de comandos de MATLAB help disp
43
ENTRADA DE DATOS POR TECLADO
El usuario puede dar un valor a una variable a través del teclado mediante la función input(‘Texto a mostrar al usuario’). Esta función de MATLAB muestra el mensaje que le ponemos entre comillas simples ‘ ’ dentro de los paréntesis ( ), y además lee del teclado el valor que introduzca el usuario cuando éste presione la tecla INTRO.
Ej: var_edad = input(‘Introduce tu edad’)
Para saber más sobre esta función ejecutar en la ventana de comandos de MATLAB help in t
44
PROGRAMACIÓN ESTRUCTURADA Un
programa se escribe utilizando los siguientes tipos de estructuras de control: Secuencial : Una acción se ejecuta una tras otra, es
decir, una instrucción sigue a otra en secuencia.
Selectiva: Se evalúa la condición y en función del resultado se ejecuta un conjunto de instrucciones u otro. Hay tres tipos de selectivas (simple, doble o múltiple ).
Repetitiva:
Contienen un bucle (conjunto de instrucciones que se repiten un número finito de veces). Cada repetición del bucle se llama iteración . Todo bucle tiene que llevar asociada una condición , que determina si el bucle se
45
46
EJEMPLO DE ESTRUCTURA SECUENCIAL (Problema 1: enunciado)
ESTRUCTURA SECUENCIAL
Escriba un algoritmo en MATLAB tal que, dadas tres variables que contienen la longitud de los lados de un triángulo a , b y c , calcule su área S aplicando las siguientes ecuaciones:
Sentencia 1 Sentencia 2 ... Sentencia N
p = (a + b + c)/2
Se
caracteriza porque las acciones se ejecutan una tras otra, es decir una sentencia sigue a otra en secuencia .
S
=
p ( p
−
a )( p
−
b )( p
−
c)
El valor de las variables a , b y c debe leerse del teclado, y el resultado s debe mostrarse por pantalla. Usar la función sqrt() de MATLAB para calcular la raíz cuadrada.
47
48
EJEMPLO DE ESTRUCTURA SECUENCIAL
CÓMO CREAR NUESTRA PROPIA FUNCIÓN
(Problema 1: solución)
Guardamos el código que tenemos en el fichero de script problema1.m
(Sintaxis) - Una función hay que definirla y luego llamarla (para usarla). Para definir una función se sigue la siguiente sintaxis: function [varsal1, varsal2,…]= nombre_funcion (varent1, varent2,…)
a= input('Introduzca el valor del primer lado del triángulo: ');
b= input('Introduzca el valor del segundo lado del triángulo: ');
end
c= input('Introduzca el valor del tercer lado del triángulo: ');
-
La función comienza con la palabra reservada de MATLAB function
p=(a+b+c)/2;
-
A continuación, van los nombres de las variables de salida separadas por comas y entre corchetes [ ]. En una función que no devuelve nada no hay variables de salida. En una función que sólo hay una única variable de salida no es necesario poner los [ ].
-
Después de las variables de entrada va un = , a no ser que la función no devuelva ninguna variable de salida, en cuyo caso no es necesario poner el =
-
Después va el nombre de la función que siempre debe estar presente y debe coincidir con el nombre del fichero de MATLAB que contiene la función (con extensión .m), es decir el fichero se llamará nombre_funcion.m
s= sqrt (p * (p-a) * (p-b) * (p-c)); disp(‘La superficie del triángulo vale: ‘); disp(s);
- Siguiendo el nombre de la función van los nombres de las variables de entrada separadas por comas y entre ( ). Podría ocurrir que una función no recibiera datos
53
ESTRUCTURA SELECTIVA (SIMPLE) if condicion sentencias end
54
EJEMPLO DE ESTRUCTURA SELECTIVA SIMPLE (Problema 2: enunciado)
Construya un algoritmo en MATLAB tal que, dados los valores enteros P y Q, que deben leerse del teclado, determine si los mismos satisfacen la siguiente expresión:
P 3 + Q 4 − 2 P 2
Se evalúa la condicion , si es verdadera, se ejecutan las sentencias; en caso contrario, se salta dicho grupo de sentencias.
<
680
En caso afirmativo debe escribir por pantalla los valores de P y Q.
55
EJEMPLO DE ESTRUCTURA SELECTIVA SIMPLE (Problema 2: solución)
P=input('Introduce el valor de P '); Q=input('Introduce el valor de Q '); if (P^3 + Q^4 - 2 * P^2) < 680 disp('La expresión aritmética es menor que 680'); end
56
EJEMPLO DE ESTRUCTURA SELECTIVA SIMPLE (Problema 2B: enunciado para el alumno)
Construya un algoritmo en MATLAB tal que, dados los valores de una ecuación de segundo grado a, b, c (que deben leerse del teclado), determine si el discriminante es negativo. En tal caso debe imprimir el valor del discriminante, y también debe informar al usuario que la ecuación no tiene soluciones reales. Recordar que para la ecuación: ax 2 +bx+c=0 El discriminante se define como: b 2 -4ac
57
58
EJEMPLO DE ESTRUCTURA SELECTIVA DOBLE (Problema 3: enunciado)
ESTRUCTURA SELECTIVA (DOBLE) if condicion sentencias 1 else sentencias 2 end
Calcular si estás aprobado o suspenso, a partir de la media aritmética de la nota de tres exámenes parciales, que se leerán del teclado.
Esta
estructura permite elegir entre dos posibles bloques de acciones en función de una condición. Se evalúa la condicion Si es verdadera: se ejecutan las sentencias 1. Si es falsa: se ejecutan las sentencias 2. donde condición es: • Cualquier expresión que toma el valor verdadero (valor distinto de 0) o falso (valor 0). • La expresión relacional (operadores <,<=,>,>=,= =,~=) es la más utilizada. • Uso de expresión lógica (operadores &,|,~) como combinación de condiciones.
59
EJEMPLO DE ESTRUCTURA SELECTIVA DOBLE (Problema 3: solución)
60
ESTRUCTURA SELECTIVA MULTIPLE Existen dos posibles sintaxis: -En la mostrada en la izquierda la palabra else y el siguiente if van separados por un espacio en blanco. Y por cada if else hay un end al final.
ex1=input('Introduce la nota del primer examen: ');
-En la mostrada en la derecha los elseif van unidos y sólo hay un end al final.
ex2=input('Introduce la nota del segundo examen: ');
-En cualquier de las dos sintaxis, no aparece nunca una condición inmediatamente después de un else. Para que aparezca una nueva condición debe haber un else if o bien elseif .
ex3=input('Introduce la nota del tercer examen: '); media=(ex1+ex2+ex3)/3; disp('La nota media es: '); disp (media);
-El último caso siempre va tras un else sin ninguna condición detrás (en ambas sintaxis).
if condicion1 sentencias1 else if condición2 sentencias2 else sentencias3 end
if condicion1 sentencias1 elseif condicion2 sentencias2 elseif condicion3 sentencias3 else sentencias4
61
EJEMPLO DE ESTRUCTURA SELECTIVA MULTIPLE (Problema 4: enunciado)
cent= input('Introduce la temperatura en grados Farenheit: ');
Elabore un algoritmo en MATLAB que lea del teclado una temperatura en grados centígrados, calcule los grados Fahrenheit y escriba por pantalla el deporte que es apropiado practicar a esa temperatura, teniendo en cuenta la siguiente tabla: TEMPERATURA en grados Fahrenheit TEMP> 85 70 < TEMP <= 85 35 < TEMP <= 70 32 < TEMP <= 35 TEMP<= 32
fah=(9 / 5) * cent + 32; disp('El deporte recomendado para esta temperatura es:') if fah >85 disp ('Natación')
DEPORTE
elseif fah >70 disp ('Tenis')
Natación Tenis Golf Esquí Marcha
elseif fah >35 disp ('Golf')
Para convertir grados centígrados (variable c ) a fahrenheit (variable f ) se utiliza la siguiente ecuación:
f
=
c∗
9
5
+
62
EJEMPLO DE ESTRUCTURA SELECTIVA MULTIPLE (Problema 4: solución)
elseif fah >32 disp ('Esquí') else disp ('Marcha') end
32
63
EJEMPLO DE ESTRUCTURA SELECTIVA MULTIPLE (Problema 4B: enunciado)
64
EJEMPLO DE ESTRUCTURA SELECTIVA MULTIPLE (Problema 4B: solución) hora=input('Introduce la hora: '); min=input ('Introduce los minutos: ');
Elabore un programa en MATLAB que lea del teclado la hora del día y los minutos y escriba por pantalla el precio por minuto de una llamada telefónica, teniendo en cuenta la siguiente tabla:
min_total=hora*60 + min; if min_total<0 disp ('Error: Hora no válida') elseif min_total<(8*60) disp('El precio por minuto es de 6 céntimos de euro')
Franja Horaria: Minutos De 0:00 a 7:59 De 8:00 a 14:59 De 15:00 a 19:29 De 19:30 a 23:59
Precio Por Minuto (en centimos de euro) 6 10 15 30
elseif min_total<(15*60) disp('El precio por minuto es de 10 céntimos de euro') elseif min_total<(19*60+30) disp('El precio por minuto es de 15 céntimos de euro') elseif min_total<=(23*60+59) disp('El precio por minuto es de 30 céntimos de euro') else disp ('Error: Hora no válida')
65
EJEMPLO DE CONTADOR Y ACUMULADOR
ESTRUCTURAS REPETITIVAS: VARIABLES ESPECIALES
Contadores:
Incrementa c cada vez que imprime una letra 'a'
En la variable ac acumula los valores leídos del teclado
• c=0;
• ac=0
• disp(‘a’)
• v=input(‘Introduce valor:’)
• c=c+1
• ac = ac + v
• disp(‘a’)
• v=input(‘Introduce valor:’)
Acumuladores:
• c=c+1
• ac = ac + v
• disp(‘a’)
Son variables que se utilizan para contar. Normalmente su valor se incrementa o decrementa en 1.
Ejemplos: contador=0 contador = contador + 1 indice=10 indice = indice - 1
66
Se utilizan para almacenar el resultado de sumas sucesivas. Su valor se incrementa en cantidades variables.
Ejemplos: valor=input(‘Introduce un valor: ‘) total=0; %hay que inicializarlo al valor neutro de la suma, el 0 total = total + valor producto_multiple=1 %hay que inicializarlo al valor neutro del producto, el 1 producto_multiple = producto_multiple * valor
• c=c+1
67
ESTRUCTURA REPETITIVA while (MIENTRAS)
while condicion
68
PARTES DE UN BUCLE
sentencias end La condición del bucle se evalúa al principio, antes ejecutar las sentencias del bucle, Si es verdadera, se ejecutan las sentencias del bucle y después se vuelve a evaluar la condición. Es decir, mientras la condición sea cierta se ejecutan las sentencias. En el momento en el que la condición es falsa se sale del bucle.
Como la condición es evaluada, la primera vez, antes de entrar en el bucle, puede que el bucle se ejecute 0 veces. Cuando el bucle se acaba , la condición seguro que es falsa
Para finalizar un bucle, el valor de la condición debe ser modificado en las sentencias que componen el bucle.
Cuando el bucle empieza a ser complejo, interesa seguir un método para no equivocarse. Todo bucle debe tener:
I Inicialización C Condición de salida B cuerpo del Bucle A Actualización (si no existiera, la condición siempre se cumpliría y el bucle repetiría infinitas veces)
Sólo en casos excepcionales pueden faltar I, B El orden de ejecución será: I CBA CBA CBA...
Mientras el bucle itera: C es verdadero Cuando el bucle se acabe: C es falso
69
ESTRUCTURA REPETITIVA while : EJEMPLO I
c←1
Escriba un programa en MATLAB que lea del teclado un número y compruebe si es menor que 5. Si no lo es, debe volver a leer un número, repitiendo la operación hasta que el usuario escriba un valor correcto. Finalmente debe escribir por pantalla el valor leído.
c=1 C
comienzo bucle
while c<3 disp(‘a’)
c<3
70
EJERCICIOS ESTR. REPETITIVA while Problema 5: enunciado
NO: fin del bucle
c=c+1
B A
end
SI
disp(c)
ESCRIBIR 'a' ESCRIBIR c c←c+1 Ejercicios para el alumno: Identificar ICBA en los bucles de las soluciones de los próximos ejercicios.
71
EJERCICIOS ESTR. REPETITIVA while Problema 5: solución
num=input('Teclee un número menor que 5: '); while (num>=5) num=input('Teclee un número menor que 5: '); end disp('El primer número leído menor que 5 es: '); disp(num);
72
EJERCICIOS ESTR. REPETITIVA while Problema 5B: enunciado
Escriba un algoritmo en MATLAB que lea del teclado un número y compruebe que el número introducido sea negativo. Es decir, mientras que sea mayor o igual que 0, debe volver a leer un número, repitiendo la operación hasta que el usuario escriba un valor negativo. Finalmente debe escribir por pantalla el valor leído.
73
EJERCICIOS ESTR. REPETITIVA while Problema 5B: solución
74
EJERCICIOS ESTR. REPETITIVA while Problema 6: enunciado
Escriba un programa en MATLAB que lea del teclado un número y compruebe si se encuentra en el rango (5,15). Si no lo es, debe volver a leer un número, repitiendo la operación hasta que el usuario escriba un valor correcto. Finalmente debe escribir por pantalla el valor leído.
num=input('Teclee un número negativo: '); while num>=0 num=input('Teclee un número negativo: '); end disp('El primer número negativo leído es: '); disp(num);
75
EJERCICIOS ESTR. REPETITIVA while Problema 6: solución
num=input('Teclee un número entre 5 y 15 (no incluidos): '); while (num<=5) | (num>=15) num=input('Teclee un número entre 5 y 15 (no incluidos): '); end disp('El primer número dentro del intervalo (5,15) ha sido: '); disp(num);
76
EJERCICIOS ESTR. REPETITIVA while Problema 6B: enunciado
Escriba un algoritmo en MATLAB que lea del teclado un número y compruebe que el número introducido sea negativo e impar. Es decir, mientras que sea mayor o igual que 0 o sea par, debe volver a leer un número, repitiendo la operación hasta que el usuario escriba un valor negativo. Finalmente debe escribir por pantalla el valor leído.
77
EJERCICIOS ESTR. REPETITIVA while Problema 6B: solución
78
EJERCICIOS ESTR. REPETITIVA while Problema 7: enunciado
Escriba un programa en MATLAB que lea del teclado un número y compruebe si se encuentra en el rango (5,15). Si no lo es, debe volver a leer un número, repitiendo la operación hasta que el usuario escriba un valor correcto. Además debe contar el número de veces que se introduce un número por teclado. Finalmente debe escribir por pantalla el contador del número de veces.
num=input('Teclee un número negativo e impar: '); while (num>=0) | (rem(num,2)==0) num=input('Teclee un número negativo e impar: '); end disp('El primer número negativo e impar ha sido: '); disp(num);
79
EJERCICIOS ESTR. REPETITIVA while Problema 7: solución num=input('Teclee un número entre 5 y 15 (no incluidos): '); cont=1; while (num<=5) | (num>=15) num=input('Teclee un número entre 5 y 15 (no incluidos): '); cont=cont+1; end disp('El primer número dentro del intervalo (5,15) ha sido: '); disp(num); disp('y el número de veces que se ha leído un número ha sido: '); disp(cont);
80
EJERCICIOS ESTR. REPETITIVA while Problema 7B: enunciado
Escriba un programa en MATLAB que lea del teclado un número y compruebe si se encuentra en el rango (5,15). Si no lo es, debe volver a leer un número, repitiendo la operación hasta que el usuario escriba un valor correcto. Además debe contar el número de veces que se introduce un número por teclado. En cada iteración del bucle debe escribir por pantalla el mensaje ‘El número de equivocaciones cometidas hasta el momento es de: contador ’, donde contador mostrará el valor de la variable correspondiente.
81
EJERCICIOS ESTR. REPETITIVA while Problema 7B: solución
82
EJERCICIOS ESTR. REPETITIVA while Problema 7C: enunciado para el alumno
num=input('Teclee un número entre 5 y 15 (no incluidos): ');
Escriba un programa en MATLAB que lea del teclado un número y compruebe si se encuentra en el rango (5,15). Si no lo es, debe volver a leer un número, repitiendo la operación hasta que el usuario escriba un valor correcto. Además debe contar el número de veces que se introduce un número por teclado, mostrarlo por pantalla, y el bucle debe permitir realizar 10 lecturas del teclado como máximo. En cada iteración del bucle debe escribir por pantalla el mensaje ‘El número de equivocaciones cometidas hasta el momento es de: contador ’, donde contador mostrará el valor de la variable correspondiente.
cont=1; while (num<=5) | (num>=15) disp('El número de equivocaciones cometidas hasta el momento es de: '); disp(cont); num=input('Teclee un número entre 5 y 15 (no incluidos): '); cont=cont+1; end disp('El primer número dentro del intervalo (5,15) ha sido: '); disp(num); disp('y el número de veces que se ha leído un número ha sido: '); disp(cont);
83
EJERCICIOS ESTR. REPETITIVA while Problema 7D: enunciado para el alumno
Escriba un programa en MATLAB que lea del teclado un número, lo meta en la variable num , y que compruebe si está en el rango (5,15). Si no lo está, debe volver a leer un número, repitiendo la operación hasta que el usuario escriba un valor correcto. Además debe contar el número de veces que se introduce un número por teclado, mostrarlo por pantalla, y el bucle debe permitir realizar 10 lecturas del teclado como máximo. Y si tras el bucle se descubre que se realizaron ya las 10 lecturas (y por eso se salió del mismo), escriba por pantalla: 'Has cometido el máximo de errores permitido‘. Si se salió porque el número estaba en el intervalo, imprimir la frase ‘El primer valor del intervalo