You are on page 1of 33

EJEMPLO: Genera un programa matlab (script) que determine la hipotenusa de un triángulo rectángulo

dados sus catetos. El programa deberá entregar como resultados los valores de los catetos entrados así
como la hipotenusa calculada, en el siguiente formato:

RESULTADOS.

Para cateto opuesto = __________,


y cateto adyacente=____________, NOTA: Las rayas indican que ahí van valores
la hipotnusa=_________________. de variables

SOLUCIÓN: Debemos de seguir los 5 pasos para desarrollo del programa:

1.- Análisis del problema y especificación.


Este problema se resuelve simplemente aplicando la fórmula del teorema de Pitágoras
√ donde CO y CA son datos de entrada, desde teclado

2.- Algoritmo:

i) limpia pantalla y memoria


ii) solicita valores para variables co y ca desde teclado
iii) usa el teorema de Pitágoras para calcular la hipotenusa
iv) imprime resultados

3.- Creación del programa:

%PITAGORAS Calcula la hipotenusa usando teorema de pitagoras


%
%ENTRADA (teclado): Catetos opuesto y adyacente
%
%SALIDA (pantalla): La hipotenusa

%limpia memoria y pantalla


clc
clear

%recibe entrada desde teclado


co=input('Entra el cateto opuesto: ');
ca=input('Entra el cateto adyacente: ');

%calcula la hipotenusa
hip=sqrt(co^2+ca^2);

%imprime a pantalla
fprintf('Para cateto opuesto = %f,\n',co)
fprintf('Para cateto adyacente = %f,\n',ca)
fprintf('Para cateto opuesto = %f.\n',hip)
FUNCIONES EN MATLAB.

Las funciones en matlab tiene la siguiente anatomía:

function [out1, out2, …] = nombre(in1, in2, in3, …)


%
% [out1, out2, …] = nombre(in1, in2, in3, …) breve descripción de lo que hace la
% función y cómo lo hace. Esta descripción incluye la descripción de las variables
% de entrada (in1, in2, …) y de las variables de salida (out1, out2, …). Esto último
% es importante para saber cómo llamar a la función (qué y cuantos argumentos
% requiere y en qué orden) y saber cuántos y cuáles resultados regresa la
% función (se deben elegir nombres válidos de variables para la salida y agruparlos en
% un vector renglón).
% Nota: Esta documentación aparecerá cuando se teclee >> help nombre en ventana
% principal.
%

Uso de sentencias (comandos, expresiones, asignaciones), loops, ifs,


CALCULOS funciones incorporadas, funciones propias, etc., para que, usando
los datos de entrada (in1, in2, in3, …) obtener la salida (out1, out2,…)

Notas:

 La función se genera en el editor de archivos *.m


 El archivo se debe llamar nombre.m
 Se puede llamar a la función en ventana principal de las siguientes formas:

>> [r1, r2, …] = nombre(1.1,-2.5,7, …) % yo elijo los nombres r1, r2, etc. Pueden ser
% incluso out1, out2, etc.

o bien:

>>a=1.1,b=-2.5,c=7
>> [r1, r2, …] = nombre(a,b,c, …) % puedo usar variables que tengan valores
% como argumentos (podría ser in1=1.1, in2=-2.5,
% etc.)
DIFERENCIAS Y SEMEJANZAS ENTRE SCRIPTS Y FUNCIONES.

CARACTERISTICA SCRIPT FUNCION

Forma de ejecutar >> nombre >> [out1, out2,…] = nombre(in1, in2, in3, …)

(sin extensión) (lista de variables de salidas elegidas por el usuario en un


vector renglón en orden apropiado, nombre de la función
con los argumentos necesarios entre paréntesis redondos,
separados por comas en orden apropiado)
Intención Trabajo interactivo con la computadora (que pida
valores para las variables de entrada requeridas con Que la función trabaje como lo hacen las funciones
INPUT) y que presente la salida en un formato incorporadas matlab (ej. >> sol=sin(pi/5) )
diseñado por el usuario.
Entrada Entrada desde el teclado, se usa La entrada es a través de la lista de argumentos de entrada
in1=input(‘…’) (nota: podrías usar también input, load, fscanf, dentro de
in2=input(‘…’) las funciones)
A=load(‘archivo.txt’)
fscanf
etc.
Cálculos Uso de sentencias (comandos, expresiones,
asignaciones), loops, ifs, funciones incorporadas,
funciones propias, etc., para que, usando los datos Lo mismo que en scripts
de entrada (in1, in2, in3, …) obtener la salida
(out1, out2,…)
Salida Presenta la salida en pantalla con un formato Los resultados se asignan a variables de nombres elegidos
diseñado por el usuario usando fprintf. También se por los usuarios, agrupadas en un vector renglón [out2,
puede enviar la salida a un archivo. out2, …]
PROBLEMA 1.- Escribe un programa de computadora que solicite como dato de entrada el
diámetro de un círculo. El programa deberá calcular y desplegar el radio, la circunferencia
(perímetro) y área correspondientes. Escribe el programa (script) de manera que los resultados se muestren
como:

RESULTADOS.
--------------------------------------
Para un circulo de diametro _______,
El radio vale:_________,
La circunferencia es:__________
y el area = ____________.

b) Escribe una función con los datos del problema.

PROBLEMA 2.- Genera un archivo de comandos matlab (script) que convierta una temperatura de
grados centígrados a grados Fahrenheit. Escribe el programa de manera que te solicite la
temperatura en grados centígrados y que imprima en pantalla el resultado de la siguiente manera:

RESULTADOS.

____ grados C equivalen a _____ grados F.

Corre tu programa para los siguientes datos: 36.5 oC, 25 oC.

b) Escribe una función con los datos del problema.

PROBLEMA 3.- Escribe un programa que acepte valores de tres lados de un triángulo, a, b y c, y
posteriormente calcule el perímetro y área de dicho triángulo. La respuesta y los valores de los
lados del triángulo deberán desplegarse de la siguiente forma:

RESULTADOS:

Para los lados del triángulo:


a =_______, b =________ y c =________,
Perimetro = ________ y area = __________.

Para calcular el área usa la fórmula Herón de un triángulo: √


donde "s" es el semi-perímetro del triángulo.

Corre tu programa para los siguientes datos:

a) a=3.5, b=2, c=2


b) a=5, b=6, c=9
c) a=2, b=1, c=1
d) a=1.5, b=2, c=3.6

¿Qué observas en los incisos c y d? ¿Tienes una explicación? Discute con tus compañeros.

b) Escribe una función con los datos del problema.


b) Escribe una función con los datos del problema.
1

CICLOS ITERATIVOS (LOOPS), SENTENCIA FOR / END.

La sentencia for ejecuta una sentencia o grupo de sentencias un número predeterminado de veces. Su sintaxis general es:

for var = valor_inicial:incremento:valor_final

bloque de sentencias

end

Ejemplo:

for i=1:2:11

fprintf('i=%d\n',i)

end

NOTAS IMPORTANTES:

 for tiene una pareja (end) . Cuando uses un for, escribe inmediatamente su end.
 Matlab pone por default una sangría que sirve para leer mejor y distinguir los ciclos iterativos, respétala.
 var -- es la variable contadora del loop, su valor cambia conforme avanza el ciclo
 valor_inicial -- es el primer valor que toma var
 incremento -- es el valor en el cual se va incrementando var en cada paso del ciclo iterativo
 valor_final -- cuando var alcance este valor (o menor) el ciclo concluirá.
 El incremento puede ser negativo, pero en este caso se debe tener
valor_inicial > valor_final (la variable contadora irá hacia atrás)
 El contador var se puede usar en las sentencias dentro del ciclo (para cálculos).
 Si tienes necesidad de salir del loop, se puede usar el comando break. Éste deberá ir dentro de una sentencia
control de flujo ( if ), que veremos más adelante.
 Cuando incremento no se especifica, matlab usa un incremento de 1. O sea:

for var = valor_inicial:valor_final

bloque de sentencias

end

(aquí var tendrá inicialmente el valor de valor_inicial y se irá incrementando de 1 en 1 hasta valor_final).
2

EJERCICIOS: Introduce los siguientes loops en matlab. Genera un script de comandos en tu memoria. Llama al
programa “ciclosfor.m”.

IMPORTANTE: Los ciclos iterativos pueden ir anidados (unos dentro de otros), ejecutándose completamente primero
los más interiores. Por ejemplo:
3

PROBLEMAS

El método iterativo “divide y promedia” sirve para encontrar una aproximación de la raíz cuadrada de cualquier
número positivo “a”. Consiste en, partiendo de una suposición inicial x0 determinar aproximaciones sucesivas
x1, x2, x3, … cada vez más cercanas (se espera) a la raíz cuadrada del número “a”.

La fórmula iterativa es:

; n=1,2,…

Es decir,

n=1 implica

n=2 implica

n=3 implica

etc.

Observando que los datos para este problema son el número “a” del cual queremos la raíz aproximada, y la
suposición inicial, x0, podemos calcular x1 sin problema.

Luego, usando nuevamente “a” (este no cambia) y la nueva solución x1, encontramos una nueva aproximación
x2, y así sucesivamente. Efectúa cálculos manuales para ver si funciona. Usa a=23 e itera 4 veces.
4

ALGORITMO.

1.- Limpia memoria y pantalla


2.- Solicita el número del cual deseas aproximar la raiz, a.
3.- Solicita el número de iteraciones a realizar, itermax.
4.- Establece como suposición inicial a x0=1.
5.- Comienza un ciclo iterativo desde 1 hasta itermax
5.1 calcula la nueva aproximación x1
5.2 imprime los valores de las nuevas aproximaciones
5.3 Realiza x0=x1 (para preparar la nueva iteración)
5.3 Cierra el ciclo iterativo
6.- Para comparación imprime el valor exacto de la raíz de “a”

Ejecútalo con a=34 y con itermax=10.

Pruébalo con otros valores cualesquiera que desees (itermax no necesita ser tan grande)
5

TAREA: La fórmula iterativa para calcular la raíz cúbica es

Genera un programa (script) implementando esta fórmula iterativa, de manera similar al problema anterior.
Ejecútalo para a=23, con un itermax necesario para lograr un valor aceptable, tú decides cuánto.
3.1
3.2
PROBLEMA.- Encuentra el primer número entero “n” para el cual n! (n factorial) es mayor o
igual que algún número “NUM” introducido por el usuario.

Por ejemplo, para el caso de NUM=20, n=4 porque 1x2x3x4=24 (no es 3 porque 3! no es mayor
que 20; no es 5 por que, aunque 5! es mayor que 20, también 4! lo es, 4 es el primer número
cuyo factorial es mayor que 20).

ALGORITMO:

1.- Entra NUM

2.- inicializa n=1

3.- MIENTRAS n! <= NUM

n=n+1

4.- Imprime n

You might also like