algoritmos simples

21
1 Fundamentos de Informática E.U.P. Universidad de Sevilla (I.T. Diseño Industrial) Introducci Introducci ó ó n a la Algor n a la Algor í í tmica tmica y a la Programaci y a la Programaci ó ó n en MATLAB n en MATLAB 2 ÍNDICE Concepto de Algoritmo Datos: Variables y Constantes Tipo de datos compuestos: Vectores y Matrices Representación de Algoritmos Diagrama de Flujo, Pseudo código Lenguajes de programación: MATLAB Programación Estructurada Estructura Secuencial Estructura Selectiva Simple (If) Doble (If-else) Múltiple Estructura Repetitiva While (Mientras) For (Para) 3 Un algoritmo algoritmo es un conjunto de acciones que determinan determinan la secuencia de los pasos a seguir para 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 . Los pasos de un algoritmo deben estar definidos: con precisi 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 CONCEPTO DE ALGORITMO (1) 4 EJEMPLO DE ALGORITMO INTUITIVO: RECETA DE COCINA Calabacines rehogados 1. Pelar los calabacines y cortar en rodajas 2. Añadir sal a los calabacines 3. Poner los calabacines en una sartén con aceite a medio fuego 4. Mover los calabacines hasta que estén trasparentes 5. Sacar de la sartén y escurrir el aceite 6. Añadir queso parmesano rallado; sino se dispone de parmesano, utilizar queso curado. Cualquier error no funcionará. Pensar ej. Elementos del algoritmo COCINA PROGRAMACIÓN Ingredientes Entrada Ingredientes intermedios Variables, Constantes Acciones Sentencias Orden de ejecución de las acciones Secuencialidad Resultado (Plato DE calabacines) Salida

Transcript of algoritmos simples

Page 1: algoritmos simples

1

Fundamentos de InformáticaE.U.P. Universidad de Sevilla(I.T. Diseño Industrial)

IntroducciIntroduccióón a la Algorn a la Algoríítmica tmica y a la Programaciy a la Programacióón en MATLABn en MATLAB

2

ÍNDICE

� Concepto de Algoritmo� Datos: Variables y Constantes� Tipo de datos compuestos: Vectores y Matrices� Representación de Algoritmos

� Diagrama de Flujo, Pseudo código� Lenguajes de programación: MATLAB

� Programación Estructurada� Estructura Secuencial� Estructura Selectiva

� Simple (If)� Doble (If-else)� Múltiple

� Estructura Repetitiva� While (Mientras)� For (Para)

3

� Un algoritmoalgoritmo es un conjunto de acciones que determinandeterminan la secuencia de los pasos a seguir para 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.

� Los pasos de un algoritmo deben estar definidos:� con precisiprecisióónn, 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

CONCEPTO DE ALGORITMO (1)

4

EJEMPLO DE ALGORITMO INTUITIVO: RECETA DE COCINA

� Calabacines rehogados1. Pelar los calabacines y cortar en rodajas2. Añadir sal a los calabacines3. Poner los calabacines en una sartén con aceite a medio fuego4. Mover los calabacines hasta que estén trasparentes5. Sacar de la sartén y escurrir el aceite6. Añadir queso parmesano rallado; sino se dispone de parmesano,

utilizar queso curado.

� Cualquier error ���� no funcionará. Pensar ej. � Elementos del algoritmo

COCINA PROGRAMACIÓN� Ingredientes Entrada� Ingredientes intermedios Variables, Constantes � Acciones Sentencias� Orden de ejecución de las acciones Secuencialidad� Resultado (Plato DE calabacines) Salida

Page 2: algoritmos simples

5

1. Sal de casa

2. Ve a la tienda y pide dulces.

3. Si la tienda no tiene, vuelve al

punto 2

4. Vuelve a casa.

OKVa a ser

que no

EJEMPLO DE ALGORITMO INTUITIVO:¿Qué pasa cuando no se especifica bien un algoritmo?

