Vous êtes sur la page 1sur 21

2

ÍNDICE

 Concepto de Algoritmo
Fundamentos de Informática
 Datos: Variables y Constantes
E.U.P. Universidad de Sevilla
 Tipo de datos compuestos: Vectores y Matrices
(I.T. Diseño Industrial)
 Representación de Algoritmos
 Diagrama de Flujo, Pseudo código
 Lenguajes de programación: MATLAB
Introducción a la Algorítmica  Programación Estructurada
Estructura Secuencial
y a la Programación en MATLAB 
 Estructura Selectiva
 Simple (If)
 Doble (If-else)
 Múltiple
 Estructura Repetitiva
 While (Mientras)
1
 For (Para)

3 4
EJEMPLO DE ALGORITMO INTUITIVO:
CONCEPTO DE ALGORITMO (1) RECETA DE COCINA

 Calabacines rehogados
 Un algoritmo es un conjunto de acciones que 1. Pelar los calabacines y cortar en rodajas
determinan la secuencia de los pasos a seguir para 2. Añadir sal a los calabacines
resolver un problema específico. 3. Poner los calabacines en una sartén con aceite a medio fuego
 Otras definiciones: 4. Mover los calabacines hasta que estén trasparentes
 Conjunto de reglas en cierto orden para resolver un problema. 5. Sacar de la sartén y escurrir el aceite
 Una forma de describir la solución de un problema en pasos 6. Añadir queso parmesano rallado; sino se dispone de parmesano,
sucesivos. utilizar queso curado.
 Cualquier error  no funcionará. Pensar ej.
 Los pasos de un algoritmo deben estar definidos:  Elementos del algoritmo
 con precisió
precisión, no deben existir ambigüedades que den origen COCINA PROGRAMACIÓN
a elegir una decisión equivocada.  Ingredientes Entrada
 con un orden estricto. La alteración de tal orden conduciría a  Ingredientes intermedios Variables, Constantes
que el algoritmo no resolviera el problema correctamente  Acciones Sentencias
 Orden de ejecución de las acciones Secuencialidad
 Resultado (Plato DE calabacines) Salida
5 6
EJEMPLO DE ALGORITMO INTUITIVO: EJEMPLO DE ALGORITMO INTUITIVO:
¿Qué pasa cuando no se especifica bien un algoritmo? ¿Qué pasa cuando no se especifica bien un algoritmo?

Un ejemplo de algoritmo: ¿está bien especificado? El algoritmo del ejemplo anterior está mal especificado:

1. Sal de casa 2. Ve a la tienda y pide dulces.


3. Si la tienda no tiene, vuelve al
2. Ve a la tienda y pide dulces. punto 2
3. Si la tienda no tiene, vuelve al
punto 2
4. Vuelve a casa.
OK
Va a ser
que no

7 8
EJEMPLO DE ALGORITMO INTUITIVO: Conceptos básicos:
¿Qué pasa cuando no se especifica bien un algoritmo? ¿Qué pasa cuando no se especifica bien un algoritmo?

El algoritmo bien especificado sería el siguiente: Resultado de la ejecución del algoritmo bien especificado:

1. Sal de casa
Ahora sí que
le has cogido 2. Ve a la tienda más cercana que no
el truco hayas visitado y pide dulces.
3. Si la tienda no tiene y tú no estás
OK
cansado, vuelve al punto 2
4. Vuelve a casa

2. Ve a la tienda y pide dulces.


3. Si la tienda no tiene, vuelve
al punto 2
9 10

EJEMPLOS DE ALGORITMOS CONOCIDOS EJEMPLO DE ALGORITMO DIFICIL

 Ejemplo 1: descubrir si un número es impar.  Descubrir si un número es primo: a partir de su definición


1. Leer el número y guardarlo en num.
1. Leer numero 2. Guardo en k el valor 2.
2. ¿rem(num,2) == 0? (es decir, ¿es num divisible por 2?) 3. bucle
a) SI: entonces ES PAR 4. ¿Es num divisible por k? (es decir, ¿rem(num,k) == 0? )
SI: no es primo. Fin del algoritmo.
b) NO: entonces ES IMPAR 5.
6. NO: Aún num puede ser un número primo. Continuar con paso siguiente.
 Ejemplo 2: Convertir de decimal a binario. Hay 7. Incrementar k en 1.

que dividir por 2 mientras el cociente sea >= 2 8. ¿Es k mayor o igual que num?
9. SI: es primo. Fin del algoritmo.
1. Leer numero decimal y guardarlo en D 10. NO: Continuar con el paso 3 (repetir del 3 al 10).

2. bucle (repetición) 11. finbucle


UN ALGORITMO CONCRETO NO TIENE POR QUÉ SER ÓPTIMO
3. Hallo el resto de D/2, es decir, R=rem(D,2). Imprimir R (digito binario) 
 Ejemplo: Mejora en el algoritmo anterior: sólo dividir por 2 e impares
4. Hallo el cociente: C=D/2 (me quedo con la parte entera)  ¿Más mejoras? Puede que hubiera otras posibles mejoras.
5. ¿Es C mayor o igual que 2?  Elementos del algoritmo
6. Sí: Guardar C en D (D=C). Continuar con el paso 2 (repetir del 2 al 7).  Datos de entrada, variables y constantes (Ej: num, k)
7. No: Imprimir C (digito binario). Fin del algoritmo.  Sentencias: manipulan los datos (Ej: rem(num,k))
8. finbucle  Orden de ejecución de las Sentencias (si el orden está mal  error lógico)
 Salida (por pantalla o datos de salida)

