Vous êtes sur la page 1sur 134

Lenguajes de Programacion

Gua docente ECTS


Ingeniera Naval y Oceanica
Escuela Tecnica Superior de Ingenieros Navales
Universidad Politecnica de Madrid
A. Souto Iglesias, J.L. Bravo Trinidad
L. Gonzalez Gutierrez, A. Cant on Pire
30 de septiembre de 2008
....para m una buena escuela sera una escuela distinta,
una escuela que tuviese un principio seg un el cual todas sus
normas estuviesen enfocadas a mantener a tantos estudiantes
como sea posible durante el mayor tiempo dentro del sistema.
As, todo tendra que estar dirigido a hacer que los estudiantes
participasen, que se sintiesen identicados con la escuela, que
tuviesen la sensacion de estar haciendo las cosas bien. Para
m una buena escuela es una escuela que mantiene a todos los
alumnos trabajando, comprometidos y con la sensacion de que no
van a fracasar.
Stephen Ball.
In teaching you philosophy Im like a guide showing you how
to nd your way round London. I have to take you through
the city from north to south, from east to west, from Euston
to the embankment and from Piccadilly to the Marble Arch.
After I have taken you many journeys through the city, in
all sorts of directions, we shall have passed through any
given street a number of times - each time traversing the
street as part of a dierent journey. At the end of this
you will know London; you will be able to nd your way about
like a Londoner. Of course, a good guide will take you through
the more important streets more often than he takes you down
side streets; a bad guide will do the opposite. In philosophy
Im a rather bad guide.
L. Wittgenstein.

Indice general
Notacion y abreviaturas 6
I Aprender a programar, con MATLAB 7
Introducci on 9
0. Tutorial de MATLAB 13
0.1. Introducci on . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
0.2. Conceptos basicos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
0.3. Manejo de vectores . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
0.4. Introducci on al tratamiento de matrices . . . . . . . . . . . . . . . . . . . . . 19
0.5. Resoluci on de sistemas lineales . . . . . . . . . . . . . . . . . . . . . . . . . 23
0.6. Vectorizacion de operaciones . . . . . . . . . . . . . . . . . . . . . . . . . . 25
0.7. Creaci on de gracas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
0.8. Conjuntos de ordenes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28
0.9. MATLAB y n umeros complejos . . . . . . . . . . . . . . . . . . . . . . . . . 31
0.10. Matematicas simb olicas con MATLAB . . . . . . . . . . . . . . . . . . . . . 32
1. Funciones y Condicionales 35
1.1. General . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35
1.2. Funciones y variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35
1.3. Funciones con varios argumentos de entrada . . . . . . . . . . . . . . . . . . 38
1.4. Estructura de control condicional if . . . . . . . . . . . . . . . . . . . . . . . 40
1.5. Estructura de control condicional if-else . . . . . . . . . . . . . . . . . . . . . 42
1.6. Funci on que llama a otra funcion . . . . . . . . . . . . . . . . . . . . . . . . 43
1.7. Condicionales anidados. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44
1.8. Variante elseif en el condicional . . . . . . . . . . . . . . . . . . . . . . . . . 46
1.9. Operadores logicos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47
1.10. Operadores de comparaci on: son iguales? . . . . . . . . . . . . . . . . . . . 50
1.11. Igualdad entre n umeros reales: precisi on y valor absoluto . . . . . . . . . . . . 50
1.12. Variables enteras y reales como argumentos . . . . . . . . . . . . . . . . . . . 52
1.13. Variables contador y sumador . . . . . . . . . . . . . . . . . . . . . . . . . . 53
1.14. Funci on parte entera . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54
2. Bucles 55
2.1. General . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55
2.2. Bucles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55
2.3. Bucles con incremento variable . . . . . . . . . . . . . . . . . . . . . . . . . 57
Pag. 3
Lenguajes de Programaci on: Gua ECTS
2.4. Bucles con otras operaciones . . . . . . . . . . . . . . . . . . . . . . . . . . 57
2.5. Bucles y relaciones de recurrencia . . . . . . . . . . . . . . . . . . . . . . . . 58
2.6. Bucles y condicionales . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60
2.7. Uso de bucles para vericar una condici on sobre un conjunto. . . . . . . . . . 62
2.8. Bucles anidados. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63
3. Vectores 65
3.1. General . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65
3.2. Vectores como argumentos de funciones . . . . . . . . . . . . . . . . . . . . . 65
3.3. Funciones que llaman a funciones con argumentos vectores . . . . . . . . . . . 66
3.4. Calculo de extremos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67
3.5. Calculo de posicion de extremos . . . . . . . . . . . . . . . . . . . . . . . . . 69
3.6. Evaluaci on de un polinomio . . . . . . . . . . . . . . . . . . . . . . . . . . . 70
3.7. Funci on que devuelve un vector . . . . . . . . . . . . . . . . . . . . . . . . . 73
3.8. Funciones que reciben y devuelven vectores . . . . . . . . . . . . . . . . . . . 75
3.9. Construcci on de vectores . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 77
3.10. Vectores y bucles anidados . . . . . . . . . . . . . . . . . . . . . . . . . . . . 78
3.11. Funciones con salidas m ultiples . . . . . . . . . . . . . . . . . . . . . . . . . 80
II Gua ECTS para estudiantes 83
1. Introduccion 85
2. Datos generales 87
2.1. Temporalidad y caracter . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 87
2.2. Creditos LRU . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 87
2.3. Departamento . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 87
2.4. Profesores . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 87
2.5. Creditos ECTS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 88
3. Objetivos 89
3.1. General . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 89
3.2. Objetivos generales: descripci on . . . . . . . . . . . . . . . . . . . . . . . . . 89
3.3. Prerrequisitos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91
3.4. Otras asignaturas de las que LP es prerrequisito . . . . . . . . . . . . . . . . 91
4. Programa y Metodologa 93
4.1. Metodos docentes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 93
4.2. Temario y estimaci on del tiempo de estudio . . . . . . . . . . . . . . . . . . . 94
5. Recursos 97
5.1. Gua . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 97
5.2. Tutoras . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 97
5.3. Tutoras virtuales . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 97
5.4. Pagina web - Plataforma de B-learning . . . . . . . . . . . . . . . . . . . . . 97
5.5. Copias . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 98
5.6. Centro de Calculo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 98
5.7. Bibliografa . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 98
Pag. 4

INDICE GENERAL
6. Evaluacion 101
6.1. General . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 101
6.2. Evaluaci on tradicional . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 101
6.3. Evaluaci on ECTS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 101
6.4. El examen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 103
6.5. Evaluaci on de los objetivos . . . . . . . . . . . . . . . . . . . . . . . . . . . 105
III Apendices 107
A. Ejemplos de Examenes 109
B. Gestion del CC 117
C. Control de tiempos y cha 123
D. Premio SENER 127
Indice alfabetico 132
Pag. 5
Lenguajes de Programaci on: Gua ECTS
Notaci on y abreviaturas
AO Aula de Ordenadores
aptdo. apartado
cap. captulo
DHOf para referirse a actividades a realizar dentro del horario ocial.
DNI para referirse al n umero del Documento Nacional de Identidad.
ECTS sistema de creditos europeos.
FHOf para referirse a actividades a realizar fuera del horario ocial.
g. gura
G para referirse a actividades a realizar en grupo.
GATE Gabinete de Teleeducaci on.
I para referirse a actividades a realizar de modo individual.
JEE Jefatura de Estudios.
LOU Ley Organica d 6/2001 de Universidades.
LP Lenguajes de Programaci on.
LRU Ley Organica 11/1983 de Reforma Universitaria.
MEC Ministerio de Educaci on y Ciencia.
pag. pagina.
PAS Personal de Administracion y Servicios.
PF Portafolio.
ref. referencia bibliograca.
TIC Tecnologas de la informaci on y la comunicacion.
Pag. 6
Parte I
Aprender a programar, con MATLAB
Pag. 7
Introduccion
De modo resumido, podemos decir que programar es ense narle a un ordenador c omo se
resuelve un determinado problema. Para poder ense nar a alguien, es necesario dos cosas: tener
un lenguaje en com un y conocer bien lo que se quiere ense nar. En esta primera parte nos
ocupamos del primer problema (que es el mas sencillo y el que responde a la denici on de
programar).
El lenguaje que hablan los ordenadores es muy simple, por lo que el proceso de aprenderlo
sera rapido. El principal problema es descomponer ideas complejas en otras mas simples para
que podamos programarlas.
Siguiendo el esquema anterior, hemos organizado cada unidad didactica en un esquema concepto-
ejemplo-ejercicios/problemas. Normalmente se trabajan uno o dos conceptos de Programaci on
en cada unidad didactica (contadores y bucles while, por ejemplo), los cuales se introducen
primero formalmente y despues mediante un ejemplo, sobre el que se proponen una serie de
ejercicios que nos permitan asimilar y madurar las ideas explicadas.
Por cada concepto introducido se trabajan cuatro o cinco ejemplos. Se pretende que en cada
uno de estos ejemplos aparezca un uso habitual del concepto introducido. Se trata de asimilar
bloques con un sentido concreto, construidos con los elementos basicos de Programacion. A
menudo, en los cursos de Programacion, se introducen s olo los elementos de Programacion y se
supone que el alumno aprendera a integrarlos por s mismo. Sin embargo, muchas aplicaciones
de esos elementos son estandares en la programacion (por ejemplo, el uso de contadores, un
bucle while y un condicional para seleccionar determinados elementos de un vector, crear un
vector mediante un contador, etc.) y una vez nos hemos familiarizado con ese uso conseguimos
una mayor agilidad a la hora de programar.
Las unidades didacticas que constituyen el curso son las siguientes:
0. Tutorial de MATLAB.
1. Funciones y Condicionales.
2. Bucles.
3. Vectores.
El curso comienza con un tutorial en el que se usa MATLAB como una potente calculadora
al principio para terminar dibujando curvas, y agrupando instrucciones en cheros script,
lo que permite introducir ideas importantes para mas adelante crear funciones. Ademas, se
aprovecha esta unidad 0 para insistir en conceptos basicos de manejo de las herramientas del
sistema operativo, sobre todo la creaci on y gesti on de carpetas, y la ubicaci on precisa de las
mismas en el sistema de archivos del usuario, bien en un disco local o en la unidad de red del
aula de ordenadores donde se trabaja.
Pag. 9
Lenguajes de Programaci on: Gua ECTS
El lenguaje elegido para la implementacion de ejemplos y ejercicios es el lenguaje de comandos
o scriptde MATLAB (o su version libre Octave). Esta elecci on se debio a varios motivos:
1. MATLAB es un entorno de calculo que los estudiantes usaran a lo largo de la carrera y
probablemente despues en su vida profesional ya que dispone de herramientas especcas
(toolboxes) para muchos ambitos. Aunque las competencias de manejo asociadas
a esas herramientas especcas no se trabajan en este curso, el que el estudiante se
sienta al nal c omodo con el entorno MATLAB le permitira si es necesario asimilar su
funcionamiento con mucha mayor facilidad que si empezase de cero con el programa.
2. MATLAB es un lenguaje completo; tiene todos los elementos de un lenguaje de progra-
maci on, con una sintaxis similar al C pero con la simplicidad del BASIC. Comprobamos
en cursos anteriores que al utilizar un lenguaje como C, los alumnos dedicaban la mayor
parte del tiempo a la correcci on de errores de sintaxis y a la declaracion de variables,
reserva de memoria, etc., teniendo poco tiempo para comprender el funcionamiento de
las estructuras de datos o de control del ujo del programa. En este sentido, el lenguaje
MATLAB se acerca al pseudoc odigo usado en algunos cursos de Programaci on, pero con
la ventaja de poder realmente ejecutar los c odigos creados. La simplicidad de MATLAB
a estos efectos es a veces causa de falta de rigor en la forma de abordar la Progra-
maci on. As el hecho de que no haya tipado explcito de variables pudiendo la misma
variable ser una matriz en una lnea del c odigo y un escalar un poco mas abajo, o de
MATLAB se ocupe del la reserva dinamica de memoria de modo automatico, nos alejan
de un lenguaje mas potente como C. Sin embargo y como comentabamos mas arriba,
eso permite centrarse en el manejo de estructuras de control para resolver problemas y
desarrollar estrategias, creemos que esencial al principio.
3. MATLAB es un lenguaje interpretable: MATLAB traduce durante la ejecuci on las di-
ferentes sentencias al lenguaje primario y basico de la maquina. Se paga el precio de
necesitar MATLAB para ejecutar nuestros c odigos pero se recibe la recompensa de no
tener que compilar y enlazar nuestros c odigos para despues ejecutarlos.
4. MATLAB proporciona una interfaz que permite probar las funciones directamente sin
necesidad de llamarlas desde un programa principal. Esto permite comprobar su fun-
cionamiento de un modo sencillo e inmediato, y como comentamos mas abajo, ha permi-
tido una estructura del curso creemos que muy interesante para un curso de introduccion
a la Programaci on para no Informaticos.
5. Todo ello hace que sea muy sencillo empezar a generar codigos interesantes en MATLAB,
algo a lo que se llega con mucho mas esfuerzo en un lenguaje de Programaci on mas
riguroso como C.
Una vez realizado este tutorial, hasta hace unos a nos empleabamos la organizaci on curricular
usual en un curso de Programacion (comenzando por la entrada y salida y el programa Hola
mundo). Sin embargo, ahora usamos una estructura similar a la programacion funcional,
comenzando por el concepto de funcion y estudiando la entrada y salida casi al nal. De
este modo, en la unidad 1 se trabaja al principio sobre el concepto de funci on, introduciendo
inmediatamente la estructura de control condicional, la cual permite construir funciones mas
complejas e interesantes.
En la unidad 2 se trabaja con bucles, posibilitando la repeticion de operaciones. Es una unidad
Pag. 10
ardua, pues no se recurre todava a vectores o matrices, donde los bucles surgen de modo
natural. Aqu estan los ejemplos mas interesantes del curso, como el de comprobar si un
n umero natural es primo. Si el estudiante se siente c omodo al nal de esta unidad, el resto
del curso sera para el una progresi on sencilla. Si no se siente comodo todava, tendra ocasion
de cubrir los vacos en las unidades siguientes.
En la unidad 3 se introducen los vectores, pues ya se tienen las herramientas para manejarlos.
Como comentabamos en el pr ologo, no hemos pretendido escribir un compendio exhaustivo
ni de Programaci on ni de MATLAB. Debido a ello la selecci on de unidades didacticas no es
inocente sino que subyace la idea de mostrar unicamente los aspectos considerados esenciales
para aprender a programar. Creemos que en ese sentido el libro es una aportacion interesante
ya que no hay en la literatura cursos de introduccion a la Programaci on que se apoyen en
MATLAB como lenguaje de referencia, y lo mas parecido corresponde a cursos de MATLAB
en los que en alg un captulo se tratan diferentes aspectos de la programacion
1
. En cuanto a
compendios de MATLAB, recomendamos el sensacional trabajo de Guillem Borrell
2
.
1
Gilat, A., MATLAB. Una introduccion con ejemplos practicos, Reverte, 2006, es un buen ejemplo de este
tipo de libros
2
Borrell i Nogueras, G., Introduccion Informal a MATLAB y OCTAVE. Disponible online en
http://forja.rediris.es/
Pag. 11
Lenguajes de Programaci on: Gua ECTS
Pag. 12
Unidad Didactica 0
Tutorial de MATLAB
0.1. Introduccion
Presentamos un tutorial de MATLAB, una herramienta potentsima, casi estandar para calculos
en muchas ramas de la Ingeniera, y de uso razonablemente simple. En la asignatura de LP,
utilizaremos el interprete de comandos de MATLAB para que el estudiante se introduzca en
el apasionante mundo de la programacion de ordenadores. Este tutorial, en el que haremos
una descripci on de los elementos basicos de MATLAB, y que se realizara durante las primeras
sesiones del curso de LP, tiene como objetivo que el estudiante se sienta comodo con el
programa y con el sistema de usuarios, carpetas y archivos del CC. As, al nal del tutorial
sera capaz de utilizar MATLAB como si fuese una calculadora potentsima, manejando sus
elementos de calculo en lnea de comandos, sin entrar en la programaci on de aplicaciones, a
lo cual nos dedicaremos el resto del curso.
0.2. Conceptos basicos
Para arrancar MATLAB, se procede como con cualquier programa Windows, o sea, Inicio,
Programas, MATLAB, R2006a, MATLAB R2006a
1
, o con el correspondiente icono en el
escritorio, que tiene como etiqueta MATLAB R2006a. Una vez arrancado, nos encontramos
con algo similar a lo que se observa en la gura 1. En el espacio que denotamos como ventana
de comandos en dicha gura aparece el cursor con el smbolo (>>) o (EDU >>), indicando
que se pueden introducir ordenes. De hecho, en este tutorial, cuando aparezca este smbolo, se
tiene que introducir por teclado la orden que aparece escrita a la derecha del mismo. Podeis,
de momento, cerrar las otras ventanas que aparecen en la pantalla, para quedaros simplemente
con la ventana de comandos.
La utilizaci on mas basica de MATLAB es como calculadora
2
. As, por ejemplo, para calcular
cos(5) 2
7.3
, se debe introducir
3
:
>>cos(5)
*
27.3
ans =
44.7013
1
A veces, durante el curso hay algunos problemas con las licencias y se usa la version educacional, a la cual
se accede con Inicio, Programas, Student MATLAB, o a traves del icono q esta en el escritorio
2
Funcionando de este modo, es similar a una calculadora programable, aunque bastante mas versatil.
3
Los argumentos de las funciones trigonometricas siempre estan en radianes.
Pag. 13
Lenguajes de Programaci on: Gua ECTS
Figura 1: Espacio de trabajo de MATLAB
Pag. 14
UNIDAD DID

ACTICA 0. TUTORIAL DE MATLAB


MATLAB mantiene en memoria el ultimo resultado. Caso de que ese calculo no se asigne a
ninguna variable, lo hace a una variable por defecto de nombre ans. Si queremos referirnos
a ese resultado, lo haremos a traves de la variable ans, y si no se asigna ese nuevo calculo a
ninguna variable, volvera a ser asignado a ans.
>>log(ans)
ans =
3.8000
En este momento cabra preguntarnos si tratamos con un logaritmo decimal o con uno nepe-
riano (natural). Para saberlo, pedimos ayuda acerca del comando log utilizando:
>>help log
LOG Natural logarithm.
LOG(X) is the natural logarithm of the elements of X.
Complex results are produced if X is not positive.
See also LOG2, LOG10, EXP, LOGM.
Aunque en la explicaci on que se obtiene al pedir helpde las ordenes los comandos aparecen
en may usculas, se deben usar en min usculas.
Por defecto, los resultados aparecen con 4 cifras decimales. Si se necesitara mas precision en
los resultados, se puede utilizar la orden format long repitiendo los calculos:
>>format long
Para recuperar una orden y ejecutarla otra vez o modicarla se usan la echas arriba y abajo
del cursor , . Presionemos hasta recuperar la orden:
>>cos(5)
*
27.3
ans =
44.70132670851334
Ejercicio 0.1 Realizar la siguiente operacion: 2.7
2.1
+ log
10
108.2.
Ejercicio 0.2 Pedir ayuda de la orden exp.
Ejercicio 0.3 Realizar la siguiente operacion e
2.7
2.1
+log
10
108.2
.
El resultado del ejercicio anterior aparecera como 2.3992e+004. La notacion 2.3992+004,
signica 2.3992 10
4
o lo que es lo mismo 23992.
Si necesitamos referirnos a determinados calculos, se asignan a variables y as se pueden
recuperar despues. El concepto de variable es crucial cuando se programa, como veremos
durante todo el curso. Por ejemplo, podemos recuperar con la orden cos(5) 2
7.3
y asignar su
valor a la variable x editando dicha orden. Luego podremos utilizarla para otros calculos. Los
nombres de las variables en MATLAB han de comenzar por una letra; ademas, no contendran
smbolos que nos sean letras, n umeros o el guion bajo (que esta en la misma tecla que el signo
menos).
Pag. 15
Lenguajes de Programaci on: Gua ECTS
>>x=cos(5)
*
27.3
x =
44.70132670851334
>>y=log(x)
y =
3.80000318145901
Ejercicio 0.4 Realizar la siguiente operacion: 2.7
2.1
+ log
10
108.2 y asignarla a la variable x.
Ejercicio 0.5 Realizar la siguiente operacion: e
2.7
2.1
+log
10
108.2
y asignarla a la variable t.
Si queremos saber cuanto vale una variable, no tenemos mas que escribirla en la lnea de
comandos y pulsar Enter.
>>y
y =
3.80000318145901
Como es muy facil recuperar ordenes previas podemos utilizar esta idea para simular los termi-
nos de una sucesion recurrente. Por ejemplo, x
n+1
= cos(x
n
)
>>x=0.2
x =
0.20000000000000
>>x=cos(x)
x =
0.98006657784124
>>x=cos(x)
x =
0.55696725280964
>>x=cos(x)
x =
0.84886216565827
>>x=cos(x)
x =
0.66083755111662
>>x=cos(x)
x =
0.78947843776687
>>x=cos(x)
x =
0.70421571334199
Ejercicio 0.6 Repetir la operaci on anterior hasta que se estabilice el cuarto decimal de x de
un paso al siguiente.
Ejercicio 0.7 Cambiar el formato para que otra vez se vean s olo cuatro decimales.
Ejercicio 0.8 Empezando por x = 100 repetir la operaci on
x = x
x
2
81
2x
hasta que se converja en el cuarto decimal. Que relaci on hay entre el ultimo x y 81?
Pag. 16
UNIDAD DID

ACTICA 0. TUTORIAL DE MATLAB


Ejercicio 0.9 Denir A como en vuestro documento de identidad o pasaporte. Empezando
por x = 100 repetir la operaci on
x = x
x
2
A
2x
hasta que se converja en el cuarto decimal. A que ha convergido la sucesion?
4
Es interesante comentar de este ejercicio que MATLAB distingue entre letras may usculas y
min usculas en los nombres de las variables.
A veces es bueno apagar y encender la calculadora para borrar todo y empezar de nuevo. Esto
se hace con la orden clear. Hay que tener cuidado al utilizarla, ya que borra todas las variables
que esten en la memoria sin pedir conrmacion.
>>clear
>>x
??? Undefined function or variable x.
Ejercicio 0.10 Preguntar el valor de A igual que acabamos de preguntar x. Tiene sentido
el resultado?
0.3. Manejo de vectores
Para crear y almacenar en memoria un vector v que tenga como componentes v
1
= 0, v
2
= 2,
v
3
= 4, v
4
= 6 y v
5
= 8 podemos hacerlo componente a componente:
>>v(1)=0
v =
0
>>v(2)=2
v =
0 2
>>v(3)=4
v =
0 2 4
>>v(4)=6
v =
0 2 4 6
>>v(5)=8
v =
0 2 4 6 8
Se puede tambien denir este vector especicando su primer elemento, un incremento y el
ultimo elemento. MATLAB rellenara paso a paso sus componentes. As, podemos denir igual-
mente el vector v como una secuencia que empieza en 0, avanza de 2 en 2 y que termina en
el 8:
4
Las calculadoras obtienen la raz cuadrada de un n umero mediante esta sucesion.
Pag. 17
Lenguajes de Programaci on: Gua ECTS
>> v = [0:2:8]
v =
0 2 4 6 8
>> v
v =
0 2 4 6 8
Si ponemos ; al nal de una lnea de comandos, cuando pulsemos la tecla Enter para ejecutarla,
se ejecutara pero no mostrara el resultado en pantalla (se anula el eco en pantalla). Esto es
muy util algunas veces:
>> v = [0:2:8];
>> v
v =
0 2 4 6 8
Podemos construir el vector v editando directamente entre los corchetes las componentes del
vector v:
>>v = [0 2 4 6 8];
>> v
v =
0 2 4 6 8
Es facil acceder al contenido de una posicion del vector, por ejemplo la primera.
>> v(1)
ans =
0
O modicarla:
>> v(1)=-3;
>> v
v =
-3 2 4 6 8
O hacer operaciones entre componentes, v
2
v
3
5
:
>> v(2)
*
v(5)3
ans =
1024
Ejercicio 0.11 Calcular la suma de los elementos de v, elemento a elemento.
Para trasponer un vector o una matriz se usa el ap ostrofo, que es el acento que esta en la
misma tecla que el signo de interrogacion ?.
>> v
ans =
-3
2
4
6
8
Pag. 18
UNIDAD DID

ACTICA 0. TUTORIAL DE MATLAB


Como hemos comentado, para recuperar una orden y ejecutarla otra vez o modicarla se usan
la echas arriba y abajo del cursor , . Presionemos hasta recuperar la orden:
>> v(1)=-3;
Modiquemosla para dejar el valor original
>> v(1)=0;
Al denir ese vector v de 5 componentes, en realidad lo que denimos es una matriz la de
cinco columnas, o sea, un matriz de 1 5. Esto se comprueba preguntando el tama no de v
con la sentencia size:
>>size(v)
ans =
1 5
que nos indica que v tiene una la y 5 columnas.
Ejercicio 0.12 Denir un nuevo vector que sea el traspuesto de v y aplicar a ese vector el
comando size. Es coherente el resultado?
Ejercicio 0.13 Pedir ayuda sobre la funci on norm y aplicarla al vector v.
0.4. Introduccion al tratamiento de matrices
Haremos una introducci on a la denicion y manipulacion de matrices. Se supone que se ha
seguido la secci on anterior y que se dispone de los conocimientos basicos sobre la denicion
y manipulacion de vectores usando MATLAB. La denici on de una matriz es muy similar a la
de un vector. Para denir una matriz, se puede hacer dando sus las separadas por un punto
y coma (no olvidarse poner los espacios en blanco!):
>> A = [ 1 2 3; 3 4 5; 6 7 8]
A =
1 2 3
3 4 5
6 7 8
o denirla directamente la a la, que es mas intuitivo:
>> A = [ 1 2 3
3 4 5
6 7 8]
A =
1 2 3
3 4 5
6 7 8
Se puede modicar alguno de los elementos de la matriz A, accediendo a cualquiera de sus
posiciones, por ejemplo:
Pag. 19
Lenguajes de Programaci on: Gua ECTS
>> A(2,2)=-9
A =
1 2 3
3 -9 5
6 7 8
Dejemos su valor original:
>> A(2,2)=4;
De igual modo, se la puede considerar como una la de vectores columna:
>> B = [ [1 2 3] [2 4 7] [3 5 8]]
B =
1 2 3
2 4 5
3 7 8
(Otra vez, es importante colocar los espacios en blanco.)
Ejercicio 0.14 Sumar los elementos diagonales de la matriz A, reriendonos a ellos, elemento
a elemento.
Podemos sumar o restar matrices para tener otras matrices.
>>C=A+B
C =
2 4 6
5 8 10
9 14 16
Ejercicio 0.15 Denir la matriz D = 2B A.
Tambien podemos multiplicarlas.
>>C=A
*
B
C =
14 31 37
26 57 69
44 96 117
Ejercicio 0.16 Denir la matriz D = B A B.
Ejercicio 0.17 Denir la matriz C = AA
t
.
Podemos denir algunos tipos especiales de matrices, como por ejemplo una matriz de 3 3
que tenga todos sus elementos nulos.
>>I=zeros(3)
I =
0 0 0
0 0 0
0 0 0
Pag. 20
UNIDAD DID