Un ejemplo de algoritmo: ¿está bien especificado?

6

2. Ve a la tienda y pide dulces.3. Si la tienda no tiene, vuelve al punto 2

El algoritmo del ejemplo anterior está mal especificado:

EJEMPLO DE ALGORITMO INTUITIVO:¿Qué pasa cuando no se especifica bien un algoritmo?

7

1. Sal de casa

2. Ve a la tienda más cercana que no hayas visitado y pide dulces.

3. Si la tienda no tiene y tú no estás

cansado, vuelve al punto 2

4. Vuelve a casa

OK

Ahora sí que

le has cogido

el truco

El algoritmo bien especificado sería el siguiente:

EJEMPLO DE ALGORITMO INTUITIVO:¿Qué pasa cuando no se especifica bien un algoritmo?

8

2. Ve a la tienda y pide dulces.3. Si la tienda no tiene, vuelve al punto 2

Conceptos básicos: ¿Qué pasa cuando no se especifica bien un algoritmo?

Resultado de la ejecución del algoritmo bien especificado:

Page 3: algoritmos simples

9

� Ejemplo 1: descubrir si un número es impar.1. Leer numero2. ¿rem(num,2) == 0? (es decir, ¿es num divisible por 2?)

a) SI: entonces ES PARb) NO: entonces ES IMPAR

� Ejemplo 2: Convertir de decimal a binario. Hay que dividir por 2 mientras el cociente sea >= 2

1. Leer numero decimal y guardarlo en D2. bucle (repetición)

3. Hallo el resto de D/2, es decir, R=rem(D,2). Imprimir R (digito binario)4. Hallo el cociente: C=D/2 (me quedo con la parte entera)5. ¿Es C mayor o igual que 2?

6. Sí: Guardar C en D (D=C). Continuar con el paso 2 (repetir del 2 al 7). 7. No: Imprimir C (digito binario). Fin del algoritmo.

8. finbucle

EJEMPLOS DE ALGORITMOS CONOCIDOS

10

� Descubrir si un número es primo: a partir de su definición 1. Leer el número y guardarlo en num.2. Guardo en k el valor 2.3. bucle

4. ¿Es num divisible por k? (es decir, ¿rem(num,k) == 0? )5. SI: no es primo. Fin del algoritmo. 6. NO: Aún num puede ser un número primo. Continuar con paso siguiente.

7. Incrementar k en 1.8. ¿Es k mayor o igual que num?

9. SI: es primo. Fin del algoritmo.10. NO: Continuar con el paso 3 (repetir del 3 al 10).

11. finbucle� UN ALGORITMO CONCRETO NO TIENE POR QUÉ SER ÓPTIMO

� Ejemplo: Mejora en el algoritmo anterior: sólo dividir por 2 e impares� ¿Más mejoras? Puede que hubiera otras posibles mejoras.

� Elementos del algoritmo� Datos de entrada, variables y constantes (Ej: num, k)� Sentencias: manipulan los datos (Ej: rem(num,k))� Orden de ejecución de las Sentencias (si el orden está mal � error lógico)� Salida (por pantalla o datos de salida)

EJEMPLO DE ALGORITMO DIFICIL

11

CONCEPTO DE ALGORITMO (2)

� Componentes informáticas de un algoritmo:

� proceso (sentencias)

� datos de entrada

� datos de salida (resultados).

� Lenguaje para expresarlo (SINTAXIS). Ej: MATLAB

ALGORITMOALGORITMO

DATOS DE ENTRADADATOS DE ENTRADA PROCESAMIENTOPROCESAMIENTO RESULTADOSRESULTADOS

ARCHIVOARCHIVOPANTALLAPANTALLATECLADOTECLADO ARCHIVOARCHIVO

LENGUAJE LENGUAJE (SINTAXIS)(SINTAXIS)

12

CONCEPTO DE ALGORITMO (3)