11 12

CONCEPTO DE ALGORITMO (2) CONCEPTO DE ALGORITMO (3)


 Componentes informáticas de un algoritmo:  La sintaxis consta de un conjunto de palabras
 proceso (sentencias) y signos reservados que tienen una
 datos de entrada funcionalidad específica. Son comandos,
nombres de variables y caracteres especiales
 datos de salida (resultados).
del lenguaje de programación que usemos.
 Lenguaje para expresarlo (SINTAXIS). Ej: MATLAB
 Ej: la palabra ans se corresponde con una variable creada
automáticamente por MATLAB.
ALGORITMO
 Ej: la palabra who se corresponde con un comando de MATLAB
DATOS DE ENTRADA PROCESAMIENTO RESULTADOS que sirve para conocer los nombres de las variables creadas hasta
ese momento.
 Ej: la palabra disp() se corresponde con el nombre de una función
LENGUAJE
TECLADO (SINTAXIS) PANTALLA de MATLAB que sirve para mostrar datos por pantalla.
ARCHIVO ARCHIVO
Ej: el signo % se utiliza para añadir comentarios que MATLAB no
interpretará como código a ejecutar.
13 14

REPRESENTACIÓN DE LOS ALGORITMOS (1) REPRESENTACIÓN DE LOS ALGORITMOS (1)

Existen diversas herramientas para representar un algoritmo: PSEUDOCÓDIGO:

 Lenguajes de descripción de algoritmos: Es una mezcla de lenguaje de programación y


español (o cualquier otro idioma). Lo importante es
 Diagramas de Flujo entender el algoritmo y comprobar que sea
 Pseudocódigo
correcto.
La SINTAXIS usada no es tan importante por
 Lenguajes de implementación de algoritmos: tratarse de un lenguaje informal.
Ventajas: El lenguaje está cercano a nuestro
 Son los lenguajes de programación, entre los que se idioma. Fácil comprensión del código.
encuentra el de MATLAB Desventaja: No es ejecutable directamente en
(otros ejemplos: C, JAVA,PHP,Perl,Javascript,...)
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
Es un lenguaje gráfico que sirve para expresar la
3. SALIDA p, s
solución del algoritmo.
La SINTAXIS usada sí es importante.
4. LEE a Ventajas: Muy gráfico. Permite entender de un
5. LEE b vistazo la solución algorítmica.
6. LEE c Desventajas:
7. p ← (a + b + c) / 2 Ocupa mucho espacio.
8. s ← sqrt ( p * (p-a) * (p-b) * (p-c) ) No es ejecutable en un ordenador.
9. ESCRIBE p , s
10. FIN
17 18

REPRESENTACIÓN DE LOS ALGORITMOS (2) REPRESENTACIÓN DE LOS ALGORITMOS (3)

DIAGRAMA DE FLUJO (Ejemplo): LENGUAJE DE PROGRAMACIÓN:


ALUMNO INTERESADO EN HACER ALUMNO INTERESADO EN HACER
Es un lenguaje PROCESABLE POR EL
EVALUACIÓN ALTERNATIVA SÓLO EVALUACIÓN CLÁSICA
ORDENADOR que sirve para expresar el código del
EX. PARCIAL BLOQUE TEMÁTICO 1 >=3.5
NO
algoritmo.

El alumno puede seguir asistiendo a clases,

la asignatura por evaluación alternativa


pero ya no tiene la opción de superar
La SINTAXIS usada sí es MUY importante.
SI

NO
EX. PARCIAL BLOQUE TEMÁTICO 2 >=3.5

SI Ventaja: Es ejecutable en un ordenador.


NO
EVALUACIÓN BLOQUE TEMÁTICO 3 >=3.5

SI
Desventajas:
NOTA FINAL= (Nota Blq 1 * 0.15) + (Nota Blq 2 * 0.6)+ (Nota Blq 3*0.25)
La sintaxis suele estar en inglés, pero es fácil
SI
Nota FINAL >=5
NO
Evaluación Clásica
Un único examen en las
convocatorias oficiales
acostumbrarse (son sólo un conjunto limitado de
palabras reservadas).
APROBADO,
NOTABLE, (60% Bloque 2)+ (40% Bloques 1 y 3)
SOBRESALIENTE

SI
Nota FINAL >=5
NO La sintaxis es estricta. Hay que aprenderla
APROBADO,
NOTABLE,
SOBRESALIENTE
SUSPENSO
bien, y también aprender a detectar los errores.

19 20

REPRESENTACIÓN DE LOS ALGORITMOS (3) Introducción a la programación imperativa (1)


Hay dos grandes “paradigmas de la programación”:
LENGUAJE DE PROGRAMACIÓN (Ejemplo: MATLAB) 
 Programación Imperativa (es la más básica y la que aprenderemos en
function result = negativo() nuestro curso)
img1=imread('foto.jpg');
 Programación Orientada a Objetos (es más avanzada, y hace uso de la
img2=img1 programación imperativa)
[numfil,numcol,canales]=size(img2);
image(img1);
 En cualquiera de los dos paradigmas el ordenador sólo