ACTICA 0. TUTORIAL DE MATLAB


Podemos modicar sus elementos diagonales para tener la matriz identidad.
>>I(1,1)=1;
>>I(2,2)=1;
>>I(3,3)=1
I =
1 0 0
0 1 0
0 0 1
Ejercicio 0.18 Repetir el ejercicio 0.16 sacando factor com un y utilizando la matriz identidad.
Otra forma de denir la matriz identidad es a traves de la funcion diag, que recibe un vector
que convierte en diagonal de una matriz cuyos otros elementos son nulos.
>>J=diag([1 1 1])
J =
1 0 0
0 1 0
0 0 1
Ejercicio 0.19 Denir una matriz D diagonal cuyos elementos sean 2, 1, 0.2 y 0.7.
Ejercicio 0.20 Pedir ayuda de la funcion eye, y denir la matriz identidad de 10 10.
Ejercicio 0.21 Repetir el ejercicio 0.16 sacando factor com un y utilizando la funcion eye.
0.4.1. Denicion de submatrices
La denici on de subvectores o submatrices es muy facil. Si v es
>> v = [0:2:8]
v =
0 2 4 6 8
Podemos denir un vector e cuyas componentes sean las tres primeras componentes del vector
v poniendo
>> e=v(1:1:3)
e =
0 2 4
donde el primer uno indica que vamos a tomar el primer elemento de v. El segundo n umero es
el incremento de ndices dentro de v y el ultimo n umero marca el elemento nal. Esta orden
es equivalente a la siguiente
>> e=v(1:3)
e =
0 2 4
ya que cuando el incremento es la unidad, se puede suprimir.
Pag. 21
Lenguajes de Programaci on: Gua ECTS
Ejercicio 0.22 Adivinar cual va a ser el resultado de las dos ordenes siguientes
>> e=v(2:2:5)
>> e=v(1:3:5)
Como comentamos al principio, la notacion usada por MATLAB sigue en lo posible la notaci on
estandar de

Algebra Lineal que se asume conocida. Es muy sencillo multiplicar matrices y
vectores, teniendo cuidado de que las dimensiones sean las adecuadas.
>> A
*
v(1:3)
??? Error using ==
*
Inner matrix dimensions must agree.
>> A
*
v(1:3)
ans =
16
28
46
Es importante acostumbrase a ver ese mensaje de error. Una vez que se empieza a trabajar
con vectores y matrices, es sencillo olvidar los tama nos de los objetos que se han ido creando.
Ejercicio 0.23 Utilizando el comando size, razona sobre los problemas en lo que se reere a
dimensiones en la multiplicacion anterior.
Se pueden extraer columnas o las de una matriz. Si queremos, por ejemplo, que C sea la
tercera la de la matriz A:
>> C=A(3,:)
C =
6 7 8
O que C sea la segunda columna de la matriz B
>>C=B(:,2)
C =
2
4
7
O bien que D sea la submatriz cuadrada de orden dos inferior derecha de la matriz A.
>> D=A(2:3,2:3)
D =
4 5
7 8
Ejercicio 0.24 Denir una matriz de nombre D1 formada por la primera y tercera columnas
de la matriz A.
Una vez que se es capaz de crear y manipular una matriz, se pueden realizar muchas op-
eraciones estandar. Por ejemplo, calcular su inversa. Hay que tener cuidado y no olvidar que
las operaciones son calculos numericos realizados por ordenador. En el ejemplo, A no es una
matriz regular, y sin embargo MATLAB devolvera su inversa, pues los errores de redondeo
durante su calculo convierten en invertible a dicha matriz.
Pag. 22
UNIDAD DID

ACTICA 0. TUTORIAL DE MATLAB


>> inv(A)
Warning: Matrix is close to singular or badly scaled.
Results may be inaccurate. RCOND = 4.565062e-18
ans =
1.0e+15
*
-2.7022 4.5036 -1.8014
5.4043 -9.0072 3.6029
-2.7022 4.5036 -1.8014
Con la matriz B s que es posible calcular su inversa:
>>inv(B)
ans =
-3.0000 5.0000 -2.0000
-1.0000 -1.0000 1.0000
2.0000 -1.0000 0
Ejercicio 0.25 Denir una matriz de nombre B1 como la inversa de B. Multiplicar B por B1
y razonar la coherencia del resultado.
Hay que comentar que MATLAB distingue entre may usculas y min usculas. Este puede ser el
origen de algunas confusiones si se manejan algoritmos complejos.
>> inv(a)
??? Undefined function or variable a.
0.5. Resolucion de sistemas lineales
Tambien hay funciones para resolver sistemas lineales. Si Ax = b y queremos encontrar x,
el modo mas directo es simplemente invertir A, y luego premultiplicar por la inversa ambos
lados. Sin embargo, hay medios mucho mas ecientes y estables para resolver sistemas lineales
pero nosotros de momento nos quedaremos con este. Por ejemplo, el sistema lineal Bx = v
con:
>>v = [1 3 5]
v =
1
3
5
>>B = [ [1 2 3] [2 4 7] [3 5 8]];
se resuelve con:
>> x = inv(B)
*
v
x =
2
1
-1
Para comprobar:
Pag. 23
Lenguajes de Programaci on: Gua ECTS
>> B
*
x
ans =
1
3
5
Ejercicio 0.26 Denir una matriz B2 = BB
t
.
Ejercicio 0.27 Encontrar la soluci on del sistema lineal BB
t
x = v asignando esa soluci on al
vector x.
Ejercicio 0.28 Comprobar la solucion obtenida realizando el calculo BB
T
x v.
Podemos crear una matriz aumentada a partir de B y del termino independiente y reducirla
hasta convertir el sistema en uno equivalente triangular, efectuando las necesarias transforma-
ciones elementales de la
>>BA=[B v]
BA =
1 2 3 1
2 4 5 3
3 7 8 5
>>BA(2,:)=BA(2,:)-2
*
BA(1,:)
BA =
1 2 3 1
0 0 -1 1
3 7 8 5
>>BA(3,:)=BA(3,:)-3
*
BA(1,:)
BA =
1 2 3 1
0 0 -1 1
0 1 -1 2
La segunda la tiene el elemento diagonal nulo, as que hay que realizar una permutacion de
las, premultiplicando por la identidad permutada:
>>IP=[1 0 0;0 0 1;0 1 0];
>>BA=IP
*
BA
BA =
1 2 3 1
0 1 -1 2
0 0 -1 1
Ahora ya es inmediato resolver este sistema por sustituci on hacia atras:
Ejercicio 0.29 Denir una matriz H de 3 3 a partir de las tres primeras columnas de la
matriz BA.
Ejercicio 0.30 Denir un vector h utilizando la ultima columna de BA.
Pag. 24
UNIDAD DID

ACTICA 0. TUTORIAL DE MATLAB


Ejercicio 0.31 Denir el vector z tal que Hz = h. Es coherente el resultado?
Ejercicio 0.32 Pedir ayuda de la funci on det utilizandola con la matriz B y de la funcion
rank utilizandola con la matriz BA.
Ejercicio 0.33 Calcular el determinante de la matriz H.
0.6. Vectorizacion de operaciones
Ejercicio 0.34 Borrar la memoria porque vamos a empezar operaciones nuevas reutilizando
nombres de variables ya usadas.
Con MATLAB es sencillo crear vectores y matrices. La potencia de MATLAB nace de la
facilidad con la que se pueden manipular estos vectores y matrices. Primero mostraremos
c omo realizar operaciones sencillas, sumar, restar y multiplicar. Luego las combinaremos para
mostrar que se pueden realizar operaciones complejar a partir de estas operaciones simples sin
mucho esfuerzo. Primero deniremos dos vectores, los cuales sumaremos y restaremos:
>> v = [1 2 3]
v =
1
2
3
>> b = [2 4 6]
b =
2
4
6
>> v+b
ans =
3
6
9
>> v-b
ans =
-1
-2
-3
La multiplicacion de vectores y matrices, igual que su suma, sigue las reglas estrictas del

Algebra Lineal. En el ejemplo anterior, los vectores son ambos vectores columna con tres
elementos. No se puede sumar un vector la con un vector columna. Se debe recordar que el
n umero de columnas del primer operando debe ser igual al n umero de las del segundo.
>> v
*
b
Error using ==
*
Inner matrix dimensions must agree.
>> v
*
b
ans =
Pag. 25
Lenguajes de Programaci on: Gua ECTS
2 4 6
4 8 12
6 12 18
>> v
*
b
ans =
28
MATLAB permite realizar las operaciones entre elementos de un vector o matriz de modo
muy sencillo. Supongamos que queremos multiplicar, por ejemplo, cada elemento del vector v
con su correspondiente elemento en el vector b. En otras palabras, supongamos que se quiere
conocer v(1) b(1), v(2) b(2), y v(3) b(3). Sera estupendo poder usar directamente el
smbolo pues en realidad estamos haciendo una especie de multiplicaci on, pero como esta
multiplicaci on tiene otro sentido, necesitamos algo diferente. Los programadores que crearon
MATLAB decidieron usar el smbolo para realizar estas operaciones. De hecho, un punto
delante de cualquier smbolo signica que las operaciones se realizan elemento a elemento.
>> v.
*
b
ans =
2
8
18
>> v./b
ans =
0.5000
0.5000
0.5000
Ejercicio 0.35 Denir un vector w tal que sus componentes sean las de v al cubo.
Una vez que hemos abierto la puerta a operaciones no lineales, por que no ir hasta el nal?
Si aplicamos una funcion matematica predenida a un vector, MATLAB nos devolvera un
vector del mismo tama no en el que cada elemento se obtiene aplicando la funcion al elemento
correspondiente del vector original
>> sin(v)
ans =
0.8415
0.9093
0.1411
>> log(v)
ans =
0
0.6931
1.0986
Saber manejar habilmente estas funciones vectoriales es una de las ventajas de MATLAB. De
este modo, se pueden denir operaciones sencillas que se pueden realizar facil y rapidamente.
En el siguiente ejemplo, se dene un vector muy grande y lo manipulamos de este modo tan
sencillo.
Pag. 26
UNIDAD DID

ACTICA 0. TUTORIAL DE MATLAB


>> x = [0:0.1:100]
x =
Columns 1 through 7
0 0.1000 0.2000 0.3000 0.4000 0.5000 0.6000
......................
Columns 995 through 1001
99.4000 99.5000 99.6000 99.7000 99.8000 99.9000 100.0000
>> y = sin(x).
*
x./(1+cos(x));
Usando este tratamiento vectorial, se pueden generar gracos de modo muy sencillo. Damos
una muestra de esto que luego completaremos.
>> plot(x,y)
Ejercicio 0.36 Denir un vector t cuya primera componente sea 4, que tenga un incremento
entre componentes de 0.05 y termine en el punto 1.
Ejercicio 0.37 Denir un vector y a partir de cada componente del vector t recien denido
y = 5e
t
2
+ sin(10t)
0.7. Creacion de gracas
En esta secci on presentamos los comandos basicos para crear representaciones gracas de
funciones. Para mostrar el uso del comando plot, utilizaremos la funcion seno y su desarrollo
en serie de Taylor
5
en torno al cero con terminos c ubicos, x x
3
/6. Para dibujar la graca,
seleccionamos el paso del vector de muestreo x y sus valores primero y ultimo
>>h=0.1
>>xmin=-2;
>>xmax=2;
>>x=xmin:h:xmax;
>>yseno=sin(x);
>>ytaylor=x-x.3/6;
Tras esto, tenemos en los vectores yseno e ytaylor los valores reales y los valores aproximados
obtenidos del desarrollo limitado. Para compararlos, dibujamos los valores exactos superpuestos
con los aproximados marcados por puntos verdes o.
El comando plot se utiliza para generar gracas en MATLAB. Admite una gran variedad de
argumentos. Aqu s olo utilizaremos el rango y el formato, y la posibilidad de representar dos
curvas en la misma graca.
5
Brook Taylor nacio en 1685 en Inglaterra en el seno de una inuyente y adinerada familia. Estudio en
Cambridge y cuando se graduo ya haba escrito su primer artculo matematico de relevancia. Taylor par-
ticipo activamente en las agrias disputas entre matematicos britanicos (newtonianos) y matematicos eu-
ropeos (leibnitzianos) sobre la adjudicacion del descubrimiento del Calculo Diferencial, llegando a formar
parte del Comite que la Real Sociedad form o para dar n a tal discusion.
Aunque las aportaciones de Taylor a las matematicas son profundas y variadas (entre otras, introdujo
el calculo en diferencias nitas, la integracion por partes, desarrollo un metodo para encontrar soluciones
singulares de ecuaciones diferenciales y sento las bases de la geometra descriptiva y proyectiva) su resultado
mas conocido es el Teorema de Taylor, que permite el desarrollo de funciones en series polinomicas. Sin
embargo, no fue Taylor el primero en obtenerlo, James Gregory, Newton, Leibniz, Johann Bernoulli, y de
Moivre haban ya descubierto independientemente variantes del mismo.
Pag. 27
Lenguajes de Programaci on: Gua ECTS
>>plot(x,yseno,go,x,ytaylor);
La g se reere al color verde (green), y la o signica que los puntos se van a marcar con un
circulito. La tilde antes y despues de go en el comando anterior es la que esta en la tecla de
la interrogacion de cierre.
Ejercicio 0.38 En la ventana en la que aparece la gura, seleccionar Edit, Copy Figure. Abrir
un nuevo documento de Word y pegar la gura en ese documento.
Tambien es buena idea representar la funci on error:
>>plot(x,abs(yseno-ytaylor),mx);
Para que al nal del chero con todas las ordenes aparezca en pantalla el graco, una vez
que este ya ha sido ejecutado alguna vez, se utiliza la orden shg, que hace que la ventana del
graco se convierta en la activa. Usemos este comando para utilizar el comando de peticion
de ayuda help que es muy util tambien por sus referencias cruzadas a otros comandos.
>> help shg
SHG Show graph window.
SHG brings the current figure window forward.
Ejercicio 0.39 Pedir ayuda de los comandos grid y plot.
Ejercicio 0.40 Dibujar la curva t, y del ejercicio 0.37.
Ejercicio 0.41 Dibujar la curva t, y del ejercicio 0.37 con cruces rojas y con una retcula
incorporada (grid).
Tambien se puede copiar este graco al portapapeles desde la ventana del graco, para despues
pegarlo en un documento Word por ejemplo, como ya vimos en el ejercicio 0.38.
0.8. Conjuntos de ordenes
En esta secci on explicaremos como reunir ordenes en cheros ejecutables desde la lnea de
comandos de MATLAB. A estos cheros se les suele llamar scripts. Ello permite realizar
operaciones mas complejas, y facilita sus repeticiones.
Para empezar a trabajar sobre esta parte del tutorial, lo primero que haremos es ejecutar
clear para borrar las variables activas. Como ejemplo, consideramos el chero correspondiente
al dibujo de las gracas de la seccion 0.7. Para ejecutar los comandos del chero se debe
especicar el intervalo entre los valores de las abscisas en el muestreo. De este modo, se
pueden construir innidad de aproximaciones variando este parametro.
Primero hay que crear el chero. El editor mas conveniente es el que trae incorporado el
propio MATLAB, aunque cualquier editor de texto es valido dado que la codicacion de los
archivos de comandos de MATLAB es el estandar ASCII como sucede habitualmente en los
lenguajes de programaci on. El editor de MATLAB es muy simple y suciente para este tipo de
aplicaciones. A partir de la versi on 5, viene incorporado al propio MATLAB y mejora de versi on
en version. Los cheros ejecutables de MATLAB, los M-les, deben tener la extensi on .m.
En este ejemplo crearemos un chero de nombre tutorm.m. Para abrir el editor pinchamos en
(File, New, M-le) y debemos ir escribiendo y/o copiando-pegando los comandos necesarios.
Se debe tener en cuenta que cuando una sentencia comienza por %, es un comentario, y no
se va a ejecutar. Por tanto, en este ejemplo, no es necesario reproducir esas lneas.
Pag. 28
UNIDAD DID

ACTICA 0. TUTORIAL DE MATLAB


% file: tutorm.m
% Seno y desarrollo del seno.
%
% Para ejecutarlo tienes que fijar el paso
% h : intervalo entre las x
%
% El programa genera tres vectores,
% x con las abscisas, yseno con
% el seno evaluado en esas abscisas,
% e ytaylor con el desarrollo
% hasta el termino cubico del seno en torno al cero.
%
xmin=-2;
xmax=2;
x=xmin:h:xmax;
yseno=sin(x);
ytaylor=x-x.3/6;
Una vez que se hayan introducido las sentencias, se guarda el chero en la carpeta que creamos
conveniente, aunque hay que comunicar a MATLAB la ruta en la que se encuentra para que
MATLAB lo encuentre. Esto se puede hacer de varias maneras, dependiendo de la versi on de
MATLAB que estemos usando. En las versiones 6.5 y superiores se puede hacer modicando
la carpeta-directorio activo en la caja correspondiente (ver gura 1); para volver a activar la
vista inicial de MATLAB se procede como se indica en la gura 2. En versiones previas, se
puede indicar la ruta del archivo en el path browser con el icono correspondiente, o desde el
men u File con la opci on Set Path. Por defecto, si se guarda en el directorio ..\matlab\bin,
MATLAB lo encontrara
6
.
Ahora se ha de volver a la ventana con la lnea de comando y se teclea en esta lnea el nombre
del chero quitando .m. En este caso tutorm.
>>tutorm
??? Undefined function or variable h.
Error in ==> C:\MATLAB\bin\tut.m
On line 13 ==> x=xmin:h:xmax;
Si se se invoca el chero sin haber denido primero la variable h, aparecera un mensaje de
error. Se deben denir todas las variables que no se denen en el propio script y que este
utiliza.
>>h = 0.1;
>>tutorm
>>plot(x,yseno,rx,x,ytaylor)
Una vez ejecutada esta instrucci on debera aparecer una ventana con una graca como la de
la Figura 3. Cuando tecleamos tutorm en la lnea de comandos, MATLAB buscara en los
directorios indicados en el path un chero llamado tutorm.m. Una vez que lo encuentre lo
leera y ejecutara los comandos como si se hubiesen tecleado uno detras de otro en la lnea de
comandos. Si se desea ejecutar el programa otra vez pero con un paso diferente, hay que tener
6
Si se utiliza MATLAB en el centro de calculo o laboratorio de una facultad o escuela, probablemente el
usuario no tenga permiso de escritura en ese directorio y no pueda guardar ah sus cheros. En este caso, se
pueden guardar en la carpeta que se desee que despues se incorpora a la ruta de b usqueda (path), bien con el
comando path o con el icono correspondiente.
Pag. 29
Lenguajes de Programaci on: Gua ECTS
Figura 2: Recuperar vista de la gura 1
cuidado. El programa sobreescribira los vectores x, yseno e yatylor. Si se quieren guardar
estos vectores hay que especicarlo, almacenandolos en nuevas variables.
>>xp = x;
>>ysenop = yseno;
>>ytaylorp = ytaylor;
Ahora podemos seleccionar un nuevo paso h y volver a ejecutar tutor.
>>h = 0.01;
>>tutorm
Tenemos dos aproximaciones; la primera con un paso h de 0.1 que se almacena en los vectores
xp, ysenop e ytaylorp y la segunda relativa a un paso de 0.01 que guardamos en los vectores
x, yseno e ytaylor.
Ejercicio 0.42 Calcular la dimensi on que tienen que tener los vectores x y xp y conrmar el
resultado utilizando la orden size.
Ejercicio 0.43 Crear y ejecutar desde MATLAB un chero que se llame BAIP.m con la se-
cuencia de comandos siguiente:
v = [1 3 5];
B = [ [1 2 3] [2 4 7] [3 5 8]];
BA=[B v]
BA(2,:)=BA(2,:)-2
*
BA(1,:)
BA(3,:)=BA(3,:)-3
*
BA(1,:)
IP=[1 0 0;0 0 1;0 1 0];
BA=IP
*
BA
Pag. 30
UNIDAD DID

ACTICA 0. TUTORIAL DE MATLAB


Figura 3: Graca correspondiente al ejemplo tutorm.m.
Ejercicio 0.44 Pedir ayuda del comando pause e incorporarlo entre algunas lneas del ejercicio
anterior para ver todos los pasos de la secuencia de comandos.
Ejercicio 0.45 Crear y ejecutar desde MATLAB un chero que se llame CURVATY.m con
una secuencia de comandos que realicen las operaciones siguientes:
1. Borrar todas las variables activas de la memoria.
2. Denir un vector t cuya primera componente sea 4, que tenga un incremento entre
componentes de 0.05 y termine en el punto 1.
3. Denir un vector y a partir de cada componente del vector t recien denido como:
y = 5e
t
2
+ sin(10t)
4. Dibujar la curva (t, y) con cruces rojas y con una retcula ( grid) incorporada.
0.9. MATLAB y n umeros complejos
MATLAB entiende la aritmetica compleja y es perfectamente posible trabajar con n umeros
complejos. Podemos multiplicar dos n umeros complejos como:
>>(2+3
*
i)
*
(3-7
*
i)
ans =
27.0000 - 5.0000i
O dividirlos como:
>>(2+3
*
i)
*
(3-7
*
i)
ans =
-0.2586 + 0.3966i
Pag. 31
Lenguajes de Programaci on: Gua ECTS
0.10. Matematicas simbolicas con MATLAB
MATLAB dispone de herramientas para calculo simb olico. Para ello es necesario instalar el
Symbolic Math Toolbox, que es una especie de version reducida de Maple, un programa de
calculo simb olico muy conocido. Aqu podemos usar esta caja de herramientas para resolver
integrales y calcular determinantes de modo simbolico entre otras cosas. Lo primero que
tenemos que hacer es denir una variable como susceptible de ser utilizada en calculo simbolico:
>>syms x
Ahora podemos denir una funci on que dependa de x y cuya integral queramos calcular:
>>f=cos(x)2;
>>int(f)
ans=
1/2
*
cos(x)
*
sin(x)+1/2
*
x
Podemos tambien denir una matriz que dependa de x y de una nueva variable y:
>>syms y
>> A=[x y x-y
2 x2 y
-x -y 0]
A =
[ x, y, x-y]
[ 2, x2, y]
[ -x, -y, 0]
Y podemos calcular su determinante de modo simb olico:
>> det(A)
ans =
-2
*
y
*
x+2
*
y2+x4-x3
*
y
Ejercicio 0.46 Calcular de modo simbolico la inversa de la matriz A.
Podemos evaluar este determinante para valores reales de x e y asignando valores a esas
variables y utilizando despues la orden eval :
>> x=2.41
x =
2.4100
>> y=-3.2
y =
-3.2000
>> eval(det(A))
ans =
114.4301
En el momento en que hemos asignado valores a las variables, estas dejan de ser smbolos. Si
queremos que vuelvan a serlo tenemos que hacerlo de modo explcito
Pag. 32
UNIDAD DID

ACTICA 0. TUTORIAL DE MATLAB


>>syms x
Ejercicio 0.47 Denir una funci on f como e
x
2
.
Ejercicio 0.48 Pedir ayuda de la funci on di y calcular la derivada de f. Evaluar esta derivada
para x = 3.327.
Ejercicio 0.49 Pedir ayuda de la funcion limit y calcular el lmite de f cuando x .
Pag. 33
Lenguajes de Programaci on: Gua ECTS
Pag. 34
Unidad Didactica 1
Funciones y Condicionales
1.1. General
Una vez que en el tutorial de la unidad 0 hemos usado MATLAB como una calculadora potente,
pero al n y al cabo una calculadora, ha llegado el momento de aprender a programar. En ese
sentido, la unidad 1, dedicada al concepto de funci on y la estructura de control condicional,
y la unidad 2, dedicada al estudio de los bucles, son las mas importantes. Constituyen la base
sobre la que se cimenta el resto del curso.
En la unidad 1 se tratan principalmente las ideas de funciones, variables, argumentos de las
funciones, asignacion y la primera estructura de control del curso: el condicional. Tambien se
realiza primeramente una contextualizaci on del curso desde la perspectiva de la historia de la
Programaci on y sus fundamentos.
1.2. Funciones y variables
La organizacion habitual de un curso de Programacion supone que se comience por los tpicos
programas de entrada y salida, el programa Hola mundo. Sin embargo, en este curso que
ahora comienza nos hemos decidido por una estructura similar a la programaci on funcional,
comenzando por el concepto de funcion y estudiando la entrada y salida ya con el curso
muy avanzado. La ventaja de este enfoque es que los alumnos comienzan por los conceptos
fundamentales: funciones, estructuras de control y vectores. Como el aprendizaje es contin-
uo, a nadiendo sucesivamente nuevos conceptos y estructuras, conseguiremos que al nal los
alumnos esten mas familiarizados con las estructuras esenciales de la Programacion. Esto es
posible porque MATLAB proporciona una interfaz estandar para las funciones y desde la lnea
de comandos es posible ejecutarlas directamente.
El entender las cosas desde la perspectiva funcional proporciona la posibilidad de asimilar des-
de el principio conceptos claves en Programaci on, como el de encapsulamiento de tareas, la
division de tareas y su codicaci on en funciones, crucial cuando se abordan problemas grandes
y se trabaja en equipo. Tambien se trabajan ideas esenciales relativas a el dise no de funciones
y a la reusabilidad de c odigo ya escrito, visto ya como cajas negras que realizan determinadas
tareas, y que servira de base para construir nuevas funciones, etc...
La que ahora presentamos es la funci on mas sencilla que veremos durante el curso. Tiene un
argumento de entrada, x y un argumento de salida y. Lo unico que se hace es calcular una
expresi on matematica sencilla y asignar ese valor a y.
% ud1_f1.m
Pag. 35
Lenguajes de Programaci on: Gua ECTS
% Una funcion sencilla
% un argumento
function y=ud1_f1(x)
y=x2-log(x);
El smbolo = en Programacion es una asignaci on, no siendo por tanto simetrico; se asigna
a lo que esta a la izquierda del smbolo igual lo que haya a la derecha del mismo, una vez
realizadas las operaciones que esten especicadas en esa parte derecha.
El nombre de la funci on, para evitar confusiones, debe coincidir con el nombre del archivo .m
donde esta funcion se encuentra. Por tanto, como este primer ejemplo es la funcion ud1_f1,
debemos guardarla en el archivo ud1_f1.m. La primera lnea comienza con la palabra reser-
vada function lo cual es com un a todas las funciones que veremos en el curso.
Lo mas interesante es entender a partir de este ejemplo como se pasan los argumentos desde
la lnea de comandos hasta las funciones. Cuando invocamos esta funci on desde la lnea de
comandos podramos hacerlo del siguiente modo, obteniendo la siguiente respuesta:
>> ud1_f1(5)
ans =
23.3906
Cuando se pulsa Enter, tecla de retorno de carro, se carga en memoria RAM la funci on
ud1_f1.m, y se crea espacio en memoria para la variable x. En ese espacio se coloca el
valor 5. Se crea espacio tambien para y. Las variables x e y se llaman variables locales de la
funci on; el adjetivo locales procede de que viven en el espacio de memoria de la funcion. Una
vez hecho esto, el ordenador ejecuta las sentencias de la funci on (en este caso una sola) de
arriba abajo. Durante esta ejecuci on se dene la variable de salida y, en la cual al nal de la
misma esta el resultado, 23.3906. Una vez terminada la ejecucion se devuelve el control a la
lnea de comandos, se asigna en este caso el resultado a la variable por defecto ans y se borra
de la memoria RAM la funci on ud1 f1
1
.
Podemos invocar a la funci on ud1_f1.m ahora del siguiente modo:
>> t=5;
>> z=ud1_f1(t)
z =
23.3906
En ese caso, tendremos 4 variables x, y, z y t. Las variables x e y son locales de la funcion y
las variables z y t viven en el espacio de memoria asignado a la ventana de comandos. Cuando
se llama a la funcion, x copia el valor de t y cuando se termina la ejecucion de la funci on es
z la que copia el valor de la calculada y antes de que esta desaparezca (ver gura 1.1).
La situaci on no cambia sustancialmente si invocamos a la funci on del siguiente modo:
>> x=5;
>> y=ud1_f1(x)
y =
23.3906
Volvemos a tener 4 variables en memoria, x e y en el espacio de memoria de la ventana de
comandos y x e y en el espacio de memoria de la funcion ud1_f1.m mientras esta se ejecuta.
1
Esto no es exactamente as, pero esta es la imagen mas adecuada para un principiante en Programacion.
Pag. 36
UNIDAD DID

