Document

Anuncio
Práctica 1
Sentencias de control del programa
1.1
Introducción
Los cálculos necesarios para obtener un determinado resultado a menudo requieren tomas de
decisión e iteraciones. Por este motivo los lenguajes de programación incluyen sentencias que
permiten realizar bifurcaciones y bucles. En esta práctica se van a realizar pruebas con las
sentencias if-else y while.
1.1.1
Objetivos
Se pretende que el alumno:
• Aprenda a realizar programas en MATLAB y guardarlos en archivos M.
• Experimente con programas sencillos que contienen secuencias de operaciones.
• Experimente con programas sencillos que contienen bifurcaciones.
• Experimente con programas sencillos que contienen ciclos repetitivos.
Este enunciado contiene ejercicios suficientes para que se pueda aprovechar todo el tiempo
asignado a la sesión. Es decir, hay ejercicios de sobra. Tenga pues en cuenta que el objetivo
no es llegar al último ejercicio lo antes posible y marcharse. El objetivo es usar todo el tiempo
disponible para experimentar. Si se llega o no se llega a completar el último ejercicio es algo
que carece de importancia.
1.1.2
Requisitos
Se requiere que el alumno acuda a la sesión práctica con una copia de estas notas y con algún
documento identificación: DNI, permiso de conducción, tarjeta de la universidad, pasaporte,
etc.
Se requiere tener asimilados los conceptos de los diagramas de flujo con bifurcaciones y con
iteraciones o bucles correspondientes a las clases de teorı́a y problemas.
1.1.3
Desarrollo de la práctica
El alumno deberá realizar todos los puntos que se indican a continuación en el orden en que
aparecen.
1. Leer estas notas antes de la sesión práctica, despejando cualquier duda mediante consulta
a sus apuntes de clase.
1
2
PRÁCTICA 1. SENTENCIAS DE CONTROL DEL PROGRAMA
2. Escribir en el entorno MATLAB todos los ejemplos que aparecen en estas notas, contemplando luego los resultados. Este proceso ha de realizarse de forma crı́tica, es decir, el
alumno ha de dedicar cierto tiempo a pensar por qué se obtienen esos resultados y no
otros. Es imprescindible que el alumno descubra por sı́ mismo sus errores y aprenda a
corregirlos. No sirve de nada preguntar al profesor o al compañero en cuanto surge la
menor duda o dificultad.
3. Explorar ejemplos similares a los propuestos, cambiando alguna que otra cosa. En esas
pruebas debe ser capaz de predecir el resultado de los cambios introducidos. De este modo
aprenderá el uso de la herramienta MATLAB.
4. Resolver los ejercicios de auto-evaluación, comprobando la solución mediante pruebas en
el entorno de MATLAB.
1.2
Archivos M
Una de las caracterı́sticas del entorno MATLAB es que permite que las órdenes puedan ser
tomadas de un archivo en lugar de ser introducidas por el teclado.
La idea es simple: si el usuario va a repetir a menudo un conjunto de órdenes puede escribirlas
en un archivo de texto; posteriormente le indica a MATLAB que lea dicho archivo, ejecutando
las órdenes una por una. El efecto es el mismo que si el usuario hubiese escrito las órdenes en
el entorno de MATLAB. Ahora bien, puesto que el archivo de texto se puede guardar en disco
no es preciso volver a escribir las órdenes nunca más. Cada vez que el usuario desee ejecutar
de nuevo el conjunto de órdenes podrá indicar nuevamente a MATLAB que lea el archivo. Esto
supone un gran ahorro de tiempo en muchos casos.
Es costumbre dar a los archivos que contienen órdenes de MATLAB una extensión predeterminada que los diferencia de otros archivos de texto. Esta extensión es .m. Por ejemplo si un
archivo contiene las órdenes para dibujar un vector se le puede llamar dibuvector.m.
Los archivos que contienen órdenes de MATLAB serán llamados desde ahora archivos M.
Para escribir el archivo de texto se puede usar cualquier programa como la libreta de notas.
MATLAB incorpora su propio programa para redacción llamado M file Editor, o sea redactor
de archivos M.
1.2.1
Ejemplo 1
A modo de ejemplo considere las siguientes órdenes de MATLAB que convierten un ángulo de
grados a radianes.
anggrados=input(’Escriba el ángulo en grados : ’);
angradianes = anggrados/180*3.1415;
disp(’El valor en radianes es : ’);
disp(angradianes);
Aparecen dos funciones nuevas input y disp. La primera de ellas, input sirve para leer un
dato del teclado y asignarlo a una variable. La segunda sirve para escribir en la pantalla un
mensaje o el valor de una variable.
Para comprobar el funcionamiento copie el texto dentro de un archivo al cual se le da el
nombre de conversor.m. Para ello puede usar la libreta de notas o el redactor de MATLAB. Una
vez que lo haya creado debe grabarlo (opción Guardar o Save) en la carpeta ’Mis Documentos’.
Para que MATLAB pueda ejecutar las órdenes contenidas en el archivo es preciso cambiar la
carpeta de trabajo de MATLAB. Esta carpeta se indica en un menú que aparece en la ventana
de órdenes, arriba a la derecha. Pulse en el menú y seleccione la carpeta ’Mis Documentos’.
Informática, 1o Ing. Aeroespacial
Dpto. Ingenierı́a de Sistemas y Automática. E.T.S. Ingenieros. US. 3
Si todo esto se ha realizado correctamente ahora solamente tiene que escribir en la ventana
de órdenes el nombre del archivo que contiene las órdenes, en este caso es conversor. Ası́
aparecerá en la pantalla:
>> conversor
Escriba el ángulo en grados :
En caso de que se haya equivocado de carpeta al grabar el archivo o al elegir la carpeta de
trabajo no será posible ejecutar las órdenes y aparecerá un mensaje como
>> conversor
??? Undefined function or variable ’conversor’.
En caso de que se haya equivocado al escribir las órdenes aparecerá un mensaje de error.
Por ejemplo, si escribe inpot en lugar de input se obtiene lo siguiente
>> conversor
??? Undefined command/function ’inpot’.
Error in ==> conversor at 1
Cada vez que se escribe conversor en la ventana de órdenes de MATLAB se ejecutan
las órdenes que el archivo conversor.m contiene. Se dice entonces que se está ejecutando el
programa conversor. Use el programa varias veces hasta comprobar el buen funcionamiento e
intente añadir o cambiar alguna cosa en el programa. Se recomienda que haga nada más que un
cambio cada vez y que ejecute el programa a continuación para ver el efecto.
Observe que las órdenes que terminan en punto y coma se realizan “silenciosamente”, es decir,
sin que aparezca nada en la pantalla. De este modo se consigue que sólo se escriban los mensajes
necesarios y el resultado final. Pruebe a ejecutar el programa eliminando previamente algunos
signos punto y coma y observe los resultados. Explore esta idea hasta asimilarla completamente.
Lo normal es que los programas y funciones no escriban los cálculos intermedios en la pantalla.
Esto es ası́ para evitar que la pantalla se llene de información no deseada. Por tanto hay que
acostumbrarse desde este momento a usar el signo de punto y coma al final de las expresiones.
Este ejemplo pone de manifiesto que los programas en MATLAB no son sino listas de órdenes
que MATLAB interpreta tomándolas una a una de un archivo de texto. Recuerde siempre que
el archivo de texto ha de estar en la misma carpeta que MATLAB esté utilizando como carpeta
de trabajo. Recuerde también que el archivo ha de tener una extensión .m, o sea que después
del nombre se coloca un punto, una m y nada más.
1.2.2
Órdenes útiles para carpetas
Como ya se ha dicho, si el archivo de texto no se graba en la carpeta de trabajo de MATLAB
no podrá ser ejecutado. Conviene tener ciertas herramientas que ayuden a comprobar esta
situación.
• Para comprobar los archivos .m que tiene en la carpeta de trabajo de MATLAB pruebe la
orden what.
• Para saber la carpeta de trabajo que MATLAB está usando existe la orden pwd.
• Para saber la lista de todos los archivos en la carpeta de trabajo de MATLAB pruebe la
orden dir. Aparecerán los archivos de tipo .m y también los de otros tipos.
4
PRÁCTICA 1. SENTENCIAS DE CONTROL DEL PROGRAMA
1.2.3
Ejemplo 2
Use las ideas del ejemplo anterior para crear un programa que sirva para calcular y escribir y,
que se obtiene mediante y = P (x) = x3 − 2x2 − 5 siendo x una variable real.
Escriba las órdenes necesarias en un archivo de nombre polinomio.m. Compruebe que el
resultado es correcto. Por ejemplo, al ejecutar el programa con x = 3 el resultado que se obtiene
ha de ser el siguiente:
>> polinomio
Escriba el valor de x : 3
El valor de y es :
4
1.3
La bifurcación
Ya se ha visto en los diagramas de flujo realizados en las clases teóricas que las bifurcaciones son
imprescindibles para llevar a cabo ciertas tareas. En MATLAB es posible realizar la bifurcación
básica mediante la sentencia if-else. La forma de uso se muestra en el código que aparece a
continuación.
if condición
...
sentencias bloque S;
...
else
...
sentencias bloque N;
...
end
En esta construcción, la condición es una operación que da como resultado un valor lógico
que puede ser verdadero o falso. Como recordará las operaciones del tipo x>2 producen un valor
de este tipo.
En caso de que la evaluación de la condición arroje un resultado verdadero MATLAB ejecuta
las sentencias del bloque S (bloque sı́). En caso contrario se ejecutan las sentencias del bloque
N (bloque no). Al terminar uno u otro bloque se pasa a las sentencias posteriores a end. Las
palabras if, else y end forman parte del vocabulario de MATLAB. Son palabras reservadas y
por tanto no pueden usarse como identificadores de variables o de archivos.
De la explicación anterior debe resultar evidente que al usar la bifurcación se ejecutan las
sentencias S o las N pero no ambas. Para que quede más claro considere el diagrama de flujo
de la figura 1.1 a) que corresponde a una bifurcación genérica. Dentro de los bloques S y N se
puede colocar cualquier conjunto de sentencias, incluyendo nuevas bifurcaciones como se verá
más adelante.
A fin de aclarar todo esto considere un ejemplo sencillo como el siguiente trozo de código
correspondiente al diagrama de la figura 1.1 b).
x=input(’Introduzca el valor de x ’);
if x < 0,
va = -x;
else
va=x;
Informática, 1o Ing. Aeroespacial
Dpto. Ingenierı́a de Sistemas y Automática. E.T.S. Ingenieros. US. 5
inicio
Leer x
no
sí
no
sí
¿ x < 0 ?
condición
va
Bloque N
x
va
-x
Bloque S
Escribir va
fin
Dato
Resultado. Valor
absoluto de x
Valor para comparación
a)
x
Variable real
va
Variable real
0
Constante entera
b)
Figura 1.1: a) Diagrama de flujo correspondiente a una bifurcación genérica. b) Diagrama de
flujo correspondiente al ejemplo de bifurcación.
end
disp(’El valor absoluto es: ’);
disp(va);
Como puede ver en el bloque S se realiza la operación va ← −x mientras que el bloque N
contiene la operación va ← x. Se consigue de este modo que va sea el valor absoluto del valor
que se ha leı́do x.
Escriba el texto dentro de un archivo de nombre valorabs.m dentro de la carpeta de trabajo.
Ejecute luego el programa y compruebe su funcionamiento. No pase al siguiente ejercicio sin
antes estar totalmente seguro del buen funcionamiento del programa.
El siguiente ejemplo de bifurcación también es muy simple y sirve para calcular cómo serán
las raı́ces de una ecuación de segundo grado.
a=input(’?Coeficiente a?’);
b=input(’?Coeficiente b?’);
c=input(’?Coeficiente c?’);
if b*b-4*a*c < 0,
disp(’Las raı́ces son complejas’);
else
disp(’Las raı́ces son reales’);
end
Es fácil ver que este programa toma como datos los coeficientes a, b y c de una ecuación de
segundo grado ax2 + bx + c = 0, suponiendo que a 6= 0. El programa escribe en la pantalla si
las raı́ces (soluciones de la ecuación) serán reales o complejas (con parte imaginaria).
Antes de avanzar escriba estas sentencias en un archivo de nombre raices2g.m, ejecute el
programa y compruebe su funcionamiento.
6
PRÁCTICA 1. SENTENCIAS DE CONTROL DEL PROGRAMA
1.3.1
Problema ejemplo con bifurcaciones
Se desea leer por teclado dos valores x e y que representan las coordenadas de un punto en el
plano P=(x, y). Se quiere que el programa calcule y escriba el número del cuadrante al que P
pertenece. Se supone que ni x ni y valen cero.
Recuerde que el primer cuadrante se caracteriza porque ambas coordenadas son positivas,
el segundo cuadrante está a la izquierda del primero y se caracteriza por tener abscisas negativas y ordenadas positivas. El tercer cuadrante tiene ambas coordenadas negativas y el cuarto
corresponde a abscisas positivas y ordenadas negativas.
El diagrama de flujo para este ejercicio lo puede consultar en sus apuntes. Intente codificar
dicho diagrama grabándolo en un archivo de texto de nombre micuadrante.m. Compruebe que
el resultado que el programa proporciona es adecuado para distintas combinaciones de x e y.
Recuerde que se ha supuesto que ni x ni y valen cero. En particular, después de la ejecución
compruebe lo siguiente:
• ¿qué variables se han creado? (use who)
• ¿tienen las variables el valor correcto?
En caso de que no se le ocurra cómo codificar el diagrama aquı́ se proporciona una solución.
Para evitar confusiones grabe estas órdenes en un archivo de nombre cuadrante.m. Compruebe
que el resultado que el programa proporciona es adecuado.
x=input(’Introduzca la coordenada x: ’);
y=input(’Introduzca la coordenada y: ’);
if x>0,
if y>0,
resultado=1;
else
resultado=4;
end
else
if y>0,
resultado=2;
else
resultado=3;
end
end
disp(’El cuadrante es : ’);
disp(resultado);
1.4
La esctructura “hacer mientras”
La esctructura “hacer mientras que la condición sea cierta” es una construcción cı́clica con
salida en cabeza. Para codificar esta estructura en MATLAB hacen falta un conjunto de lı́neas
de código que tienen la forma siguiente:
while condición
sentencias del cuerpo del bucle
end
Informática, 1o Ing. Aeroespacial
Dpto. Ingenierı́a de Sistemas y Automática. E.T.S. Ingenieros. US. 7
inicio
Iniciar x a 0
y suma a 0
no
no
¿ x < 10 ?
¿ condición ?
sí
sí
suma
suma + x
cuerpo
x
x + 2
Escribir suma
fin
a)
Contador de 0
a 10
Suma de los
valores de x
Valor inicial
para x y suma
Valor final
para x
Incrementos de
x
x
Variable entera
suma
Variable entera
0
Constante entera
10
Constante entera
2
Constante entera
b)
Figura 1.2: a) Diagrama de flujo correspondiente a un bucle genérico del tipo “repetir mientras
la condición sea cierta”. b) Diagrama de flujo correspondiente al ejemplo de uso del bucle
“mientras”
Las palabras while y end forman parte del vocabulario de MATLAB. Son palabras reservadas
y por tanto no pueden usarse como identificadores de variables o de archivos.
En la figura 1.2 a) se muestra el diagrama de flujo correspondiente al bucle. La condición
es una expresión que da como resultado un valor lógico, por ejemplo x > 2. El cuerpo del bucle
son sentencias cualesquiera.
Examinando el diagrama de flujo de la figura 1.2 a) es fácil deducir que mientras la condición
se cumpla se repetirá el bucle una y otra vez. Es decir, si al evaluar la expresión lógica de la
condición se obtiene un resultado verdadero se pasa a ejecutar el cuerpo del bucle, en caso
contrario se termina el bucle.
Como ejemplo sencillo considere el siguiente trozo de código:
x=0; suma=0;
while x<10,
suma = suma + x;
x = x+2;
end
disp(suma);
Es fácil adivinar qué ocurre al ejecutar este programa, sobre todo si se dibuja el diagrama
de flujo equivalente (véase figura 1.2 b).
Para mejorar la legibilidad de los programas es muy aconsejable incluir comentarios y ordenar
la apariencia en la pantalla de las sentencias. De este modo el ejemplo en cuestión resulta más
fácil de interpretar.
x=0;
suma=0;
% variable contador para el bucle
% variable suma parcial
while x<10,
suma = suma + x;
x = x+2;
end
% condición de salida
% suma parcial
% actualización
8
PRÁCTICA 1. SENTENCIAS DE CONTROL DEL PROGRAMA
disp(suma);
% escritura del resultado
Escriba el texto anterior en un archivo de nombre sumapares.m y compruebe su funcionamiento.
1.4.1
Iteraciones sin final
Se puede dar el caso de que por error la condición de salida del bucle nunca se cumpla lo que
dará lugar a que el programa ejecute un número de iteraciones ilimitado. A este tipo de errores
se les denomina bucles infinitos. Si se le da el caso puede interrumpir la ejecución del programa
pulsando la combinación de teclas Ctrl + C.
1.4.2
Dibujo de la gráfica del seno
Otro ejemplo de aplicación del bucle “mientras” es la construcción de vectores apropiados para
realizar la representación gráfica de una función. En aras de la sencillez se va a concretar con
un ejemplo: dibujar la curva y = sen(x) con x ∈ [−4, 4] radianes.
Para poder realizar la gráfica pedida es preciso generar dos vectores que contengan los valores
de las abscisas (eje x) y de las ordenadas (eje y). Sean estos dos vectores vx y vy. Una vez
generados bastará con escribir la orden de MATLAB plot(vx, vy) y aparecerá la gráfica.
Por tanto el problema se reduce al de calcular los vectores. Puesto que x ∈ [−4, 4] puede ser
una buena idea tomar valores equiespaciados en ese intervalo, por ejemplo cada 0.1 radianes.
De esta forma se tendrá que:
vx = ( − 4, − 3.9, − 3.8, − 3.7, · · · , 3.8, 4).
Por otro lado los valores de vy deben corresponderse con el seno de los valores de vx, por lo
que:
vy = (sen(−4), sen(−3.9), · · · , sen(4))
El diagrama de la figura 1.3 muestra un algoritmo que produce los vectores vx y vy en
la forma indicada. Obsérvese que se hace uso de una función sin que no se ha especificado
por simplicidad. Recuerde que en los diagramas de flujo solamente se han de usar operaciones
permitidas excepto excepciones expresas. Ésta es una de esas excepciones.
Ahora solamente falta codificar el diagrama anterior y añadirle la orden de dibujo. Intente
realizarlo por sı́ mismo. Guarde las órdenes necesarias en un archivo de nombre migrafseno.m en
la carpeta. Ejecute el programa escribiendo migrafseno en la ventana de órdenes de MATLAB.
Después de la ejecución compruebe lo siguiente:
• ¿qué variables se han creado? (use who)
• ¿tienen las variables el valor correcto?
• ¿ha aparecido el dibujo en su ventana?
En caso de que su solución no funcione correctamente se recomienda que dedique un cierto
tiempo a buscar los errores. Si después de eso no consigue eliminar los errores lo más probable
es que deba volver a leer el contenido de esta práctica o de la práctica 1 porque casi seguro que
se le ha pasado algo por alto.
Si a pesar de eso no encuentra el fallo use la solución que se muestra a continuación.
x=-4;
k=1;
% abscisa inicial en radianes
% ı́ndice inicial
Informática, 1o Ing. Aeroespacial
Dpto. Ingenierı́a de Sistemas y Automática. E.T.S. Ingenieros. US. 9
inicio
x
-4
k
1
no
¿ x <= 4 ?
sí
vx k
vy k
k
x
sin(x)
k+1
Valores eje x (rad)
x
Vector de abscisas
vx
Vector de ordenadas
vy
Índice para
vectores
Valor inicial e
incrementos del
índice
Vector de
variables reales
Vector de
variables reales
k
Variable entera
1
Constante entera
Abscisa inicial
(rad)
-4
Constante entera
Incrementos de x
(rad)
0.1
Constante real
Abscisa final (rad)
x
Variable real
4
Constante entera
x+0.1
Función para
calcular el seno
sin
Devuelve un
valor real
fin
Figura 1.3: Diagrama de flujo para el cálculo de vectores para la gráfica del seno.
while x<=4,
vx(k) = x;
vy(k) = sin(x);
x = x + 0.1;
k = k + 1;
end
plot(vx, vy);
%
%
%
%
%
condición de salida
vector de abscisas
vector de ordenadas
incremento de la abscisa
incremento del ı́ndice
% gráfica
Para evitar confusiones guarde este programa en un archivo de nombre grafseno.m y
pruébelo varias veces para comprobar su buen funcionamiento.
1.4.3
Opciones de dibujo
El ejemplo anterior permite diversas modificaciones que ilustran la forma de trabajar de plot y
que son de gran utilidad.
Ejecute el programa de la gráfica del seno (el suyo o el que se proporciona). Ahora escriba
plot(vx, vy, ’r’) observará que la curva sale de otro color. Pruebe las siguientes combinaciones una a una:
• plot(vx, vy, ’g’). Cambio de color.
• plot(vx, vy, ’b’). Cambio de color.
• plot(vx, vy, ’rx’). Esta opción es interesante. Los puntos del plano (vxk , vyk ) aparecen marcados con cruces. Cada cruz representa pues una pareja abscisa-ordenada.
• plot(vx, vy, ’ro’). Otro tipo de marca.
• plot(vx, vy, ’r.’). Otro tipo de marca.
• plot(vx, vy, ’rx-’). Con esta opción aparecen los puntos marcados y además unidos
por segmentos de lı́nea. Es interesante darse cuenta de que cualquier dibujo de MATLAB
10
PRÁCTICA 1. SENTENCIAS DE CONTROL DEL PROGRAMA
es en realidad una colección de segmentos rectos. Si no lo ve claro pruebe a ampliar zonas
del dibujo usando la lupa que aparece en la ventana de dibujo.
Si quiere probar más opciones escriba help plot y aparecerá una lista de opciones para la
función plot.
1.4.4
Continuando con el ejemplo
Para que quede claro que una gráfica no es más que una serie de tramos rectos consecutivos se
propone ahora modificar el programa anterior. En lugar de utilizar un incremento de 0.1 ponga
un incremento de 0.8 y observe el resultado. Para apreciar bien el resultado utilice la versión de
la función plot que coloca marcas y lı́neas: plot(vx, vy, ’rx-’).
Haga posteriormente la prueba con un incremento de 0.01 y vea los cambios que ello conlleva.
Con estos ejemplos debe quedar claro que para que la gráfica se muestre correctamente ha
de contener un número suficiente de puntos. Por otra parte no se pueden usar millones de
puntos pues se excederı́a la memoria del ordenador. Este hecho afecta a todos los programas de
ordenador y no solamente a MATLAB. Los simuladores, los programas de dibujo, etc. también
se ven afectados por esta circunstancia. Por este motivo conviene estar prevenidos acerca de lo
que el ordenador da como resultado, pues no es necesariamente lo que el usuario necesita.
1.5
Auto-evaluación
1.5.1
Ejercicio 1
Enunciado: Se le proporciona una variable x. Debe calcular otra variable p que valga 1 si
x ∈ (5, 7) y cero en cualquier otro caso. Introduzca el trozo de código que resuelve el
problema.
Discusión: No se pide que se lea ninguna variable ni que se escriba ninguna variable. Solamente
se pide que se calcule p en función de x siguiendo una regla dada.
Solución: El problema se resuelve con un algoritmo como el que se muestra en la figura 1.4.
La codificación del algoritmo en MATLAB es:
if x>5 & x<7,
p=1;
else
p=0;
end
Comprobación: Para comprobar que la codificación es correcta puede usar el entorno de MATLAB. Para ello puede proceder del siguiente modo: proporcione a x un valor factible y
luego ejecute el código de la solución, escriba luego el valor de p y compruebe si el resultado
es correcto. Repita la comprobación para otros valores de x hasta que quede convencido
del buen funcionamiento.
1.5.2
Ejercicio 2
Enunciado: Se le proporciona un valor n entero y mayor que cero. Se le pide que construya un
vector v tal que v ∈ IR1×n y siendo sus componentes los primeros múltiplos del número 3
comenzando por el propio 3. Introduzca el trozo de código que resuelve el problema.
Informática, 1o Ing. Aeroespacial
Dpto. Ingenierı́a de Sistemas y Automática. E.T.S. Ingenieros. US. 11
inicio
¿ x>5 Y x<7 ?
sí
p
Resultado
p
Variable real
Valor proporcionado
x
Variable entera
Valor para
comparación
5
Constante entera
Valor para
comparación
7
Constante entera
1
Constante entera
0
Constante entera
no
1
p
0
Valor del resultado
en caso de
pertenencia
Valor del resultado
en caso de no
pertenencia
fin
Figura 1.4: Diagrama de flujo correspondiente al ejercicio 1 de autoevaluación.
inicio
k
1
no
¿ k <= n ?
Vector resultado
v
Vector de
variables
enteras
Índice para el
vector v
k
Variable entera
Valor inicial e
incrementos del
índice k
1
Constante entera
Multiplicador
3
Constante entera
sí
vk
3·k
k
k+1
fin
Figura 1.5: Diagrama de flujo correspondiente al ejercicio 2 de autoevaluación.
Discusión: No se pide que se lea ninguna variable ni que se escriba ninguna variable. Solamente
se pide que se calcule v siguiendo una regla dada. Del propio enunciado debe quedar claro
que si n fuese 1 entonces v = (3), si n fuese 2 entonces v = (3, 6), si n fuese 3 entonces
v = (3, 6, 9), etc.
Solución: El problema se resuelve con un algoritmo como el que se muestra en la figura 1.5.
La codificación del algoritmo en MATLAB es:
k=1;
while k<=n,
v(k) = 3*k;
k = k + 1;
end
Comprobación: Para comprobar que la codificación es correcta puede usar el entorno de MATLAB. Para ello puede proceder del siguiente modo: proporcione a n un valor factible determinado (entero y mayor que cero). Luego ejecute el código de la solución, escriba luego
el valor de v y compruebe si el resultado es correcto. Repita la comprobación para otros
valores de x hasta que quede convencido del buen funcionamiento.
12
PRÁCTICA 1. SENTENCIAS DE CONTROL DEL PROGRAMA
1.6
1.6.1
Ejercicios propuestos
Ejercicio propuesto 1.
Se le proporciona un valor x. Se desea calcular y como y = f(x) siendo f una función definida a
trozos del modo siguiente:
• Si x < −10, f(x) = −x2
• Si −10 ≤ x < 2, f(x) = x3
• En el resto de casos f(x) = 0
Introduzca el trozo de código que resuelve el problema.
1.6.2
Ejercicio propuesto 2
Como paso previo para dibujar la gráfica de y =cos(x3 /20) se desean calcular dos vectores vx y
vy con las caracterı́sticas siguientes:
• Han de tener 101 componentes
• Las componentes de vx estarán equiespaciadas, comenzando en v1 = −6 y terminando en
v101 = 6
• Las componentes de vy serán vyk =cos(x3 /20) para k = 1, 2, · · · , 101.
Lógicamente, para este ejercicio se permite el uso de la función cos. Introduzca el trozo de
código que resuelve el problema.
1.6.3
Ejercicio propuesto 3
Se le proporciona un valor n que es un número entero y no negativo. Se desea calcular y de
tal manera que y = n!. La variable n es un valor que deberá leer por teclado. El código ha de
resolver el problema mediante un bucle con while, de esa forma necesariamente y no de otra.
Introduzca el trozo de código que resuelve el problema.
1.6.4
Ejercicio propuesto 4
Se han dispuesto un conjunto de medidas de temperatura en un vector fila v de dimensión
n > 2. Se le proporciona dicho vector y también el número n. Se quiere calcular la media m
de las temperaturas en el vector. Se supone que v y n son valores dados, por lo que no hay
que leer nada. El código ha de resolver el problema mediante un bucle con while, de esa forma
necesariamente y no de otra. Introduzca el trozo de código que resuelve el problema.
Descargar