for i=1:numfil reconoce el lenguaje máquina (lenguaje ensamblador).
for j=1:numcol
 Las programadores tienen dificultades para trabajar con el
for k=1:canales
img2(i,j,k)= 255 - img1(i,j,k);
lenguaje máquina por estar muy cercano a la arquitectura del
img2(i,j,k)= 255 - img1(i,j,k);
ordenador (CPU, Sistema Operativo,etc.).
img2(i,j,k)= 255 - img1(i,j,k);  Solución: lenguajes de programación de alto nivel
end
(Ej: lenguaje C, MATLAB, JAVA,…)
end
 Pueden sustituir varias instrucciones del lenguaje máquina por una
end
sola instrucción de un lenguaje más cercano al lenguaje matemático
figure
de fácil compresión para el programador  Más fácil desarrollo y
image(img2)
mantenimiento del software.
imwrite (img2,imagen_resultante.jpg);
 No es necesario conocer el hardware del ordenador  Portabilidad
end
del software.
21 22

Introducción a la programación imperativa (2) Introducción a la programación imperativa (3)


 Compilar: mediante un programa llamado compilador se genera un
fichero ejecutable a partir de un fichero con código fuente escrito en
Código ensamblador un lenguaje de alto nivel. Ej: lenguaje C.
Código lenguaje MATLAB MOV R3, [R4] ; R3  variable2  Interpretar: mediante un programa llamado intérprete se traduce
variable3 = variable2 + 5; ADD R3, 5 ; R3  variable2 + 5 sentencia a sentencia (instrucción a instrucción) y a continuación se
ejecuta el código de la sentencia traducida. Ej: MATLAB es un
MOV [R5], R3 ; variable3  R3 lenguaje interpretado (aunque también permite compilar).
 Ventajas/desventajas:
 Es necesario un proceso de traducción de  La compilación permite la ejecución más rápida de programas, da
lenguaje en alto nivel al lenguaje máquina la posibilidad de optimizar código, y hace la aplicación
independiente del compilador.
(lenguaje ensamblador)  Traducción Pero tiene la desventaja de que el fichero ejecutable final ocupa
 Dos posibilidades de traducción de un programa más espacio (al ser código máquina), y además es más difícil
depurar errores.
escrito en un lenguaje de alto nivel:  La interpretación ahorra compilación, ocupa menos tamaño,
 Compilar el código facilita la portabilidad entre sistemas operativos, y la depuración de
errores sintácticos es más fácil porque sólo te da el primero que
 Interpretar el código encuentra (hasta que es depurado y entonces te da el siguiente
error, si lo hay).
Pero tiene la desventaja de depender del intérprete para ejecutarse.

23 24

DATOS: VARIABLES Y CONSTANTES DATOS: VARIABLES Y CONSTANTES

 Los valores que pueden tomar las variables y las constantes pertenecen
a un TIPO (tipo de dato).
 DATO es cualquier objeto manipulable por el Así, por ejemplo existen tipos:
ordenador y que contiene información  Numéricos: enteros, reales, etc.
 Caracteres: contienen texto
Ejemplo: Una variable que contenga el nombre de una persona.
Se distinguen dos clases de datos:

  Booleanos: su valor sólo puede ser verdadero o falso
 VARIABLES: Objeto cuyo valor cambia durante la  Ejemplo: Las respuestas a preguntas ¿rem(num,k)==0?
Normalmente en los lenguajes de programación el valor numérico 0 se
ejecución de un programa. 
corresponde con el valor falso, y el resto de los valores numéricos se
 Ejemplo: Las variables num y k del algoritmo de los números corresponden con el valor verdadero.
primos
 En MATLAB todas las variables serán reales de doble precisión
 CONSTANTES: Objeto cuyo valor NO cambia durante (double) mientras no se fuerce a que sean de otro tipo.
la ejecución de un programa. Ej: num, k en el algoritmo de los número primos serían variables reales.
 Ejemplo: el número pi.
 Una variable que creemos y le demos sólo un valor inicial sin  Al ser todas las variables por defecto de tipo real de doble precisión, en
modificarlo funciona como una constante. MATLAB NO ES NECESARIO DECLARAR LAS VARIABLES ANTES
Ej: x=0 DE USARLAS (mientras que la declaración de variables es obligaroria
%si x no varia su valor dentro del algoritmo funciona como en la mayoría de los lenguajes de programación).
constante
25 26

DATOS: VARIABLES Y CONSTANTES DATOS: VARIABLES Y CONSTANTES


 En MATLAB una variable se crea la primera vez que  En MATLAB una variable se crea la primera vez que se utiliza.
se utiliza.  A las variables hay que darles un valor inicial en una
 Los nombres distinguen mayúsculas de minúsculas sentencia de asignación:
 Ej: La variable Var1 no es la misma que las variables VAR1, nombre_de_variable= expresión_o_valor
var1,… donde el nombre_de_variable siempre tiene que estar a la
 CONSEJOS PARA CREAR NOMBRES DE VARIABLES: izquierda de la asignación
 Utilizar siempre nombres en minúsculas.  Ej:
 No usar caracteres raros ni acentos ni la letra ñ. x=3; y=5; y=x
% la variable y tomará el valor 3
 Ej: anio %en lugar de año % si invertimos el orden x=y entonces la x tomará el valor 5
 Si el nombre de la variable está compuesto por más de una  Ej (incorrecto):