ACTICA 1. FUNCIONES Y CONDICIONALES


Figura 1.1: Ejemplo ud1 f1.m. Uso de la memoria RAM
De hecho, si cambiamos el valor de la x en el c odigo de la funcion, la variable t del parrafo
anterior y la variable x del espacio de memoria de la ventana de comandos no se ven afectadas.
O sea que si cambiamos la funci on ud1_f1.m y la grabamos ahora como:
function y=ud1_f1(x)
x=2;
y=x2-log(x);
Si la invocamos desde la lnea de comandos del siguiente modo,
>> x=5;
>> y=ud1_f1(x)
y =
3.3069
>> x
x =
5
el resultado no sera correcto, pero x tampoco habra cambiado su valor. Ello es as porque la
variable local x vive en la funci on. Al principio de la misma, copia el valor de la variable x
del espacio de comandos, y aunque cambiemos la variable local en la funci on, la variable en
el espacio de comandos no se ve afectada; estan en mundos diferentes que s olo se comunican
a traves de la lnea de argumentos. Hagamos ahora algunos ejercicios para consolidar estas
ideas:
Ejercicio 1.1
Vamos a preparar el espacio donde vas a trabajar, dentro de la unidad de red Z. Si no lo has hecho
ya, crea una carpeta que se llame CXXY Y donde XX son las dos ultimas cifras del a no en que
empieza el curso y Y Y las dos ultimas cifras del a no en que termina. En el curso 2008-2009, la
carpeta se llamara C0809. Dentro de esa carpeta crea otra que se llame LP. Dentro de esta,crea
una carpeta llamada ud1. Esta sera tu carpeta de trabajo para todo slos ejemplos y ejercicios de la
unidad 1.
Pag. 37
Lenguajes de Programaci on: Gua ECTS
Ejercicio 1.2
Edita manualmente la funcion ud1 f1 creando un archivo nuevo con el editor on desde la ventana de
comandos (con File, New), guardala en tu carpeta de trabajo y ejecuta:
>> ud1_f1(2.3)
>> ud1_f1(0.1)
>> ud1_f1(0)
>> ud1_f1(-2.2)
Son correctos los resultados? Que errores o problemas da?
Ejercicio 1.3
Crea una funcion que reciba el radio de un crculo y devuelva su area. MATLAB conoce el valor de
, pide ayuda sobre pi para usarlo.
Ejercicio 1.4
Prueba la funcion que has creado con un crculo de radio la unidad. Debera devolver . Pruebala
con 2; debera devolver 4 (puedes calcular ese valor con MATLAB).
1.3. Funciones con varios argumentos de entrada
El siguiente paso es construir funciones en las que haya mas de un argumento de entrada.
Tenemos as la siguiente, la cual calcula el area de un rectangulo. Si necesitamos mas argu-
mentos de entrada, simplemente los colocamos uno tras otro separados por comas dentro de
los parentesis a la derecha del nombre de la funci on.
% ud1_farea
% primera funcion con mas de un argumento.
% area del rectangulo de lados a y b
function area=ud1_farea(a,b)
area=a
*
b;
Para invocarla, se nos ocurren estas tres posibilidades, aprovechando lo explicado en la secci on
1.2:
>> ud1_farea(2,3)
ans =
6
>> x=3;
>> y=5;
>> ud1_farea(x,y)
ans =
15
>> ud1_farea(x,4)
ans =
12
En la primera, pasamos directamente dos n umeros, los cuales son copiados por las variables
locales a y b. En la segunda posibilidad pasamos dos variables correspondientes al espacio
de memoria de la ventana de comandos, x e y, las cuales son copiadas igualmente por las
variables locales de la rutina, a y b, a traves de la lista de argumentos. Finalmente en la tercera,
Pag. 38
UNIDAD DID

ACTICA 1. FUNCIONES Y CONDICIONALES


tenemos una combinaci on de las dos posibilidades anteriores.
En el siguiente ejemplo los argumentos no conmutan entre s. Se trata de calcular el area de
un polgono regular sabiendo el n umero de lados y el lado. En el calculo de la apotema los dos
argumentos no conmutan entre s.
% ud1_fareapol.m
% area de un polgono regular de n lados
% primeras variables propias de la rutina, P,a,
% las variables no conmutan pues juegan distinto papel
function area=ud1_fareapol(l,n)
P=n
*
l; % permetro
a=l/(2
*
tan(pi/n));
area=P
*
a/2;
Es la primera funcion en la que usamos variables locales a la funci on. Si invocamos esta funcion
desde la ventana de comandos, y preguntamos despues lo que valen esas variables locales, las
cuales no pertenecen al espacio de memoria de la ventana de comandos tendremos el siguiente
resultado:
>> ud1_fareapol(3,4)
ans =
9.0000
>> ud1_fareapol(4,3)
ans =
6.9282
>> P
??? Undefined function or variable P.
>> a
??? Undefined function or variable a.
>>
Los ejercicios correspondientes a estos ejemplos son los siguientes:
Ejercicio 1.5
Edita manualmente las funciones ud1_farea y ud1_fareapol, guardalas en tu carpeta de trabajo
y pruebalas desde la ventana de comandos de MATLAB.
Ejercicio 1.6
Crea una funcion que reciba la base y la altura de un triangulo y devuelva el area.
Ejercicio 1.7
Crea una funcion que reciba la masa y la velocidad de un movil y devuelva la energa cinetica.
Ejercicio 1.8
Consideramos la funcion
function d=ud1_fprueba(a,b,c)
b=c;
a=b;
d=a+b+c;
Pag. 39
Lenguajes de Programaci on: Gua ECTS
Sin ejecutar la funcion, que valor devolvera si invocamos desde MATLAB ud1 fprueba(1, 2, 3)?
Razonalo primero y compruebalo despues editando la funcion y ejecutando esa orden. Es la primera
funcion que tiene mas de dos argumentos. Conmutan entre s los argumentos de entrada?
Ejercicio 1.9
Crea una funcion que reciba los tres coecientes a, b, c, de un polinomio de segundo grado y devuelva
la raz
b +

b
2
4ac
2a
.
Cuando se invoque la funcion, se elegiran los coecientes para que la ecuacion tenga races reales. Se
recomienda usar una variable auxiliar D para denir el discriminante b
2
4ac. Conmutan entre s los
argumentos de entrada?. Para comprobar si tu codigo es correcto, usa los coecientes del polinomio
x
2
7x + 12, que tiene como races 3 y 4.
Ejercicio 1.10
Crea una funcion analoga para la otra raz,
b

b
2
4ac
2a
.
Ejercicio 1.11
Crea una funcion que reciba dos alturas, h
1
y h
2
y una masa y devuelva la energa potencial perdi-
da/ganada por el cuerpo al caer/subir de h
1
a h
2
.
1.4. Estructura de control condicional if
Hasta ahora, todas las sentencias se han ejecutado de modo consecutivo, una detras de la otra.
No disponemos todava de herramientas que permitan controlar de alg un modo la ejecuci on
o realizar operaciones mas complejas con la informacion de entrada a la funcion. La primera
de esas herramientas y una de las mas importantes es el condicional y nos pone en la parrilla
de salida del desarrollo de estrategias y algoritmos para resolver los problemas de los que un
ordenador es capaz. Ademas, y no menos importante, se convierte en el primer mecanismo de
provocaci on de vuestra capacidad de pensar y de articular un discurso complejo a partir de
elementos mnimos, o sea, PROGRAMAR.
La estructura condicional aparece en los lenguajes de programaci on normalmente mediante la
palabra reservada if. En MATLAB lo hace de ese modo, tal como se indica en las siguientes
lneas.
function y=nombrefuncion(arg1,arg2,....)
....
....
if cond
....
....
end
....
....
Pag. 40
UNIDAD DID

ACTICA 1. FUNCIONES Y CONDICIONALES


Por cond nos referimos a una condici on logica o combinaci on de ellas. As, cond puede ser
que una variable sea mayor que un determinado valor, igual, mayor o igual (>=) etc. En caso
de que eso sea as, se ejecutaran las sentencias que estan entre la sentencia del if y la primera
sentencia end que se encuentre.
Es importante para que los c odigos sean legibles tabular o indentar las instrucciones corres-
pondientes a una estructura de control 3 o 4 espacios (seran 4 en nuestros ejemplos), como
hemos hecho con el puntead en el bloque if anterior.
Uno de los ejemplos mas sencillos que se pueden poner de esta estructura es el de una funci on
que devuelva el mayor de dos n umeros a, b supuestos distintos entre s. Se puede abordar este
problema de varias maneras. La primera es mediante dos estructuras if, la primera controlan-
do el caso de que a sea el mayor de los valores y la segunda controlando el caso de que el
mayor sea b.
% ud1_fmayorab
% primer uso del condicional if
% Devuelve el mayor de dos numeros a,b
% a,b se supondran diferentes
function mayor=ud1_fmayorab(a,b)
if a>b
mayor=a;
end
%
if b>a
mayor=b;
end
En la segunda posibilidad se dene la variable mayor por defecto como a. Ahora se comprueba
si b es mayor que a, y si eso es cierto se dene la variable mayor como b.
% ud1_fmayorab0
% Devuelve el mayor de dos numeros a,b
% a,b se supondran diferentes
function mayor=ud1_fmayorab0(a,b)
mayor=a;
if b>a
mayor=b;
end
En la tercera variante se juega con la variable a calcular, dandole primero el valor a. Despues
se compara b con esa variable, y si en la comparaci on gana b, se actualiza el valor de mayor.
% ud1_fmayorab0
% Devuelve el mayor de dos numeros a,b
% a,b se supondran diferentes
function mayor=ud1_fmayorab1(a,b)
mayor=a;
if b>mayor
mayor=b;
end
Los ejercicios correspondientes a este ejemplo son los siguientes:
Pag. 41
Lenguajes de Programaci on: Gua ECTS
Ejercicio 1.12
Abre la ventana principal de MATLAB, copia manualmente las funciones ud1_fmayorab, ud1_fmayorab0
y ud1_fmayorab1, guardalas en tu carpeta de trabajo y pruebalas .
Ejercicio 1.13
Crea una funcion que reciba un n umero r y devuelva el area del crculo de radio r si r 0 y 1 en
caso contrario.
Ejercicio 1.14
Crea una funcion que reciba un valor x y devuelva el valor y de la funcion denida a trozos:
y =

x + 1 x < 1
1 x
2
x 1
Ejercicio 1.15
(Para valientes) Crea una funcion que reciba tres n umeros a, b, c, que se supondran diferentes entre
si, y devuelva el mayor de los tres.
1.5. Estructura de control condicional if-else
En el caso de que queramos que se ejecuten determinadas sentencias cuando cond sea falsa,
deberemos complementar if con else. De este modo, si cond es cierta se ejecutara el primer
bloque y si es falsa el segundo, como se muestra en el siguiente esquema:
function y=nombrefuncion(arg1,arg2,....)
....
....
if cond
bloque1
else
bloque2
end
....
....
El ejemplo para ilustrar esta estructura es el correspondiente a la funci on que calcula el mayor
de dos n umeros supuestos distintos. Se comprueba si el primero es mayor que el segundo y si
no es as, se toma el mayor como el segundo.
% ud1_felseab
% primer uso de la estructura if-else
% Devuelve el mayor de dos numeros a,b
% a,b se supondran diferentes
function mayor=ud1_felseab(a,b)
if a>b
mayor=a;
else
mayor=b;
end
Pag. 42
UNIDAD DID

ACTICA 1. FUNCIONES Y CONDICIONALES


Los ejercicios correspondientes a este ejemplo son los siguientes:
Ejercicio 1.16
Edita manualmente la funcion ud1_felseab, modicando alguna de las anteriores, guardala en tu
carpeta de trabajo y pruebala. Adivina cual sera el resultado si pasas como argumentos dos n umeros
iguales.
Ejercicio 1.17
Crea una funcion que reciba un n umero r y devuelva el area del crculo de radio r si r 0 y 1 en
caso contrario, utilizando la estructura if-else.
Ejercicio 1.18
Crea una funcion que reciba un valor x y devuelva, utilizando la estructura if-else, el valor y de la
funcion denida a trozos:
y =

x + 1 x < 1
1 x
2
x 1
1.6. Funcion que llama a otra funcion
Una vez que con una funcion hemos resuelto un determinado problema y/o hemos agrupado
una serie de tareas, esa funcion es muy comodo verla como una caja negra que recibe unos
argumentos de entrada y devuelve unos argumentos de salida (de momento uno solo de salida).
Vista de ese modo, es natural que sea llamada por otra funci on que la necesita como parte
de la misma. La sintaxis de ello no ofrece ning un problema invocandose de modo analogo a
como se invoca desde la lnea de comandos. En el siguiente ejemplo codicamos una funci on
denida a trozos, similar a la del ejemplo 1.4, en la que el valor de uno de los trozos de la
funci on se obtiene llamando a una funci on creada previamente, la ud1_f1.m.
% ud1_ftrozos2
% primera funcion q llama a otra funcion
% ud1_ftrozos2(x). Devuelve el valor de la funcion:
% f(x)=x si x<1
% f(x)=x2-ln(x) si x>=1
function y=ud1_ftrozos2(x)
if x<1
y=x+1;
else
y=ud1_f1(x);
end
El concepto de llamar a una funci on desde otra es muy poderoso y es la base para tanto
resolver grandes problemas como ser capaz de repartir la escritura de grandes c odigos entre
un equipo de programadores. Haremos uso abundante de esta tecnica durante el curso y si el
estudiante es habil conseguira simplicar la resoluci on de muchos ejercicios si hace buen uso
de funciones ejemplo estudiadas en clase y de funciones codicadas al resolver otros ejercicios.
Los ejercicios correspondientes a este ejemplo son los siguientes:
Ejercicio 1.19
Edita manualmente la funcion ud1_ftrozos2, guardala en tu carpeta de trabajo y pruebala.
Pag. 43
Lenguajes de Programaci on: Gua ECTS
>> ud1_ftrozos2(2.3)
>> ud1_ftrozos2(1.1)
>> ud1_ftrozos2(0)
>> ud1_ftrozos2(0.9)
Son correctos los resultados? Que errores o problemas da?
Ejercicio 1.20
Utilizando la funcion del area del rectangulo (ud1_farea), crea una funcion que reciba los dos
lados de la base y la altura de una piramide de base rectangular y devuelva su volumen (el volumen
de la piramide es 1/3 del area de la base por la altura).
Ejercicio 1.21
Usando las funciones de los ejercicios 1.9 y 1.10, crea una funcion que reciba los tres coecientes de
un polinomio de segundo grado de races reales y devuelva el producto de las mismas (se elegiran
los coecientes para que as sean). Prueba con varios polinomios (el producto de las dos races ha
de ser c/a).
Ejercicio 1.22
(Para los valientes). Crea una funcion que que reciba los tres coecientes de un polinomio de grado
2, llame a la funcion del apartado anterior para calcular el producto de sus races y que cuando las
races sean n umeros complejos o cuando sea una raz doble, devuelva 0 en lugar del producto de las
races. Para ver si las races con complejas o reales, puedes ver el signo del discriminante, b
2
4ac.
1.7. Condicionales anidados.
Las estructuras de control pueden contener dentro de sus bloques de instrucciones internos
otras estructuras de control. Es habitual que dentro de un bucle hay condicionales, o que
dentro del bloque de un condicional haya un bucle y tambien es habitual que dentro del bloque
de un condicional haya otro condicional. Esto lo reejamos en el siguiente esquema.
function y=nombrefuncion(arg1,arg2,....)
....
....
if cond
bloque10
if cond1
bloque11
end
bloque12
else
bloque2
end
....
....
Para mostrar el funcionamiento, planteamos un ejemplo muy interesante, devolver el signo de
una variable entera n. Si n es estrictamente negativa el signo se toma como -1, si n es 0, el
signo sera 0, y si n es estrictamente positiva, el signo sera 1. Por tanto, hay que gestionar
tres posibilidades excluyentes, lo que abordaremos primero eliminando una de ellas frente a las
otras dos y despues las otras dos entre si.
Pag. 44
UNIDAD DID

ACTICA 1. FUNCIONES Y CONDICIONALES


% ud1_fsigno
% funcion que devuelve el signo de un numero entero n
% -1 si es negativo, 0 si es 0, 1 si es positivo.
% primeros condicionales anidados.
function signo=ud1_fsigno(n)
if n<0
signo=-1;
else
if n==0
signo=0;
else
signo=1;
end
end
Los ejercicios correspondientes a este ejemplo son los siguientes:
Ejercicio 1.23
Edita manualmente la funcion ud1_fsigno, guardala en tu carpeta de trabajo y pruebala, desde
la ventana de comandos de MATLAB.
Ejercicio 1.24
Se trata de construir una funcion que reciba una calicacion (entre 0 y 10) y devuelva 0 si es
suspenso (calicacion estrictamente menor que 5), 1 si es aprobado (calicacion mayor o igual que 5
y menor que 7), 2 si es notable (calicaci on mayor o igual que 7 y menor que 9), 3 si es sobresaliente
(calicacion mayor o igual que 9 y menor o igual que 10) y -1 si el argumento no esta entre 0 y 10.
No se podran utilizar operadores logicos.
Ejercicio 1.25
Crea una funcion que reciba un valor x y devuelva el valor y de la funcion denida a trozos:
y =

sin(x) x < 0
x 0 x < 1
x
2
+ log(x) x 1
No se podran utilizar operadores logicos.
Ejercicio 1.26
Funcion q devuelva el salario semanal de un trabajador en funcion del coste hora, de las horas que ha
trabajado y de un jo de productividad que se cobra si se trabajan mas de 30 horas. Si se trabajan
mas de 40 horas, las horas por encima de esas 40 se pagan un 50 % mas caras (horas extras). No se
podran utilizar operadores logicos.
Ejercicio 1.27
Codica la funcion
f(x) = max{ud1 f1(x), 7 cos(6x)}.
donde max signica maximo. En la denicion de ud1 f1 hay un logaritmo del argumento x implicado.
Por tanto, cuando x sea menor o igual que cero, ese logaritmo no podra ser evaluado y tomaremos
como maximo la unica funcion que esta denida. No se podran utilizar operadores logicos.
Pag. 45
Lenguajes de Programaci on: Gua ECTS
1.8. Variante elseif en el condicional
Una variante bastante util del condicional es la que permite abrir el abanico de posibilidades
de ejecuci on a no solo el verdadero o falso referido a una determinada condici on. La idea es
que si una condici on es cierta se ejecuten unas sentencias, pero si esta es falsa, se compruebe
una segunda condici on y si esta es cierta, se ejecuten el correspondiente segundo grupo de
sentencias, pero si la segunda condicion es falsa, se pase a una tercera y as sucesivamente.
Finalmente, la orden terminara con una sentencia else cuyo bloque de instrucciones posterior
se ejecutara si ninguna de las condiciones ha resultado cierta. Pretendemos reejar esto con
el siguiente esquema:
function y=nombrefuncion(arg1,arg2,....)
....
....
if cond1
bloque 1
elseif cond2
bloque 2
elseif cond3
bloque 3
elseif......
.....
else
bloque n
end
....
....
Si la condici on 1, cond1, es cierta, se ejecutara el bloque 1 de sentencias, y a posteriori se
pasara directamente a las sentencias posteriores a la sentencia end. Si la condici on 1 fuese
falsa, se evaluara la condicion 2 y si esta fuese cierta, se ejecutara el bloque 2, pasando
directamente a las sentencias posteriores a la sentencia end. Si ninguna de las condiciones
fuese cierta, se pasara directamente a la ejecuci on del bloque n.
Vemos esta estructura con el siguiente ejemplo. Se trata de construir una funcion que reciba
una calicaci on (entre 0 y 10) y devuelva 0 si es suspenso (calicaci on estrictamente menor
que 5), 1 si es aprobado (calicacion mayor o igual que 5 y menor que 7), 2 si es notable
(calicacion mayor o igual que 7 y menor que 9) y 3 si es sobresaliente (calicaci on mayor o
igual que 9). Para codicar este ejemplo, lo primero que comprobamos es si la nota es menor
que 5. Si no lo es, solo comprobamos si es menor que 7, por que ya sabemos que va a ser
mayor o igual que 5. Los demas casos son analogos.
% ud1_fnotas
% primera vez q usamos el elseif
function clave=ud1_fnotas(nota)
if nota<5
clave=0;
elseif nota<7
clave=1;
elseif nota<9
clave=2;
Pag. 46
UNIDAD DID

ACTICA 1. FUNCIONES Y CONDICIONALES


else
clave=3;
end
Los ejercicios correspondientes a este ejemplo son los siguientes:
Ejercicio 1.28
Edita manualmente la funcion ud1_fnotas, guardala en tu carpeta de trabajo y pruebala, desde
la ventana de comandos de MATLAB. Que ocurre si el valor del argumento no esta entre 0 y 10?
Ejercicio 1.29
Se trata de construir una funcion que reciba una calicacion (entre 0 y 10) y devuelva 0 si es
suspenso (calicacion estrictamente menor que 5), 1 si es aprobado (calicacion mayor o igual que 5
y menor que 7), 2 si es notable (calicacion mayor o igual que 7 y menor que 9), 3 si es sobresaliente
(calicacion mayor o igual que 9 y menor o igual que 10) y -1 si el argumento no esta entre 0 y 10.
Se utilizara la variante elseif del condicional para realizar este ejercicio.
Ejercicio 1.30
Crea una funcion que reciba un valor x y devuelva el valor y de la funcion denida a trozos:
y =

sin(x) x < 0
x 0 x < 1
x
2
+ log(x) x 1
Se utilizara la variante elseif del condicional para realizar este ejercicio.
Ejercicio 1.31
Funcion q devuelva el salario semanal de un trabajador en funcion del coste hora, de las horas que ha
trabajado y de un jo de productividad que se cobra si se trabajan mas de 30 horas. Si se trabajan
mas de 40 horas, las horas por encima de esas 40 se pagan un 50 % mas caras (horas extras). Se
utilizara la variante elseif del condicional para realizar este ejercicio.
Ejercicio 1.32
Codica la funcion
f(x) = max{ud1 f1(x), 7 cos(6x)}.
donde max signica maximo. En la denicion de ud1 f1 hay un logaritmo del argumento x implicado.
Por tanto, cuando x sea menor o igual que cero, ese logaritmo no podra ser evaluado y tomaremos
como maximo la unica funcion que esta denida. Se utilizara la variante elseif del condicional
para realizar este ejercicio.
1.9. Operadores logicos
Si queremos construir condiciones algo mas interesantes, necesitaremos combinar condiciones
elementales mediante los operadores l ogicos habituales, estudiados a menudo durante la etapa
de la educaci on secundario. Necesitaremos saber escribir al menos los operadores Y logico y el

O l ogico. Si se pretende construir una condicion que mezcle varias condiciones se pueden usar
parentesis para establecer que operaciones l ogicas se hacen primero, de modo similar a como
sucede con las operaciones aritmeticas.
Para el Y logico se usa el smbolo reservado &. En el siguiente ejemplo vemos como se utiliza
este operador para construir una funci on que devuelva el mayor de tres n umeros supuestos
distintos. Si uno de los n umeros es mayor lo sera porque es al mismo tiempo mayor que uno
y mayor que otro.
Pag. 47
Lenguajes de Programaci on: Gua ECTS
%% operadores logicos.
function mayor=ud1_fmayor(a,b,c)
if a>b & a>c
mayor=a;
end
if b>a & b>c
mayor=b;
end
if c>a & c>b
mayor=c;
end
Otro operador interesante es el

O l ogico (inclusivo). Para este se usa el smbolo |, que se obtiene
pulsando la tecla Alt Gr y la del 1. En los siguientes ejercicios veremos alg un ejemplo de
utilizaci on de este operador.
Ejercicio 1.33
Edita manualmente la funcion ud1_fmayor, guardala en tu carpeta de trabajo y pruebala, desde
la ventana de comandos de MATLAB.
Ejercicio 1.34
Construye una funcion que reciba tres valores a, b y c (que se supondran diferentes) y devuelva 1 si
a es el mayor, 2 si b es el mayor, y 3 si lo es c.
Ejercicio 1.35
Construye una funcion que reciba tres valores a, b y c devuelva el mayor si alguno de ellos es positivo
y el menor en caso contrario.
Ejercicio 1.36
Construye una funcion que reciba tres valores a, b y c (que se supondran diferentes) y devuelva el
mayor de ellos. No se podran utilizar operadores logicos, solo un bloque if-else y una llamada a la
funcion ud1 fmayorab
Ejercicio 1.37
Cual es el signicado del argumento de salida de la siguiente funcion?
function mayor=ud1_fmayortres(a,b,c)
mayor=a;
if b>mayor
mayor=b;
if c>mayor
mayor=c;
end
end
Ejercicio 1.38
Que devuelve la siguiente funcion?
Pag. 48
UNIDAD DID

