Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Tema I1 - Funciones y
Condicionales
Funciones
Condicionales; if
Variables contador,
sumador y multiplicador
Depuración de código
Condicional Switch
Programación con MATLAB
Los programas y/o funciones de MATLAB se
guardan en cheros de nombre *.m
SCRIPTS: conjuntos de
órdenes agrupadas en un FUNCIONES:
archivo ejecutable programas disponibles en
Son cheros que Matlab para hacer
contienen un conjunto de cálculos especí cos
comandos que se ejecutan Son cheros con una
sucesivamente cuando se estructura especial, que
teclea el nombre del de nen funciones
chero en la línea de análogas a las de MATLAB
comandos
✚ % senotaylor
% Representación de la función seno y su
desarrollo polinómico hasta el término cúbico
% Vectores:x=abscisas, yseno=seno evaluado en
esas abscisas e ytaylor = desarrollo de Mac
Laurin de orden 3
⌘ N clear; clc;
l Nó xmin=-2;xmax=2;h = 0.1;
ctr x=xmin:h:xmax;
yseno=sin(x);
ytaylor=x-x.ˆ3/6;
plot(x,yseno,x,ytaylor,'rx');
shg;
Orden shg: Para que el
gráfico aparezca al final de la
ejecución como ventana activa
Formas de ejecutar el script
El marcador de posición
% continua con el tipo
de formato de la
variable: general (g),
caracteres (s), etc.
Programas
Funciones
Condicionales; if
Variables contador,
sumador y multiplicador
Depuración de código
Condicional Switch
Funciones
Son un tipo especial de programas
Entradas de Salidas de
Algoritmo
datos datos
Funciones
Programas
Entrada de datos se escribe
Entradas de datos se pide como argumentos de
por el teclado al usuario entrada a la función
nombre debe
function palabra coincidir con el nombre del
reservada para definir la archivo “.m”
función
Ejemplo Las líneas iniciales precedidas por
% son comentarios
Si se escribe help + nombre de la
% t2_f0.m función, aparecen estas líneas
% función de un solo argumento como explicación
function y=t2_f0(x)
y=x^2-log(x); La primera línea dentro del fichero
que no sea un comentario, tiene
end
que ser la declaración de función
function y=t2_f0(x)
% t2_f0.m
% función de un solo argumento Sólo son accesibles dentro de la
función
function y=t2_f0(x)
y=x^2-log(x);
end No interfieren con las variables del
espacio de trabajo
Al terminar la ejecución de la
>> t2_f0(5) >> t=5; función, las variables locales se
ans = >> z= t2_f0(t) eliminan de la memoria
23.3906 z=
En el espacio de trabajo
23.3906 Workspace, no hay ni rastro de
éstas variables
Sólo aparece ans
1. Crea una función como el ejemplo del script que reciba el radio de
un círculo y devuelva su área. Prueba la función con un círculo de
radio la unidad. Debería devolver 3.1416, aproximación del número
π. Pruébala con 2, debería devolver 12.5664 (4π aprox.)
Si necesitamos más
argumentos de entrada, se
colocan separados por comas
dentro del paréntesis
% ej2_fareapol.m
% Area de un polígono regular de n lados, y lado l
% Entradas: longitud y número de lados: l y n
% Salida: área del polígono
% Calcula: P,a (perímetro y apotema) y las
variables no conmutan
function area=ej2_fareapol(l,n)
P=n*l; % perímetro
a=l/(2*tan(pi/n)); % apotema
area=P*a/2;
Para invocar la función:
end
>> ej2_fareapol(3,4)
ans =
9.0000
>> ej2_fareapol(4,3)
ans =
6.9282
Ejercicios
2. Crea una función que reciba la masa m y la velocidad v de un móvil
y devuelva la energía cinética Ec=½ mv2
<latexit sha1_base64="WgjOc5AlzYyjyM70vEYutGi7PNQ=">AAACBHicbVDLSsNAFJ3UV62vqEs30SII0pKU+tgIRTcuK9gHNLHcTCft0MnDmYlYQrb6M7oSdecX+AP+jdOahbae1bn3nAv3HDdiVEjT/NJyc/MLi0v55cLK6tr6hr651RRhzDFp4JCFvO2CIIwGpCGpZKQdcQK+y0jLHV6M9dYd4YKGwbUcRcTxoR9Qj2KQatXVd++71pnd8zjgpOQe2uKWy8S9qZSqgNM0qUDa1Ytm2ZzAmCVWRoooQ72rf9q9EMc+CSRmIETHMiPpJMAlxYykBTsWJAI8hD7pKBqAT4STTKKkxr4XckMOiDGZf3sT8IUY+a7y+CAHYlobL//TOrH0Tp2EBlEsSYCVRWlezAwZGuNGjB7lBEs2UgQwp+pLAw9AFSJVbwUV35oOO0ualbJ1XD66qhZr51kRebSD9tABstAJqqFLVEcNhNEjekZv6F170J60F+31x5rTsptt9AfaxzcIHpen</latexit>
p
b+ b2 4ac
x1 =
2a
Programas
Funciones
Condicionales; if
Variables contador,
sumador y multiplicador
Depuración de código
Condicional Switch
Terminal comienzo o nal de un algoritmo o programa
True False
Forma común
False
if condición 1 es cierta Condición
1
código1
True
else
Código 1 Código 2
código2
end
Forma compleja
if condición 1 es cierta True
Condición
1
código1
elseif condición 2 es cierta False Código 1
código2 True
Condición
elseif condición 3 es cierta 2
else Código 3
código4
end
Condición Variable lógica
operación que puede tomar
se evalúa sólo dos valores
numéricamente verdadero =1
y devuelve cero ó
ó uno falso = 0
>> 3 > 2
ans = 1
Operadores de comparación
Es igual == 3 == 3
Es diferente ~= 3 ~= 2
~ virgulilla
altGr+4 (Windows) - alt+ñ (Mac)
>> a=3;
>> b=5;
¿Son
distintos?
>> a~=b
ans =
1 Si
>> a==b
¿Son
ans =
iguales?
0 No
Forma simple if - end
8. Crea una función que reciba tres números a, b y c que se supondrán diferentes
entre si, y devuelva el mayor de los tres.
if condición 1 es cierta
código1
else
código2
False
end Condición
1
True
Código 1 Código 2
Ejemplo: función que devuelve el
mayor de dos números a y b
function mayor=elseab(a,b)
if a>=b
mayor=a;
else
mayor=b;
end
end
Ejercicios
11. Crea una función que utilizando la estructura if-else reciba un número r y
devuelva el área del cı́rculo de radio r si r 0 y 1 en caso contrario.
13. Codifica una función que reciba un número x y devuelva su valor absoluto
sin usar la función abs ni sqrt, sino mediante condicionales.
Llamada a otra función
Ejemplo
Las funciones pueden llamar a
Función de nida a trozos en la que
otras funciones
uno de los trozos se obtiene
llamando a la función creada
previamente, t2_f0
% Devuelve el valor de la función:
Se trata de dividir programas o % f(x)=x si x<1
funciones más complejas en % f(x)=xˆ2-log(x) si x>=1
unidades más sencillas function y=t2_ftrozos(x)
if x<1
y=x;
else
Hay que asegurar que las
funciones sean encontradas, y=t2_f0(x);
tienen que estar en el “PATH” ó end
en la carpeta de trabajo
end
fi
Ejercicios
18. Codifica una función que reciba tres valores x, y y z (que se supondrán
diferentes) y devuelva el mayor de ellos. Se podrá utilizar solo un bloque if y
mayorab0
una llamada a la función ud2 fmayorab0.
20. (Para valientes) Codifica una función que devuelva el máximo de seis valores
supuestos distintos. Trata de hacerlo con un único if-else y utilizando dos veces
la función del ejercicio 8.
21. (Para valientes) Codifica una función que devuelva el máximo de siete
valores supuestos distintos. Trata de hacerlo con el menor número posible de
if-else (ninguno).
ejercicio 8: función que recibe tres números a, b y c
y devuelve el mayor de los tres
Condicionales anidados
Las estructuras de control pueden
contener dentro de sus bloques de
instrucciones internos otras estructuras
de control
if condición 1 es cierta
código1
if condición 2 es cierta
código2
end
código3 dentro del bloque de
else un condicional puede
haber otro condicional o
código4 más
end
Ejemplo: función que devuelve el signo de
una variable entera n
function mayor=ud2_fquehace(a,b,c)
mayor=a;
if b>mayor No lo calcula.
mayor=b; Si la entrada es (2,1,3), devuelve 2.
if c>mayor Al 2º if no entra porque no se cumple
mayor=c; la condición del primero. Hay que poner
end “end” antes del 2º if
end
24. Codificar una función que reciba una calificación y devuelva una variable
clave que ha de valer 0 si la calificación es estrictamente menor que 5, 1 si la
calificación es mayor o igual que 5 y menor que 7, 2 si la calificación es mayor
o igual que 7 y menor que 9, 3 si la calificación es mayor o igual que 9 y menor
o igual que 10 y 1 si el argumento de entrada no está entre 0 y 10.
Forma compleja if - elseif…
if condición 1 es cierta Condición
True
1
código1
elseif condición 2 es cierta False Código 1
True
Condición
código2 2
código3 Código 3
elseif …
…
else La orden termina con una
sentencia else cuyo bloque de
código n instrucciones posterior
end se ejecutará si ninguna de las
condiciones ha resultado cierta.
Ejercicio
Ejemplo 24 con elseif % t2_fnotas
Función que recibe una % uso de elseif
calificación entre 0 y 10 function clave=t2_fnotas(nota)
• devuelve 0 si es suspenso if nota<0
(calificación estrictamente clave=-1;
menor que 5), elseif nota<5
• 1 si es aprobado clave=0;
(calificación mayor o igual elseif nota<7
que 5 y menor que 7), clave=1;
• 2 si es notable (calificación elseif nota<9
mayor o igual que 7 y
clave=2;
menor que 9) y
elseif nota<=10
• 3 si es sobresaliente clave=3;
(calificación mayor o igual
else
que 9).
clave=-1;
• Si por error la calificación no end
está entre 0 y 10, la función
end
devolverá -1
Ejemplo % t2_fareafig
Función que combina variables % uso de elseif
diferentes y devuelve el área
function
de distintas figuras area=fareafig(tipo,a,b)
• si tipo=1, devuelve el área if tipo==1
del rectángulo de lados a y area=a*b;
b elseif tipo==2
• si tipo=2, devuelve el área area=pi*aˆ2;
del círculo de radio a elseif tipo==3
• si tipo=3, devuelve el área area=a*b/2;
del triángulo de base a y elseif tipo==4
altura b area=a*a;
• si tipo=4, devuelve el área elseif tipo==5
del cuadrado de lado a area=a*a*sqrt(3)/4;
• si tipo=5, devuelve el área else
del triángulo equilátero de area=-1;
lado a end
• si no es ninguno de los tipos end
anteriores, devuelve -1
Ejercicios
28. Codifica una función que reciba el salario anual bruto de un trabajador
y calcule el impuesto de la renta de las personas fı́sicas correspondiente a ese
salario. Se supondrá que los primeros 9.000e están exentos. Hasta 17.360e al
año se aplicará una retención del 24%. Desde 17.360 hasta 32.360, la retención
será del 28%. Desde 32.360, hasta los 52.360e anuales, pagaremos a Hacienda
37%. Con ingresos anuales superiores a 52.360e el porcentaje se sitúa en el
43%. Para probar la función: si el salario son 7.000e el impuesto será 0. Si
el salario es 11.000e el impuesto son 480e. Si son 22.000e el impuesto es de
3.305, 6e. Si son 40.000, el impuesto son 9.033, 2 y si son 100.000, el impuesto
será de 34.092e.
Operadores lógicos
Si una condición mezcla
varias, se usan paréntesis
Utilizan la lógica binaria y devuelven un 1 ó un 0
para establecer el orden de
ejecución, similar a las
operaciones aritméticas
Operador Símbolo
o lógico (vectores) |
Negación ~
~ virgulilla
altGr+4 (Windows) - alt+ñ (Mac)
La condición debe ser entendida por Matlab
Se escribe:
32. (Para valientes) Codifica una función que reciba cuatro valores x, y, z y t
supuestos todos diferentes entre sı́, y devuelva el menor de los estrictamente
positivos. Si no hay ninguno estrictamente positivo, la función devolverá 0. Por
ejemplo, si x = 2, y = 3, z = 7, t = 1, la función devolverá 3.
Operadores de comparación
35. Codifica una función que reciba tres números a, b y c y devuelva una vari-
able f lag que ha de valer 2 si los tres son iguales entre si, 1 si dos de ellos son
iguales entre si pero el otro es diferente, y 0 si los tres son distintos.
38. Codifica una función que reciba cuatro valores x, y, z y t supuestos todos
diferentes entre si, y devuelva el segundo mayor. Por ejemplo, si x = 2, y = 3,
z = 7 y t = 1, la función devolverá 3.
39. Codifica una función que reciba cinco valores x, y, z, t y s supuestos todos
diferentes entre si, y devuelva el del medio. Por ejemplo, si x = 2, y = 3,
z = 7, t = 1, s = 9, la función devolverá 3.
43. Codifica una función que calcule la factura mensual de un teléfono móvil en
euros, de acuerdo con los siguientes datos:
• Los argumentos de entrada serán: número de llamadas (N), minutos (min),
número de mensajes (nsms), tarifa: 1, 2, 3 (idtf).
Funciones
Condicional if
Variables contador,
sumador y multiplicador
Depuración de código
Condicional Switch
Variables contador, sumador y multiplicador
Contadores
➯ i=i+1, cada vez que se efectúa esta operación el
valor de la variable i se incrementa en una unidad
Multiplicadores
➯ A=A*b, cada vez que se efectúa esta operación el
valor de la variable A se multiplica en la cantidad b
>> r=mod(20,6)
r =2
Ejemplo: comprobación de si un
numero x es entero
function flag=t2_fesentero(x)
if x==floor(x)
flag=1;
else
flag=0;
end
end
fl
fl
Ejercicios
51. Codifica una función que reciba un número natural n y devuelva una vari-
able flag que valga 0 si n es par y 1 si n es impar.
54. Crea una función que reciba un número entero de dos cifras y devuelva el
número con las cifras en orden opuesto.
55. Codifica una función que reciba tres números que representen una fecha
DD/MM/AAAA y devuelva 1 si la fecha es correcta o un cero si no lo es. Se
supondrá que los meses son de 30 dı́as.
56. Codifica una función que reciba un número entero entre 1000 y 9999 y
devuelva un 1 si es capicúa ó un 0 si no lo es. Si no es entero o no está entre
los valores definidos, devolverá 1.
Programas
Funciones
Condicional if
Variables contador,
sumador y multiplicador
Depuración de código
Condicional Switch
Depuración de
códigos: debugger
Depurar un programa - controlar la
ejecución
Para ir paso a
paso
Herramienta para detectar fallos
del programa siguiendo el flujo del
mismo en tiempo de ejecución
(Paso a Paso) Punto de
parada
breakpoint Para continuar
Pinchando en el guión o desde el hasta el nal
menú ⟶ Breakpoints
Finalmente, si seguimos
pulsando, terminaremos la
función
otando
con el cursor encima
de la sentencia, se puede
cambiar el valor de la
variable en tiempo de
ejecución
fl
Programas
Funciones
Condicional if
Variables contador,
sumador y multiplicador
Depuración de código
Condicional Switch
Sentencia SWITCH
Es análoga a un conjunto de if ... elseif
concatenados
switch expresion
case caso1
código 1
case caso2
código 2
case {caso3,caso4,caso5,…}
código 3
otherwise
código 4
end
Ejemplo
script que devuelve el día de la semana
clc;
clear all;
dayString=input('Dame el nombre de día de la semana
en minúsculas: ','s');
La opción 's' se
switch dayString
emplea para leer una
case 'lunes'
variable de tipo carácter
disp('Primer día de la semana!')
('string'), evitando los
case 'martes'
apóstrofes
disp('Día 2')
case {'miércoles','miercoles'}
disp('Día 3')
case 'jueves'
disp('Día 4')
case 'viernes'
disp('Último día de la semana de clases!')
otherwise Si hay muchas opciones discretas y conocidas,
disp('Finde!') las instrucciones switch son más fáciles de leer que las
end if
Sin embargo, no es posible utilizar desigualdades