palabra usar un guión bajo _ para unirlas. x=z+1
%dará un error porque la variable z no tiene valor inicial y por tanto no se le puede
 Ej: nombre_empleado sumar 1. Es decir, una variable no debe aparecer por primera vez en lectura (como
%en lugar de nombre empleado que MATLAB interpretaría como la variable z) antes que en escritura.
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 28

DATOS: VARIABLES Y CONSTANTES SENTENCIA DE ASIGNACIÓN


 En MATLAB la variable ans (del inglés answer) contiene el
valor de la última operación calculada por el programa en  En la sentencia de asignación:
ejecució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.
 nombre_de_variable: nombre de variable
 Ej: al ejecutar la operación 1+3*8 en MATLAB nos devolverá definida previamente en alguna sentencia de
el valor resultante en la variable ans, a no ser que la metamos
explícitamente en una variable creada por nosotros: declaración.
 ‘=‘ operador de asignación. Indica que el
>> 1+3*8 >> n=1+3*8
valor calculado en expresión debe ser
ans = n=
25 almacenado en nombre_de_variable.
25
 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  En la sentencia de asignación:


una comparación de igualdad. nombre_de_variable= expresion_o_valor
 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 ==
 Ej: x==z %compara si x e z tienen el mismo 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)
 Para la desigualdad se usa ~=
 Ej: x~=z %compara si x e z tienen distinto valor  o una mezcla, es decir una expresión
aritmético-lógica.

31 32

EXPRESIONES ARITMÉTICAS EXPRESIONES LÓGICAS (CONDICIONES)

Expresión
ARITMÉTICA
Resultado de la expresión  Se modelan como variables y/o expresiones del Álgebra de Boole
 una expresión de condición es cierta ó falsa.
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

Suma Expresión1 y Expresión2, que son, a su vez, Expresión


Expresión1 + Expresión2 Resultado de la expresión
expresiones más pequeñas RELACIONAL
Operando1 > Operando2 Es verdadero si Operando1 ES MAYOR QUE Operando2
Expresión1 – Expresión2 Resta Expresión2 a Expresión1
Operando1 >= Operando2 Es verdadero si Operando1 ES MAYOR O IGUAL QUE Operando2

Expresión1 * Expresión2 Multiplica Expresión1 y Expresión2 Operando1 < Operando2 Es verdadero si Operando1 ES MENOR QUE Operando2
Operando1 <= Operando2 Es verdadero si Operando1 ES MENOR O IGUAL QUE Operando2
Expresión1 / Expresión2 Divide Expresión1 entre Expresión2
Operando1 == Operando2 Es verdadero si Operando1 ES IGUAL QUE Operando2

- Expresión El resultado es la Expresión cambiada de signo Operando1 ~= Operando2 Es verdadero si Operando1 ES DISTINTO QUE Operando2

funcion(lista_parámetros) El resultado de la expresión es el valor devuelto por la


función
33 34

EXPRESIONES LÓGICAS (CONDICIONES) EXPRESIONES LÓGICAS (CONDICIONES)


 Se suelen emplear en las condiciones que controlan las estructuras
Expresión LÓGICA
Resultado de la expresión selectivas e iterativas.
(sintaxis en MATLAB)
 Ej: El siguiente código pide al usuario un número y averigua si es par
Operando1 & Operando2 y positivo.
Es verdadero si Operando1 es verdadero Y Operando2 es verdadero
and (Operando1, Operando 2) num=input(‘Introduzca un número: ’);
Operando1 | Operando2
if rem(num,2)==0 & num>0
Es verdadero si Operando1 es verdadero O Operando2 es verdadero disp(‘El número es par y positivo’);
or (Operando1, Operando 2) end;
~ Operando1  Ej: El siguiente código pide al usuario un número, evalúa si es entero,
Es verdadero si Operando1 NO es verdadero
y le da la oportunidad de meterlo de nuevo
not (Operando1)
num=input(‘Introduzca un número entero: ’);
NOTA: Para poner el operador de negación ~ se puede hacer de dos formas: while floor(num)~=num
disp(‘Error. El número es real, tiene decimales’);
1. Pulsando la tecla Shift (la que sirve para poner las mayúsculas)
num=input(‘Tiene que introducir un número entero: ‘);
y tecleando el número 126 rápidamente sin soltar la techa Shift
end;
2. Pulsando las teclas Alt-Gr el número 4 y la barra de espacio

¡Pruébalo, es fácil!

35 36

Representación de la lógica Álgebra de Boole


Álgebra de Boole Leyes fundamentales

 Ley conmutativa, asociativa, distributiva


 Inventada para lógica filosófica (s.XIX). Así trabajan los computadores
actuales pues con transistores se implementa muy fácilmente. OR (suma) AND (producto)
 Álgebra con sólo dos elementos: 0 (FALSO) y 1 (VERDADERO) Ley de idempotencia A|A=A A&A=A
 Y con un conjunto de operaciones definidas sobre tales elementos :
 Operaciones UNARIAS: Ley de absorción A | (A & B) = A A & (A | B) = A
 Negación lógica (NOT): ~A not(A) A ~A
Operaciones BINARIAS: Ley de De Morgan ~(A | B) = (~ A) & (~ B) ~(A & B) = (~ A) | (~ B)
0 1
 Y lógico (AND): A & B and(A,B)
O lógico (OR): A | B or(A,B) 1 0

 El Álgebra de Boole y estas leyes son útiles a la hora de operar y
