Fundamentos de Informáticamatematicaaplicada.jezasoft.co/jeza/material_de...La construcción del...

Post on 27-May-2020

11 views 0 download

Transcript of Fundamentos de Informáticamatematicaaplicada.jezasoft.co/jeza/material_de...La construcción del...

Ingeniería Técnica Industrial (Química) 2008-09 - "Fundamentos de Informática" - Tema 93/12/08 1

Fundamentos de InformáticaParte III – Programación en Matlab

Titulación: Ingeniería Técnica Industrial – Química IndustrialProfesor: José Luis Esteban

Escuela Superior de Ciencias Experimentales y Tecnología (ESCET)

Universidad Rey Juan Carlos

Curso académico 2008-2009

Ingeniería Técnica Industrial (Química) 2008-09 - "Fundamentos de Informática" - Tema 93/12/08 2

Tema 9 – Sentencias de Selección

9.1. Las sentencias de selección9.2. La sentencia de selección IF9.3. La sentencia de selección SWITCH

Ingeniería Técnica Industrial (Química) 2008-09 - "Fundamentos de Informática" - Tema 93/12/08 3

Tema 9.1.

Las sentencias de selección

3/12/08 Ingeniería Técnica Industrial (Química) 2008-2009 - "Fundamentos de Informática" - Tema 9 4

Las sentencias de selección (1/2)

●Hasta ahora, las instrucciones de nuestros programas se ejecutan de forma secuencial una sola vez y en el orden en que se han escrito Instruccion1 Instruccion2 Instruccion3 ... InstrucciónN

●Las sentencias de selección permiten seleccionar la ejecución de actividades dependiendo de si se cumple o no una condición dada, es decir, alteran el orden secuencial de ejecución y controlan el flujo del programa

3/12/08 Ingeniería Técnica Industrial (Química) 2008-2009 - "Fundamentos de Informática" - Tema 9 5

Las sentencias de selección (2/2)

●Ejemplo: SI en el examen de mañana apruebo, haré las maletas me iré de vacaciones SI NO me quedaré en casa estudiaré para el examen de septiembre

●En lenguaje Matlab, estas estructuras tiene una sintaxis propia y permiten elegir qué sentencias se van a ejecutar dependiendo de que se cumpla la condición especificada.

Ingeniería Técnica Industrial (Química) 2008-09 - "Fundamentos de Informática" - Tema 93/12/08 6

Tema 9.2.

La sentencia de selección IF

3/12/08 Ingeniería Técnica Industrial (Química) 2008-2009 - "Fundamentos de Informática" - Tema 9 7

La construcción del bloque IF

●Sintaxis: La estructura de este bloque es: if expresión lógica

secuencia de instruccionesend

●Semántica: 1. Se evalúa expresión lógica

El resultado puede ser verdadero (1) o falso (0)2. Si es verdadero (1),

se ejecuta secuencia de instrucciones y después se siguen ejecutando las instrucciones que siguen al end

3. Si es falso (0),se siguen ejecutando las instrucciones que siguen al end

3/12/08 Ingeniería Técnica Industrial (Química) 2008-2009 - "Fundamentos de Informática" - Tema 9 8

La construcción del bloque IF - Diagrama

Secuencia de instrucciones

verdadero falso

end

Sentencia común

ExpresiónLógica

3/12/08 Ingeniería Técnica Industrial (Química) 2008-2009 - "Fundamentos de Informática" - Tema 9 9

La construcción del bloque IF - Ejemplo

% RAIZ: calcula la raíz cuadrada si el

% número es positivo. Si no, no hace nada

x = input('Introduce un número: ');

if x > 0

x = sqrt(x);

end

disp(x);

>> raiz

Introduce un número: 4

2

>> raiz

Introduce un número: -4

-4

3/12/08 Ingeniería Técnica Industrial (Química) 2008-2009 - "Fundamentos de Informática" - Tema 9 10

Expresiones lógicas matriciales● Si la expresión lógica es matricial

➢ el resultado será verdadero cuando lo sea cada elemento del vector lógico resultante.

➢ Si la matriz lógica resultante es vacía, el resultado se trata como falso

● Las construcciones de los dos recuadros son equivalentes:

>> raiz

Introduce un número: [1 2 3 4]

1.0000 1.4142 1.7321 2.0000

>> raiz

Introduce un número: [-1 0 1 2]

-1 0 1 2

if x > 0

instruccionesend

if all(x > 0)

instruccionesend

● Ejemplos utilizando el script raiz:

3/12/08 Ingeniería Técnica Industrial (Química) 2008-2009 - "Fundamentos de Informática" - Tema 9 11

La construcción del bloque IF general

●Sintaxis: La estructura de este bloque es: if expresión lógica

secuencia de instrucciones 1else secuencia de instrucciones 2end

●Semántica:1. Se evalúa expresión lógica:

El resultado puede ser verdadero (1) o falso (0)2. Si es verdadero, se ejecuta secuencia de instrucciones 1.3. Si es falso, se ejecuta secuencia de instrucciones 2.4. Después se ejecutan la instrucciones que siguen al end.

3/12/08 Ingeniería Técnica Industrial (Química) 2008-2009 - "Fundamentos de Informática" - Tema 9 12

La construcción del bloque IF general - Diagrama

verdadero falso

end

Sentencia común

ExpresiónLógica

Secuencia deinstrucciones 2

Secuencia deinstrucciones 1

else

3/12/08 Ingeniería Técnica Industrial (Química) 2008-2009 - "Fundamentos de Informática" - Tema 9 13

La construcción del bloque IF general - Ejemplo

% EsPar: indica si un número es par

n = input('Introduce un número: ');

if mod(n, 2) == 0 disp('par');else disp('impar');end

>> esparIntroduce un número: 3impar>> esparIntroduce un número: 10par

3/12/08 Ingeniería Técnica Industrial (Química) 2008-2009 - "Fundamentos de Informática" - Tema 9 14

IF anidados

●Es posible anidar estructuras IF generales en ambas ramas:

if exprlog1if exprlog2

secuencia_si1_si2else

secuencia_si1_no2end

elseif exprlog3

secuencia_no1_si3else

secuencia_no1_no3end

end

3/12/08 Ingeniería Técnica Industrial (Química) 2008-2009 - "Fundamentos de Informática" - Tema 9 15

IF anidados – Ejemplo (1/2)

● Enunciado: dadas las longitudes de tres lados (a, b y c), decidir si forman un triángulo y de qué tipo es:➢ Es triángulo si la suma de dos lados

cualesquiera es mayor que el otro lado➢ Es equilátero si los lados son iguales➢ Es isósceles si dos de los lados son iguales➢ Es escaleno si los tres lados son distintos

3/12/08 Ingeniería Técnica Industrial (Química) 2008-2009 - "Fundamentos de Informática" - Tema 9 16

IF anidados – Ejemplo (2/2)% Triangulo: determina si tres lados pueden% formar un triangulo, y de que tipo

% Entrada de datosl = input('Vector con los tres lados, de la forma [a b c]: ');% Usamos tres variables por claridad del codigoa = l(1);b = l(2);c = l(3);

% Operaciones y salida de datosif a+b>c && a+c>b && b+c>a % Es triángulo? if a==b && b==c % Todos los lados iguales ? disp('Equilátero'); else if a~=b && b~=c && a~=c % Todos los lados diferentes? disp('Escaleno'); else disp('Isosceles'); end endelse disp('No es un triángulo');end

3/12/08 Ingeniería Técnica Industrial (Química) 2008-2009 - "Fundamentos de Informática" - Tema 9 17

Nota de estilo – Sangrados

if a+b>c && a+c>b && b+c>a if a==b && b==c disp('Equilátero'); else if a~=b && b~=c && a~=c disp('Escaleno'); else disp('Isosceles'); end endelse disp('No es un triángulo');end

if a+b>c && a+c>b && b+c>aif a==b && b==cdisp('Equilátero');elseif a~=b && b~=c && a~=cdisp('Escaleno');elsedisp('Isosceles');endendelsedisp('No es un triángulo');end

● Los sangrados no son obligatorios pero ayudan a entender un programa.

● Es habitual que cada bloque de instrucciones subordinado vaya desplazado a la derecha con respecto al if-end que lo contiene.

● Compárese la legibilidad del código en estos dos ejemplos:

3/12/08 Ingeniería Técnica Industrial (Química) 2008-2009 - "Fundamentos de Informática" - Tema 9 18

IF encadenados – elseif (1/2)

● Cuando se comprueba una serie de condiciones excluyentes entre sí, puede producirse un excesivo anidamiento en las ramas else del if.

x = input('Numero par entre 0 y 100: ');

if x < 0 disp('Error: Menor que cero');else if x > 100 disp('Error: Mayor que 100'); else if mod(x, 2) ~= 0 disp('Error: No es par'); else disp('Bravo, por fin'); end endend

3/12/08 Ingeniería Técnica Industrial (Química) 2008-2009 - "Fundamentos de Informática" - Tema 9 19

