Download UNIVERSIDAD TECNOLÓGICA DE PEREIRA FACULTAD DE

Document related concepts
no text concepts found
Transcript
1
UNIVERSIDAD TECNOLÓGICA DE PEREIRA
FACULTAD DE TECNOLOGÍA
PROGRAMA DE TECNOLOGÍA ELÉCTRICA
Asignatura: PROGRAMACIÓN
Tema: ESTRUCTURAS DE PROGRAMACIÓN EN MATLAB
Profesor: Jose Norbey S. F.
Estructura de decisión si sino (if then else)
La estructura de decisión si sino (if then else), se utiliza cuando el programador desea especificar
dos o más caminos alternativos en un algoritmo. Se evalúa una condición que es evaluada y en
función del resultado de esta condición (falso o verdadero), se bifurcará a un determinado punto
para continuar con la ejecución del programa.
Clasificación:

Decisión o alternativa simple. Ver figura 1.
si (condición)
acción
fin

Decisión o alternativa doble. Ver figura 2.
si (condición)
acción 1
sino
acción 2
fin
2
Ejercicio 1: calcular el logaritmo natural de un número
clear all
clc
disp(' -------------------------------')
%muestra líneas...
disp('| nombre programador......... |')
disp('| [email protected]
|')
disp(' -------------------------------')
disp('')
disp('')
disp('calcular el logaritmo natural de un número: ')
x=input('ingrese un número: ' )
if x>0
logaritmo_natural=log(x)
else
disp('La entrada a la función log debe ser positiva')
end

Decisión o alternativa múltiple (es una combinación de ambas). Ver figura 3.
si (condición)
acción 1
si (condición)
acción 2
sino
acción 3
fin
Ejercicio 2: Crear un programa en el que se introduzcan dos números por el teclado y que nos
diga cuál es el mayor.
clear all
clc
disp(' -------------------------------')
%muestra líneas...
disp('| nombre programador......... |')
disp('| [email protected]
|')
disp(' -------------------------------')
disp('')
disp('')
disp('introduzcan dos números por el teclado y que nos diga cuál es el
mayor')
m1=input('digite el primer número: ' )
m2=input('digite el segundo número: ' )
if m1>m2
disp('el primer número es mayor que el segundo')
else
3
disp('el segundo número es mayor que el primero')
end
Anidamiento de estructuras de decisión
Se anidan colocando una en el interior de la otra, no debe haber solapamiento. También se
cumple para las estructuras repetitivas, Ver figura 4.
Ejemplo 3: digite una edad?
clear all
clc
disp(' -------------------------------')
%muestra líneas...
disp('| nombre programador......... |')
disp('| [email protected]
|')
disp(' -------------------------------')
disp('')
disp('')
disp('digite una edad?')
edad=input('?: ' )
if edad<16
disp('Lo siento. Tendrá que esperar')
elseif edad<18
disp('Puede obtener un permiso para conducir')
elseif edad<70
disp('Puede obtener una licencia estándar')
else
disp('Los conductores mayores de 70 requieren una licencia
especial')
end
Estructuras repetitivas desde hasta (for) y mientras (while)
Las estructuras repetitivas o bucles nos ofrecen la solución cuando queremos repetir una tarea
un número determinado de veces, por ejemplo, escribir una palabra un número determinado
de veces, mover un brazo mecánico cierto número de veces, hacer una operación matemática
cierta cantidad de veces etc. Dentro de estas estructuras encontramos las que se repiten cierta
cantidad de veces hasta que cierta condición se cumpla como:

Estructura repetitiva desde hasta (for): la estructura desde hasta (for), es una estructura
repetitiva donde el número de iteraciones o repeticiones se conoce con anterioridad y por ello
4
no se necesita ninguna condición de salida para detener las instrucciones. En la figura 5, se
muestran los símbolos de esta estructura y también en DFD
desdevcontrol=viniciohasta vfinal[paso o incremento]
acciones
fin
Ver figura 5. Estructura repetitiva desde hasta (for)
Ejemplo 4: mostrar el cuadrado de los primeros 5 números enteros positivos
clear all
clc
disp(' -------------------------------')
%muestra líneas...
disp('| nombre programador......... |')
disp('| [email protected]
|')
disp(' -------------------------------')
disp('')
disp('')
disp('cuadrado de los primeros 5 números enteros positivos')
for k=1:1:5 % incremento contador
a=k.^2
end
Ejemplo 5: adivine un número desde 1 hasta 10?
clear all
clc
disp(' -------------------------------')
%muestra líneas...
disp('| nombre programador......... |')
disp('| [email protected]
|')
disp(' -------------------------------')
disp('')
disp('')
disp('adivine un número desde 1 hasta 10')
n=4; %guarda el número a adivinar en esta variable
for k=1:1:10 % incremento contador
g=input('intenta adivinar?. ' )
if n==g
disp('acertaste!!')
else
disp('fallaste!!')
end
end
5
Ejemplo 6: operaciones con vectores (for)
clc
clc
disp('----------------------------')
disp('OPERACIONES CON VECTORES FOR')
disp('----------------------------')
k=0; %inicia contador en cero
suma=0;
for k = 1:1:5 % incremento del contador
suma = suma + k^2;
A(k)=k;
B(k)=1/k;
C(k)=k^2;
D(k)=sqrt(k);
end
disp('
')
disp('
numero inverso
cuadrado raiz_cuadrada')
E=[A',B',C',D']
Ejemplo 7: operaciones con for
clc
disp('----------------------------')
disp('OPERACIONES CON FOR')
disp('----------------------------')
disp('imprimir lista número y cuadrado')
n=input('Ingrese un número mayor que cero: ' )
disp('
')
i=0; % iniciamos contador en cero
for i=1:1:n % incremento del contador
cuad=i*i;
fprintf('%d\t%d\t\n',i,cuad)
end

Estructuras repetitivas mientras (while): las estructuras mientras (while), son ciclos que permiten
ejecutar un conjunto de instrucciones mientras una condición específica sea verdadera. La
condición es evaluada, sí esta es verdadera se ejecutan las sentencias dentro del mientras; si la
condición es falsa la sentencia mientras finaliza y la ejecución se traslada a la primera sentencia
después del mientras. En la figura 6, se muestran los símbolos de esta estructura y su equivalente
en DFD.
While:
mientras (condición sea verdadera (true))
acciones
fin
Ver figura 6. Estructura repetitiva mientras (while)
6
Ejemplo 8: imprimir los números enteros desde cero hasta n
clear all
clc
disp(' -------------------------------')
%muestra líneas...
disp('| nombre programador......... |')
disp('| [email protected]
|')
disp(' -------------------------------')
disp('')
disp('')
disp('imprimir una lista de números enteros desde 0 hasta n')
n=input('Ingrese un número mayor que cero: ' )
i=0; % iniciamos contador en cero
while(i<=n)
disp(i); % instrucción 1
i=i+1; % instrucción 2, conocida como incremento del contador
end
Ejemplo 9: imprimir los números enteros pares de 2 a 10
clear all
clc
disp(' -------------------------------')
%muestra líneas...
disp('| nombre programador......... |')
disp('| [email protected]
|')
disp(' -------------------------------')
disp('')
disp('')
disp('imprimir una lista de números enteros pares de 2 a 10')
i=2; % iniciamos contador en dos
while(i<=10)
disp(i); % instrucción 1
i=i+2; % instrucción 2, conocida como incremento del contador
end
Ejemplo 10: operaciones con vectores (while)
clc
disp('------------------------------')
disp('OPERACIONES CON VECTORES WHILE')
disp('------------------------------')
i=0; %inicia contador en cero
7
while i<5
i=i+1; %incremento del contador
A(i)=i;
B(i)=1/i;
C(i)=i^2;
D(i)=sqrt(i);
end
disp('
')
disp('
numero inverso
cuadrado
E=[A',B',C',D']
raiz_cuadrada')
Ejemplo 11: operaciones con while
clc
disp('----------------------------')
disp('OPERACIONES CON WHILE')
disp('----------------------------')
disp('imprimir lista número y cuadrado')
n=input('Ingrese un número mayor que cero: ' )
disp('
')
i=0; % iniciamos contador en cero
while(i<=n)
i=i+1; % incremento del contador
cuad=i*i;
fprintf('%d\t%d\t\n',i,cuad)
end
Estructura switch-case (según-caso)
La estructura según caso, es una estructura de decisión múltiple. Se evalúa una expresión y en
función del valor resultante se realiza una determinada tarea o conjunto de tareas. En caso de
existir un valor no comprendido entre 1 y n, se realiza una acción excluyente o de otra manera
(otherwise). En la figura 7, se muestra el diagrama de flujo de esta estructura.
Figura 7. Estructura switch case (según caso)
Código fuente: Matlab
switch (expresión)
8
case {caso de la expresión uno}
sentencias que se ejecutarán si el primer caso es verdadero (true)
case {caso de la expresión dos}
sentencias que se ejecutarán si el caso dos es verdadero (true)
.
.
.
otherwise (de otra manera)
sentencias que se ejecutarán si todos los casos son falsos (false)
end (fin)
Cuando se ejecuta la instrucción switch, la expresión se evalúa y se transfiere el control
directamente al grupo de instrucciones cuya etiqueta case tenga el mismo valor de expresión.
Si ninguno de los valores de las etiquetas case coincide con el valor de expresión, entonces no
se seleccionará ninguno de los grupos de la instrucción switch o se realizara la instrucción
(otherwise). El valor por defecto (otherwise) es una forma conveniente de generar un mensaje de
error en caso de tener entradas inválidas.
Ejemplo 12: servicio de transporte para Pereira, Manizales, Armenia y Cartago
clear all
clc
disp(' -------------------------------')
%muestra líneas...
disp('| nombre programador......... |')
disp('| [email protected]
|')
disp(' -------------------------------')
disp('')
disp('')
disp('servicio de transporte para pereira, manizalez, armenia y
cartago')
ciudad = input('Ingrese la cuidad entre comillas simples: ')
switch ciudad
case 'pereira'
disp('Hay servicio el costo del boleto es $25100')
case 'manizalez'
disp('Hay servicio el costo del boleto es $35000')
case 'armenia'
disp('Hay servicio el costo del boleto es $22000')
case 'cartago'
disp('HOY no hay servicio de transporte a esa ciudad.')
otherwise
disp('Debe elegir entre las ciudades mencionadas')
end
Ejemplo 13: menú de funciones trigonométricas con plot
clear all
clc
disp(' -------------------------------')
%muestra líneas...
disp('| nombre programador......... |')
disp('| [email protected]
|')
disp(' -------------------------------')
disp('')
disp('')
% lee el tipo de función a utilizar
choice = menu('','seno', 'coseno', 'tangente', 'salir');
% genera el eje del tiempo de la función
t = (0.0 : pi/50 : pi);
9
switch (choice)
case 1 % function seno
y = sin(2*t);
case 2 % function coseno
y = cos(2*t);
case 3 % function tangente
y = tan(2*t);
otherwise
disp('Quit');
end
figure(1);
plot(t,y);
title('FUNCIONES TRIGONOMÉTRICAS')
xlabel('t(segundos)')
ylabel('A(amplitud)')
http://engineering.armstrong.edu/matlabmarina/pdf/matlab%20marina%20switchcase%20statements%20primer.p
df