O exclusivo (XOR): xor(A,B)

simplificar expresiones de condición en nuestros programas y de
NOTA: La operación OR también

pensar en las condiciones que deben cumplirse en los programas
se llama “suma lógica”, pero A B A&B A|B xor(A,B)
no tiene nada que ver con la suma  Hacer los siguientes ejercicios del enunciado de la práctica 1
0 0 0 0 0
aritmética de números binarios: Ejercicio 19 Ejercicio 20 Ejercicio 21
1 + 1 = 10(2 (suma aritmética) 0 1 0 1 1
1|1=1 (álgebra de Boole) Y usar el test de autoevaluación correspondiente en Enseñanza
1 0 0 1 1 Virtual para comprobar los resultados.
1 1 1 1 0
37 38

Á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:


 A | (A & B) = A Ejemplos prácticos:
 Esto quiere decir que nos da igual lo que valga B

 Si A==0
 Comprobar si una variable num está en el intervalo [0,10]
 0 | (0 & B) (num >=0) & (num<=10)
%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á fuera del intervalo
 Si A==1
[0,10], es decir la condición contraria a la anterior.
 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))

 Ejercicio para el alumno: De forma análoga a la mostrada en la y aplicando las Leyes de De Morgan queda
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) FUNCIONES DE DE MATLAB

Operador Prioridad  MATLAB ofrece una serie de funciones que


-(operador unario Alta se pueden utilizar/llamar directamente en
Precedencia de
los operadores:
de signo) nuestro código.
~
* /
 Estas funciones se agrupan dentro de
+ -
librerías.
< <= >  Las funciones reciben unos parámetros de
IMPORTANTE: >= entrada y devuelven uno o más resultados.
Los paréntesis alteran el orden == ~=
de evaluación de la expresión  Ej: rem(), floor(), ceil(), round(), factorial(),…
&
Ej: 3*2+1 no es igual que 3*(2+1)  Ej: rem(15,3) %devuelve el resto de la división entera de 15/3
| Baja
41 42

FUNCIONES DE MATLAB SALIDA DE DATOS POR PANTALLA

 Para saber cómo usar una función concreta de las que  Un programa puede imprimir por pantalla el
tiene MATLAB poner en la ventana de comandos:
help nombre_comando valor de una variable.
Ej: help rem


 IMPORTANTE: En la ayuda de MATLAB las funciones aparecen


 En MATLAB se utiliza la función disp()
con nombres en mayúsculas, pero en realidad se emplean en
minúsculas.
usando como argumento un texto entre
 Para saber el nombre de todas las variables activas en un comillas simples ‘ ’ .
momento dado de la ejecución de un programa, usar el  Ej: disp(‘Hola mundo’);
comando who.  Ej: disp (var1); % siendo var1 el nombre de una variable
 Para eliminar las variables activas en un momento dado de
la ejecución de un programa, usar el comando clear.  Para saber más sobre esta función ejecutar
 Para distinguirlas de otras palabras reservadas las en la ventana de comandos de MATLAB
nombraremos como nombre_funcion() es decir seguidas
de dos paréntesis ( ). help disp

43 44

ENTRADA DE DATOS POR TECLADO PROGRAMACIÓN ESTRUCTURADA

 El usuario puede dar un valor a una variable a Un programa se escribe utilizando los siguientes tipos de
través del teclado mediante la función estructuras de control:
input(‘Texto a mostrar al usuario’). Secuencial: Una acción se ejecuta una tras otra, es
 Esta función de MATLAB muestra el mensaje decir, una instrucción sigue a otra en secuencia.
que le ponemos entre comillas simples ‘ ’  Selectiva: Se evalúa la condición y en función del
dentro de los paréntesis ( ), y además lee del resultado se ejecuta un conjunto de instrucciones u otro. Hay
teclado el valor que introduzca el usuario tres tipos de selectivas (simple, doble o múltiple).
cuando éste presione la tecla INTRO.
 Repetitiva: Contienen un bucle (conjunto de
 Ej: var_edad = input(‘Introduce tu edad’)
instrucciones que se repiten un número finito de veces). Cada
 Para saber más sobre esta función ejecutar en repetición del bucle se llama iteración. Todo bucle tiene que
la ventana de comandos de MATLAB llevar asociada una condición, que determina si el bucle se
help input repite o no.
45 46
EJEMPLO DE ESTRUCTURA SECUENCIAL
ESTRUCTURA SECUENCIAL
(Problema 1: enunciado)

Escriba un algoritmo en MATLAB tal que, dadas tres variables que


Sentencia 1
contienen la longitud de los lados de un triángulo a, b y c, calcule su área
Sentencia 2
S aplicando las siguientes ecuaciones:
...
Sentencia N p = (a + b + c)/2

Se caracteriza porque las acciones se


S = p ( p − a )( p − b )( p − c )
ejecutan una tras otra, es decir una sentencia
sigue a otra en secuencia.
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) (Sintaxis)

- Una función hay que definirla y luego llamarla (para usarla).