IF encadenados – elseif (2/2)

● En este caso es posible encadenar estructuras IF utilizando elseif:

x = input('Num par entre 0 y 100: ');

if x < 0 disp('Error: Menor que cero');else if x > 100 disp('Error: Mayor que 100'); else if mod(x, 2) ~= 0 disp('Error: No es par'); else disp('Bravo, por fin'); end endend

x = input('Num par entre 0 y 100: ');

if x < 0

disp('Error: Menor que cero');

elseif x > 100

disp('Error: Mayor que 100');

elseif mod(x, 2) ~= 0

disp('Error: No es par');

else

disp('Bravo, por fin');

end

Ingeniería Técnica Industrial (Química) 2008-09 - "Fundamentos de Informática" - Tema 93/12/08 20

Tema 9.3.

La sentencia de selección SWITCH

3/12/08 Ingeniería Técnica Industrial (Química) 2008-2009 - "Fundamentos de Informática" - Tema 9 21

SWITCH

●Se utiliza para determinar la ejecución de una secuencia de instrucciones entre múltiples alternativas.

●La secuencia de instrucciones a ejecutar se selecciona en función del resultado de evaluar una expresión criterio que puede tomar una colección predefinida de valores numéricos o cadenas de caracteres.

3/12/08 Ingeniería Técnica Industrial (Química) 2008-2009 - "Fundamentos de Informática" - Tema 9 22

SWITCH – Sintaxis (1/2)

switch criteriocase valor1

Secuencia sentencias 1case valor2

Secuencia sentencias 2...case valorN

Secuencia sentencias Notherwise

Secuencia sentencias N+1end

3/12/08 Ingeniería Técnica Industrial (Química) 2008-2009 - "Fundamentos de Informática" - Tema 9 23

SWITCH – Sintaxis (2/2)

●Criterio puede ser una expresión de tipo numérico o cadena de caracteres➢ Conviene evitar expresiones que produzcan números reales

porque el error de redondeo puede hacer que el resultado nunca coincida con un valor especificado en un case.

●Cada uno de los valor i es uno o más valores posibles que puede tomar el criterio.

●La forma de estos valores puede ser:➢Un único valor➢Una lista de valores entre llaves {v1, v2, v3...}

3/12/08 Ingeniería Técnica Industrial (Química) 2008-2009 - "Fundamentos de Informática" - Tema 9 24

SWITCH – Semántica

●Se evalúa la expresión criterio●Si el resultado de evaluar criterio coincide con el valor o

lista de valores de valor1 entonces se ejecuta el conjunto de instrucciones Secuencia sentencias 1

●Si no, si el resultado de evaluar criterio coincide con el valor o lista de valores de valor2 entonces se el conjunto de instrucciones Secuencia sentencias 2

● ... y así sucesivamente con cada CASE●En caso de que expresión no satisfaga ningún valor de los

especificados en alguno de los CASE, se ejecuta el conjunto de instrucciones Secuencia sentencias n+1

3/12/08 Ingeniería Técnica Industrial (Química) 2008-2009 - "Fundamentos de Informática" - Tema 9 25

SWITCH – Diagrama

Valor 1

otherwise

end

CriterioValor 2

Secuencia sentencias 2

Valor N

Secuencia sentencias N

Secuencia sentencias N+1

Secuencia sentencias 1

3/12/08 Ingeniería Técnica Industrial (Química) 2008-2009 - "Fundamentos de Informática" - Tema 9 26

SWITCH – Ejemplo (1/2)

● En un ciclo de 24, podemos determinar cuál es cada una de las partes del día, según la tabla siguiente. Elaboraremos un script que pida al usuario una hora entera y que devuelva por pantalla el nombre de la parte del día:

Hora Parte del día

01 a 67 a 11

1213 a 2021 a 23

24Otros

MedianocheMadrugada

MañanaMediodía

TardeNoche

MedianocheError

3/12/08 Ingeniería Técnica Industrial (Química) 2008-2009 - "Fundamentos de Informática" - Tema 9 27

SWITCH – Ejemplo (2/2)

h = input('Hora: ');

switch h case {0, 24} disp('Medianoche'); case {1, 2, 3, 4, 5, 6} disp('Madrugada'); case {7, 8, 9, 10, 11} disp('Mañana'); case 12 disp('Mediodia'); case {13, 14, 15, 16, 17, 18, 19, 20} disp('Tarde'); case {21, 22, 23} disp('Noche'); otherwise disp('Error');end