ACTICA 1. FUNCIONES Y CONDICIONALES


function y=ud1_prueba2(a,b,c)
y=a+b+c;
if a>b | c>b
y=y-b;
if a>c
y=y-c;
else
y=y-a;
end
else
y=b;
end
Trata de obtenerlo sin usar el ordenador y despues compruebalo con algunos ejemplos.
Ejercicio 1.39
Usando la funcion ud1 fmayor, construye una funcion que devuelva el maximo de cuatro valores.
Ejercicio 1.40
(Para valientes) Idem con seis valores. Trata de hacerlo con un unico if else y utilizando dos veces
la funcion del apartado 1.36.
Ejercicio 1.41
(Para valientes) Idem con siete valores. Trata de hacerlo con el menor n umero posible de if else
(ninguno).
Ejercicio 1.42
(Para valientes) Que errores hay en el siguiente programa? Se supone que la funcion debera devolver
la potencia del segmento denido por tres abscisas a, b, c, es decir, el producto de las longitudes de
los dos segmentos que determinan. No se sabe cual es la relacion de orden entre los valores pero si
fuesen crecientes, la potencia sera (b a) (c b).
function pot=ud1_fpotencia(a,b,c)
if a>b & a>c
if b>c
pot=(a-b)
*
(b-c)
else
pot=(a-c)
*
(c-b)
end
end if b>a & b>c
if a>c
pot=(b-a)
*
(a-c)
else
pot=(b-c)
*
(c-a)
end
else
if a>b
pot=(c-a)
*
(a-b)
else
pot=(c-b)
*
(b-a)
end
end
Trata de hacerlo primero en papel para encontrar algunos errores y luego prueba con el ordenador.
Prueba con (1, 2, 3), (3, 2, 1), (2, 1, 3), etc y con (1, 1, 2), (1, 2, 1), (2, 1, 1) y (1, 1, 1) (en estos cuatro
ultimos casos debera dar 0).
Pag. 49
Lenguajes de Programaci on: Gua ECTS
1.10. Operadores de comparacion: son iguales?
La operaci on de comparar si dos valores enteros son iguales tiene una sintaxis especca
en MATLAB, colocando el smbolo = de modo duplicado, ==. Cuando se trate de valores
correspondientes a n umeros reales, esta operacion es mas delicada y hablaremos de ella mas
adelante. En el siguiente ejemplo se muestra su uso para construir una funcion que indica si
dos valores son iguales o no.
% ud1_figuales
% operador de comparacion para numeros enteros
function chivato=ud1_figuales(m,n)
if m==n
chivato=1;
else
chivato=0;
end
La negaci on l ogica se escribe en MATLAB anteponiendo al operador correspondiente el smbolo
, el cual se obtiene pulsando las teclas AltGr y 4. Por tanto, el operador para comprobar
si dos valores son distintos sera =. En los siguientes ejercicios veremos alg un ejemplo de
utilizaci on de este operador.
Ejercicio 1.43
Edita manualmente la funcion ud1_figuales, guardala en tu carpeta de trabajo y pruebala, desde
la ventana de comandos de MATLAB.
Ejercicio 1.44
Construye una funcion que reciba tres n umeros enteros a, b y c y devuelva 1 si son iguales entre si,
y 0 en caso contrario.
Ejercicio 1.45
Construye una funcion que reciba tres n umeros enteros a, b y c y devuelva 1 si a = b, 2 si a = b y
b = c y 3 si los tres valores son iguales.
Ejercicio 1.46
Construye una funcion que reciba tres n umeros enteros a, b y c y devuelva 2 si los tres son iguales
entre si, 1 si dos de ellos son iguales entre si pero el tercero es diferente, y 0 si los tres son distintos.
Ejercicio 1.47
Repetir el ejercicio 1.46 sin utilizar ni else, ni elseif.
1.11. Igualdad entre n umeros reales: precision y valor ab-
soluto
Entender c omo el ordenador almacena y trabaja con n umeros con cifras decimales escapa
al contenido de este libro. Sin embargo, dado que la memoria RAM es nita, en n umeros
racionales peri odicos o en n umeros irracionales, es facil entender que sera imposible almacenar
las innitas cifras que hay a la derecha del punto decimal. Ademas de estas dicultades de al-
macenamiento, esta la dicultad conceptual relativa a la idea de igualdad entre n umeros reales.
Pag. 50
UNIDAD DID

ACTICA 1. FUNCIONES Y CONDICIONALES


La mejor respuesta es pensar que dos n umeros reales (y en general dos objetos cualesquiera en
la vida profesional) son iguales cuando las diferencias entre ellos sean tan peque nas como lo
requiera una determinada tarea. As, dos sillas del mismo modelo son objetivamente distintas
si las vemos con mucho cuidado, pero si no tienen ning un defecto, seran a todos los efectos
iguales. Lo mismo sucede con los n umeros reales. Diremos que dos n umeros reales son iguales
cuando el valor absoluto de su diferencia sea menor que un umbral de precision determinado
que dependera del signicado y utilidad de dichas cantidades.
En el siguiente ejemplo observamos como se dene ese umbral para comprobar si un triangulo
es equilatero, isosceles, etc., y como se comprueba la igualdad de los lados recurriendo a la
funci on valor absoluto, abs en MATLAB.
% ud1_ftriangulos
% recibe a, b y c, los lados de un triangulo
% devuelve 3 si son los lados de un triangulo equilatero
% devuelve 2 si son de un triangulo isosceles
% devuelve 1 si son los lados de un triangulo escaleno
% idea: cuando dos numeros reales son iguales, para
% comprobarlo hay q definir una precison-umbral.
function tipo=ud1_ftriangulos(a,b,c)
% Precision con la que trabajamos. Todo numero menor que
% esa cantidad sera cero para nosotros
prec=(a+b+c)
*
1e-5;
if abs(a-b)<prec & abs(b-c)<prec
tipo=3;
elseif abs(a-b)<prec | abs(a-c)<prec | abs(b-c)<prec
tipo=2;
else
tipo=1;
end
Los ejercicios correspondientes a este ejemplo son los siguientes:
Ejercicio 1.48
Entra en al carpeta
Asignaturas\LP\Ejemplos.
utilizando el enlace directo que tienes en el escritorio. Copia de ah todos los ejemplos correspondientes
a la unidad 1, aquellos cheros cuyo nombre empieza por ud1 a tu propia carpeta ud1. Prueba la
funcion ud1 ftriangulos.
Ejercicio 1.49
Crea una funcion que reciba tres valores, a, b y c y devuelva 1 si pueden ser los lados de un triangulo
(la suma de dos lados cualesquiera ha de ser mayor que el otro, es decir, a + b > c, a + c > b y
b + c > a) y 0 en caso contrario.
Ejercicio 1.50
Modica el ejemplo ud1_ftriangulos para que reciba tres valores y devuelva 0 si no pueden ser
los lados de un triangulo (usa la funcion creada en el apartado 1.49), 3 si es un triangulo equilatero,
2 si es isosceles y 1 si es escaleno.
Ejercicio 1.51
Codica el ud1_ftriangulos en una sola lnea usando la funcion ud1 ftriangulos y el ejercicio
1.49.
Ejercicio 1.52
(Para valientes) Construye una funcion que reciba 4 n umeros a, b, c, d, correspondientes a los lados
consecutivos de un trapezoide, as como la longitud de una las diagonales d1 y devuelva 1 si la gura
es un cuadrado, 2 si es un rectangulo, 3 si es un trapecio y 4 si no es ninguna de estas posibilidades.
Pag. 51
Lenguajes de Programaci on: Gua ECTS
1.12. Variables enteras y reales como argumentos
Hasta ahora habamos utilizado variables que eran esencialmente o n umeros enteros o n umeros
reales. En el siguiente ejemplo conviven ambos tipos como argumentos. La funcion recibe los valores
correspondientes a las dimensiones principales de una determinada gura elemental (rectangulo,
triangulo, crculo, etc...) y recibe tambien un entero indicando el tipo de gura concreta a la que nos
referimos de entre esa lista. La funcion devuelve el area de dicha gura.
% ud1_fareafig
% primera funcion que combina variables esencialmente diferentes,
% una como tipo que funciona como un indicador de especie (numero
% entero) y otras (a,b) q funcionan como numeros reales.
% ademas b a veces es inutil.
% ud1_fareafig(tipo,a,b) devuelve el area de distintas figuras
% Si tipo=1, devuelve el area del rectangulo de lados a y b
% Si tipo=2, devuelve el area del crculo de radio a
% Si tipo=3, devuelve el area del triangulo de base a y altura b
% Si tipo=4, devuelve el area del cuadrado de lado a
% Si tipo=5, devuelve el area del triangulo equilatero de lado a
% Si no es ninguno de los tipos anteriores, devuelve -1
function area=ud1_fareafig(tipo,a,b)
if tipo==1
area=a
*
b;
elseif tipo==2
area=pi
*
a2;
elseif tipo==3
area=a
*
b/2;
elseif tipo==4
area=a
*
a;
elseif tipo==5
area=a
*
a
*
sqrt(3)/4;
else
area=-1;
end
Los ejercicios correspondientes a este ejemplo son los siguientes:
Ejercicio 1.53
Prueba la funcion ud1_fareafig, bien editandola manualmente o trayendola de una carpeta
determinada.
Ejercicio 1.54
Modica la funcion ud1_fareafig para que tambien calcule el area del rombo.
Ejercicio 1.55
Codica ud1_fareafig sin la orden else ni la elseif.
Ejercicio 1.56
Construye una funcion que reciba un parametro, raiz, y los coecientes a, b y c de un polinomio de
segundo grado. Devolvera la raz con el + en la formula si raiz es 1 y la raz con el - si raiz es
= 1. Para calcular estas races llamaremos a las funciones 1.9 y 1.10. Para comprobar si tu codigo
es correcto, usa los coecientes del polinomio x
2
7x + 12, que tiene como races 3 y 4.
Ejercicio 1.57
Codica una funcion que reciba los coecientes de un polinomio de grado 2 y devuelva la suma de
sus races, para lo cual usara del modo que corresponda la funcion del ejercicio 1.56. Para comprobar
si tu codigo es correcto, usa los coecientes del polinomio x
2
7x + 12, que tiene como races 3 y
4.
Ejercicio 1.58
Pag. 52
UNIDAD DID

ACTICA 1. FUNCIONES Y CONDICIONALES


(Para valientes) Sabiendo que una pulgada son 2.54 cm, que un pie son 12 pulgadas, y que una
yarda son 3 pies se pide construir una funcion que reciba una cantidad, un n umero que indicara en
que sistema de medida esta (0 para el sistema internacional (SI) y = 0 para el sistema ingles) y otro
n umero que indicara en que unidades esta (1,2 o = 1, 2 seg un sea mm, cm o metros en SI y 1, 2
o = 1, 2 seg un sea pulgadas, pies o yardas en el sistema ingles). La funcion devolvera la magnitud
convertida a metros si se ha recibido en el sistema ingles y convertida a pies si se ha recibido en el
SI.
1.13. Variables contador y sumador
Ya vimos que el operador = en MATLAB no tiene mucho que ver con lo que ese operador signica
en Algebra. Su signicado es de asignacion. A la izquierda tendremos siempre una variable y a la
derecha un expresion que puede combinar llamadas a funciones con operadores aritmeticos y logicos.
El funcionamiento de la operacion es que primero se eval ua la expresion a la derecha y el valor
obtenido es asignado a la variable que esta a la izquierda.
Esto abre la puerta para operaciones que no tienen sentido matematico pero s en Programacion,
como decir que i = i +1. Lo que esto signica es que se eval ua la expresion i +1 y se asigna su valor
a i, con lo cual esta variable habra incrementado su valor original en una unidad. En el siguiente
ejemplo aplicamos esta idea para encontrar la suma de los positivos entre cuatro n umeros.
%% ud1_fsumapos
%% primera variable sumadora (x=x+algo)
%% suma de los positivos entre 4 numeros.
function suma=ud1_fsumapos(a,b,c,d)
suma = 0;
if a>0
suma=suma+a;
end
if b>0
suma=suma+b;
end
if c>0
suma=suma+c;
end
if d>0
suma=suma+d;
end
Los ejercicios correspondientes a este ejemplo son los siguientes:
Ejercicio 1.59
Prueba la funcion ud1_fsumapos
Ejercicio 1.60
Construye una funcion que reciba 5 n umeros a, b, c, d, y e y cuente cuantos son estrictamente
positivos.
Ejercicio 1.61
Construye una funcion que reciba 5 n umeros x, y, z, t, y s y dos n umeros a y b y devuelva la suma
de aquellos n umeros de entre esos 5 que son mayores e iguales que a y menores o iguales que b.
Ejercicio 1.62
Construye una funcion que reciba 5 n umeros a, b, c, d, y e y un n umero adicional positivo ref y
devuelva la suma de aquellos valores que sean negativos pero que su valor absoluto sea mayor que
ref. Por ejemplo, si los n umeros son, -7, 12, 4, -3, -6 y ref vale 3.7, la suma sera -7-5-=-13.
Pag. 53
Lenguajes de Programaci on: Gua ECTS
1.14. Funcion parte entera
Hay una funcion propia de MATLAB que se usa en muchos codigos y que conviene citar. Es la funcion
que extrae la parte entera, redondeando hacia , de un n umero. As, la parte entera de 3.45 es 3,
y la de -4.32 es -5. En el siguiente ejemplo se usa este operador, oor, para comprobar si un n umero
es o no entero.
%% ud1_fesentero
%% comprueba si un numero x es entero
%% funcion parte entera
function chivato=ud1_fesentero(x)
parte_entera=floor(x);
if x==parte_entera
chivato=1;
else
chivato=0;
end
Los ejercicios correspondientes a este ejemplo son los siguientes:
Ejercicio 1.63
Prueba la funcion ud1_fesentero.
Ejercicio 1.64
Construye una funcion que reciba 4 n umeros a, b, c, d y devuelva la suma de los que entre ellos son
enteros.
Ejercicio 1.65
Construye una funcion que reciba un n umero natural n y devuelva 0 si n es par y 1 si n es impar.
Ejercicio 1.66
(Para valientes) Construye una funcion que reciba 4 n umeros a, b, c, d y un n umero entero n y
devuelva la suma de los que entre ellos son enteros y ademas m ultiplos de n.
Pag. 54
Unidad Didactica 2
Bucles
2.1. General
Como ya se indico al comienzo de la unidad 1, esta segunda unidad contiene junto con la primera la
mayora de las herramientas que un alumno va a tener que utilizar a lo largo del curso.
La unidad se centra en la estructura de control mas importante, la que permite realizar repeticiones:
los bucles. El bucle junto con los condicionales representan la base de la programacion estructurada.
2.2. Bucles
En muchos problemas de matematicas se requiere repetir o iterar un mismo procedimiento. Es por
ello que todos los lenguajes de programacion contienen la posibilidad de crear bucles. Un bucle en
programacion es una sentencia que se realiza repetidas veces. Un bucle se utiliza para hacer un accion
repetida sin tener que repetir varias veces el mismo codigo, lo que ahorra tiempo, deja el codigo mas
claro y facilita su modicacion en el futuro.
La variable entera que cuenta el n umero de veces que regula la evolucion del bucle se conoce como
ndice del bucle. Durante este curso un bucle lo relacionaremos con el uso del comando WHILE.
La gran ventaja de los bucles escritos mediante el uso de la sintaxis WHILE frente a otras formas
de escribir un bucle radica en que el ndice del bucle es una variable mas del programa y su valor es
controlado en todo momento por el programador. Con este tipo de bucles, el n de la iteratividad
viene determinado por una condicion sobre una variable del programa que aparece a continuacion
del comando WHILE.
El primer ejemplo ilustra uno de los usos mas tpicos de los bucles que sin lugar a dudas es la suma
de un conjunto de elementos. El conjunto de elementos que se quieren sumar en este caso son los
naturales de 1 a n. El ndice i se inicializa por tanto a 1 y n es un argumento de la funcion. La
condicion de corte del proceso iterativo que requiere la estructura WHILE se ejecutara cuando el ndice
i sea mayor que n, en cualquier otro caso i se ira incrementando en una unidad y la variable suma
se vera incrementada en el valor del propio ndice i. De esta forma cuando el bucle se interrumpa la
variable suma contendra el valor resultante de la suma de los n primeros n umeros naturales.
%ud2_fsuma
% Suma de todos los naturales entre 1 y n
% primer bucle
function suma=ud2_fsuma(n)
suma=0;
i=1;
Pag. 55
Lenguajes de Programaci on: Gua ECTS
while i<=n
suma=suma+i;
i=i+1;
end
Mediante los siguientes ejercicios se podra aanzar el concepto de bucle.
Ejercicio 2.1
Crea una carpeta llamada ud2 en Z: Copia en ella todos los ejemplos cuyo nombre empiece por ud2 ,
los cuales encontraras en la carpeta:
Asignaturas\LP\Ejemplos
A nade la carpeta Z:\ud2 al path o Current Directory de MATLAB.
Ejercicio 2.2
Prueba la funcion ud2 fsuma
Ejercicio 2.3
Construye una funcion que reciba dos n umeros naturales, m y n, con m < n, y devuelva la suma de
los naturales entre m y n.
Ejercicio 2.4
Idem sin usar bucles y llamando a la funcion ud2 fsuma.
Ejercicio 2.5
Construye una funcion que reciba un n umero natural, n y devuelva
sin(1) + sin(2) + . . . + sin(n 1) + sin(n)
n + 1
Ejercicio 2.6
(Para valientes) Construye una funcion que reciba dos n umeros, reales a, b, con a < b, un n umero
natural n, calcule h = (b a)/n y devuelva
sin(a) + sin(a + h) + sin(a + 2h) + . . . + sin(a + (n 1)h) + sin(b)
n + 1
,
es decir, el valor medio aproximado del seno entre a y b, tomando n + 1 puntos para aproximarlo.
Tambien se puede ver como la posicion vertical del centro de gravedad de la curva y = sin(x) entre
a y b si la consideramos representada por esos n + 1 puntos.
Ejercicio 2.7
(Para valientes) Construye una funcion que reciba dos n umeros, reales a, b, con a < b, un n umero
natural n, y calcule la posicion vertical del centro de gravedad de la curva y = sin(x), considerada
como una poligonal que se apoya en n + 1 puntos de esa curva cuyas abscisas estan equiespaciadas
entre a y b.
Ejercicio 2.8
(Para valientes) Construye una funcion que reciba dos n umeros, reales a, b, con a < b, un n umero
natural n, y calcule el centro de gravedad del supercie denida por los rectangulos que tiene como
base h = (b a)/n y como altura sin(x
i
), con x
i
= a + i h, 0 i < n.
Pag. 56
UNIDAD DID

ACTICA 2. BUCLES
2.3. Bucles con incremento variable
El segundo ejemplo es una variante del caso anterior donde se desea que tan solo se sumen los
n umeros pares. La primera diferencia estriba en que el primer valor que debe tomar el ndice i debe
ser 2 y la segunda es que el incremento del ndice sea de dos unidades en vez de una.
% ud2_fsumapares
% Suma todos los numeros pares entre 1 y n
function suma=ud2_fsumapares(n)
suma=0;
i=2;
while i<=n
suma=suma+i;
i=i+2;
end
Los ejercicios correspondientes a este ejemplo son los siguientes:
Ejercicio 2.9
Prueba la funcion ud2 fsumapares
Ejercicio 2.10
Construye una funcion que reciba un n umero natural, n, y devuelva la suma de los impares entre 1
y n.
Ejercicio 2.11
Construye una funcion que reciba un n umero natural, n, y devuelva la suma de los m ultiplos de 3
entre 1 y n.
Ejercicio 2.12
(Para valientes) Construye una funcion que reciba un n umero natural n y devuelva 0 si n es par y 1
si n es impar. No se podra usar la orden floor.
2.4. Bucles con otras operaciones
Como podemos ver en el siguiente ejemplo, el uso de un bucle se puede extender al producto igual
que a la suma. De esta forma si hacemos productos de n umeros que son siempre el mismo en este
caso x, estaremos hallando la potencia enesima de dicho n umero.
% ud2_fpotencia
% Calcula xn, repitiendo el producto.
function pot=ud2_fpotencia(x,n)
pot=1;
i=1;
while i<=n
pot=x
*
pot;
i=i+1;
end
Los ejercicios correspondientes a este ejemplo son los siguientes:
Pag. 57
Lenguajes de Programaci on: Gua ECTS
Ejercicio 2.13
Prueba la funcion ud2 fpotencia
Ejercicio 2.14
Construye una funcion que reciba un n umero natural, n, y devuelva
n! = 1 2 . . . (n 1)n
Ejercicio 2.15
Que devuelve la siguiente funcion?
function y=ud2_fprueba(m,n,k)
y=1;
i=m;
while i<=n
y=y
*
i
i=i+k;
end
Sin ejecutarla, trata de calcular que devolvera ud2 fprueba(2, 15, 3). Compruebalo con MATLAB.
Ejercicio 2.16
Construye una funcion que reciba un n umero x y un n umero natural, n, y devuelva x
n
sin usar
ni llamar a ud2 fpotencia.
Ejercicio 2.17
Llamando a la funcion ud2 fpotencia y la funcion que has creado en el ejercicio 2.16, construye una
funcion que reciba un n umero x y un entero a y devuelva x
a
.
Ejercicio 2.18
Construye una funcion que reciba x y n, calculando:

i
x
i
para lo cual llamara a ud2 fpotencia.
2.5. Bucles y relaciones de recurrencia
Otra aplicacion interesante de los bucles viene a partir del uso de las formulas de recurrencia, muy
usadas en metodos numericos y calculo innitesimal. El valor de una variable en un paso n depende
de su valor en el paso anterior n 1. El ndice del bucle sera capaz de ir avanzando con en n umero
de pasos y de este modo ir actualizando el valor de x en cada uno de los mismos. Ver el siguiente
ejemplo:
% ud2_fnewton
% Recibe a y n y devuelve el termino n-esimo
% de la sucesion x_(i+1)=x_i-((x_i)2-81)/(2
*
x_i), siendo
% a el primer termino, x_1=a
% Relacion entre sucesiones y bucles.
function x=ud2_fnewton(a,n)
Pag. 58
UNIDAD DID

ACTICA 2. BUCLES
x=a;
i=1;
while i<=n-1
x=x-(x2-81)/(2
*
x);
i=i+1;
end
Los ejercicios correspondientes a este ejemplo son los siguientes:
Ejercicio 2.19
Prueba la funcion ud2 fnewton con algunos valores y comprueba que los resultados son correctos.
Ejercicio 2.20
Construye una funcion que reciba un n umero natural n y devuelva el termino n-esimo de la sucesion
x
i+1
=

2x
i
, x
1
= 3.57, i N.
A que valor converge la sucesion cuando n ?
Ejercicio 2.21
Construye una funcion que reciba un n umero natural n y devuelva x
n
x
n1
, siendo x
n
y x
n1
los terminos n y n 1 de la sucesion del ejercicio 2.20. Se llamara a la funcion creada en dicho
ejercicio.
Ejercicio 2.22
Construye una funcion que reciba un n umero natural n y devuelva x
n
x
n1
, siendo x
n
y x
n1
los terminos n y n 1 de la sucesion del ejercicio 2.20. No se podra llamar a la funcion creada en
dicho ejercicio y solo se podra usar un bucle.
Ejercicio 2.23
Construye una funcion que reciba un n umero natural n y devuelva el n-esimo termino de la sucesion
de Fibonacci
1
.
x
n+2
= x
n
+ x
n+1
, x
1
= 1, x
2
= 2.
Ejercicio 2.24
Modica el ejemplo 2.23 para que reciba un n umero natural n y dos n umeros x
1
y x
2
y devuelva el
termino n-esimo de la sucesion de Fibonacci.
1
Leonardo Pisano nacio en 1170 probablemente en Pisa, en el seno de la familia Bonacci, de ah su
sobrenombre Fibonacci, por el que es generalmente conocido. Su padre fue representante de los mercaderes
de la Rep ublica de Pisa en el norte de

Africa, en lo que es hoy el noroeste de Argelia. All crecio y se
educo Fibonacci. En los numerosos viajes en los que acompa no a su padre, Fibonacci aprendio las ventajas de
los sistemas matematicos utilizados en otras culturas. Hacia 1200 regreso a Pisa y recopilo en diversos libros
lo aprendido en sus viajes a nadiendo ademas notables contribuciones propias.
Por ejemplo, en uno de sus libros introdujo el sistema decimal indo-arabigo, sistema de numeracion posicional
que usamos actualmente y extendio por Europa el uso del sistema arabe de numeracion. En el mismo libro
aparece la conocida sucesion de Fibonacci, 1, 1, 2, 3, 5, 8, 13, 21, 34,... (en la que cada termino es suma
de los dos anteriores) como solucion al siguiente problema: Un hombre aisla un par de conejos en un corral.
Cuantos pares de conejos hay al cabo de un a no si se supone que cada par de conejos engendra un nuevo
par que a partir del segundo mes se hace fertil?
Sin embargo, la mayor aportacion matematica de Fibonacci se encuentra en el area de la Teora de los
N umeros, en la que, entre otros resultados destaca el estudio de metodos matematicos para encontrar triples
Pitagoricos, es decir, tres n umeros naturales, m, n y k que verican m
2
+ n
2
= k
2
.
Pag. 59
Lenguajes de Programaci on: Gua ECTS
Ejercicio 2.25
(Para valientes) Construye una funcion que reciba tres n umeros enteros p, q y r y devuelva 1 si
r pertenece a la sucesion de Fibonacci iniciada por p y q y 0 en caso contrario (supondremos la
sucesion monotona).
Ejercicio 2.26
(Para valientes) Idem siendo p, q y r n umeros reales (supondremos la sucesion monotona).
Ejercicio 2.27
(Para valientes) El n umero , se puede obtener mediante la formula
= 4 (1 1/3 + 1/5 1/7 + . . . + (1)
i
1
2 i + 1
+ . . .).
Construye una funcion que reciba un n umero n y devuelva la aproximacion de mediante los n
primeros sumandos de la expresion anterior (no hace falta utilizar ).
2.6. Bucles y condicionales
A continuacion se nos plantea la necesidad de contar los divisores de un n umero natural n. Para
ello hay que combinar un bucle con un condicional, es decir hay que recorrer todos los potenciales
candidatos a divisor que van desde 1 a n y entre ellos ver los que realmente son divisores de n. En
caso de que veriquen la condicion la variable de conteo de divisores se incrementa en una unidad y
en el caso opuesto no se altera.
% ud2_fcuentadiv
% ud2_fcuentadiv(n) cuenta los divisores de n
% primer uso de mod
function num=ud2_fcuentadiv(n)
num=0;
i=1;
while i<=n
if mod(n,i)==0
num=num+1;
end
i=i+1;
end
Los ejercicios correspondientes a este ejemplo son los siguientes:
Ejercicio 2.28
Copia el ejemplo ud2 fcuentadiv a tu directorio. Pruebalo con algunos valores y comprueba que los
resultados son correctos.
Ejercicio 2.29
Construye una funcion que reciba un n umero natural n y devuelva 0 si n es par y 1 si n es impar. Se
usara la orden mod.
Ejercicio 2.30
Construye una funcion que reciba un n umero n, cuente los n umeros que son pares y no son m ultiplos
de 3 entre 1 y n y devuelva ese valor.
Pag. 60
UNIDAD DID