Guardamos el código que tenemos en el fichero de script problema1.m
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: '); <código en MATLAB que resuelve esta función>
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
- A continuación, van los nombres de las variables de salida separadas por comas y
p=(a+b+c)/2; entre corchetes [ ]. En una función que no devuelve nada no hay variables de
s= sqrt (p * (p-a) * (p-b) * (p-c)); salida. En una función que sólo hay una única variable de salida no es necesario
poner los [ ].
disp(‘La superficie del triángulo vale: ‘); - Después de las variables de entrada va un = , a no ser que la función no devuelva
disp(s); 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
- 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
de entrada de esta manera, pero suele ser habitual que sí las lleve.
49 50
EJEMPLO DE FUNCIÓN
(Problema 1F: Cómo convertir en función un script, en este caso la EJEMPLO DE FUNCIÓN
solución del problema1) (Problema 1F: ¿Qué se obtiene al llamar a la función?)

1. Guardamos el código que tenemos en el fichero fproblema1.m (fichero con el mismo nombre que la
Por tanto, la definición de la función completa quedaría de la siguiente forma:
función que tiene codificada dentro).
2. Averiguamos cuáles son las variables de entrada y de salida function s = fproblema1(a,b,c)
En este ejemplo las variables de entrada son a, b, c y la variable de salida es s

3. Añadimos la cabecera de la función