� La sintaxis consta de un conjunto de palabras y signos reservados que tienen una funcionalidad específica. Son comandos, nombres de variables y caracteres especiales del lenguaje de programación que usemos.

� Ej: la palabra ans se corresponde con una variable creada automáticamente por MATLAB.

� Ej: la palabra who se corresponde con un comando de MATLAB 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ónde MATLAB que sirve para mostrar datos por pantalla.

�Ej: el signo % se utiliza para añadir comentarios que MATLAB no interpretará como código a ejecutar.

Page 4: algoritmos simples

13

REPRESENTACIÓN DE LOS ALGORITMOS (1)

Existen diversas herramientas para representar un algoritmo:

� Lenguajes de descripción de algoritmos:

� Diagramas de Flujo

� Pseudocódigo

� Lenguajes de implementación de algoritmos:

� Son los lenguajes de programación, entre los que se encuentra el de MATLAB (otros ejemplos: C, JAVA,PHP,Perl,Javascript,...)

14

PSEUDOCÓDIGO:

�Es 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.

REPRESENTACIÓN DE LOS ALGORITMOS (1)

15

PSEUDOCÓDIGO (Ejemplo):

REPRESENTACIÓN DE LOS ALGORITMOS (1)

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

16

DIAGRAMA DE FLUJO:

�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.

REPRESENTACIÓN DE LOS ALGORITMOS (2)

Page 5: algoritmos simples

17

DIAGRAMA DE FLUJO (Ejemplo):

REPRESENTACIÓN DE LOS ALGORITMOS (2)

EX. PARCIAL BLOQUE TEMÁTICO 1 >=3.5

NOTA FINAL= (Nota Blq 1 * 0.15) + (Nota Blq 2 * 0.6)+ (Nota Blq 3*0.25)

Nota FINAL >=5

Nota FINAL >=5

SUSPENSO

APROBADO, NOTABLE,

SOBRESALIENTE

Evaluación ClásicaUn único examen en las convocatorias oficiales

(60% Bloque 2)+ (40% Bloques 1 y 3)

ALUMNO INTERESADO EN HACER EVALUACIÓN ALTERNATIVA

NO

SI NO

APROBADO, NOTABLE,

SOBRESALIENTE

NO

EX. PARCIAL BLOQUE TEMÁTICO 2 >=3.5

EVALUACIÓN BLOQUE TEMÁTICO 3 >=3.5

NO

NO

SI

SI

SI

SI

ALUMNO INTERESADO EN HACER SÓLO EVALUACIÓN CLÁSICA

El a

lum

no

pu

ede

seg

uir

asi

stie

nd

o a

cla

ses,

per

o y

a n

o t

ien

e la

op

ció

n d

e su

per

ar

la a

sig

nat

ura

po

r ev

alu

ació

n a

lter

nat

iva

18

LENGUAJE DE PROGRAMACIÓN:�Es un lenguaje PROCESABLE POR EL 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.

REPRESENTACIÓN DE LOS ALGORITMOS (3)

19

LENGUAJE DE PROGRAMACIÓN (Ejemplo: MATLAB)

REPRESENTACIÓN DE LOS ALGORITMOS (3)

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

figure

image(img2)

imwrite (img2,imagen_resultante.jpg);

end

20

Introducción a la programación imperativa (1)

� Hay dos grandes “paradigmas de la programación”:� 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,…)� 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 del software.

Page 6: algoritmos simples

21

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

� Es necesario un proceso de traducción de lenguaje en alto nivel al lenguaje máquina (lenguaje ensamblador) � Traducción

� Dos posibilidades de traducción de un programa escrito en un lenguaje de alto nivel: � Compilar el código � Interpretar el código

Código lenguaje MATLAB

variable3 = variable2 + 5;

Código ensamblador

MOV R3, [R4] ; R3 variable2

ADD R3, 5 ; R3 variable2 + 5

MOV [R5], R3 ; variable3 R3

22

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 un lenguaje de alto nivel. Ej: lenguaje C.