ACTICA 2. BUCLES
Ejercicio 2.31
Construye una funcion que reciba un n umero n, recorra los valores
sin(1), sin(2), sin(3), . . . , sin(n),
y devuelva el n umero de ellos que son positivos.
Ejercicio 2.32
Construye una funcion que reciba un n umero n, recorra los valores
sin(1), sin(2), sin(3), . . . , sin(n),
y devuelva el producto de los que son positivos.
Ejercicio 2.33
Construye una funcion que reciba un a no y devuelva su siglo.
Ejercicio 2.34
La siguiente funcion que recibe un n umero n y debera devolver el n umero de valores entre 1 y n
para los que sin es mayor que 1/2 menos para los que es menor que 1/2. Corrige los errores que
tiene.
function c=ud2_fprueba2(n)
i=1;
while i<=n
if sin(i)>1/2
c=c+1;
else
c=c-1;
end
i=1+1;
end
Ejercicio 2.35
Construye una funcion que reciba dos n umeros naturales m y n, y devuelva la cantidad de divisores
comunes.
Ejercicio 2.36
(Para valientes) Construye una funcion que reciba dos n umeros naturales m y n, y devuelva su
maximo com un divisor.
Ejercicio 2.37
(Para valientes) Construye una funcion que reciba dos n umeros naturales m y n, y devuelva su
mnimo com un m ultiplo.
Ejercicio 2.38
(Para valientes) Construye una funcion que reciba 3 naturales m, n, p y devuelva una variable flag tal
que flag = 1 si el mnimo de los maximos comunes divisores entre dos de estos n umeros corresponde
a la pareja m, n. flag = 2 si es m, p y flag = 3 si es n, p. Si por ejemplo m = 20, n = 30, p = 15,
flag valdra 2. No se podra llamar a 2.36.
Ejercicio 2.39
(Para valientes) Construir una funcion que reciba un n umero natural y devuelva el n umero de ceros
que hay en el (as, por ejemplo, en 304 hay un cero, en 30 hay un cero y en 115 no hay ning un cero).
Para contar cuantas cifras tiene el n umero, podeis usar log10.
Pag. 61
Lenguajes de Programaci on: Gua ECTS
2.7. Uso de bucles para vericar una condicion sobre un
conjunto.
El ejemplo que se ilustra a continuacion tan solo devuelve un valor 1 o 0 en el caso de que el n umero
que introducimos como argumento sea o no primo. Al igual que en el caso anterior el bucle nos
vale para recorrer todos los posibles candidatos que pueden cumplir una condicion, en este caso ser
divisor del argumento numero. A diferencia del caso anterior basta con que la condicion se cumpla
una vez para que no haga falta continuar el bucle, y podamos asegurar que el n umero no es primo
devolviendo por tanto un cero.
% ud2_fesprimo
% ud2_fesprimo(numero) devuelve 1 si numero es primo
% y 0 si no lo es
% orden break.
function primo=ud2_fesprimo(numero)
primo=1;
i=2;
while i<=sqrt(numero)
if mod(numero,i)==0
primo=0;
break;
end
i=i+1;
end
Los ejercicios correspondientes a este ejemplo son los siguientes:
Ejercicio 2.40
Prueba la funcion ud2 fesprimo.
Ejercicio 2.41
Construye una funcion que reciba un n umero natural n y devuelva su divisor mas grande distinto de
s mismo.
Ejercicio 2.42
Idem mas peque no y distinto de 1.
Ejercicio 2.43
Construye una funcion que reciba dos enteros, m, n, con m < n y devuelva el menor n umero entero
r entre m y n tal que sin(r) > 0 (se usara break). Se supondra que existe solucion. Por ejemplo, si
m = 16 y n = 27 el resultado debe ser 19.
Ejercicio 2.44
Idem sin break.
Ejercicio 2.45
Construye una funcion que reciba un natural n y devuelva el mayor n umero entero positivo m < n
tal que sin(m) < 0. (se usara break). Se supondra que existe solucion. Por ejemplo, si n = 29 el
resultado ha de ser 25.
Pag. 62
UNIDAD DID

ACTICA 2. BUCLES
Ejercicio 2.46
Idem sin break.
Ejercicio 2.47
Utilizando la funcion ud2 fcuentadiv, construye una funcion que haga lo mismo que ud2 fesprimo.
Ejercicio 2.48
Construir una funcion que reciba un n umero natural n y un valor prec, itere la sucesion
x
i+1
=

2x
i
, x
1
= 8, 32, i N
y si para alg un 1 < i n, |x
i
x
i1
| < prec, devuelva x
i
. Si no, devolvera x
n
.
Ejercicio 2.49
Modicar la funcion creada en el ejercicio 2.23 para que reciba un n umero num, y devuelva el primer
elemento x
i
de la sucesion de Fibonacci x
1
= 1, x
2
= 2, x
i
= x
i1
+x
i2
tal que x
i
sea mayor que
num.
Nota: Como en cada iteracion sumamos mas de 1, como mucho tendramos que hacer n iteraciones.
Ejercicio 2.50
Crea una funcion que reciba un n umero num, calcule los terminos de la sucesion de Fibonacci x
1
= 1,
x
2
= 2, x
i
= x
i1
+ x
i2
menores que num y devuelva el n umero de ellos que son primos.
Ejercicio 2.51
(Para valientes) Crea una funcion que reciba un n umero num y devuelva 1 si descompone en producto
de dos primos y 0 si no es as. Por ejemplo, para num = 6 = 3 2 devolvera 1 y para num = 7 o
num = 12 devolvera 0. Usa la funcion ud2 fesprimo para determinar si un n umero es primo o no.
2.8. Bucles anidados.
Al igual que hemos visto que se pueden encontrar unos condicionales anidados dentro de otros, esto
mismo ocurre con los bucles. En el ejemplo presentado a continuacion vamos a contar la cantidad
de n umeros primos que hay menores o iguales que el argumento de entrada n sin contar con el 1,
esto lo llevaremos a cabo mediante el ndice i. Para ello planteamos un primer bucle donde i vaya
desde 2 hasta n, y en cada uno de los casos realizamos un bucle interno sobre los posibles divisores
de i que vienen representados por el ndice j. Se deja al estudiante entender el porque se limita el
crecimiento del ndice j hasta que sea menor o igual que la raz cuadrada de i.
% ud2_fnprimos.m
% ud2_fnprimos(n) devuelve el numero de primos
% menores o iguales que n. No contamos el 1 como primo.
% primer doble bucle (bucles anidados)
function p=ud2_fnprimos(n)
i=2;
p=0;
while i<=n
j=2;
primo=1;
while j<=sqrt(i)
Pag. 63
Lenguajes de Programaci on: Gua ECTS
if mod(i,j)==0
primo=0; %i no es primo
break;
end
j=j+1;
end
if primo==1
p=p+1;
end
i=i+1;
end
Los ejercicios correspondientes a este ejemplo son los siguientes:
Ejercicio 2.52
Prueba la funcion ud2 fnprimos
Ejercicio 2.53
Construye una funcion que calcule el n umero de primos menores o iguales que un n umero n sin
utilizar un doble bucle y llamando a ud2 fesprimo.
Ejercicio 2.54
Construye una funcion que reciba dos naturales, m y n, con m < n y devuelva la suma de los
n umeros primos entre m y n.
Ejercicio 2.55
Construye una funcion que calcule la suma de de los primos menores o iguales que un n umero n sin
llamar a ud2 fesprimo.
Ejercicio 2.56
Construye una funcion que reciba dos naturales, m y n, con m < n y devuelva el producto de los
n umeros primos entre m y n (sin llamar a ud2 fesprimo).
Ejercicio 2.57
Construye una funcion que reciba 3 naturales, m, n, p, con m < n y calcule:
m + m
2
+ + m
p
+ (m + 1) + (m + 1)
2
+ + (m + 1)
p
+ + n + n
2
+ + n
p
Ejercicio 2.58
Construye una funcion que reciba dos naturales, m y n, con m < n y devuelva el mayor n umero
primo entre m y n. (Para valientes) Hacerlo sin usar break.
Ejercicio 2.59
Construye una funcion que reciba dos naturales, m y n, con m < n y devuelva el menor n umero
primo entre m y n. (Para valientes) Hacerlo sin usar break.
Ejercicio 2.60
(Para valientes) Construye una funcion que reciba dos naturales, m y n, con m < n y devuelva el
mayor n umero primo entre m y n. No se podra usar ud2 fesprimo.
Pag. 64
Unidad Didactica 3
Vectores
3.1. General
La unidad 3 introduce un elemento fundamental en Programacion: los vectores o arraysde datos.
No hay apenas ordenes nuevas en esta unidad y nos concentramos en desarrollar algoritmos mas
interesantes, los cuales permiten resolver problemas mas complejos y similares a los reales. Los
vectores estan muy relacionados con los bucles que hemos estudiado en la unidad 2 pues son los
bucles los que nos permiten movernos con generalidad por los vectores.
3.2. Vectores como argumentos de funciones
Este ejemplo es la primera funcion en la que se usa un vector. Ademas, ese vector es en si mismo el
argumento de entrada de la funcion, lo cual no requiere ninguna sintaxis especca.
Como sabemos, desde que hicimos el tutorial (apendice 0), podemos preguntar a un vector o a una
matriz su tama no. Para ello disponemos de la orden length. Esto no es en general as si usamos otro
lenguaje de programacion, ya que en principio, ademas del vector, habra que pasar como argumento
un n umero natural correspondiente a su dimension. En MATLAB no es necesario pero la primera
lnea de la funcion es una asignacion de ese valor a una nueva variable n que nos va a permitir montar
el bucle para movernos por el vector.
Para obtener la media tenemos que sumar todos los elementos del vector. Para ello, inicializamos
a 0 la variable suma y mediante un bucle la vamos incrementando con los elementos del vector.
Finalmente dividimos por su dimension para tener la media.
% ud3_fmedia.m
% ud3_fmedia(v) recibe un vector v y
% devuelve el valor medio de los elementos de v
% Con esta funcion se introduce el uso de vectores
function m=ud3_fmedia(v)
n=length(v);% n es la dimension o numero de
% elementos del vector
suma=0; % Inicializamos la suma a 0
i=1;
while i<=n
suma=suma+v(i); % Sumamos el elemento i-esimo de v
i=i+1;
end
m=suma/n; % Una vez sumados, hallamos la media
Los ejercicios correspondientes a este ejemplo son los siguientes:
Ejercicio 3.1
Pag. 65
Lenguajes de Programaci on: Gua ECTS
Crea una carpeta llamada ud3 en Z: Copia en ella todos los ejemplos cuyo nombre empiece por ud3 ,
los cuales encontraras en la carpeta:
Asignaturas\LP\Ejemplos
A nade la carpeta Z:\ud3 al path o Current Directory de MATLAB.
Ejercicio 3.2
Prueba la funcion ud3 fmedia.m para diferentes vectores.
Ejercicio 3.3
Crea una funcion que reciba un vector y devuelva la media de los cuadrados de los elementos del
vector. Coincidira el resultado con la media al cuadrado?
Ejercicio 3.4
Crea una funcion que reciba un vector y devuelva la media geometrica de los elementos del vector.
La media geometrica de {a
1
, . . . , a
n
} es
n

a
1
a
2
. . . a
n
.
Ejercicio 3.5
Crea una funcion que reciba dos vectores y devuelva el producto escalar de los mismos. Esta funcion
tambien se puede hacer sin utilizar bucles, como vimos en el tutorial. Se supondra que los dos vectores
tienen la misma dimension.
3.3. Funciones que llaman a funciones con argumentos
vectores
Del mismo modo que en el ejemplo 1.6 estudiamos una funcion que llamaba a otra funcion,
en este ejemplo vemos una funcion que recibe un vector y llama a otra funci on que recibe un
vector, la que acabamos de estudiar, ud3 fmedia. La sintaxis no ofrece ninguna dicultad.
% ud3_fvarianza.m
% ud3_fvarianza(v) recibe un vector v y
% devuelve la varianza de los valores contenidos en el vector v
% Se llama a una funcion que recibe un vector (ud3_fmedia)
function var=ud3_fvarianza(v)
suma2=0;
m=ud3_fmedia(v);
n=length(v);
i=1;
while i<=n
suma2=suma2+(v(i)-m)2;
i=i+1;
end
var=suma2/(n-1);
De esta funci on no haremos ning un ejercicio especco, simplemente probar la funci on para
diferentes vectores, comprobando el signicado del concepto varianza
1
. Tendremos ocasion de
hacer abundantes ejemplos mas adelante.
Ejercicio 3.6
Prueba la funcion ud3 fvarianza.m para diferentes vectores.
1
Es una medida de como de semejantes son los elementos de un vector. Si son similares, la varianza es
peque na y si son muy diferentes, la varianza sera grande.
Pag. 66
UNIDAD DID

ACTICA 3. VECTORES
3.4. Calculo de extremos
Los algoritmos de b usqueda de extremos son fundamentales en este curso y el mas basico de
todos ellos es el de encontrar el maximo de una serie o vector. Para ello, se supone que el
maximo es el primero inicializando con ese valor una variable maxi que sera la que almacene
el maximo al nal. A continuaci on se van barriendo los demas elementos y en el momento en
que encontramos un valor mayor que el que tenemos como referencia, maxi, asignamos a maxi
ese valor.
% ud3_fmaximo.m
% ud3_fmaximo(v) recibe un vector v y devuelve
% la mayor de sus componentes
% El algoritmo de busqueda de maximo es fundamental en el curso.
function maxi=ud3_fmaximo(v)
n=length(v);
maxi=v(1);
i=2;
while i<=n
if v(i)>maxi
maxi=v(i);
end
i=i+1;
end
Es importante, muy importante, entender todos los detalles de este ejemplo. MATLAB dispone
de una funcion que realiza esta misma tarea, max, pero ello no es obice para estudiar el algorit-
mo, el cual es fundamental. Los ejercicios correspondientes a este ejemplo son especialmente
interesantes reejando la importancia del algoritmo explicado.
Ejercicio 3.7
Prueba la funcion ud3 fmaximo.m para diferentes vectores.
Ejercicio 3.8
Crea una funcion que reciba un vector y devuelva el mnimo de los elementos del vector.
Ejercicio 3.9
Crea una funcion que reciba un vector de n umeros naturales y devuelva el n umero de elementos del
vector que sean m ultiplos de tres.
Ejercicio 3.10
Crea una funcion que reciba un vector v, cambie de signo todos los elementos del vector, calcule el
maximo del nuevo vector y lo devuelva cambiado de signo. Que valor has obtenido?
Ejercicio 3.11
Crea una funcion que reciba un vector y calcule la media de los elementos positivos del vector. En
lugar de sumar todos los elementos, tendras que comprobar si un elemento es positivo o no antes de
sumarlo.
Ejercicio 3.12
Crea una funcion que reciba un vector de n umeros naturales y utilizando la funcion ud2 fesprimo,
devuelva el n umero de elementos del vector que son primos.
Pag. 67
Lenguajes de Programaci on: Gua ECTS
Ejercicio 3.13
Idem sin if.
Ejercicio 3.14
Crea una funcion que reciba un vector y que devuelva 1 si todos los elementos del vector son positivos
y 0 en caso contrario.
Ejercicio 3.15
Crea una funcion que reciba un vector de n umeros naturales y utilizando la funcion ud2 fesprimo
y sin utilizar if devuelva 1 si todos los elementos del vector son primos y 0 en caso contrario.
Ejercicio 3.16
Codica una funcion que reciba un vector de naturales v y devuelva el primer n umero primo que
aparezca en el vector. Caso de que no haya ninguno, devolvera 0. Por ejemplo, si v = (9, 14, 11, 7, 12),
la funcion devolvera 11.
Ejercicio 3.17
Crea una funcion que reciba un vector v y devuelva el mnimo de las diferencias en valor absoluto
entre un elemento de v y la media de v. Por ejemplo, si v = [3 2 1 7], la media vale 3.25 y la
diferencia mnima es 3 3.25 = 0.25.
Ejercicio 3.18
Crea una funcion que reciba un vector v y devuelva el valor del elemento de v que este mas cerca
de la media. Por ejemplo, si v = [3 2 1 7], la media vale 3.25 y el elemento mas proximo a la media
es 3.
Ejercicio 3.19
Crea una funcion que reciba un vector v y devuelva el ndice del elemento de v que este mas cerca de
la media. Por ejemplo, si v = [3 2 1 7], la media vale 3.25 y el elemento mas proximo a la media es el
1. Cambiad de orden los elementos en este ejemplo para probar el codigo y comprobar que funciona
en todas las circunstancias.
Ejercicio 3.20
Crea una funcion que reciba un vector v y devuelva el mnimo de las diferencias entre un elemento
de v y la media de v. Por ejemplo, si v = [3 2 1 7], la media vale 3.25 y la diferencia mnima es
1-3.25=-2.25.
Ejercicio 3.21
Crea una funcion que reciba un vector v y devuelva el ndice del elemento en el que se de el mnimo
de las diferencias entre un elemento de v y la media de v. Por ejemplo, si v = [3 2 1 7], la media
vale 3.25 y la diferencia mnima es 1-3.25=-2.25. El ndice del elemento cuyo valor es 1 es 3, pues
ocupa la tercera posicion en el vector.
Ejercicio 3.22
Que valor devuelve la siguiente funcion (v es un vector de n umeros naturales)?
Pag. 68
UNIDAD DID