p=(a+b+c)/2;
function s = fproblema1(a,b,c)
4. Quitamos el código que sobra, que suele tener que
s= sqrt (p * (p-a) * (p-b) * (p-c));
a= input('Introduzca el valor del primer
verlado
con lasdel triángulo:
asignaciones '); inciales a las
de valores
variables de entrada (en este caso: a,b,c, ya que estas disp(‘La superficie del triángulo vale: ‘);
b= input('Introduzca el valor del segundo lado
variables del triángulo:
se crean '); cuando se llama
en memoria justo
a la función y reciben los valores de la llamada. Por disp(s);
c= input('Introduzca el valor del tercertanto
lado delnecesario
no es triángulo:
pedirle');
su valor al usuario
mediante el uso de la función input() end
p=(a+b+c)/2;
s= sqrt (p * (p-a) * (p-b) * (p-c));
>> fproblema1(20,20,20) Al llamar a la función desde línea de comandos, se obtiene
el resultado en la ventana de MATLAB.
disp(‘La superficie del triángulo vale: ‘);
La superficie del triángulo vale: Ej: El resultado para un triangulo con lados de longitud 20,20
disp(s); y 20 sería el devuelto por la llamada a la función, en este
173.205 caso daría 173.205
5. Cerramos la función con un end
end

51 52
EJEMPLO DE FUNCIÓN EJEMPLO DE ESTRUCTURA SECUENCIAL
(Problema 1F: ¿Qué ocurre en la memoria en tiempo de ejecución?) (Problema 1B: enunciado para el alumno)
Al ejecutar en la línea de comando la sentencia
>> res = fproblema1(20,20,20) %ver paso1 %ver paso5
en la memoria del ordenador se reserva espacio para la variable global res

function s = fproblema1(a,b,c) %ver paso2


Escriba un algoritmo en MATLAB tal que, dado el radio de una esfera r
(que debe leerse del teclado), calcule e imprima por pantalla la longitud
p=(a+b+c)/2; %ver paso3
de su ecuador l, su superficie S y su volumen V, aplicando las siguientes
s= sqrt (p * (p-a) * (p-b) * (p-c)); %ver paso4
ecuaciones:
disp(‘La superficie del triángulo vale: ‘);
disp(s);
l=2πr
end
S = 4 π r2 = 2 r l
Al ejecutarse la función desde la línea de comando lo primero que se reserva es espacio en memoria son las
variables locales s, a, b, c y luego la variable auxiliar p. Se hacen los cálculos de p y s, y luego se imprime ‘La V = 4/3 π r3 = r S/3
superficie del triángulo vale’ 173.205

res res res res res 173.205 Para calcular las potencias puede usar en MATLAB el operador ^ Ej: r^3
s s s 173.205 s 173.205
a 20 a 20 a 20 a 20
b 20 b 20 b 20 b 20
c 20 c 20 c 20 c 20
p p 30 p 30 p 30
%paso1 %paso2 %paso3 %paso4 %paso5

Al terminar de ejecutarse la función, las variables locales desaparecen de memoria, y el valor de la


variable s, (en este caso 173.205) es devuelta por la función y queda guardada en la variable global res.
53 54

ESTRUCTURA SELECTIVA (SIMPLE) EJEMPLO DE ESTRUCTURA SELECTIVA SIMPLE


(Problema 2: enunciado)

if condicion
sentencias Construya un algoritmo en MATLAB tal que, dados los valores enteros P
end y Q, que deben leerse del teclado, determine si los mismos satisfacen la
siguiente expresión:

P 3 + Q 4 − 2 P 2 < 680
 Se evalúa la condicion,
 si es verdadera, se ejecutan las sentencias;
 en caso contrario, se salta dicho grupo de En caso afirmativo debe escribir por pantalla los valores de P y Q.
sentencias.

55 56

EJEMPLO DE ESTRUCTURA SELECTIVA SIMPLE EJEMPLO DE ESTRUCTURA SELECTIVA SIMPLE


(Problema 2: solución) (Problema 2B: enunciado para el alumno)

Construya un algoritmo en MATLAB tal que, dados los valores de una


P=input('Introduce el valor de P '); ecuación de segundo grado a, b, c (que deben leerse del teclado),
Q=input('Introduce el valor de Q '); determine si el discriminante es negativo. En tal caso debe imprimir el
valor del discriminante, y también debe informar al usuario que la
if (P^3 + Q^4 - 2 * P^2) < 680 ecuación no tiene soluciones reales.
disp('La expresión aritmética es menor que 680');
Recordar que para la ecuación:
end
ax2+bx+c=0

El discriminante se define como:

b2-4ac
57 58

ESTRUCTURA SELECTIVA (DOBLE) EJEMPLO DE ESTRUCTURA SELECTIVA DOBLE


(Problema 3: enunciado)
if condicion
sentencias 1
else
sentencias 2 Calcular si estás aprobado o suspenso, a partir de la media
end 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 60

EJEMPLO DE ESTRUCTURA SELECTIVA DOBLE ESTRUCTURA SELECTIVA MULTIPLE


(Problema 3: solución)
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
ex3=input('Introduce la nota del tercer examen: ');
debe haber un else if o bien elseif.
media=(ex1+ex2+ex3)/3; -El último caso siempre va tras un else sin ninguna condición detrás (en ambas
disp('La nota media es: '); sintaxis).
if condicion1 if condicion1
disp (media); sentencias1 sentencias1
else elseif condicion2
if condición2 sentencias2
sentencias2 elseif condicion3
else sentencias3
sentencias3 else
end sentencias4
end end
61 62

EJEMPLO DE ESTRUCTURA SELECTIVA MULTIPLE EJEMPLO DE ESTRUCTURA SELECTIVA MULTIPLE


(Problema 4: enunciado) (Problema 4: solución)

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 fah=(9 / 5) * cent + 32;
el deporte que es apropiado practicar a esa temperatura, teniendo en disp('El deporte recomendado para esta temperatura es:')
cuenta la siguiente tabla:
if fah >85
disp ('Natación')
TEMPERATURA en grados DEPORTE
Fahrenheit
elseif fah >70
TEMP> 85 Natación
70 < TEMP <= 85 Tenis
disp ('Tenis')
35 < TEMP <= 70 Golf
32 < TEMP <= 35 Esquí elseif fah >35
TEMP<= 32 Marcha disp ('Golf')

Para convertir grados centígrados (variable c) a fahrenheit (variable f) elseif fah >32
se utiliza la siguiente ecuación: disp ('Esquí')
9 else
f = c∗ + 32 disp ('Marcha')
5 end

63 64

EJEMPLO DE ESTRUCTURA SELECTIVA MULTIPLE EJEMPLO DE ESTRUCTURA SELECTIVA MULTIPLE


(Problema 4B: enunciado) (Problema 4B: solución)
hora=input('Introduce la hora: ');
min=input ('Introduce los minutos: ');
min_total=hora*60 + min;
Elabore un programa en MATLAB que lea del teclado la hora del día y
if min_total<0
los minutos y escriba por pantalla el precio por minuto de una llamada
disp ('Error: Hora no válida')
telefónica, teniendo en cuenta la siguiente tabla: elseif min_total<(8*60)
disp('El precio por minuto es de 6 céntimos de
euro')
Franja Horaria: Minutos Precio Por Minuto (en centimos de euro) elseif min_total<(15*60)
De 0:00 a 7:59 6 disp('El precio por minuto es de 10 céntimos de
De 8:00 a 14:59 10 euro')
De 15:00 a 19:29 15 elseif min_total<(19*60+30)
De 19:30 a 23:59 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')
end
65 66

ESTRUCTURAS REPETITIVAS: VARIABLES ESPECIALES EJEMPLO DE CONTADOR Y ACUMULADOR

 Contadores:
 Son variables que se utilizan para contar. Incrementa c cada vez que En la variable ac acumula los
 Normalmente su valor se incrementa o decrementa en 1. imprime una letra 'a' valores leídos del teclado
 Ejemplos: • c=0; • ac=0
contador=0
contador = contador + 1 • disp(‘a’) • v=input(‘Introduce valor:’)
• c=c+1 • ac = ac + v
indice=10
indice = indice - 1 • disp(‘a’) • v=input(‘Introduce valor:’)
 Acumuladores: • c=c+1 • ac = ac + v
 Se utilizan para almacenar el resultado de sumas sucesivas. • disp(‘a’)
 Su valor se incrementa en cantidades variables.
 Ejemplos: • c=c+1
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

67 68

ESTRUCTURA REPETITIVA while (MIENTRAS) PARTES DE UN BUCLE

while condicion  Cuando el bucle empieza a ser complejo,


sentencias interesa seguir un método para no equivocarse.
 Todo bucle debe tener:
end
 I Inicialización
 La condición del bucle se evalúa al principio, antes ejecutar las sentencias  C Condición de salida
del bucle,
Si es verdadera, se ejecutan las sentencias del bucle y después se
 B cuerpo del Bucle
vuelve a evaluar la condición. Es decir, mientras la condición sea cierta se  A Actualización (si no existiera, la condición siempre
ejecutan las sentencias. se cumpliría y el bucle repetiría infinitas veces)
En el momento en el que la condición es falsa se sale del bucle.
 Sólo en casos excepcionales pueden faltar I, B
Como la condición es evaluada, la primera vez, antes de entrar en el bucle,
puede que el bucle se ejecute 0 veces.  El orden de ejecución será:
Cuando el bucle se acaba, la condición seguro que es falsa
I CBA CBA CBA...
Para finalizar un bucle, el valor de la condición debe ser modificado en las  Mientras el bucle itera: C es verdadero
sentencias que componen el bucle.
 Cuando el bucle se acabe: C es falso
69 70
EJERCICIOS ESTR. REPETITIVA while
ESTRUCTURA REPETITIVA while : EJEMPLO Problema 5: enunciado

c←1 I
c=1 Escriba un programa en MATLAB que lea del teclado un
C número y compruebe si es menor que 5.
comienzo bucle
while c<3 Si no lo es, debe volver a leer un número, repitiendo la
disp(‘a’) B operación hasta que el usuario escriba un valor correcto.
NO: fin del bucle c=c+1 A Finalmente debe escribir por pantalla el valor leído.
c<3
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 72
EJERCICIOS ESTR. REPETITIVA while EJERCICIOS ESTR. REPETITIVA while
Problema 5: solución Problema 5B: enunciado

num=input('Teclee un número menor que 5: '); Escriba un algoritmo en MATLAB que lea del teclado un
while (num>=5) número y compruebe que el número introducido sea
num=input('Teclee un número menor que 5: '); negativo.
Es decir, mientras que sea mayor o igual que 0, debe
end
volver a leer un número, repitiendo la operación hasta
que el usuario escriba un valor negativo.
disp('El primer número leído menor que 5 es: '); Finalmente debe escribir por pantalla el valor leído.
disp(num);
73 74

EJERCICIOS ESTR. REPETITIVA while EJERCICIOS ESTR. REPETITIVA while


Problema 5B: solución Problema 6: enunciado

num=input('Teclee un número negativo: '); Escriba un programa en MATLAB que lea del teclado un
while num>=0 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
num=input('Teclee un número negativo: ');
operación hasta que el usuario escriba un valor correcto.
end
Finalmente debe escribir por pantalla el valor leído.

disp('El primer número negativo leído es: ');


disp(num);

75 76
EJERCICIOS ESTR. REPETITIVA while EJERCICIOS ESTR. REPETITIVA while
Problema 6: solución Problema 6B: enunciado

num=input('Teclee un número entre 5 y 15 (no incluidos): '); Escriba un algoritmo en MATLAB que lea del teclado un
while (num<=5) | (num>=15) número y compruebe que el número introducido sea
num=input('Teclee un número entre 5 y 15 (no incluidos): '); negativo e impar.
Es decir, mientras que sea mayor o igual que 0 o sea
end
par, debe volver a leer un número, repitiendo la
operación hasta que el usuario escriba un valor negativo.
disp('El primer número dentro del intervalo (5,15) ha sido: '); Finalmente debe escribir por pantalla el valor leído.
disp(num);
77 78
EJERCICIOS ESTR. REPETITIVA while EJERCICIOS ESTR. REPETITIVA while
Problema 6B: solución Problema 7: enunciado

Escriba un programa en MATLAB que lea del teclado un


num=input('Teclee un número negativo e impar: '); 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
while (num>=0) | (rem(num,2)==0)
operación hasta que el usuario escriba un valor correcto.
num=input('Teclee un número negativo e impar: ');
Además debe contar el número de veces que se
end introduce un número por teclado.
Finalmente debe escribir por pantalla el contador del
disp('El primer número negativo e impar ha sido: '); número de veces.
disp(num);

79 80
EJERCICIOS ESTR. REPETITIVA while EJERCICIOS ESTR. REPETITIVA while
Problema 7: solución Problema 7B: enunciado

Escriba un programa en MATLAB que lea del teclado un


num=input('Teclee un número entre 5 y 15 (no incluidos): ');
número y compruebe si se encuentra en el rango (5,15).
cont=1; Si no lo es, debe volver a leer un número, repitiendo la
while (num<=5) | (num>=15) operación hasta que el usuario escriba un valor correcto.
num=input('Teclee un número entre 5 y 15 (no incluidos): '); Además debe contar el número de veces que se
cont=cont+1; introduce un número por teclado.
end En cada iteración del bucle debe escribir por pantalla
el mensaje ‘El número de equivocaciones cometidas
disp('El primer número dentro del intervalo (5,15) ha sido: ');
hasta el momento es de: contador’, donde contador
disp(num); mostrará el valor de la variable correspondiente.
disp('y el número de veces que se ha leído un número ha sido: ');
disp(cont);
81 82
EJERCICIOS ESTR. REPETITIVA while EJERCICIOS ESTR. REPETITIVA while
Problema 7B: solución 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
cont=1; número y compruebe si se encuentra en el rango (5,15).
while (num<=5) | (num>=15) Si no lo es, debe volver a leer un número, repitiendo la
disp('El número de equivocaciones cometidas hasta el momento es de: '); operación hasta que el usuario escriba un valor correcto.
disp(cont); Además debe contar el número de veces que se
num=input('Teclee un número entre 5 y 15 (no incluidos): '); introduce un número por teclado, mostrarlo por pantalla,
y el bucle debe permitir realizar 10 lecturas del
cont=cont+1;
teclado como máximo.
end
En cada iteración del bucle debe escribir por pantalla
disp('El primer número dentro del intervalo (5,15) ha sido: '); el mensaje ‘El número de equivocaciones cometidas
disp(num); hasta el momento es de: contador’, donde contador
disp('y el número de veces que se ha leído un número ha sido: '); mostrará el valor de la variable correspondiente.
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
ha sido: ‘ y el valor de la variable num correspondiente.