� Interpretar: mediante un programa llamado intérprete se traduce 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 lenguaje interpretado (aunque también permite compilar).

� Ventajas/desventajas: � La compilación permite la ejecución más rápida de programas, da

la posibilidad de optimizar código, y hace la aplicación independiente del compilador. Pero tiene la desventaja de que el fichero ejecutable final ocupa más espacio (al ser código máquina), y además es más difícil depurar errores.

� La interpretación ahorra compilación, ocupa menos tamaño, 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 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

� DATO es cualquier objeto manipulable por el ordenador y que contiene información

� Se distinguen dos clases de datos:� VARIABLES: Objeto cuyo valor cambia durante la

ejecución de un programa. � Ejemplo: Las variables num y k del algoritmo de los números

primos

� CONSTANTES: Objeto cuyo valor NO cambia durante la ejecución de un programa.� Ejemplo: el número pi.� Una variable que creemos y le demos sólo un valor inicial sin

modificarlo funciona como una constante. Ej: x=0 %si x no varia su valor dentro del algoritmo funciona como constante

DATOS: VARIABLES Y CONSTANTES

24

� Los valores que pueden tomar las variables y las constantes pertenecen a un TIPO (tipo de dato). Así, por ejemplo existen tipos:� Numéricos: enteros, reales, etc.� Caracteres: contienen texto

� Ejemplo: Una variable que contenga el nombre de una persona.� Booleanos: su valor sólo puede ser verdadero o falso

� Ejemplo: Las respuestas a preguntas ¿rem(num,k)==0?� Normalmente en los lenguajes de programación el valor numérico 0 se

corresponde con el valor falso, y el resto de los valores numéricos se corresponden con el valor verdadero.

� En MATLAB todas las variables serán reales de doble precisión (double) mientras no se fuerce a que sean de otro tipo.Ej: num, k en el algoritmo de los número primos serían variables reales.

� Al ser todas las variables por defecto de tipo real de doble precisión, en MATLAB NO ES NECESARIO DECLARAR LAS VARIABLES ANTES DE USARLAS (mientras que la declaración de variables es obligaroriaen la mayoría de los lenguajes de programación).

DATOS: VARIABLES Y CONSTANTES

Page 7: algoritmos simples

25

� En MATLAB una variable se crea la primera vez que se utiliza.

� Los nombres distinguen mayúsculas de minúsculas� 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 ñ.

� 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.

� Ej: nombre_empleado%en lugar de nombre empleado que MATLAB interpretaría como dos variables nombre y empleado.

DATOS: VARIABLES Y CONSTANTES

26