ACTICA 3. VECTORES
function y=ud3_fprueba(v)
n=length(v);
i=1;
y=v(1);
while i<=n
if ud2_fesprimo(i)==1 & v(i)>y
y=v(i);
end
i=i+1;
end
Ejercicio 3.23
(Para valientes) Crea una funcion que reciba un vector de naturales y devuelva 1 si todos los elementos
son primos y 0 en caso contrario, sin usar if.
3.5. Calculo de posicion de extremos
A veces no interesa tanto el valor del maximo como su posici on en el vector. En esta funci on
se juega con esa idea, de tal modo que se guarda posicion cuando se supera la posici on de
referencia inicial (la primera). Es un algoritmo muy interesante y esencialmente mas complicado
y difcil de entender que el anterior.
% ud3_fimax.m
% ud3_fimax(v) recibe un vector v y devuelve
% la posicion de la mayor de sus componentes
function imax=ud3_fimax(v)
n=length(v);
imax=1; % Tomamos como maximo el primer elemento
i=2;
while i<=n
if v(imax)<v(i) % Si encontramos un elemento mayor
imax=i; % actualizamos el valor de la posicion
end
i=i+1;
end
% Al final imax contiene la posicion de la mayor de las componentes
Los ejercicios correspondientes a este ejemplo son tambien bastante interesantes.
Ejercicio 3.24
Prueba la funcion ud3 max.m para diferentes vectores.
Ejercicio 3.25
Crea una funcion que reciba un vector de naturales y devuelva el ndice del primer n umero primo que
aparezca en el vector. En caso de que no haya ninguno, devolvera 0.
Ejercicio 3.26
Crea una funcion que reciba un vector de naturales y devuelva el ndice del mayor primo que aparezca
en el vector. En caso de que no haya ninguno, devolvera 0.
Ejercicio 3.27
Pag. 69
Lenguajes de Programaci on: Gua ECTS
La siguiente funcion recibe un vector y debera devolver la mayor diferencia entre dos terminos
consecutivos (la diferencia de un elemento menos el anterior). Encuentra los errores.
function y=ud3_fprueba3(v)
n=length(v);
y=0;
while i<=n
if abs(v(i)-v(i-1))>y
y=v(i)-(v(i)-1);
end
end
Pruebala con los vectores (1, 1, 1), (1, 2, 1), (1, 2, 4) y (4, 2, 1) (debera devolver 0, 1, 2 y -1.
3.6. Evaluacion de un polinomio
El ejemplo correspondiente a esta secci on ejemplica el caso de una funci on que recibe escalares
y vectores como argumentos de entrada. Se trata de evaluar un polinomio en un punto,
devolviendo el valor obtenido. Tiene detalles interesantes que pasamos a comentar. El primero
es el de la identicacion de un polinomio de grado n con un vector de n + 1 componentes y
por tanto, dimension n+1. As, si tenemos el siguiente polinomio de grado n la representaci on
habitual que de el se hace sera:
a
0
+ a
1
x + a
2
x
2
+ + a
n1
x
n1
+ a
n
x
n
De este modo, este polinomio se identicara de modo inmediato con el vector a.
a = (a
0
, a
1
, , a
n1
, a
n
)
Sin embargo, no podemos trasladar esto directamente a MATLAB pues la indexaci on de los
vectores siempre empieza por la componente 1. Ello invita a repensar polinomio y vector del
siguiente modo:
a
1
+ a
2
x + a
3
x
2
+ + a
n
x
n1
+ a
n+1
x
n
a = (a
1
, a
2
, , a
n
, a
n+1
)
Por tanto, el polinomio 2.53.7x
2
+0.5x
3
se correspondera con el vector a = (2.5, 0.0, 3.7, 0.5).
Como se puede observar, grado 3 pero dimension 4. La forma mas directa de construir una
funci on que evaluase este polinomio a en un punto x sera
function y=ud3_fevalua0(a,x)
n=length(a)-1;
y=a(1);
i=2;
while i<=n+1
y=y+a(i)
*
x(i-1);
i=i+1;
end
en la cual simplemente vamos incrementando la variable y en el sumando a
i
x
i1
, hasta que i
sea n+1. Para invocar esta funci on desde la lnea de comandos, evaluando el ejemplo anterior
en x = 2 tendremos:
Pag. 70
UNIDAD DID

ACTICA 3. VECTORES
>> ud3_fevalua0([2.5 0.0 -3.7 0.5],2)
ans =
-8.3000
Para comprobar, haremos las siguientes operaciones:
>> 2.5+0.0
*
2-3.7
*
22+0.5
*
23
ans =
-8.3000
Existe un algoritmo que evita el tener que calcular todas esas potencias ahorrando cierto
tiempo. Se llama algoritmo de Horner
2
En el algoritmo de Horner, el polinomio escribe del
Figura 3.1: Zoetropo de Horner
siguiente modo:
a
1
+ x(a
2
+ x(a
3
+ x(a
4
+ + x(a
n
+ xa
n+1
))))
Es como si el polinomio 2.53.7x
2
+0.5x
3
lo escribiesemos como 2.5+x(0.0+x(3.7+x0.5)).
Ello conduce a un algoritmo diferente en el que se empieza por el termino de grado mas alto y
se va hacia abajo despues. Con ello, en este ejemplo aprendemos a recorrer el vector utilizando
un orden distinto al habitual y aprendemos tambien a desconectar la variable n de la dimension
del vector, algo que en general os cuesta mucho.
% ud3_fevalua.m
% ud3_fevalua(a,x), recibe un vector a de dimension n+1 y un escalar x y
% devuelve el polinomio a(n+1)xn+...+a(2)x+a(1) evaluado en x,
% escribiendolo como x(...(x(x a(n+1)+ a(n))+a(n-1))...+a(2))+a(1)
% En este ejemplo, mostramos como recorrer los elementos de un vector en
% otro orden y trabajamos con n distinto de la dimension del vector
function y=ud3_fevalua(a,x)
n=length(a)-1;
2
William George Horner (Bristol, 1786, Bath, 1837), matematico ingles conocido por haber desarrollado
metodos para resolver ecuaciones polinomicas y sobre todo por ser el inventor del zoetropo(g. 3.1), artilugio
que creaba la ilusion optica de movimiento, y a partir del cual se evoluciono hasta la invencion del cine.
Pag. 71
Lenguajes de Programaci on: Gua ECTS
y=a(n+1);
i=n;
while i>=1
y=x
*
y+a(i);
i=i-1;
end
Los ejercicios correspondientes a este ejemplo son bastante interesantes.
Ejercicio 3.28
Prueba la funcion ud3 fevalua.m.
Ejercicio 3.29
Aproximacion del seno. Para obtener un valor aproximado del seno de un angulo evaluamos el
polinomio de Taylor:


3
3!
+

5
5!


7
7!
Usando la funcion ud3 fevalua.m, crea una funcion que reciba un valor de y devuelva el valor del
seno de , calculado a partir de la formula anterior.
Ejercicio 3.30
La siguiente funcion recibe un vector v y una posicion i y devuelve la diferencia entre el primer y el
elemento i-esimo. Es correcta? Podras hacerla mas eciente?
function dif=ud3_fdiferencia(v,pos)
n=length(v);
i=1;
while i<=n
if i==pos
dif=v(1)-v(i);
end
i=i+1;
end
Pista: No se debera usar un bucle ni un condicional.
Ejercicio 3.31
Crea una funcion que reciba dos vectores, el primero de los cuales seran los coecientes de un
polinomio p(x). La funcion devolvera 1 si en el segundo vector aparece una raz de p(x) y 0 en caso
contrario. Utiliza ud3 fevalua.m para comprobar si un n umero es raz del polinomio o no.
Ejercicio 3.32
Crea una funcion que reciba un vector t y un n umero x y evalue en x el polinomio
(x t
1
)(x t
2
) . . . (x t
n
),
donde n es la dimension del vector t. Es decir, eval ua en x el vector de coeciente principal 1 cuyas
races son los elementos de t.
Ejercicio 3.33
Pag. 72
UNIDAD DID

ACTICA 3. VECTORES
Crea una funcion que reciba un vector de naturales v y un natural d y devuelva 1 si todos los
elementos de v son divisibles por d y 0 en caso contrario.
Ejercicio 3.34
Crea una funcion que reciba un n umero y un vector y devuelva el n umero de veces que aparece ese
n umero en el vector.
Ejercicio 3.35
(Para valientes) Usando la funcion creada en el apartado 3.34, construir una funcion que reciba un
vector y devuelva el elemento que se repite mas veces. Por ejemplo, en [0 1 2 1] devolvera 1.
Ejercicio 3.36
(Para valientes) Crea una funcion que reciba y un n umero n y devuelva el valor del seno en
aproximandolo por el polinomio de Taylor en 0 de grado n.
3.7. Funcion que devuelve un vector
A menudo, la salida de nuestras funciones pueden ser tambien vectores. En MATLAB, la
sintaxis no cambia con respecto a la de una variable escalar convencional. En este ejemplo,
ademas ese vector se construye a partir de varios escalares, pues de lo que se trata es de
construir un vector con los terminos de la sucesi on de Fibonacci, la cual ya estudiamos en el
ejercicio 2.23.
% ud3_fibo
% ud3_fibo(x1,x2,n) devuelve los n primeros
% terminos de la sucesion de Fibonacci
% x_1=x1, x_2=x2, x_n=x_(n-1)+x_(n-2)
% Por primera vez definimos una funcion que
% devuelve un vector, y lo construimos con
% argumentos de entrada escalares.
function v=ud3_fibo(x1,x2,n)
v(1)=x1;
v(2)=x2;
i=3;
while i<=n
v(i)=v(i-1)+v(i-2);
i=i+1;
end
Los ejercicios correspondientes a este ejemplo son:
Ejercicio 3.37
Prueba la funcion ud3 bo.m.
Ejercicio 3.38
Construye una funcion que reciba un n umero natural n y devuelva un vector v tal que sus componentes
sean
v
i
=

1 +
1
i

i
, 1 i n
Llama desde MATLAB a la funcion. A que tienden las componentes del vector resultado?.
Ejercicio 3.39
Pag. 73
Lenguajes de Programaci on: Gua ECTS
Construye una funcion que reciba un n umero natural n y devuelva un vector formado por los n
primeros terminos de la sucesion
x
1
= 2, 456, x
i+1
=

2x
i
, i N
Comprobar que converge a 2.
Ejercicio 3.40
Crea una funcion que reciba dos valores, xmin, xmax, y el n umero de tramos n. La funcion calcu-
lara el valor
h =
xmax xmin
n
,
y devolvera un vector x de n+1 componentes que contenga los puntos entre xmin y xmax separados
cada dos una distancia h. As pues,
x
1
= xmin, x
2
= xmin + h, . . . , x
n+1
= xmin + nh = xmax.
Ejercicio 3.41
(Para valientes) Construye una funcion que reciba un n umero natural y devuelva el vector formado
por sus cifras. As, si introducimos 1423, devolvera [1 4 2 3].
Ejercicio 3.42
(Para los mas valientes) Criba de Eratostenes. La manera mas rapida de obtener todos los n umeros
primos menores que un n umero dado n es mediante la Criba de Eratostenes. El procedimiento es el
siguiente: se toman todos los n umeros menores que n y se van eliminando de la lista los m ultiplos
de dos, los m ultiplos de tres y as sucesivamente hasta llegar a los m ultiplos de la raz cuadrada de
n.
Ejercicio 3.43
Crea una funcion que reciba un n umero n y devuelva todos los n umeros primos menores que n
mediante la Criba de Eratostenes. Como lista de n umeros, usaremos un vector v de dimension 100
que tenga en la posicion i el n umero i y para marcar el n umero como eliminado, pondremos un 0 en
dicha posicion.
Para mejorarlo, elimina los m ultiplos de los n umeros primos entre 2 y

n en lugar de eliminar
los m ultiplos de todos los n umeros entre 2 y

n. Notese que seg un vamos aplicando la criba de
Eratostenes vamos obteniendo los n umeros primos, as que podemos utilizar la informacion guardada
en el vector para este caso.
Ejercicio 3.44
Determina que valor devolvera la siguiente funcion si v = (1, 3, 2, 5, 4).
function y=ud3_fprueba2(v)
n=length(v);
i=1;
y=1;
while i<=n
if v(i)>y
y=i;
end
i=i+1;
end
Pag. 74
UNIDAD DID

ACTICA 3. VECTORES
3.8. Funciones que reciben y devuelven vectores
Cuando queramos por ejemplo una funci on que nos devuelva una curva evaluada en una serie
de valores estructurados a su vez como un vector, deberemos tener la posibilidad de recibir
un vector en la funci on y devolver otro vector. La sintaxis no ofrece ning un problema, pero
conceptualmente hay que saber moverse a traves del vector de partida y generar otro. Vamos
a plantear primero un ejemplo sencillo en el que se trata simplemente de codicar una funcion
que reciba un vector de abscisas x y devuelva un vector de ordenadas y tal que para cada
abscisa x
i
, la ordenada correspondiente y
i
sea el maximo de las funciones seno y coseno
evaluadas en x
i
.
% ud3_fmaxsincos
% ud3_fmax_vect(x) recibe un vector x y devuelve el vector
% y tal que cada componente de y es el maximo de las
% funciones seno y coseno evaluadas en cada componente de x
% Primera funcion que recibe un vector y devuelve otro vector
%
function y=ud3_fmaxsincos(x)
n=length(x);
i=1;
while i<=n
if sin(x(i))>cos(x(i))
y(i)=sin(x(i));
else
y(i)=cos(x(i));
end
i=i+1;
end
Para probar esta funci on podemos ejecutar los siguientes comandos desde la ventana de co-
mandos de MATLAB.
>>x=0:0.01:8
*
pi;
>>y=ud3_fmaxsincos(x);
>>plot(x,y);
Otra posibilidad sencilla pero tambien interesante es el de tener una funci on que reciba un
vector y uno o varios escalares y devuelva otro vector. Presentamos este ejemplo en el que se
trata simplemente de codicar una funci on que reciba un vector x y un escalar a. La funci on
devolvera un vector y, tal que la componente y
i
de ese vector sera 0 si la correspondiente x
i
es menor que a y 1 en caso contrario.
% ud3_fmayormenor
% ud3_fmayormenor(x,a) recibe un vector x y devuelve el
% vector y tal que cada componente de y vale 0 o 1
% dependiendo de que la correspondiente de x sea menor
% o mayor o igual que a
%
function y=ud3_fmenormayor(x,a)
n=length(x);
i=1;
while i<=n
if x(i)<a
y(i)=0;
else
y(i)=1;
end
i=i+1;
end
Pag. 75
Lenguajes de Programaci on: Gua ECTS
Presentamos un ejemplo mas que tiene el interes de que llamamos a una funci on para ir
calculando el valor de cada componente del vector resultado. Se trata de codicar una funcion
que reciba un vector de naturales u y devolver un vector vprimos tal que cada componente
de vprimos vale uno o cero en funcion de que la correspondiente componente de u sea o no
prima.
% ud3_fvprimos
% ud3_fvprimos(u) recibe un vector de naturales u y devuelve
% un vector vprimos tal que cada componente de vprimos vale
% uno o cero dependiendo de que la componente correspodiente
% de u sea o no prima.
function vprimos=ud3_fvprimos(u)
n=length(u);
i=1;
while i<=n
vprimos(i)=ud2_fesprimo(u(i));
i=i+1;
end
En algunos casos, se puede utilizar la vectorizaci on de operaciones explicada en el tutorial
para evitar uno de los bucles en la funci on, pero en general eso no sera posible. Los ejercicios
correspondientes a este ejemplo son:
Ejercicio 3.45
Prueba las funciones ud3 fmaxsincos.m, ud3 fmenormayor.m y ud3 fvprimos.m.
Ejercicio 3.46
Crea una funcion que reciba un vector x y devuelva un vector y tal que y
i
= x
2
i
log(x
2
i
+ 1) (se
podra hacer sin while, vectorizando las operaciones).
Ejercicio 3.47
Crea una funcion similar a la funcion ud3 fmaxsincos.m que calcule el maximo entre la funcion del
ejercicio 3.46 y el seno. Dibuja la curva resultado de modo analogo a como se dibujo la de dicha
funcion.
Ejercicio 3.48
Crea una funcion que reciba un vector x y devuelva un vector y tal que para cada ndice i, y
i
sea la
aproximacion de sin(x
i
) dada por:
y
i
= x
i

x
3
i
3!
+
x
5
i
5!

x
7
i
7!
.
Se llamara a la funcion del ejercicio 3.29 del modo que convenga. Dibuja con MATLAB el seno y su
aproximacion por la funcion anterior en [/2, /2], con al menos 1000 puntos.
Ejercicio 3.49
Construye una funcion que reciba un vector de naturales, (m
1
, m
2
, . . . , m
n
) y devuelva el vector
de los factoriales, (m
1
!, m
2
!, . . . , m
n
!). Representa en una graca la funcion factorial entre 1 y 10
y la funcion exponencial entre 1 y 10.
Para mejorar la graca, cambiamos la escala a logartmica, es decir, aplicamos el logaritmo a cada
una de las funciones. Cual de las dos funciones crece mas rapido?
Ejercicio 3.50
Pag. 76
UNIDAD DID

ACTICA 3. VECTORES
Crea una funcion que reciba un vector v y devuelva un vector con los elementos del vector v pero
en orden inverso al original.
Ejercicio 3.51
Crea una funcion que reciba un vector x y dos valores a y b, con a < b, y devuelva un vector y que
es el original truncado entre a y b.
Ejercicio 3.52
Crea una funcion que reciba un vector y devuelva los datos escalados entre cero y uno. Para ello
determinaremos el valor mnimo del vector. Restamos ese valor al vector para que los datos comiencen
en cero. Calculamos el maximo del nuevo vector y dividimos cada elemento del vector por dicho
maximo. Al nal tenemos que obtener un vector de n umeros entre cero y uno, de modo que el menor
sea cero y el mayor uno y las diferencias entre dos elementos del vector original y los correspondientes
escalado sean proporcionales.
Ejercicio 3.53
(Para valientes) Modica la funcion anterior para que reciba un vector y dos valores a y b y devuelva
el vector escalado entre a y b.
3.9. Construccion de vectores
A menudo surgen problemas en los que a partir de un vector es necesario construir un nuevo
vector que no tiene la misma dimensi on que el original, situaci on esencialmente mas sencilla
que ya hemos contemplado en la seccion 3.8. Ademas, al construir este nuevo vector a partir
del original, a menudo no sabemos el tama no o dimension del vector resultante. La gesti on
de la memoria RAM en estos casos requerira un cierto cuidado en muchos lenguajes de
programaci on pero MATLAB lo maneja con mucha simplicidad. As, a medida que vamos
deniendo nuevas posiciones del vector, ese vector crece en tama no y la memoria RAM que
se necesita para el es gestionada de modo automatico por MATLAB.
Para ilustrar esta idea planteamos un ejemplo muy sencillo pero tambien muy bonito, y que
ademas sugiere innidad de ejercicios muy interesantes, los cuales apareceran a lo largo del
resto del curso. Se trata de una funci on que recibe un vector y devuelve otro vector que contiene
unicamente las componentes positivas del vector original, colocadas en el mismo orden en el
que estan en este.
Para ir construyendo este segundo vector, de tal modo que cada componente vaya en la posici on
correcta, necesitamos un nuevo contador s olo de componentes positivas. A medida que ese
contador se va incrementando, vamos colocando en cada posicion el elemento correspondiente.
El codigo completo de este ejemplo es el siguiente:
% ud3_fpositivas
% Recibe un vector v y devuelve otro vp con las componentes
% positivas de v. Es la primera funcion que recibe un
% vector y va construyendo otro de dimension distinta
% que el original
function vp=ud3_fpositivas(v)
n=length(v);
ip=0;
i=1;
while i<=n
if v(i)>=0
ip=ip+1;
vp(ip)=v(i);
end
i=i+1;
end
Pag. 77
Lenguajes de Programaci on: Gua ECTS
Los ejercicios correspondientes a este ejemplo especcamente son los siguientes:
Ejercicio 3.54
Prueba ud3 fpositivas.m.
Ejercicio 3.55
Crea una funcion que reciba un vector u de n umeros naturales, un natural m y devuelva un vector
v que contenga aquellos elementos de u que sean divisores de m. Por ejemplo, si u = (10, 7, 4, 5, 3)
y m = 40, el resultado sera v = (10, 4, 5)
Ejercicio 3.56
Crea una funcion que reciba un vector y devuelva un vector con los n umeros primos que contiene.
Ejercicio 3.57
Crea una funcion que reciba un n umero n y devuelva un vector con los n umeros primos que sean
divisores de n.
3.10. Vectores y bucles anidados
A menudo, es necesario anidar bucles para resolver determinados problemas con vectores.
Por ejemplo si tenemos dos vectores de n umeros enteros y queremos saber cuantos elementos
comunes tienen (supuestos todos distintos en cada uno de los vectores), tendremos que jar un
elemento del primer vector y barrer todos los del segundo mediante un bucle y as sucesivamente
con el segundo, tercero, etc., lo que requiere otro bucle exterior a ese.
% ud3_figuales
% numero de elementos iguales entre dos vectores. Se
% supone que todos los elementos en cada vector son distintos.
% primeros bucles anidados con vectores.
%
function iguales=ud3_figuales(u,v)
i=1;
iguales=0;
m=length(u);
n=length(v);
while i<=m
j=1;
while j<=n
if u(i)==v(j)
iguales=iguales+1;
end
j=j+1;
end
i=i+1;
end
Los ejercicios correspondientes a este ejemplo, muy interesantes, son:
Ejercicio 3.58
Prueba la funcion ud3 guales.
Ejercicio 3.59
Modica la funcion ud3 guales para que funcione con vectores de n umeros reales.
Pag. 78
UNIDAD DID

ACTICA 3. VECTORES
Ejercicio 3.60
Construye una funcion que reciba un vector v de naturales y devuelva 1 si tiene dos elementos iguales
y 0 en caso contrario.
Ejercicio 3.61
Construye una funcion que reciba un vector v de naturales y devuelva

v
i
!. No se podra llamar a
ninguna funcion y por tanto habra que usar bucles anidados.
Ejercicio 3.62
(Para valientes) Crea una funcion que reciba un vector de n umeros naturales y sin utilizar la funcion
ud2 fesprimo, devuelva el n umero de elementos del vector que son primos.
Ejercicio 3.63
(Para valientes) Crea una funcion que reciba un vector de n umeros naturales y sin utilizar la funcion
ud2 fesprimo, devuelva el primer elemento de del vector que sea primo.
Ejercicio 3.64
(Para valientes) Crea una funcion que reciba un vector de n umeros naturales y sin utilizar la funcion
ud2 fesprimo, calcule y devuelva la media de los elementos primos para lo cual llamara a su vez a la
funcion ud3 fmedia.
Ejercicio 3.65
(Para valientes) Crea una funcion que reciba un vector de n umeros enteros y devuelva 1 si la suma
de dos cualesquiera de sus elementos es igual a un tercero y cero en caso contrario. Por ejemplo,
para v = [2, 7, 5] devolvera 1 y para [1, 2, 5] devolvera 0.
Ejercicio 3.66
(Para valientes) Construye una funcion que reciba un vector v de naturales y devuelva el n umero de
veces que se repita el que mas veces se repita.
Ejercicio 3.67
(Para valientes) Construye una funcion que reciba un vector v de naturales y devuelva el mayor de
los repetidos, sin llamar a ninguna funcion.
Ejercicio 3.68
(Para valientes) Construye una funcion que reciba un vector v de naturales y devuelva el mayor de
los repetidos, llamando a ud3 fmaximo
Ejercicio 3.69
(Para valientes) Crea una funcion que reciba un vector x, un entero n y devuelva un vector y tal
que para cada ndice i, y
i
sea la aproximacion de sin(x
i
) dada por un polinomio de Taylor en el 0 de
grado n.Se usara la funcion 3.36. Por ejemplo, si introducimos el vector x = (1.9, 2.5, 2.8) y n = 7,
el vector devuelto sera la el resultado de evaluar el polinomio
x
x
3
3!
+
x
5
5!

x
7
7!
.
en los puntos (1.9, 2.5, 2.8), o sea devolvera el vector y = (0.9454, 0.5885, 0.3078). El seno toma
en esas mismas abscisa los valores (0.9463, 0.5985, 0.3350). Recuerda que en la unidad 2 hay un
ejercicio, el 2.14, para calcular el factorial.
Ejercicio 3.70
(Para valientes) Idem pero la evaluacion del polinomio en cada valor del vector x se realizara llamando
a la funcion ud3 fevalua.
Ejercicio 3.71
(Para valientes) Idem sin llamar a ninguna funcion.
Pag. 79
Lenguajes de Programaci on: Gua ECTS
3.11. Funciones con salidas m ultiples
En esta secci on se presentan funciones que tienen mas de un argumento de salida. Es un tema
que no plantea dicultad a los estudiantes y que permite hacer funciones mas interesantes. En
m ultiples ocasiones es necesario obtener varios resultados en una misma funci on, para lo cual es
necesario pasarlos todos como argumentos de salida. La sintaxis es muy sencilla, simplemente
se agrupan todos los argumentos entre corchetes y separados por comas. El ejemplo mas
elemental que se nos ha ocurrido es el de resolver una ecuaci on de segundo grado, la cual
siempre tendra 2 soluciones, sean reales, complejas o una raz doble. MATLAB es capaz de
trabajar directamente con complejos pero es un tema al que apenas hemos prestado atenci on
y que escapa a los contenidos del curso. Por tanto, propondremos ejemplos de ecuaciones que
tengan races reales.
% ud3_fe2grado.m
% devuelve las dos soluciones de ax2+bx+c=0
function [x1,x2]=ud4_fe2grado(a,b,c)
x1=(-b-sqrt(b
*
b-4
*
a
*
c))/(2
*
a);
x2=(-b+sqrt(b
*
b-4
*
a
*
c))/(2
*
a);
Para invocar esta funci on desde la lnea de comandos, lo haremos del siguiente modo, por
ejemplo:
>> [r,s]=ud3_fe2grado(1,-3,2)
r =
1
s =
2
Con lo que se asignan a las variables r y s las dos races 1 y 2 de la ecuaci on x
2
3x+2 = 0.
Ejercicio 3.72
Copia ud3 fe2grado.m a tu directorio y pruebala.
Ejercicio 3.73
Crea una funcion que reciba los coecientes de una ecuacion de segundo grado y devuelva la suma
y el producto de las soluciones.
Ejercicio 3.74
Crea una funcion que reciba los coecientes de la ecuacion ax
4
+bx
2
+c = 0, que resuelva utilizando
y = x
2
llamando para ello a ud3 fe2grado.m, que deshaga el cambio de variable mediante x =

y
y que devuelva las cuatro soluciones de la ecuacion original.
Ejercicio 3.75
Modica la funcion ud3 fe2grado.m para que si las races son n umeros imaginarios (el discriminante
b
2
4ac es negativo) devuelva r1 = 0, r2 = 0 y otra variable error = 1. Si no son n umeros
imaginarios devolvera las dos races en r1 y r2 y error = 0.
Ejercicio 3.76
Pag. 80
UNIDAD DID

ACTICA 3. VECTORES
Crea una funcion que reciba un vector y devuelva el maximo y el mnimo de sus elementos, sin usar
las funciones min y max.
Ejercicio 3.77
Crea una funcion que reciba un vector y devuelva la posicion del maximo y del mnimo de sus
elementos.
Ejercicio 3.78
Crea una funcion que reciba un vector y devuelva el maximo, el mnimo y sus posiciones.
Ejercicio 3.79
Crea una funcion que reciba un vector u y devuelva dos vectores up y un con las componentes
positivas y negativas del vector u respectivamente, colocadas en el mismo orden.
Ejercicio 3.80
Crea una funcion que reciba un vector u de n umeros naturales y devuelva un vector con los n umeros
primos que contiene y otro con los no primos.
Ejercicio 3.81
Crea una funcion que reciba un n umero n y devuelva un vector con los n umeros primos que sean
divisores de n.
Ejercicio 3.82
Crea una funcion que reciba un vector v y devuelva un vector w y un n umero error de modo que:
1. Si todos los elementos de v son estrictamente positivos, devolvera w(i) = Ln(v(i)), 1 i n
y error = 0.
2. Si alg un elemento es menor o igual que cero, devolvera w = v y error = 1.
Ejercicio 3.83
Crea una funcion que reciba los tres lados de un triangulo y devuelva en una variable lado, 1 si
es equilatero, 2 si es isosceles y 3 si es escaleno y en una variable angulo, 3 si es obtuso, 2 si es
rectangulo y 1 si es agudo. (Para valientes) La funcion devolvera 0 en las dos variables si los valores
introducidos no forman un triangulo.
Pag. 81
Lenguajes de Programaci on: Gua ECTS
Pag. 82
Parte II
Gua ECTS para estudiantes
Pag. 83
Captulo 1
Introduccion
Uno de los objetivos de este libro es ser un soporte de la introducci on de la metodologa
basada en los creditos europeos ECTS
1
en la asignatura, aprovechando esta oportunidad para
transformar el modo en el que ense namos Programacion. As, se pasa de un paradigma con una
evaluacion que obtiene informaci on unicamente de un examen nal, a una evaluaci on basada
completamente en los procesos, incorporada a los mismos y mucho mas rica. En esta parte
del libro se pretende documentar con todo detalle esta metodologa de evaluaci on, para que
el estudiante la conozca y se ubique en la misma. Con estos cambios pretendemos mantener
al estudiante activo a lo largo de todo el curso, proponiendole mecanismos de enganche a
la asignatura de modo continuo, tratando, como dice Stephen Ball en la cita que nos ha
inspirado, de mantener a todos los alumnos trabajando, comprometidos y con la sensacion de
que no van a fracasar.
En esta parte del libro detallamos los objetivos y los relacionamos con las actividades realizadas
a lo largo del mismo, indicando en que medida creemos que dichas actividades contribuyen
a la consecucion de los objetivos, e indicando tambien el tiempo que estimamos es necesario
para realizar dichas actividades.
Tambien destacamos los recursos que creemos son necesarios para realizar dichas actividades,
para nalmente reexionar sobre el tipo de evaluaci on que creemos adecuado para un curso
de este tipo, discutiendo sus ventajas e inconvenientes, y razonando sobre el esfuerzo que es
necesario para realizarla.
Esperamos que esta gua resulte util y que cumpla los objetivos que antes citamos y que nos
han llevado a escribirla. Ahora es el momento de que los estudiantes comprueben si ha sido
as y de que sugieran las mejoras que consideren convenientes.
1
Los creditos LRU, los que se asocian a cada asignatura al hacer la matrcula, se establecen unicamente
en funcion del n umero de sesiones presenciales; por cada 10 horas de clase, un credito. Los creditos ECTS
contabilizan no solo las horas de clase sino que intentan denir el peso de la asignatura teniendo en cuenta
el esfuerzo en tiempo que le cuesta aprobarla a un alumno medio. Este esfuerzo signica no solo asistir a las
clases sino tambien un trabajo bien individual bien con los compa neros realizado fuera de las horas de clase.
Pag. 85
Lenguajes de Programaci on: Gua ECTS
Pag. 86
Captulo 2
Datos generales
2.1. Temporalidad y caracter
2.1.1. Ciclo
Primero
2.1.2. Curso
Primero
2.1.3. Cuatrimestre
Primero
2.1.4. Caracter
Obligatoria
2.2. Creditos LRU
4.5 siendo 1.5 te oricos y 3.0 practicos
2.3. Departamento
Departamento de Ense nanzas Basicas de la Ingeniera Naval
2.4. Profesores
Antonio Souto Iglesias, antonio.souto@upm.es
Leo Gonzalez Gutierrez, leo.gonzalez@upm.es
Alicia Canton Pire, alicia.canton@upm.es
Pag. 87
Lenguajes de Programaci on: Gua ECTS
2.5. Creditos ECTS
Horas presenciales Horas/semana Total horas
Teora 1 15
Practicas 2 30
Total 45
Horas no presenciales Total horas
Practicas 41
Examen 4
Total 45
Total 90
Pag. 88
Captulo 3
Objetivos
3.1. General
Para contextualizar la denici on de objetivos, algunas de las titulaciones disponen de su libro
blanco correspondiente, en el cual se especican los perles profesionales a los que se orienta
la titulaci on. En el caso de la titulaci on INO esto no ha sido as hasta bien entrado 2005,
momento en que aparecion un libro blanco orientado a las nuevas titulaciones post-Bolonia
1
.
Aunque en el estudio de las competencias transversales, no se presta una atenci on particular en
ese libro a la Informatica, esta es, junto con los idiomas modernos, se nalada como la materia
basica mas importante, para lo cual se recurri o a un signicativo n umero de encuestas entre
profesionales en activo. De hecho en el plan de estudios generico que se elabora en ese libro
blanco, se da una importancia equivalente a la formacion obligatoria en Informatica a la que
corresponde a este curso de Lenguajes de Programaci on.
Hablaremos as primero de unos objetivos generales de la asignatura, a traves de una catego-
rizaci on de los mismos en conocimientos, capacidades y actitudes. A partir de estos objetivos
generales dise naremos una serie de actividades las cuales agruparemos en una secuencia de
unidades didacticas, que cubriran unos objetivos especcos, y precisaran de unos determinados
recursos.
3.2. Objetivos generales: descripcion
Como hemos comentado, agrupamos los objetivos generales en 3 categoras:
1. Conocimientos. Cubren los aspectos mas te oricos de la formacion.
2. Capacidades. Referidos a aplicaciones, cuestiones practicas, habilidades.... muy en lnea
con el concepto de competencias.
3. Actitudes. Se reeren a determinados valores o motivaciones que se trate de generar o
potenciar en el estudiante.
Conocimientos:
1
http://www.aneca.es/activin/docs/libroblanco naval def.pdf
Pag. 89
Lenguajes de Programaci on: Gua ECTS
CoA. Adquirir una formaci on elemental en Informatica conociendo el ordenador como una
herramienta de trabajo y conocer de modo basico su estructura y funcionamiento.
CoB. Conocer los principales tipos de datos y estructuras de control de la programacion
declarativa y aprender su sintaxis en un lenguaje de programaci on concreto. Hemos
elegido el lenguaje script de MATLAB porque es una herramienta estandar en Inge-
niera y porque, al tener una sintaxis sencilla, permite profundizar en los elementos
de programacion.
Capacidades:
Realizar un programa de ordenador es un proceso que consta de 4 fases: especicacion,
dise no, codicaci on, validacion/vericaci on. La primera, la especicaci on, consiste en
denir las caractersticas del sofware que se va a programar. Aunque es una etapa
importante queda fuera del contenido de esta asignatura, al ser muy dependiente del
tipo de problemas industriales o de gesti on a resolver, y no proceder su estudio en un
curso de introduccion a la Prgramacion. Las capacidades que queremos desarrollar son
las necesarias para las otras tres etapas:
CpA. Codicaci on. El alumno debe ser capaz de traducir algoritmos sencillos a c odigo
MATLAB. Este es un requisito normal en el sentido de que es un objetivo que
necesariamente debera alcanzarse para superar la asignatura. Seran en general
c odigos no muy complejos, de una, dos o tres acciones a lo sumo.
CpB. Dise no. El alumno debe ser capaz de analizar un problema sencillo y elaborar un
algoritmo que lo resuelva. Este es un requisito innovador en el sentido de que lo
consideramos importante, pero no esencial para superar la asignatura.
CpC. Validacion. El alumno debe ser capaz de encontrar sus errores, entenderlos y cor-
regirlos. Este es un requisito esperado: no se eval ua directamente, pero esta im-
plcito en la evaluaci on de los objetivos CpA y CpB.
Actitudes:
AcA. Conseguir una motivacion en el alumno que le impulse a profundizar en la In-
formatica como herramienta necesaria para su futuro academico y profesional.
AcB. Trabajo en equipo. Hoy en da casi ning un proyecto involucra a un unico ingeniero.
Por tanto, consideramos que saber trabajar en equipo es imprescindible y que se
deben ir formando las actitudes necesarias a lo largo de todos los estudios.
AcC. Actitud positiva ante los problemas. El afan de superaci on y la perseverancia son
actitudes necesarias para un buen ingeniero.
AcD. Mejora continua. El aprendizaje, sobre todo el que perdura, no es labor de un da
ni de una semana, sino que requiere constancia y esfuerzo.
AcE. Autocrtica. El alumno debe ser capaz de reexionar sobre sus capacidades, esfuerzo
y proceso de aprendizaje para determinar en que punto esta y que acciones debe
tomar en el futuro.
Pag. 90
CAP

ITULO 3. OBJETIVOS
3.3. Prerrequisitos
LP es una asignatura del primer cuatrimestre del primer a no, y por tanto los prerrequisitos
se reeren unicamente a que el estudiante debe haber cursado y aprobado los estudios de
educaci on secundaria. Por tanto, se le supone una formaci on basica en Matematicas. Ademas
se puede suponer que estan cursando simultaneamente las asignaturas de Calculo y Algebra I,
y por tanto manejan con cierta soltura sucesiones, vectores y matrices.
3.4. Otras asignaturas de las que LP es prerrequisito
En el plan de estudios vigente
2
no se contempla la existencia de prerrequisitos en el sentido
estricto. Sin embargo, es conveniente haber cursado y superado LP antes de matricularse de
la asignatura Metodos Numericos
3
, y de las asignaturas optativas o de libre conguraci on
Leguajes de Programaci on II y Complementos de Informatica. Ademas, los lenguajes de
programaci on son utiles para muchas otras asignaturas, que pueden incluir trabajos para los
que se necesite MATLAB y algunos elementos de Programacion.
2
Plan 2002 de Ingeniero Naval y Oceanico de la Universidad Politecnica de Madrid
3
En realidad esto esta implcito en la estructura del plan de estudios vigente, dado que no es posible
matricularse de ninguna asignatura de cuarto a no si no se han aprobado todas las del primer a no
Pag. 91
Lenguajes de Programaci on: Gua ECTS
Pag. 92
Captulo 4
Programa y Metodologa
En esta secci on describiremos todas las actividades que creemos necesarias para conseguir los
objetivos descritos en 3.2. Agruparemos estas actividades en una serie de unidades didacticas
para facilitar su descripci on, organizaci on y temporalizaci on.
4.1. Metodos docentes
4.1.1. Parte teorica de las sesiones DHOf
Todas las sesiones DHOf
1
se impartiran en el Centro de Calculo (CC). Durante la parte de
exposicion de teora se introducira cada uno de los temas ayudandose de ejemplos (ver parte
I), utilizando la pizarra electr onica que proporciona la interfaz tablet del portatil. Ademas,
se comentaran los problemas observados durante la parte mas practica de la clase y como
evitarlos. Asimismo, al principio de cada sesion habra un recordatorio de las sesiones previas
utilizando el archivo que para cada grupo se guarda en el tablet PC.
El objetivo de las clase teoricas es exponer los conceptos basicos y errores frecuentes a todos
los alumnos a la vez, tratando de evitar repetirlos a cada uno por separado.
4.1.2. Parte practica de las sesiones DHOf
La parte practica consistira en la realizaci on de ejercicios en el CC (ver parte I), con la super-
visi on de uno o varios profesores, dependiendo del n umero de alumnos y de la disponibilidad de
docentes. Esta parte practica, de acuerdo con la distribuci on de creditos, cubrira dos terceras
partes de la asignatura.
Los alumnos se organizaran en parejas para que empleen la tecnica de pair programming de
la metodologa extreme programming. En cada pareja de programadores/alumnos, uno de
ellos dise na el programa y el otro lo codica (escribe el c odigo) siguiendo las instrucciones del
anterior, mientras trata de encontrar los fallos que pueda tener el dise no. Al terminar cada ejer-
cicio se intercambian los papeles. El objetivo del pair programming es que el conocimiento
este igualmente repartido entre los miembros de la pareja, lo que es muy conveniente durante
el examen individual y en general, al nal del proceso de aprendizaje planteado en LP.
Se potenciara el que los alumnos deendan sus propios codigos proyectando los mismos en
1
DHOf por dentro del horario ocial
Pag. 93
Lenguajes de Programaci on: Gua ECTS
la pizarra electr onica. Ello es posible porque la carpeta Mis Documentos de cada maquina
esta compartida, y puede ser accedida desde el PC del profesor, proyectando desde este, el
ejercicio correspondiente.
4.2. Temario y estimacion del tiempo de estudio
4.2.1. Temario
Unidad 0. Introduccion a MATLAB.
Introduccion al curso. Conceptos basicos del entorno MATLAB. Operaciones elemen-
tales. Variables.
Actividades:
Sesiones en el CC (4h).
Repaso y estudio I
2
FHOf
3
(2h).
Unidad 1. Funciones.
Denici on y uso de las funciones. Variables de entrada y salida. Condicionales. Funciones
que llaman a otras funciones.
Actividades:
Sesiones en el CC (8h).
Repaso y estudio I (0.5h).
Completar los ejercicios que no ha dado tiempo en clase (I o G
4
) (2h aprox.).
Unidad 2. Estructuras de Control.
Bucles. Contadores. Bucles anidados.
Actividades:
Sesiones en el CC (11h).
Repaso y estudio I (0.5h).
Completar los ejercicios que no ha dado tiempo en clase (I o G) (3h aprox.).
Unidad 3. Vectores.
Denici on de vector. Recorrido de un vector. Selecci on de ndices. Funciones con vec-
tores.
Actividades:
Sesiones en el CC (9h).
Repaso y estudio I (0.5h).
Completar los ejercicios que no ha dado tiempo en clase (I o G) (4h aprox.).
2
I por individual
3
FHOf por fuera del horario ocial
4
G por en grupo
Pag. 94
CAP

ITULO 4. PROGRAMA Y METODOLOG

IA
Actividades:
Sesiones en el CC (7h).
Repaso y estudio I (0.5h).
Completar los ejercicios que no ha dado tiempo en clase (I o G) (5h aprox.).
4.2.2. Otras actividades
Presentacion del curso. (1h)
Prueba de control por parejas. (2 o 3 horas)
Repaso en la ultima semana. (3h en el CC + 2h (I o G) para completar ejercicios)
Examen nal. (2h de examen + 10h de repaso)
Pag. 95
Lenguajes de Programaci on: Gua ECTS
Pag. 96
Captulo 5
Recursos
5.1. Gua
El mas importante de todos los recursos es esta Gua Docente. En ella, ademas de denir el
contexto del curso de modo preciso se muestran los ejemplos y ejercicios correspondientes al
mismo en la parte I. Tambien se disponen de examenes propuestos en otras convocatorias, el
tutorial de MATLAB y diversa documentacion importante para el alumno.
5.2. Tutoras
Para los horarios y ubicaci on de las tutoras podeis consultar la pagina web de la escuela:
http://www.etsin.upm.es/
Independientemente de esas horas, y dado que los tres profesores tienen dedicaci on completa,
no tendran inconveniente en resolver dudas a cualquier hora, salvo que tuviesen alguna urgencia
puntual o no estuviesen en sus despachos.
Algunas de estas tutoras podran ser en algunos casos en el CC, lo cual se anunciara a lo largo
del curso en clase, en la pagina web de la asignatura (5.4) o va e-mail.
5.3. Tutoras virtuales
Con la cha que han rellenado los estudiantes al principio de curso se formara una lista de correo
para informarles de asuntos relativos a la asignatura (publicacion de notas, sesiones especiales
de practicas, ...). Los estudiantes pueden consultar sus dudas mandandolas a las direcciones de
correo de los profesores, antonio.souto@upm.es, alicia.canton@upm.es, leo.gonzalez@upm.es.
5.4. Pagina web - Plataforma de B-learning
La asignatura tiene vida paralela en la plataforma de B-learning del Gabinete de tele-educaci on
de la UPM (GATE). El enlace web para la misma es:
http://moodle.upm.es/titulaciones/ociales/course/view.php?id=629
aunque se puede entrar a traves de Politecnica Virtual en la web de la UPM. El curso 2007-
2008 fue la primera edici on de esta plataforma, la cual sustituye y supera a la pagina web de la
Pag. 97
Lenguajes de Programaci on: Gua ECTS
asignatura. En ella se ira colgando toda la informaci on relativa a la asignatura, as como cali-
caciones(la publicaci on de las mismas sera anunciada por correo electr onico), documentaci on,
ejercicios y se utilizara como tablon de anuncios. Se dispone ademas de un foro, la participacion
en el cual forma parte del item Participaci on de la evaluaci on de la asignatura. Para acceder a
esta plataforma necesitais disponer de una direcci on de correo electr onico de la UPM, la cual
os es facilitada al matricularos.
5.5. Copias
En copias estara disponible una versi on completa encuadernada de esta gua docente.
5.6. Centro de Calculo
Los estudiantes pueden y deben usar el CC para estudiar LP, aunque han de respetar las nor-
mas(ver apendice B). De vez en cuando, organizaremos sesiones de tutoras all (sobre todo
hacia el nal del curso), para que el estudiante pregunte dudas mientras estudia. Para poder
usar el CC hay que estar dado de alta como usuario (hablar con el personal del CC para este
tramite y ver las normas en el apendice B).
5.7. Bibliografa
Los siguientes libros, de los cuales damos un peque no comentario, los podeis encontrar en la
biblioteca de la ETSIN:
1. Ttulo: MATLAB. Una introducci on con ejemplos practicos.
Autores: Amos Gilat
Editorial: Reverte
A no: 2006
Excelente texto introductorio a MATLAB y a la Programaci on con MATLAB. Creemos
que es el que mejor trata la parte de Programaci on, aunque el orden de los temas no
es el mismo que el que seguimos en el curso. No obstante hay que tener en cuenta que
en el libro se tratan comandos de MATLAB que no permitimos en clase, por ser muy
especcos y no estar disponibles en general en los lenguajes de programaci on.
2. Ttulo: Aprenda MATLAB 5.3 como si estuviera en primero.
Autores: Javier Garca de Jalon, Jose Ignacio Rodrguez, Alfonso Brazalez
Editorial: Escuela Superior de Ingenieros Industriales
A no: 2001
Gua para aprender MATLAB paso a paso. Esta pensada para estudiantes de primero y
se puede seguir con facilidad. Aunque la parte de Programacion es demasiado escueta,
es interesante tenerla para utilizarla como ayuda cuando utilicemos el MATLAB para
otras asignaturas. Se puede comprar en reprografa de la ETSII o descargar de
Pag. 98
CAP

ITULO 5. RECURSOS
http://mat21.etsii.upm.es/ayudainf/aprendainf/MATLAB53/matlab53.pdf
3. Ttulo: MATLAB, edicion de estudiante. Version 4 gua de usuario.
Autores: The Math Works inc.
Editorial: Prentice Hall
A no: 1998
Manual de referencia para la versi on de estudiante. Recoge todos los aspectos del pro-
grama e incluye ejemplos para cada uno. Es muy escueta en la parte de Programaci on.
4. Ttulo: MATLAB guide
Autores: Desmond J. Higham, Nicolas J. Higham
Editorial: Siam
A no: 2000
Otra gua de referencia de MATLAB. Mas tecnica que las anteriores y un poco mas
extensa en el apartado de Programaci on.
5. Ttulo: Programing in MATLAB
Autor: Marc E. Herniter
Editorial: Thomson learning
A no: 2001
Gua de programacion con MATLAB. Contiene numerosos ejemplos y ejercicios. Es muy
tecnica, por lo que es mas recomendable para profundizar en lo aprendido que como
libro de texto.
6. Ttulo: Getting Started with MATLAB
Autor: Rudra Pratap
Editorial: Oxford University Press
A no: 2002
Comentario: Otra gua de MATLAB. La parte de Programaci on esta mas detallada que
en algunas de las otras guas y contiene algunos ejercicios.
7. Ttulo: Algoritmos en C++
Autor: Robert Sedgewick
Editorial: Addison-Wesley Iberoamericana
A no: 1995 Comentario: Otra gua de MATLAB. La parte de Programacion esta mas
detallada que en algunas de las otras guas y contiene algunos ejercicios.
Pag. 99
Lenguajes de Programaci on: Gua ECTS
Pag. 100
Captulo 6
Evaluacion
6.1. General
La parte de evaluacion del curso tiene como objetivo detectar si el estudiante ha conseguido
los objetivos que se persiguen con la asignatura, los cuales hemos enumerado en el captulo 3
de esta gua. En LP tratamos tambien que las propias actividades de evaluacion contribuyan
en s mismas al proceso formativo. Para ello, el alumno podra elegir entre dos modelos de
evaluacion, el tradicional, que se ha venido utilizando hasta ahora, y el modelo ECTS, que se
debera implantar en Europa en cumplimiento de la declaracion de Bolonia y de lo que esta ha
implicado en la conguraci on del Espacio Europeo de la Educaci on Superior. Por otro lado, se
ha establecido el Premio SENER a la mejor progresi on durante el desarrollo de la asignatura
LP con el objeto de motivar a los estudiantes que llegan a la titulaci on con unas notas medias
de la educaci on secundaria bajas, ofreciendoles la oportunidad de que una buena progresi on
respecto a la posicion de partida suponga una recompensa econ omica, con repercusi on p ublica
y curricular. Las bases de este premio estan descritas en el apendice D.
6.2. Evaluacion tradicional
Consistira en un examen nal en el que se tratara de evaluar en que grado se han alcanzado
los objetivos descritos en 3.2. Los objetivos y estructura del examen estan descritos en 6.4.
Dado el caracter eminentemente practico de la asignatura (3 de los 4.5 creditos de LP son
practicos) y el cambio importante que para un estudiante de primer a no supone su entrada
en la universidad, creemos que es necesario que sigan el curso de modo regular. En la plani-
caci on que se ha hecho del curso no se ha considerado adecuado establecer sesiones te oricas y
practicas especcas, conviviendo ambos aspectos en casi todas ellas. Debido a ello, el criterio
de superaci on de las practicas sera simplemente asistir a dos tercios (3/4.5) de las clases, para
lo cual llevaremos un registro de asistencia.
En las convocatorias extraordinarias de Junio y Septiembre solo se podra optar a la evaluaci on
tradicional.
6.3. Evaluacion ECTS
La calicaci on ECTS esta desglosada a partir de la evaluaci on de las siguientes actividades:
Pag. 101
Lenguajes de Programaci on: Gua ECTS
1. Trabajo en equipo: 35 %. En algunas de las sesiones se propondra una prueba-control a
realizar en pareja. Estos controles pretenden evaluar la dinamica del grupo (AcB) y que
el alumno compruebe la evolucion de los conocimientos (AcD). Los controles consistiran
en la realizaci on de unos ejercicios similares a los de las hojas del tema en curso (CoA,
CoB, CpA y CpC). Los controles se deberan hacer en pareja, no pudiendo hacerlo en
caso de que falte uno de sus integrantes. Estos examenes no seran anunciados. Ademas,
no se permitira el acceso al aula a los estudiantes que lleguen mas de 5 minutos tarde.
2. Examen nal consistente en la resolucion de una serie de problemas practicos: 35 %. Los
objetivos y estructura del examen estan descritos en 6.4.
3. Participacion activa en las clases: 15 %. El profesor valorara la participacion (AcA) y la
actitud positiva ante los problemas (AcC) a partir de la participacion de los alumnos en
clase: preguntas, salir a la pizarra, comentarios, etc.
Se valorara que el alumno sea activo con hasta cinco puntos, es decir, que salga a
explicar sus programas, comente los de los demas, pregunte lo que no quede claro, etc, y
con otros cinco puntos la calidad de esa participaci on, es decir, que los programas sean
interesantes y las explicaciones claras, que las preguntas sean interesantes y demuestren
saber de lo que se esta hablando, etc.
Para que a los profesores les sea mas facil la evaluaci on de la participacion, los alumnos
debera entregar una fotografa con su nombre y DNI en el reverso al comenzar el curso,
junto con la cha con el resto de sus datos personales y decision de optar al premio
SENER.
Se realizaran y publicaran dos calicaciones, una cuando haya transcurrido la mitad del
curso con efectos informativos, y la otra cuando haya transcurrido el curso completo. La
nota sera la correspondiente a la valoraci on nal.
4. Otras actividades: 10 %. Las actividades que forman parte de este apartado corresponden
a la valoraci on de las intervenciones en el foro de la plataforma de B-learning (ver secc.
5.4), las cuales permitiran valor objetivos relativos a conocimientos (CoB) y los objetivos
actitudinales de actitud positiva y de mejora continua (AcC, AcD). Los comentarios y
sugerencias sobre esta propia Gua as como la correccion de erratas de la misma se
considera parte de este item de evaluacion.
Ademas, y mas importante, se propondran actividades para realizar fuera de clase durante
el curso, como por ejemplo que el estudiante proponga ejercicios similares a los del curso,
los cuales seran resueltos o al menos intentados por parte del compa nero de grupo.
Con ello se pretenden evaluar los objetivos de capacidades relativos a dise no(CpB),
codicacion(CpA) y validacion(CpC).
Finalmente, dentro de este item se considerara tambien el llevar al da la hoja de control
y contabilizaci on de tiempo y esfuerzo (objetivo AcD), la cual ademas ayuda al alumno
a establecer si esta realizando el esfuerzo recomendado por los profesores para seguir el
curso (objetivo AcE).
5. Realizaci on de la encuesta sobre la asignatura (3 %) y participaci on en el debate posterior
(2 %). Esta encuesta sera realizada una vez publicadas las notas de la asignatura. En el
debate se mostraran los resultados de la encuesta y se pedira la opini on de los alumnos.
Pag. 102
CAP

ITULO 6. EVALUACI

ON
Estas dos notas se conservaran para las convocatorias de junio y septiembre a los que
hayan suspendido. Se valorara de este modo tambien la la actitud positiva ante los
problemas (AcC), la capacidad de autocrtica (AcE), as como la de mejora continua
(AcD).
En caso de que un alumno complete los requisitos que le habilitan para seguir los dos metodos
de evaluacion (tradicional y ECTS), su nota nal sera la mayor de las dos calicaciones.
6.4. El examen
6.4.1. Tipo de examen
El examen consistira en la codicaci on en el Centro de Calculo de una serie de ejercicios
similares a los propuestos de modo continuo durante el curso y similares tambien a los que
forman los examenes por grupos. Se facilitan ejemplos de enunciados en el apendice A. Estos
examenes se realizaran en clase en la ultima parte del curso.
El c odigo a entregar no debe tener errores y debe realizar las tareas correspondientes al corres-
pondiente ejercicio. Se nombraran los c odigos correspondientes a cada ejercicio como f1.m,
f2.m etc.... Las normas para escribir los c odigos son las habituales con la que se trabaja en el
curso y estan explicadas en la secci on 6.4.3.
6.4.2. Criterios de evaluacion
El examen individual tendra ejercicios diversos, con los cuales evaluar la consecuci on de los
tipos de objetivos CpA y CpB.
As, habra ejercicios en los cuales se detallara un algoritmo que el alumno tendra que codicar
en MATLAB. En estos ejercicios no se esperan capacidades innovadoras y su puntuaci on
acumulada sera suciente para aprobar el examen. Algunos de estos algoritmos tendran cierta
complejidad.
Tambien habra ejercicios un poco mas abiertos en los que el propio estudiante tenga que
pensar y dise nar los algoritmos. Finalmente, reconocemos que de manera implcita estamos
valorando CpC. Por ello, cuando proceda, proporcionaremos al alumno una serie de ejemplos
que funcionaran como batera de pruebas del c odigo.
6.4.3. Normas del examen
Normas para la realizacion de los ejercicios en los examenes.
1. Las funciones se ubicaran en cheros independientes, cuyo nombre coincidira con el de
la funcion a falta por supuesto de la extensi on .m.
2. La funcion del ejercicio 1 se llamara f1, la del ejercicio 2 se llamara f2, y as sucesiva-
mente. ESTO ES IMPORTANTE!. No se llamaran ni examen1, ni examen f1, etc...
Los nombres han de ser f1, f2, etc...
3. El unico material permitido es un bolgrafo. No se permite el uso de ning un dispositivo
de almacenamiento, incluidas memorias USB.
Pag. 103
Lenguajes de Programaci on: Gua ECTS
4. Debera estar escrito en MATLAB. No se permitira usar funciones propias de MATLAB
no estudiadas durante el curso, ni conceptos o estructuras correspondientes a ejemplos
y unidades didacticas que todava no se hayan explicado. No se permitira el uso de la
vectorizaci on de operaciones explicada en el tutorial, ni la multiplicacion directa de matri-
ces. O sea, todas las operaciones hay que realizarlas siempre componente a componente
cuando se trate con vectores.
5. Cuando en el enunciado se exija la utilizacion de una rutina estudiada en el
curso o incluida en el enunciado, esta no podra ser modicada. Debera ser
usada tal y como esta escrita en los apuntes o en el enunciado. Si crees que
necesitas modicarla para poderla utilizar es que lo estas haciendo mal.
6. Las funciones se ubicaran en cheros independientes, cuyo nombre coincidira con el de la
funci on a falta por supuesto de la extensi on .m. La funci on del ejercicio 1 se llamara f1,
la del ejercicio 2 se llamara f2, y as sucesivamente.
7. En las funciones solo se utilizaran aquellos argumentos de entrada y salida que se es-
peciquen en el enunciado.
8. La primera lnea de cada programa o funcion sera un comentario con vuestros apellidos,
nombres y el n umero de maquina en la que estais.
9. Todos los cheros estaran ubicados en la carpeta C : \examenes.
10. Se podran usar todos los ejemplos (no ejercicios) que se han estudiado en el curso hasta
el da del examen, los cuales puedes encontrar en la carpeta correspondiente.
11. Se podran crear funciones auxiliares (como una que calcule el factorial por ejemplo), si
crees que te pueden simplicar el trabajo
12. Al terminar el examen, se cerrara la sesion pero NO se apagara el ordenador.
6.4.4. Publicacion de calicaciones
La publicaci on de calicaciones sera unicamente online mientras estas calicaciones sean pro-
visionales. Una vez denitivas, se redactara el acta correspondiente para pasarla a los servicios
de Secretara de la ETSIN.
Se dispone en la web de la asignatura (ver 5.4) de una utilidad en la que introduciendo el DNI
se puede ver la nota de la ultima convocatoria. Con ello conseguimos una privacidad relativa
pero creemos que suciente.
6.4.5. Revision del examen
En el enunciado de cada examen se anunciara una fecha aproximada de publicaci on de las
notas y un da y hora para la revisi on de examen. Los estudiantes que deseen revisar su examen
deberan comunicarlo, por email o por cualquier otro medio a los profesores. En la revisi on se
facilitara a cada estudiante su examen as como una copia de las soluciones. Durante 60
tendra a los profesores de LP a su disposicion para responder todas las dudas que considere
pertinentes.
Pag. 104
CAP

ITULO 6. EVALUACI

ON
6.5. Evaluacion de los objetivos
La siguiente tabla relaciona los objetivos generales de la asignatura, descritos en la seccion 3.2,
con los diferentes apartados de la evaluacion ECTS descritos en 6.3. Es decir, resume que se
calica en cada tem de la evaluaci on.
Participaci on Examen Otras act. Grupos Encuesta/debate
CoA x x x
CoB x x x
CpA x x x x
CpB x x x x
CpC x x x x
AcA x x
AcB x
AcC x x x
AcD x x x
AcE x x
Pag. 105
Lenguajes de Programaci on: Gua ECTS
Pag. 106
Parte III
Apendices
Pag. 107
Apendice A
Ejemplos de Examenes
Pag. 109
Examen nal de Lenguajes de Programacion. Febrero 2008
Escuela Tecnica Superior de Ingenieros Navales
Fecha aproximada de publicacion de las notas: 29/02/2008
Da y hora de la revision: 03/03/2008, 12h30m
Tiempo para esta parte : 85 minutos
Puntuacion: 10 puntos.
Normas para la realizacion de los ejercicios en los examenes.
1. Las funciones se ubicaran en cheros independientes, cuyo nombre coincidira con
el de la funcion a falta por supuesto de la extension .m.
2. La funcion del ejercicio 1 se llamara f1, la del ejercicio 2 se llamara f2, y as sucesi-
vamente. ESTO ES IMPORTANTE!. No se llamaran ni examen1, ni examen f1,
etc... Los nombres han de ser f1, f2, etc...
3. El unico material permitido es un bolgrafo. No se permite el uso de ning un dis-
positivo de almacenamiento, incluidas memorias USB.
4. Debera estar escrito en MATLAB. No se permitira usar funciones propias de MAT-
LAB no estudiadas durante el curso, ni conceptos o estructuras correspondientes a
ejemplos y unidades didacticas que todava no se hayan explicado. No se permitira
el uso de la vectorizacion de operaciones explicada en el tutorial, ni la multiplicacion
directa de matrices. O sea, todas las operaciones hay que realizarlas siempre com-
ponente a componente cuando se trate con vectores.
5. Cuando en el enunciado se exija la utilizacion de una rutina estudiada en
el curso o incluida en el enunciado, esta no podra ser modicada. Debera
ser usada tal y como esta escrita en los apuntes o en el enunciado. Si
crees que necesitas modicarla para poderla utilizar es que lo estas haciendo mal.
6. Las funciones se ubicaran en cheros independientes, cuyo nombre coincidira con
el de la funcion a falta por supuesto de la extension .m. La funcion del ejercicio 1
se llamara f1, la del ejercicio 2 se llamara f2, y as sucesivamente.
7. En las funciones solo se utilizaran aquellos argumentos de entrada y salida que se
especiquen en el enunciado.
8. La primera lnea de cada programa o funcion sera un comentario con vuestros
apellidos, nombres y el n umero de maquina en la que estais.
9. Todos los cheros estaran ubicados en la carpeta C : \examenes.
10. Se podran usar todos los ejemplos (no ejercicios) que se han estudiado en el curso
hasta el da del examen, los cuales puedes encontrar en la carpeta correspondiente.
11. Se podran crear funciones auxiliares (como una que calcule el factorial por ejemplo),
si crees que te pueden simplicar el trabajo
12. Al terminar el examen, se cerrara la sesion pero NO se apagara el orde-
nador.
Ejercicios.
1. Crea una funcion que reciba un vector v de n umeros naturales y un natural m
y nos devuelva el n umero de elementos de v que son m ultiplos de m. Devolvera
ademas el n umero de elementos de v que son m ultiplos de m + 1. Por ejemplo, si
v = (7, 6, 15, 8, 5) y m = 2, devolvera 2 y 2, porque el 6 y el 8 son m ultiplos de 2,
y el 6 y el 15 son m ultiplos de 3 (2.5 puntos).
2. Construir una funcion que reciba un n umero n y devuelva un vector que contenga
a todos los n umeros magicos menores o iguales que n. Se dene un n umero magico
como aquel que es la suma de todos sus divisores salvo el mismo, por ejemplo el 6,
cuyos divisores son 3, 2, 1 y 6 = 3 + 2 + 1, o el 28 = 14 + 7 + 4 + 2 + 1, o el 1, cuyo
unico divisor es el mismo. Por ejemplo, si n = 30, la funcion devolvera el vector
[1 6 28] (2.5 puntos).
3. Crea una funcion que reciba un n umero natural n, un n umero real x y devuelva el
polinomio de Mc-Laurin de de grado n de la funcion e
x
, evaluado en x.
e
x
1 + x +
x
2
2!
+
x
3
3!
+ +
x
n
n!
Para evaluar el polinomio de Mc-Laurin, se construira este componente a compo-
nente y se utilizara del modo adecuado la funcion ud3 fevalua. No se podra usar
la funcion propia de MATLAB factorial para hacer el calculo del factorial. La
alternativa es o bien escribir una funcion aparte que calcule el factorial, o bien
cualquier otra idea que se os ocurra.
Por ejemplo, si n = 3 y x = 0.5, devolvera 1 + 0.5 + 0.5
2
/2 + 0.5
3
/6 = 1.6458, que
es bastante similar a e
0.5
= 1.6487.
La funcion devolvera tambien la diferencia en valor absoluto entre e
x
y el polinomio
citado evaluado en x. Por tanto, en este caso, devolvera tambien 0.0029 (2.5
puntos).
4. Codica una funcion que reciba dos vectores u y v ordenados de modo creciente
por hipotesis, que carecen de elementos comunes y de dimensiones m y n que son
en general distintas. La funcion devolvera otro vector w construido a partir de
todas las componentes de u y v, tales que el vector w tambien este ordenado. No se
podr a llamar a ninguna funcion. Por ejemplo, si u = (2, 4, 5, 9, 10) y v = (1, 3, 6, 8),
el resultado sera w = (1, 2, 3, 4, 5, 6, 8, 9, 10). Como comprobacion adicional, si
intercambiamos u y v en la llamada, el resultado tiene que ser el mismo (2.5 puntos).
Ejercicios.
Examen nal de Lenguajes de Programaci on. Junio 2008
Escuela Tecnica Superior de Ingenieros Navales
Fecha aproximada de publicaci on de las notas: 30/06/2008
Da y hora de la revisi on: 03/07/2008, 19h30m
Tiempo para esta parte : 85 minutos
Puntuaci on: 10 puntos.
1. Crea una funci on que reciba un vector u de n umeros positivos y devuelva un vector
ue con los n umeros enteros que contiene y otro ur con los no enteros, as como sus
respectivos mnimos me, mr. Por ejemplo, si u = (3, 20.3, 7, 5, 12.7, 13) el resultado
ha de ser ue = (3, 7, 5, 13), un = (20.3, 12.7), me = 3 y mr = 12.7. Se podr a
suponer que en el vector u siempre va a haber enteros y no enteros (2.5 puntos).
2. Crea una funci on que reciba un vector v de naturales y te devuelva 1 si la resta
de dos cualesquiera de los n umeros es igual a un tercero. Por ejemplo, si v =
(3, 10, 7, 14, 6), la funcion devolvera un 1, pues 107 = 3. Sin embargo, si el vector
es v = (3, 11, 7, 15, 6) la funci on devolver a 0. Se recomienda probar la funci on
cambiando de orden los elementos del primer ejemplo (2.5 puntos).
3. Crea una funcion que reciba un vector p cuyas componentes asimilamos a los co-
ecientes de un polinomio del modo como se ha hecho en el curso. La funcion
ha de recibir tambien un vector x de n n umeros reales y devolver a el elemento
del vector x que se encuentra m as cerca de la media que resulta de que se eval ue
el polinomio p en todos los elementos del vector x. As, si p = [1 1 2] y
x = [1.1 3.5 2.1 0.7], el resultado de evaluar el polinomio p en todos los puntos de
x es un vector y = [2.3200 22.0000 7.7200 2.6800] cuya media vale 8.6800, siendo
2.1 el punto que m as cerca tiene su valor de la media (2.5 puntos).
4. Construye una funcion que reciba dos n umeros naturales p, q y devuelva el menor
primo mayor que p y q que pertenezca a la sucesi on de Fibonacci iniciada por p
y q (2.5 puntos). No se tendr an en cuenta ni p ni q. La sucesi on de Fibonacci se
construye de tal modo que.
x
i
= x
i1
+ x
i2
, x
1
= p, x
2
= q, i > 2
Por ejemplo, si p = 1 y q = 3, la sucesi on de Fibonacci estara formada por 1, 3, 4,
7, ..., y el primer primo sera el 7. Si p = 4 y q = 5, tendramos 4, 5, 9, 14, 23, ...
y el primer primo sera el 23(2.5 puntos).
Ejercicios.
Examen nal de Lenguajes de Programaci on. Sept 2008
Escuela Tecnica Superior de Ingenieros Navales
Fecha aproximada de publicaci on de las notas: 22/09/2008
Da y hora de la revisi on: 24/09/2008, 19h30m
Tiempo : 90 minutos
Puntuaci on: 10 puntos.
Nombre:
N umero de PC:
Firma:
1. Crea una funcion que reciba un vector v de naturales y te devuelva un vector vp
formado por aquellas componentes de v que sean primas y otro vnp formado por
aquellas componentes que no sean primas. Por ejemplo, si v = (3, 10, 7, 14, 6), la
funci on devolver a un los vectores vp = (3, 7) y vnp = (10, 14, 6) (2.5 puntos).
2. Crea una funcion que reciba un vector p cuyas componentes asimilamos a los co-
ecientes de un polinomio del modo como se ha hecho en el curso. La funci on
ha de recibir tambien un vector x de n n umeros reales y devolver a el ndice del
elemento del vector x que se encuentra m as cerca de la media que resulta de que
se eval ue el polinomio p en todos los elementos del vector x. As, si p = [1 1 2] y
x = [1.1 3.5 2.1 0.7], el resultado de evaluar el polinomio p en todos los puntos de
x es un vector y = [2.3200 22.0000 7.7200 2.6800] cuya media vale 8.6800, siendo
2.1 el punto que m as cerca tiene su valor de la media, cuyo ndice es 3, que ha de
ser el unico valor que nalmente devuelva la funci on (2.5 puntos).
3. Construye una funci on que reciba tres n umeros naturales p, q y r. La funci on ira
calculando terminos de la sucesi on de Fibonacci iniciada por p y q e ir a compro-
bando si son m ultiplos de p. En el momento en que hayamos encontrado r m ultiplos
de p la funci on terminar a, devolviendo el termino en que estemos de la sucesi on de
Fibonacci (2.5 puntos). No se tendran en cuenta los valores p y q. La sucesion de
Fibonacci se construye de tal modo que.
x
i
= x
i1
+ x
i2
, x
1
= p, x
2
= q, i > 2
Por ejemplo, si p = 3, q = 4 y r = 2, la sucesi on de Fibonacci estara formada por
3, 4, 7, 11, 18, 29, 47, 76, 123..... Como 18 y 123 son los dos primeros m ultiplos
de 3, el valor a devolver sera 123 (2.5 puntos). Si p = 2, q = 1 y r = 3, la funci on
devolvera en este caso 76, pues los tres primeros m ultiplos de 2 seran 4, 18 y 76.
4. Crea una funci on que reciba un vector u de n umeros naturales y otro vector v de
n umeros racionales positivos. La funcion devolver a 1 si existe alguna combinacion
de fracciones formadas por elementos del vector u tomados de dos en dos, que sea
igual a alg un elemento del vector v y 0 en caso contrario. Se denir a en la funci on
una variable prec igual a la milesima parte de la suma de los elementos de u. Se
considerar a que dos n umeros son iguales si su diferencia en valor absoluto es menor
que prec.
Por ejemplo, si u = (3, 20, 7, 5, 12, 13) y v = (2.98, 1.8571) el resultado ha de ser 1
pues prec = 0.06, y |13/7 1.8571| = 0.00004 < prec. Si ponemos como ejemplo el
mismo u pero ahora v = (2.98, 1.2571) la respuesta ha de ser 0 (2.5 puntos).
Lenguajes de Programaci on: Gua ECTS
Pag. 116
Apendice B
Gestion del CC
Pag. 117


ETSI NAVALES. CENTRO DE CLCULO
USUARIO DEL DOMINIO CCALCULO
ACCESO A LOS ORDENADORES DEL CENTRO DE CLCULO E.T.S.I NAVALES

Cuando enciendas el ordenador aparecer una mscara donde introducirs el usuario y la
contrasea que se te ha facilitado, comprobando que la sesin se conecte a CCALCULO:




Iniciaras una sesin con este aspecto:



A tu izquierda encontrars todos los accesos directos a los programas que estn instalados.
A la derecha aparecern 3 accesos directos a 3 carpetas. A continuacin explicamos en que
consiste cada carpeta:


ETSI NAVALES. CENTRO DE CLCULO
USUARIO DEL DOMINIO CCALCULO

CARPETA PERSONAL
Esta carpeta es individual para cada usuario. Fsicamente se encuentra en un servidor de la
ETSI Navales. Esta carpeta tiene capacidad hasta 128MB.Siempre que te conectes a tu
usuario aparecern tus ficheros y los tendrs disponibles desde cualquier ordenador de la sala.
Estos ficheros no los pueden ver los dems usuarios. Solo t podrs acceder a esta carpeta.

ASIGNATURAS

Esta carpeta esta disponible para todos los usuarios. Aqu pondrn los profesores los trabajos y
documentos que quieran compartir con vosotros.

MIS DOCUMENTOS

Esta carpeta fsicamente se encuentra en el disco duro del ordenador en el que inicias sesin.
Esta compartida para todos los ordenadores de la sala. Estos datos se pueden perder en
cualquier momento, bien por ser borrados por otro usuario o por el personal de CdC en sus
tareas de mantenimiento.

Se recomienda que cada usuario borre sus ficheros de zonas compartidas (como los
discos duros de los PCs) una vez finalizada su sesion de trabajo. El CdC no se
responsabiliza de mantener datos en zonas compartidas ni temporales y recomienda que
cada usuario haga copia de seguridad de dichos datos, bien en su carpeta personal o en
algn medio extrable (memoria USB, disquette).

Para una mayor seguridad, el usuario deber cerrar la sesin una vez que termine de
usar el ordenador (Men de Inicio- Cerrar sesin).

SOFTWARE DISPONIBLE EN CADA ORDENADOR

S.O: Windows XP Profesional SP2.
Microsoft OFFICE 2003
Adobe Reader 7.0
Winrar 3.11
Internet Explorer 6. SP1.
Firefox.
Winamp 5.1: Lector de MP3
MathType 5.2
Microsoft Visio 2003
Microsoft Project 2003
Autocad 2005
Rhinoceros 3.0
Matlab 5.0
Matlab 2006
Visual C++6.0
Visual J ++6.0
Visual MSDN 6.0
Electronics Workbench
PCTRAN-U2LP
Ansys ED 5.5
MD_Solids 1.7
Maple 9
Chechenic
Femap v8.3
DNV Nauticus




ETSI NAVALES. CENTRO DE CLCULO
USUARIO DEL DOMINIO CCALCULO

En los ordenadores con conexin a Internet solo estn instalados los 10 primeros programas
de la lista.
Adems en la sala de Informtica se permite la Navegacin de las pginas: ETSI Navales,
UPM; Aulaweb, Correo Alumnos, Centro de Clculo.

ACTUALIZACIONES DE SOFTWARE

Se prevee al comienzo del curso 2007-08 actualizar a las siguientes versiones de software:

Microsoft OFFICE 2007 Professional Plus
Microsoft Visio 2007
Microsoft Project 2007
Internet Explorer 7.
Statgraphics Centurion XV



ETSI NAVALES. CENTRO DE CLCULO
USUARIO DEL DOMINIO CCALCULO

DESCRIPCIN DEL CENTRO DE CLCULO

www.centrocalculo.etsin.upm.es

La funcin del Centro de Clculo (CdC) es dar soporte a los alumnos y al personal de la ETSIN
para la realizacin de trabajos orientados a fines docentes, formativos y de investigacin
propios de la Universidad. En l se imparten clases y se realizan exmenes.

Se compone de 3 despachos para el personal informtico y de 2 salas de Informtica con
equipos. Las salas son:

Sala de Navegacin por Internet. (consta de 10 puestos con capacidad para 20
alumnos)
Sala de Informtica. (consta de 50 puestos con capacidad para 100 alumnos)

Los alumnos podrn utilizar estas dos salas, salvo cuando estn reservadas.
Normalmente para dar clase, se reserva la mitad de la sala de Informtica delimitndose por
una mampara. Si el nmero de alumnos es grande, se reservar toda la sala de Informtica.
En pocas de exmenes, el CdC se reserva el derecho de cerrar el CdC el da anterior al
exmen, para la reinstalacin de los equipos.
Existe en la entrada un tabln donde se expondrn las reservas para la docencia, exmenes,
actividades programadas y las comunicaciones a los usuarios.Tambin puedes encontrar esta
informacin en la web www.centrocalculo.etsin.upm.es.

Para dirigirse al personal responsable, se puede enviar un e-mail a
centrodecalculo.navales@upm.es o utilizar el buzn de sugerencias (tambin est a la entrada
del CdC)

HORARIO

El horario de las salas ser de 8:30h a 21:30 horas de Lunes a Viernes los das lectivos.


SERVICIO DE IMPRESIN

La sala dispone de 1 Impresora Modelo OCE Varioprint 2040 que funciona con una tarjeta
prepago que se puede adquirir en Gestin econmica. No es Fotocopiadora.
Se recomienda que una vez impresos los trabajos, se borren de la memoria de la impresora, ya
que pueden ser impresos por otro usuario.

NORMAS DE FUNCIONAMIENTO DE LAS AULAS DE INFORMTICA

Para utilizar las instalaciones del CdC el alumno tendr que estar matriculado en la
ETSI Navales o tener autorizacin expresa por parte del Centro. Todo usuario est
obligado a identificarse ante el personal de CdC cuando ste lo solicite.

El alumno solicitar a travs de un cuestionario el usuario/contrasea con el que
acceder a los ordenadores de las aulas. El usuario velar en la medida de lo
posible por la seguridad de su cuenta. El CdC no se hace responsable de los
perjuicios ocasionados al usuario por la accin de terceros.

Queda extrictamente prohibida la utilizacin autorizada o no de una cuenta de
usuario distinta a la propia.



ETSI NAVALES. CENTRO DE CLCULO
USUARIO DEL DOMINIO CCALCULO
La utilizacin de los equipos informticos se reservar exclusivamente para el soporte
de las prcticas de asignaturas, navegacin por Internet y el correspondiente
aprendizaje de los distintos programas propios de la carrera.
Deber informarse al personal de Informtica de cualquier deficiencia o funcionamiento
anmalo que se observe.
Se ruega por y para el beneficio de todos, que tanto los equipos y mobiliario, se
manipulen y usen de forma correcta.
NO SE PERMITE:
Fumar, introducir y consumir bebida o comida,
Utilizar los equipos como videojuegos para cualquier fin ldico.
Utilizar el CdC como lugar de tertulia o de juego.
Sentarse en las mesas.
Ocupar los puestos con prendas de abrigo o mochilas.
Reservar los ordenadores.
Cambiar la configuracin de software y hardware sin previa autorizacin del
responsable de aula.
Modificar la situacin de cualquiera de los equipos o recursos del Aula sin previa
autorizacin.
Interferir en el trabajo de los dems usuarios.
El acceso a los despachos del Centro a personal no asignado o no autorizado.
Imprimir trabajos no relacionados con los fines docentes y formativos propios de la
ETSI Navales/UPM.

NORMAS DE NAVEGACIN POR INTERNET

El uso del Servicio de Internet se realizar dentro de los fines docentes, formativos y de
Investigacin de la UPM.
Se prohibe expresamente el uso de Internet para recibir o enviar material que resulte
ofensivo, obsceno, difamatorio o susceptible de constituir delito. Por tanto, se prohibe
visitar pginas web con contenidos pornogrficos, pginas de contenido hacker en
cualquiera de sus variantes, intercambio de material protegido con derechos de autor,
etc..
Tambin se prohibe su uso para cualquier fin ldico o lucrativo por ejemplo paginas de
juegos online, chatear, etc..








El personal del CdC ante cualquier incumplimiento de las Normas
anteriormente expuestas se reserva el derecho de poder tomar la medidas
oportunas como llamar al orden, cerrar sesin de usuario, deshabilitar
cuenta o mandar desalojar el CdC.
El personal se encuentra a vuestra disposicin para cualquier aclaracin
o duda.

Apendice C
Control de tiempos y cha
Pag. 123

ETSI NAVALES - UPM


FOTO
(pegadla por
donde querais,
en zonas
blancas de esta
ficha)
LENGUAJES DE PROGRAMACIN (LP)

CURSO 2008-2009.

FICHA PERSONAL - URGENTE!!!!!!!!!!!!!

APELLIDOS:
NOMBRE:
DNI O PASAPORTE:
EMAIL (escrbelo con claridad!!!! y si ests matriculado, activa tu cuenta
de correo UPM):
GRUPO (A,B,C):
ES TU PRIMER AO EN LA ETSI NAVALES?
TFO MOVIL:
TFO FIJO:
TE GUSTARA OPTAR AL PREMIO SENER DE LP?:

CASO DE QUE S,CUL HA SIDO TU CALIFICACIN DE ACCESO A LA
UNIVERSIDAD?:

Y ADEMS FIRMA Y FECHA:




----------------------------------------------------
Para efectos estadsticos, te importara decirme los siguientes datos?

1 Eleccin de primera opcin:
2 Eleccin de segunda opcin:
3 Eleccin de tercera opcin:


APELLIDOS:
NOMBRE:
Fecha DHOf Acum InFHOf Acum EqFHOf Acum Total Acum
1 29/09/2008 0 0 0 0 0
2 06/10/2008 0 0 0 0 0
3 13/10/2008 0 0 0 0 0
4 20/10/2008 0 0 0 0 0
5 27/10/2008 0 0 0 0 0
6 03/11/2008 0 0 0 0 0
7 10/11/2008 0 0 0 0 0
8 17/11/2008 0 0 0 0 0
9 24/11/2008 0 0 0 0 0
10 01/12/2008 0 0 0 0 0
11 08/12/2008 0 0 0 0 0
12 15/12/2008 0 0 0 0 0
13 22/12/2008 0 0 0 0 0
14 29/12/2008 0 0 0 0 0
15 05/01/2009 0 0 0 0 0
16 12/01/2009 0 0 0 0 0
17 19/01/2009 0 0 0 0 0
16 26/01/2009 0 0 0 0 0
17 02/02/2009 0 0 0 0 0
16 09/02/2009 0 0 0 0 0
Fecha: fecha en la que se ha rellenado la fila correspondiente.
DHOf: por horas dentro del horario oficial como clases y exmenes.
Acum: por horas acumuladas de cada categora
InFHOf: por horas de trabajo individual fuera del horario oficial
EqFHOf: por horas de trabajo en equipo fuera del horario oficial
Semana
FICHA DE CONTROL DE TIEMPOS
La idea es que pongais las horas correspondientes a los tres bloques, llevando tambin el
acumulado. La unidad mnima sern 0.5 horas, procediendo al redondeo cuando no sean
valores exactos. As, 50min se consignar como 1, y 1h17m se consignar como 1.5
Lenguajes de Programaci on: Gua ECTS
Pag. 126
Apendice D
Premio SENER
Pag. 127



1/4

PREMIO SENER A LA MEJOR PROGRESIN
EN LA ASIGNATURA LENGUAJES DE PROGRAMACIN
- Bases del premio -
1. Objeto del premio:
El objeto de este premio es recompensar la mejor progresin durante el
desarrollo de la asignatura de Lenguajes de Programacin de Primer Curso de la
titulacin de Ingenieros Navales y Ocenicos, Plan 2002, de la Universidad
Politcnica de Madrid.
De este modo se pretende motivar a los estudiantes que llegan a la titulacin
con unas notas medias de Bachillerato bajas, ofrecindoles la oportunidad de
que una buena progresin respecto a la posicin de partida suponga una
recompensa econmica, con repercusin pblica y curricular. Lo habitual es que
estos premios que pretenden servir para motivar, no motiven a los que ms lo
necesitan, y terminen simplemente por confirmar la buena preparacin y actitud
de ciertos estudiantes. En este sentido, este premio tiene ms matices, pues son
precisamente los "peores" estudiantes, los que parten de una posicin ms baja,
los que ms pueden progresar, y los que por tanto se convierten en mejores
candidatos para obtenerlo.
SENER es la empresa lder en el sector de las aplicaciones informticas para el
mundo naval, y su fundacin, la Fundacin SENER, a partes iguales con el
Departamento Naval de SENER se han ofrecido a dotar y dar nombre a este
premio. ETSIN cree que el premio, dada su naturaleza, lleva el mejor nombre
posible, y es de agradecer la implicacin de SENER en el mismo.
2. Requisitos de los solicitantes:
Alumnos matriculados en la asignatura de Lenguajes de Programacin de Primer
Curso de la titulacin de Ingenieros Navales y Ocenicos, Plan 2002, de la
Universidad Politcnica de Madrid, que deseen optar al Premio.
3. Procedimiento de valoracin:
Los alumnos estn organizados por grupos de 2 componentes durante el
desarrollo del curso, tratando de que los estudiantes adquieran hbitos de
trabajo en equipo y se familiaricen con los problemas y ventajas de esta forma
de trabajo. De hecho, el modus operandi de cada equipo tiene su repercusin en
la evaluacin ECTS que se viene desarrollando desde el curso 2005-2006.
Al final de esta evaluacin, los componentes del grupo habrn obtenido una nota
final. El baremo para fijar la puntuacin para el premio pasa por restar, de cada
una de las notas de cada uno de los 2 componentes, la nota media del



2/4

bachillerato
1
. As, si los estudiantes de un grupo obtuviesen un 7.5 y un 9.0 en
la evaluacin ECTS de Lenguajes de Programacin y sus notas del bachillerato
fuesen 5.4 y 6.2 respectivamente, su puntuacin para el premio ser de (7.5-
5.4)+(9.0-6.2)=4.9 puntos. La puntuacin mxima ser de 10 puntos, (10-
5)+(10-5)=10, y la mnima de 20 puntos, (0-10)+(0-10)=-20. El grupo
ganador ser aquel que mayor puntuacin tenga siguiendo este baremo.
Para el premio se tendr en cuenta nicamente la nota correspondiente a la
evaluacin ECTS y no la correspondiente a la evaluacin convencional. La
evaluacin ECTS contempla diferentes tems a lo largo del curso (ver Gua
Docente de la asignatura). Teniendo esto en cuenta se arbitrar una forma de
seguimiento consistente en la publicacin de las notas de los diferentes grupos
en 2 instantes del curso, identificando a los alumnos a travs de su DNI. Ello les
permitir conocer su posicin e implicarse ms en la parte final del curso, en la
que se consigue la parte ms importante de la nota. Para ello, la Secretara de
la ETSIN facilitar a los profesores una lista de alumnos matriculados con una
columna correspondiente a las notas de acceso a la universidad de aquellos
alumnos que deseen optar al Premio, que previamente habrn firmado su
autorizacin para que se facilite dicho dato de su expediente.
4. Dotacin:
La dotacin ser de 1200 a repartir a partes iguales entre los 2 componentes
del grupo. Esta dotacin se incrementar cada ao aplicando el IPC
correspondiente. ETSIN emitir un diploma acreditativo, el cual contendr un
suplemento al mismo consistente en un histograma de las notas con la
puntuacin de los diferentes grupos, para que quede constancia de modo
cuantitativo del progreso del grupo ganador en trminos absolutos y relativos al
resto de grupos de ese ao acadmico. La informacin para dicho histograma
ser facilitada por el profesor responsable de la asignatura.
5. Entrega de premios:
La entrega de premios se realizar durante la ceremonia de entrega de diplomas
a los nuevos egresados, y el abono de los premios se efectuar mediante
cheque nominativo de 600 emitido por la Fundacin SENER para uno de los

1
Con nota media del Bachillerato nos referimos a la Calificacin definitiva de las Pruebas
de Aptitud de Acceso a la Universidad, la cual es a su vez la media de la nota media del
Expediente del alumno correspondiente al Bachillerato propiamente dicho y la nota de la
Selectividad. En aquellos casos en que este valor no est correctamente definido por haber
ingresado el estudiante con bachillerato extranjero o por pruebas en las que ese
parmetro no sea relevante, se considerar que su nota es la media de entre todos los
estudiantes para las que s lo sea.



3/4
componentes del grupo ganador y otro de la misma cantidad emitido por el
Departamento Naval de SENER Ingeniera y Sistemas para el otro componente
del grupo ganador.
Los familiares de primer grado de los estudiantes premiados, as como 4
compaeros a elegir por cada uno de ellos y el delegado de su clase durante el
curso correspondiente, estarn invitados a esta ceremonia. Se invitar a SENER
y a Fundacin SENER a que asistan y entreguen directamente el premio a travs
de alguna o algunas personas indicadas por ellos mismos.



PREMIO SENER A LA MEJOR PROGRESIN
EN LA ASIGNATURA LENGUAJES DE PROGRAMACIN

- Curso 2007-2008-

Ganadores:

LUIS ARJONILLA GARCIA
SERGIO IGLESIAS CHAPERO

Histograma de puntuaciones de todos los grupos
1
.

0
2
4
6
8
10
12
14
-8 -6 -4 -2 0 2 4 6
Puntuaci n <=
Nmero de
grupos


1
La puntuacin corresponde a la diferencia (suma de ambos componentes) entre la nota ECTS de la
asignatura y la nota media del bachillerato.

Indice alfabetico
abs, 50, 51
ASCII, 28
Ball, S., 1
contadores, 53
else, 42
elseif, 46
end, 41
cheros
ASCII, 28
oor, 54
function, 36
if, 40
if-else, 42
if-elseif, 46
if-end, 40
MATLAB
calculo simbolico, 32
carpeta activa, 29
ventana de comandos, 13
operadores logicos, 47

O, 47
negacion, 47
Y, 47
pi, 38
sumadores, 53
Taylor, Brook, 27
Wittgenstein, L., 1
Pag. 132

Vous aimerez peut-être aussi