� En MATLAB una variable se crea la primera vez que se utiliza.� 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 (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 (correcto):x=2x=x+1 % al final x valdrá 3. Es correcto porque en la variable x se escribió primero

un valor inicial 2.

DATOS: VARIABLES Y CONSTANTES

27

� En MATLAB la variable ans (del inglés answer) contiene el valor de la última operación calculada por el programa en ejecución.

� 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*8ans =

25

DATOS: VARIABLES Y CONSTANTES

>> n=1+3*8n=

25

28

� En la sentencia de asignación:nombre_de_variable= expresion_o_valor

� 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.

SENTENCIA DE ASIGNACIÓN

Page 8: algoritmos simples

29

� 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

� Para la comparación se emplea doble ==� 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

SENTENCIA DE ASIGNACIÓN

30

� En la sentencia de asignación:nombre_de_variable= expresion_o_valor

donde la expresion_o_valor puede ser:� 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.

SENTENCIA DE ASIGNACIÓN

31

EXPRESIONES ARITMÉTICAS

El resultado de la expresión es el valor devuelto por la función

funcion(lista_parámetros)

El resultado es la Expresión cambiada de signo- Expresión

Divide Expresión1 entre Expresión2Expresión1 / Expresión2

Multiplica Expresión1 y Expresión2Expresión1 * Expresión2

Resta Expresión2 a Expresión1Expresión1 – Expresión2

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

expresiones más pequeñasExpresión1 + Expresión2

El resultado de la expresión es el valor de la variableNombre_de_Variable

El resultado de la expresión es el valor de la constanteConstante

Resultado de la expresión Expresión

ARITMÉTICA

32

Es verdadero si Operando1 ES DISTINTO QUE Operando2Operando1 ~= Operando2

Es verdadero si Operando1 ES IGUAL QUE Operando2Operando1 == Operando2

Es verdadero si Operando1 ES MENOR O IGUAL QUE Operando2Operando1 <= Operando2

Es verdadero si Operando1 ES MENOR QUE Operando2Operando1 < Operando2

Es verdadero si Operando1 ES MAYOR O IGUAL QUE Operando2Operando1 >= Operando2

Es verdadero si Operando1 ES MAYOR QUE Operando2Operando1 > Operando2

Resultado de la expresión Expresión

RELACIONAL

� Se modelan como variables y/o expresiones del Álgebra de Boole���� una expresión de condición es cierta ó falsa.

EXPRESIONES LÓGICAS (CONDICIONES)

Page 9: algoritmos simples

33

EXPRESIONES LÓGICAS (CONDICIONES)

NOTA: Para poner el operador de negación ~ se puede hacer de dos formas:

1. Pulsando la tecla Shift (la que sirve para poner las mayúsculas) y tecleando el número 126 rápidamente sin soltar la techa Shift

2. Pulsando las teclas Alt-Gr el número 4 y la barra de espacio

¡Pruébalo, es fácil!

Es verdadero si Operando1 NO es verdadero

~ Operando1

not (Operando1)

Es verdadero si Operando1 es verdadero O Operando2 es verdadero

Operando1 | Operando2

or (Operando1, Operando 2)

Es verdadero si Operando1 es verdadero Y Operando2 es verdadero

Operando1 & Operando2

and (Operando1, Operando 2)

Resultado de la expresiónExpresión LÓGICA(sintaxis en MATLAB)

34

� Se suelen emplear en las condiciones que controlan las estructuras selectivas e iterativas.� Ej: El siguiente código pide al usuario un número y averigua si es par

y positivo. num=input(‘Introduzca un número: ’);if rem(num,2)==0 & num>0

disp(‘El número es par y positivo’);end;

� Ej: El siguiente código pide al usuario un número, evalúa si es entero, y le da la oportunidad de meterlo de nuevo

num=input(‘Introduzca un número entero: ’);while floor(num)~=num

disp(‘Error. El número es real, tiene decimales’);num=input(‘Tiene que introducir un número entero: ‘);

end;

EXPRESIONES LÓGICAS (CONDICIONES)

35

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

� Inventada para lógica filosófica (s.XIX). Así trabajan los computadores actuales pues con transistores se implementa muy fácilmente.

� Álgebra con sólo dos elementos: 0 (FALSO) y 1 (VERDADERO)� Y con un conjunto de operaciones definidas sobre tales elementos :

� Operaciones UNARIAS:� Negación lógica (NOT): ~A not(A)Operaciones BINARIAS:� Y lógico (AND): A & B and(A,B)� O lógico (OR): A | B or(A,B)� O exclusivo (XOR): xor(A,B)

� NOTA: La operación OR también se llama “suma lógica”, perono tiene nada que ver con la suma aritmética de números binarios:1 + 1 = 10(2 (suma aritmética)1 | 1 = 1 (álgebra de Boole)

01

10

~AA

01111

11001

11010

00000

xor(A,B)A | BA & BBA

36

Álgebra de Boole Leyes fundamentales

~(A & B) = (~ A) | (~ B)~(A | B) = (~ A) & (~ B)Ley de De Morgan

A & (A | B) = AA | (A & B) = ALey de absorción

A & A = AA | A = ALey de idempotencia

AND (producto)OR (suma)

� Ley conmutativa, asociativa, distributiva

� El Álgebra de Boole y estas leyes son útiles a la hora de operar y simplificar expresiones de condición en nuestros programas y de pensar en las condiciones que deben cumplirse en los programas

� Hacer los siguientes ejercicios del enunciado de la práctica 1Ejercicio 19 Ejercicio 20 Ejercicio 21

Y usar el test de autoevaluación correspondiente en Enseñanza Virtual para comprobar los resultados.

Page 10: algoritmos simples

37

Álgebra de Boole Leyes fundamentales

� Demostración de la Ley de Absorción� 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.

� 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.

� 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

38

Álgebra de Boole Leyes fundamentales

� Utilidad del Álgebra de Boole en programación: Ejemplos prácticos:

� 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.

~((num >=0) & (num<=10))

y aplicando las Leyes de De Morgan queda

(num<0) | (num >10)

39

Precedencia de Precedencia de los operadores:los operadores:

|

&

== ~=

< <= >

>=

+ -

* /

Alta

Baja

-(operador unario

de signo)

~

PrioridadOperador

IMPORTANTE:Los paréntesis alteran el orden de evaluación de la expresión

Ej: 3*2+1 no es igual que 3*(2+1)

EXPRESIONES ARITMÉTICAS Y LÓGICAS (ORDEN DE PRIORIDAD)

40

� 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

FUNCIONES DE DE MATLAB

Page 11: algoritmos simples

41

� Para saber cómo usar una función concreta de las que tiene MATLAB poner en la ventana de comandos:help nombre_comando� 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 ( ).

FUNCIONES DE MATLAB

42

� 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

SALIDA DE DATOS POR PANTALLA

43

� 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 input

ENTRADA DE DATOS POR TECLADO

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

repite o no.

Page 12: algoritmos simples

45

ESTRUCTURA SECUENCIAL

Sentencia 1Sentencia 2...Sentencia N

�Se caracteriza porque las acciones se ejecutan una tras otra, es decir una sentencia sigue a otra en secuencia.

46

EJEMPLO DE ESTRUCTURA SECUENCIAL (Problema 1: enunciado)

Escriba un algoritmo en MATLAB tal que, dadas tres variables quecontienen la longitud de los lados de un triángulo a, b y c, calcule su área S aplicando las siguientes ecuaciones:

p = (a + b + c)/2

))()(( cpbpappS −−−=

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

EJEMPLO DE ESTRUCTURA SECUENCIAL (Problema 1: solución)

a= input('Introduzca el valor del primer lado del triángulo: ');

b= input('Introduzca el valor del segundo lado del triángulo: ');

c= input('Introduzca el valor del tercer lado del triángulo: ');

p=(a+b+c)/2;

s= sqrt (p * (p-a) * (p-b) * (p-c));

disp(‘La superficie del triángulo vale: ‘);

disp(s);

Guardamos el código que tenemos en el fichero de script problema1.m

48

CÓMO CREAR NUESTRA PROPIA FUNCIÓN (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,…)

<código en MATLAB que resuelve esta función>

end

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

- Siguiendo el nombre de la función van los nombres de las variables de entradaseparadas 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.

Page 13: algoritmos simples

49EJEMPLO DE FUNCIÓN (Problema 1F: Cómo convertir en función un script, en este caso la solución del problema1)

function s = fproblema1(a,b,c)

a= input('Introduzca el valor del primer lado del triángulo: ');

b= input('Introduzca el valor del segundo lado del triángulo: ');

c= input('Introduzca el valor del tercer lado del triángulo: ');

p=(a+b+c)/2;

s= sqrt (p * (p-a) * (p-b) * (p-c));

disp(‘La superficie del triángulo vale: ‘);

disp(s);

end

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

5. Cerramos la función con un end

4. Quitamos el código que sobra, que suele tener que ver con las asignaciones de valores inciales a las variables de entrada (en este caso: a,b,c, ya que estas variables se crean en memoria justo cuando se llama a la función y reciben los valores de la llamada. Por tanto no es necesario pedirle su valor al usuario mediante el uso de la función input()

1. Guardamos el código que tenemos en el fichero fproblema1.m (fichero con el mismo nombre que la función que tiene codificada dentro).

2. Averiguamos cuáles son las variables de entrada y de salida En este ejemplo las variables de entrada son a, b, c y la variable de salida es s

50

EJEMPLO DE FUNCIÓN (Problema 1F: ¿Qué se obtiene al llamar a la función?)

function s = fproblema1(a,b,c)

p=(a+b+c)/2;

s= sqrt (p * (p-a) * (p-b) * (p-c));

disp(‘La superficie del triángulo vale: ‘);

disp(s);

end

Por tanto, la definición de la función completa quedaría de la siguiente forma:

Al llamar a la función desde línea de comandos, se obtiene el resultado en la ventana de MATLAB.

>> fproblema1(20,20,20)

La superficie del triángulo vale:

173.205

Ej: El resultado para un triangulo con lados de longitud 20,20 y 20 sería el devuelto por la llamada a la función, en este caso daría 173.205

51

EJEMPLO DE FUNCIÓN (Problema 1F: ¿Qué ocurre en la memoria en tiempo de ejecución?)

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

p=(a+b+c)/2; %ver paso3

s= sqrt (p * (p-a) * (p-b) * (p-c)); %ver paso4

disp(‘La superficie del triángulo vale: ‘);

disp(s);

end

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

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 superficie del triángulo vale’ 173.205

res s a 20 b 20 c 20 p

res s a 20 b 20 c 20 p 30

res s 173.205 a 20 b 20 c 20 p 30

res 173.205 s 173.205 a 20 b 20 c 20 p 30

%paso2 %paso3 %paso4 %paso5

res

%paso1

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.

52

EJEMPLO DE ESTRUCTURA SECUENCIAL (Problema 1B: enunciado para el alumno)

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 de su ecuador l, su superficie S y su volumen V, aplicando las siguientes ecuaciones:

l = 2 π rS = 4 π r2 = 2 r l V = 4/3 π r3 = r S/3

Para calcular las potencias puede usar en MATLAB el operador ^ Ej: r^3

Page 14: algoritmos simples

53

ESTRUCTURA SELECTIVA (SIMPLE)

� Se evalúa la condicion,� si es verdadera, se ejecutan las sentencias; � en caso contrario, se salta dicho grupo de sentencias.

if condicionsentencias

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:

En caso afirmativo debe escribir por pantalla los valores de P y Q.

6802 243<−+ PQP

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:

ax2+bx+c=0

El discriminante se define como:

b2-4ac

Page 15: algoritmos simples

57

ESTRUCTURA SELECTIVA (DOBLE)

�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.

if condicionsentencias 1

elsesentencias 2

end

58

EJEMPLO DE ESTRUCTURA SELECTIVA DOBLE(Problema 3: enunciado)

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.

59

EJEMPLO DE ESTRUCTURA SELECTIVA DOBLE(Problema 3: solución)

ex1=input('Introduce la nota del primer examen: ');

ex2=input('Introduce la nota del segundo examen: ');

ex3=input('Introduce la nota del tercer examen: ');

media=(ex1+ex2+ex3)/3;

disp('La nota media es: ');

disp (media);

60

ESTRUCTURA SELECTIVA MULTIPLE

if condicion1sentencias1

elseif condición2

sentencias2else

sentencias3end

end

if condicion1sentencias1

elseif condicion2sentencias2

elseif condicion3sentencias3

elsesentencias4

end

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.

-En la mostrada en la derecha los elseif van unidos y sólo hay un end al final.

-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.

-El último caso siempre va tras un else sin ninguna condición detrás (en ambas sintaxis).

Page 16: algoritmos simples

61

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

DEPORTE

TEMP> 85 Natación 70 < TEMP <= 85 Tenis 35 < TEMP <= 70 Golf 32 < TEMP <= 35 Esquí TEMP<= 32 Marcha

EJEMPLO DE ESTRUCTURA SELECTIVA MULTIPLE (Problema 4: enunciado)

325

9+∗= cf

Para convertir grados centígrados (variable c) a fahrenheit (variable f) se utiliza la siguiente ecuación:

62

cent= input('Introduce la temperatura en grados Farenheit: ');

fah=(9 / 5) * cent + 32;

disp('El deporte recomendado para esta temperatura es:')

if fah >85disp ('Natación')

elseif fah >70disp ('Tenis')

elseif fah >35disp ('Golf')

elseif fah >32disp ('Esquí')

elsedisp ('Marcha')

end

EJEMPLO DE ESTRUCTURA SELECTIVA MULTIPLE (Problema 4: solución)

63

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:

Franja Horaria: Minutos Precio Por Minuto (en centimos de euro) De 0:00 a 7:59 6 De 8:00 a 14:59 10 De 15:00 a 19:29 15 De 19:30 a 23:59 30

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: ');

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')

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')

end

Page 17: algoritmos simples

65

ESTRUCTURAS REPETITIVAS: VARIABLES ESPECIALES

� Contadores: � Son variables que se utilizan para contar.� Normalmente su valor se incrementa o decrementa en 1.

� Ejemplos:contador=0contador = contador + 1

indice=10indice = indice - 1

� Acumuladores:� 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 0total = total + valorproducto_multiple=1 %hay que inicializarlo al valor neutro del producto, el 1producto_multiple = producto_multiple * valor

66

EJEMPLO DE CONTADOR Y ACUMULADOR

Incrementa c cada vez que imprime una letra 'a'

• c=0;

• disp(‘a’)

• c=c+1

• disp(‘a’)

• c=c+1

• disp(‘a’)

• c=c+1

En la variable ac acumula los valores leídos del teclado

• ac=0

• v=input(‘Introduce valor:’)

• ac = ac + v

• v=input(‘Introduce valor:’)

• ac = ac + v

67

ESTRUCTURA REPETITIVA while (MIENTRAS)

� 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.

while condicion

sentencias

end

68

PARTES DE UN 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

Page 18: algoritmos simples

69

ESTRUCTURA REPETITIVA while : EJEMPLO

c=1

while c<3

disp(‘a’)

c=c+1

end

disp(c)

c < 3

c ← 1

c ← c + 1

SI

ESCRIBIR c

NO: fin del bucle

comienzo bucle

ESCRIBIR 'a'

I

C

B

A

Ejercicios para el alumno: Identificar ICBA en los bucles de las soluciones de los próximos ejercicios.

70

EJERCICIOS ESTR. REPETITIVA whileProblema 5: enunciado

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.

71

EJERCICIOS ESTR. REPETITIVA whileProblema 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 whileProblema 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.

Page 19: algoritmos simples

73

EJERCICIOS ESTR. REPETITIVA whileProblema 5B: solución

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);

74

EJERCICIOS ESTR. REPETITIVA whileProblema 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.

75

EJERCICIOS ESTR. REPETITIVA whileProblema 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 whileProblema 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.

Page 20: algoritmos simples

77

EJERCICIOS ESTR. REPETITIVA whileProblema 6B: solución

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);

78

EJERCICIOS ESTR. REPETITIVA whileProblema 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.

79

EJERCICIOS ESTR. REPETITIVA whileProblema 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 whileProblema 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 contadormostrará el valor de la variable correspondiente.

Page 21: algoritmos simples

81

EJERCICIOS ESTR. REPETITIVA whileProblema 7B: solución

num=input('Teclee un número entre 5 y 15 (no incluidos): ');

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);

82

EJERCICIOS ESTR. REPETITIVA whileProblema 7C: enunciado para el alumno

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 contadormostrará el valor de la variable correspondiente.

83

EJERCICIOS ESTR. REPETITIVA whileProblema 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.