You are on page 1of 134

Lenguajes de Programacin o Gu docente ECTS a

Ingenier Naval y Ocenica a a Escuela Tcnica Superior de Ingenieros Navales e Universidad Politcnica de Madrid e

A. Souto Iglesias, J.L. Bravo Trinidad L. Gonzlez Gutirrez, A. Cantn Pire a e o 30 de septiembre de 2008

....para m una buena escuela ser una escuela distinta, a una escuela que tuviese un principio segn el cual todas sus u normas estuviesen enfocadas a mantener a tantos estudiantes como sea posible durante el mayor tiempo dentro del sistema. As todo tendr que estar dirigido a hacer que los estudiantes , a participasen, que se sintiesen identicados con la escuela, que tuviesen la sensacin de estar haciendo las cosas bien. Para o m una buena escuela es una escuela que mantiene a todos los alumnos trabajando, comprometidos y con la sensacin de que no o 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
Notacin y abreviaturas o 6

Aprender a programar, con MATLAB

7
9 13 13 13 17 19 23 25 27 28 31 32 35 35 35 38 40 42 43 44 46 47 50 50 52 53 54

Introduccin o 0. Tutorial de MATLAB 0.1. Introduccin . . . . . . . . . . . . . . o 0.2. Conceptos bsicos . . . . . . . . . . . a 0.3. Manejo de vectores . . . . . . . . . . 0.4. Introduccin al tratamiento de matrices o 0.5. Resolucin de sistemas lineales . . . . o 0.6. Vectorizacin de operaciones . . . . . o 0.7. Creacin de grcas . . . . . . . . . . o a 0.8. Conjuntos de ordenes . . . . . . . . . 0.9. MATLAB y nmeros complejos . . . . u 0.10. Matemticas simblicas con MATLAB a o

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

1. Funciones y Condicionales 1.1. General . . . . . . . . . . . . . . . . . . . . . 1.2. Funciones y variables . . . . . . . . . . . . . . 1.3. Funciones con varios argumentos de entrada . 1.4. Estructura de control condicional if . . . . . . 1.5. Estructura de control condicional if-else . . . . 1.6. Funcin que llama a otra funcin . . . . . . . o o 1.7. Condicionales anidados. . . . . . . . . . . . . 1.8. Variante elseif en el condicional . . . . . . . . 1.9. Operadores lgicos . . . . . . . . . . . . . . . o 1.10. Operadores de comparacin: son iguales? . . o 1.11. Igualdad entre nmeros reales: precisin y valor u o 1.12. Variables enteras y reales como argumentos . . 1.13. Variables contador y sumador . . . . . . . . . 1.14. Funcin parte entera . . . . . . . . . . . . . . o

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . absoluto . . . . . . . . . . . . . . .

. . . . . . . . . . . . . .

. . . . . . . . . . . . . .

. . . . . . . . . . . . . .

. . . . . . . . . . . . . .

. . . . . . . . . . . . . .

. . . . . . . . . . . . . .

. . . . . . . . . . . . . .

. . . . . . . . . . . . . .

. . . . . . . . . . . . . .

. . . . . . . . . . . . . .

. . . . . . . . . . . . . .

. . . . . . . . . . . . . .

2. Bucles 55 2.1. General . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55 2.2. Bucles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55 2.3. Bucles con incremento variable . . . . . . . . . . . . . . . . . . . . . . . . . 57 Pg. 3 a

Lenguajes de Programacin: Gu ECTS o a 2.4. 2.5. 2.6. 2.7. 2.8. Bucles con otras operaciones . . . . . . . . . . . Bucles y relaciones de recurrencia . . . . . . . . . Bucles y condicionales . . . . . . . . . . . . . . . Uso de bucles para vericar una condicin sobre un o Bucles anidados. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . conjunto. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57 58 60 62 63 65 65 65 66 67 69 70 73 75 77 78 80

3. Vectores 3.1. General . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.2. Vectores como argumentos de funciones . . . . . . . . . . . 3.3. Funciones que llaman a funciones con argumentos vectores . 3.4. Clculo de extremos . . . . . . . . . . . . . . . . . . . . . a 3.5. Clculo de posicin de extremos . . . . . . . . . . . . . . . a o 3.6. Evaluacin de un polinomio . . . . . . . . . . . . . . . . . o 3.7. Funcin que devuelve un vector . . . . . . . . . . . . . . . o 3.8. Funciones que reciben y devuelven vectores . . . . . . . . . 3.9. Construccin de vectores . . . . . . . . . . . . . . . . . . . o 3.10. Vectores y bucles anidados . . . . . . . . . . . . . . . . . . 3.11. Funciones con salidas mltiples . . . . . . . . . . . . . . . u

. . . . . . . . . . .

. . . . . . . . . . .

. . . . . . . . . . .

. . . . . . . . . . .

. . . . . . . . . . .

. . . . . . . . . . .

. . . . . . . . . . .

. . . . . . . . . . .

. . . . . . . . . . .

. . . . . . . . . . .

II

Gu ECTS para estudiantes a

83
85 87 87 87 87 87 88 89 89 89 91 91

1. Introduccin o 2. Datos generales 2.1. Temporalidad y carcter a 2.2. Crditos LRU . . . . . . e 2.3. Departamento . . . . . 2.4. Profesores . . . . . . . 2.5. Crditos ECTS . . . . . e

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

3. Objetivos 3.1. General . . . . . . . . . . . . . 3.2. Objetivos generales: descripcin o 3.3. Prerrequisitos . . . . . . . . . 3.4. Otras asignaturas de las que LP

. . . . . . . . . . . . . . . . . . . . . . . . . . . es prerrequisito

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

4. Programa y Metodolog a 93 4.1. Mtodos docentes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 93 e 4.2. Temario y estimacin del tiempo de estudio . . . . . . . . . . . . . . . . . . . 94 o 5. Recursos 5.1. Gu . . . . . . . . . . . . . . . . . . a 5.2. Tutor as . . . . . . . . . . . . . . . . 5.3. Tutor virtuales . . . . . . . . . . . . as 5.4. Pgina web - Plataforma de B-learning a 5.5. Copias . . . . . . . . . . . . . . . . . 5.6. Centro de Clculo . . . . . . . . . . . a 5.7. Bibliograf . . . . . . . . . . . . . . . a 97 97 97 97 97 98 98 98

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

Pg. 4 a

INDICE GENERAL

6. Evaluacin o 6.1. General . . . . . . . . . . . 6.2. Evaluacin tradicional . . . o 6.3. Evaluacin ECTS . . . . . o 6.4. El examen . . . . . . . . . 6.5. Evaluacin de los objetivos o

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

101 101 101 101 103 105

III

Apndices e

107
109 117 123 127 132

A. Ejemplos de Exmenes a B. Gestin del CC o C. Control de tiempos y cha D. Premio SENER Indice alfabtico e

Pg. 5 a

Lenguajes de Programacin: Gu ECTS o a

Notacion y abreviaturas
AO aptdo. cap. DHOf DNI ECTS FHOf g. G GATE I JEE LOU LP LRU MEC pg. a PAS PF ref. TIC Aula de Ordenadores apartado cap tulo para referirse a actividades a realizar dentro del horario ocial. para referirse al nmero del Documento Nacional de Identidad. u sistema de crditos europeos. e para referirse a actividades a realizar fuera del horario ocial. gura para referirse a actividades a realizar en grupo. Gabinete de Teleeducacin. o para referirse a actividades a realizar de modo individual. Jefatura de Estudios. Ley Orgnica d 6/2001 de Universidades. a Lenguajes de Programacin. o Ley Orgnica 11/1983 de Reforma Universitaria. a Ministerio de Educacin y Ciencia. o pgina. a Personal de Administracin y Servicios. o Portafolio. referencia bibliogrca. a Tecnolog de la informacin y la comunicacin. as o o

Pg. 6 a

Parte I Aprender a programar, con MATLAB

Pg. 7 a

Introduccin o
De modo resumido, podemos decir que programar es ensearle a un ordenador cmo se n o resuelve un determinado problema. Para poder ensear a alguien, es necesario dos cosas: tener n un lenguaje en comn y conocer bien lo que se quiere ensear. En esta primera parte nos u n ocupamos del primer problema (que es el ms sencillo y el que responde a la denicin de a o programar). El lenguaje que hablan los ordenadores es muy simple, por lo que el proceso de aprenderlo ser rpido. El principal problema es descomponer ideas complejas en otras ms simples para a a a que podamos programarlas. Siguiendo el esquema anterior, hemos organizado cada unidad didctica en un esquema conceptoa ejemplo-ejercicios/problemas. Normalmente se trabajan uno o dos conceptos de Programacin o en cada unidad didctica (contadores y bucles while, por ejemplo), los cuales se introducen a primero formalmente y despus mediante un ejemplo, sobre el que se proponen una serie de e 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 bsicos de Programacin. A a o menudo, en los cursos de Programacin, se introducen slo los elementos de Programacin y se o o o supone que el alumno aprender a integrarlos por s mismo. Sin embargo, muchas aplicaciones a de esos elementos son estndares en la programacin (por ejemplo, el uso de contadores, un a o 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 didcticas que constituyen el curso son las siguientes: a 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 ms adelante crear funciones. Adems, se a a aprovecha esta unidad 0 para insistir en conceptos bsicos de manejo de las herramientas del a sistema operativo, sobre todo la creacin y gestin de carpetas, y la ubicacin precisa de las o o o 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. Pg. 9 a

Lenguajes de Programacin: Gu ECTS o a El lenguaje elegido para la implementacin de ejemplos y ejercicios es el lenguaje de comandos o o scriptde MATLAB (o su versin libre Octave). Esta eleccin se debi a varios motivos: o o o 1. MATLAB es un entorno de clculo que los estudiantes usarn a lo largo de la carrera y a a probablemente despus en su vida profesional ya que dispone de herramientas espec e cas (toolboxes) para muchos mbitos. Aunque las competencias de manejo asociadas a a esas herramientas espec cas no se trabajan en este curso, el que el estudiante se sienta al nal cmodo con el entorno MATLAB le permitir si es necesario asimilar su o a 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 programacin, con una sintaxis similar al C pero con la simplicidad del BASIC. Comprobamos o en cursos anteriores que al utilizar un lenguaje como C, los alumnos dedicaban la mayor parte del tiempo a la correccin de errores de sintaxis y a la declaracin de variables, o o 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 pseudocdigo usado en algunos cursos de Programacin, pero con o o la ventaja de poder realmente ejecutar los cdigos creados. La simplicidad de MATLAB o a estos efectos es a veces causa de falta de rigor en la forma de abordar la Programacin. As el hecho de que no haya tipado expl o cito de variables pudiendo la misma variable ser una matriz en una l nea del cdigo y un escalar un poco ms abajo, o de o a MATLAB se ocupe del la reserva dinmica de memoria de modo automtico, nos alejan a a de un lenguaje ms potente como C. Sin embargo y como comentbamos ms arriba, a a a 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 ejecucin las dio ferentes sentencias al lenguaje primario y bsico de la mquina. Se paga el precio de a a necesitar MATLAB para ejecutar nuestros cdigos pero se recibe la recompensa de no o tener que compilar y enlazar nuestros cdigos para despus ejecutarlos. o e 4. MATLAB proporciona una interfaz que permite probar las funciones directamente sin necesidad de llamarlas desde un programa principal. Esto permite comprobar su funcionamiento de un modo sencillo e inmediato, y como comentamos ms abajo, ha permia tido una estructura del curso creemos que muy interesante para un curso de introduccin o a la Programacin para no Informticos. o a 5. Todo ello hace que sea muy sencillo empezar a generar cdigos interesantes en MATLAB, o algo a lo que se llega con mucho ms esfuerzo en un lenguaje de Programacin ms a o a riguroso como C. Una vez realizado este tutorial, hasta hace unos aos emplebamos la organizacin curricular n a o usual en un curso de Programacin (comenzando por la entrada y salida y el programa Hola o mundo). Sin embargo, ahora usamos una estructura similar a la programacin funcional, o comenzando por el concepto de funcin y estudiando la entrada y salida casi al nal. De o este modo, en la unidad 1 se trabaja al principio sobre el concepto de funcin, introduciendo o inmediatamente la estructura de control condicional, la cual permite construir funciones ms a complejas e interesantes. En la unidad 2 se trabaja con bucles, posibilitando la repeticin de operaciones. Es una unidad o Pg. 10 a

ardua, pues no se recurre todav a vectores o matrices, donde los bucles surgen de modo a natural. Aqu estn los ejemplos ms interesantes del curso, como el de comprobar si un a a nmero natural es primo. Si el estudiante se siente cmodo al nal de esta unidad, el resto u o del curso ser para l una progresin sencilla. Si no se siente cmodo todav tendr ocasin a e o o a, a o de cubrir los vac en las unidades siguientes. os En la unidad 3 se introducen los vectores, pues ya se tienen las herramientas para manejarlos. Como comentbamos en el prlogo, no hemos pretendido escribir un compendio exhaustivo a o ni de Programacin ni de MATLAB. Debido a ello la seleccin de unidades didcticas no es o o a 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 aportacin interesante o ya que no hay en la literatura cursos de introduccin a la Programacin que se apoyen en o o MATLAB como lenguaje de referencia, y lo ms parecido corresponde a cursos de MATLAB a en los que en algn cap u tulo se tratan diferentes aspectos de la programacin1 . En cuanto a o compendios de MATLAB, recomendamos el sensacional trabajo de Guillem Borrell2 .

Gilat, A., MATLAB. Una introduccin con ejemplos prcticos, Revert, 2006, es un buen ejemplo de este o a e tipo de libros 2 Borrell i Nogueras, G., Introduccin Informal a MATLAB y OCTAVE. Disponible online en o http://forja.rediris.es/

Pg. 11 a

Lenguajes de Programacin: Gu ECTS o a

Pg. 12 a

Unidad Didctica 0 a Tutorial de MATLAB


0.1. Introduccin o

Presentamos un tutorial de MATLAB, una herramienta potent sima, casi estndar para clculos a a en muchas ramas de la Ingenier y de uso razonablemente simple. En la asignatura de LP, a, utilizaremos el intrprete de comandos de MATLAB para que el estudiante se introduzca en e el apasionante mundo de la programacin de ordenadores. Este tutorial, en el que haremos o una descripcin de los elementos bsicos de MATLAB, y que se realizar durante las primeras o a a sesiones del curso de LP, tiene como objetivo que el estudiante se sienta cmodo con el o programa y con el sistema de usuarios, carpetas y archivos del CC. As al nal del tutorial , ser capaz de utilizar MATLAB como si fuese una calculadora potent a sima, manejando sus elementos de clculo en l a nea de comandos, sin entrar en la programacin de aplicaciones, a o lo cual nos dedicaremos el resto del curso.

0.2.

Conceptos bsicos a

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 s mbolo (>>) o (EDU >>), indicando que se pueden introducir rdenes. De hecho, en este tutorial, cuando aparezca este s o mbolo, 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 utilizacin ms bsica de MATLAB es como calculadora 2 . As por ejemplo, para calcular o a a , 7.3 3 cos(5) 2 , se debe introducir : >>cos(5)*27.3 ans = 44.7013
A veces, durante el curso hay algunos problemas con las licencias y se usa la versin educacional, a la cual o se accede con Inicio, Programas, Student MATLAB, o a travs del icono q est en el escritorio e a 2 Funcionando de este modo, es similar a una calculadora programable, aunque bastante ms verstil. a a 3 Los argumentos de las funciones trigonomtricas siempre estn en radianes. e a
1

Pg. 13 a

Lenguajes de Programacin: Gu ECTS o a

Figura 1: Espacio de trabajo de MATLAB

Pg. 14 a

UNIDAD DIDACTICA 0. TUTORIAL DE MATLAB

MATLAB mantiene en memoria el ultimo resultado. Caso de que ese clculo no se asigne a a ninguna variable, lo hace a una variable por defecto de nombre ans. Si queremos referirnos a ese resultado, lo haremos a travs de la variable ans, y si no se asigna ese nuevo clculo a e a ninguna variable, volver a ser asignado a ans. a >>log(ans) ans = 3.8000 En este momento cabr preguntarnos si tratamos con un logaritmo decimal o con uno nepea 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 explicacin que se obtiene al pedir helpde las rdenes los comandos aparecen o o en maysculas, se deben usar en minsculas. u u Por defecto, los resultados aparecen con 4 cifras decimales. Si se necesitara ms precisin en a o los resultados, se puede utilizar la orden format long repitiendo los clculos: a >>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 operacin: 2.72.1 + log10 108.2. o Ejercicio 0.2 Pedir ayuda de la orden exp. Ejercicio 0.3 Realizar la siguiente operacin e2.7 o
2.1 +log 10

108.2

El resultado del ejercicio anterior aparecer como 2.3992e+004. La notacin 2.3992+004, a o 4 signica 2.3992 10 o lo que es lo mismo 23992. Si necesitamos referirnos a determinados clculos, se asignan a variables y as se pueden a recuperar despus. El concepto de variable es crucial cuando se programa, como veremos e durante todo el curso. Por ejemplo, podemos recuperar con la orden cos(5) 27.3 y asignar su valor a la variable x editando dicha orden. Luego podremos utilizarla para otros clculos. Los a nombres de las variables en MATLAB han de comenzar por una letra; adems, no contendrn a a s mbolos que nos sean letras, nmeros o el guin bajo (que est en la misma tecla que el signo u o a menos). Pg. 15 a

Lenguajes de Programacin: Gu ECTS o a >>x=cos(5)*27.3 x = 44.70132670851334 >>y=log(x) y = 3.80000318145901 Ejercicio 0.4 Realizar la siguiente operacin: 2.72.1 + log10 108.2 y asignarla a la variable x. o Ejercicio 0.5 Realizar la siguiente operacin: e2.7 o
2.1 +log 10

108.2

y asignarla a la variable t.

Si queremos saber cunto vale una variable, no tenemos ms que escribirla en la l a a nea de comandos y pulsar Enter. >>y y = 3.80000318145901 Como es muy fcil recuperar rdenes previas podemos utilizar esta idea para simular los trmia o e nos de una sucesin recurrente. Por ejemplo, xn+1 = cos(xn ) o >>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 operacin anterior hasta que se estabilice el cuarto decimal de x de o un paso al siguiente. Ejercicio 0.7 Cambiar el formato para que otra vez se vean slo cuatro decimales. o Ejercicio 0.8 Empezando por x = 100 repetir la operacin o x2 81 2x hasta que se converja en el cuarto decimal. Qu relacin hay entre el ultimo x y 81? e o x=x Pg. 16 a

UNIDAD DIDACTICA 0. TUTORIAL DE MATLAB

Ejercicio 0.9 Denir A como en vuestro documento de identidad o pasaporte. Empezando por x = 100 repetir la operacin o x2 A x=x 2x hasta que se converja en el cuarto decimal. A qu ha convergido la sucesin? 4 e o Es interesante comentar de este ejercicio que MATLAB distingue entre letras maysculas y u minsculas en los nombres de las variables. u 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 estn en la memoria sin pedir conrmacin. e o >>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 v1 = 0, v2 = 2, v3 = 4, v4 = 6 y v5 = 8 podemos hacerlo componente a componente: >>v(1)=0 v = 0 >>v(2)=2 v = 0 >>v(3)=4 v = 0 >>v(4)=6 v = 0 >>v(5)=8 v = 0

Se puede tambin denir este vector especicando su primer elemento, un incremento y el e ultimo elemento. MATLAB rellenar paso a paso sus componentes. As podemos denir igual a , 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 ra cuadrada de un nmero mediante esta sucesin. z u o

Pg. 17 a

Lenguajes de Programacin: Gu ECTS o a >> v = [0:2:8] v = 0 2 >> v v = 0 2

Si ponemos ; al nal de una l nea de comandos, cuando pulsemos la tecla Enter para ejecutarla, se ejecutar pero no mostrar el resultado en pantalla (se anula el eco en pantalla). Esto es a a muy util algunas veces: >> v = [0:2:8]; >> v v = 0 2

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

Es fcil acceder al contenido de una posicin del vector, por ejemplo la primera. a o >> v(1) ans = 0 O modicarla: >> v(1)=-3; >> v v = -3 2

3 O hacer operaciones entre componentes, v2 v5 :

>> 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 apstrofo, que es el acento que est en la o a misma tecla que el signo de interrogacin ?. o >> v ans = -3 2 4 6 8 Pg. 18 a

UNIDAD DIDACTICA 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; Modiqumosla para dejar el valor original e >> 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 tamao de v n con la sentencia size: >>size(v) ans = 1

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 funcin norm y aplicarla al vector v. o

0.4.

Introduccin al tratamiento de matrices o

Haremos una introduccin a la denicin y manipulacin de matrices. Se supone que se ha o o o seguido la seccin anterior y que se dispone de los conocimientos bsicos sobre la denicin o a o y manipulacin de vectores usando MATLAB. La denicin de una matriz es muy similar a la o o 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 ms intuitivo: a >> A = [ 1 3 6 A = 1 3 6 2 3 4 5 7 8] 2 4 7 3 5 8

Se puede modicar alguno de los elementos de la matriz A, accediendo a cualquiera de sus posiciones, por ejemplo: Pg. 19 a

Lenguajes de Programacin: Gu ECTS o a >> A(2,2)=-9 A = 1 2 3 -9 6 7

3 5 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, rerindonos a ellos, elemento e a elemento. Podemos sumar o restar matrices para tener otras matrices. >>C=A+B C = 2 5 9

4 8 14

6 10 16

Ejercicio 0.15 Denir la matriz D = 2B A. Tambin podemos multiplicarlas. e >>C=A*B C = 14 26 44

31 57 96

37 69 117

Ejercicio 0.16 Denir la matriz D = B A B. Ejercicio 0.17 Denir la matriz C = AAt . 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 Pg. 20 a

UNIDAD DIDACTICA 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 1 0 0

0 0 1

Ejercicio 0.18 Repetir el ejercicio 0.16 sacando factor comn y utilizando la matriz identidad. u Otra forma de denir la matriz identidad es a travs de la funcin diag, que recibe un vector e o 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 funcin eye, y denir la matriz identidad de 10 10. o Ejercicio 0.21 Repetir el ejercicio 0.16 sacando factor comn y utilizando la funcin eye. u o

0.4.1.

Denicin de submatrices o

La denicin de subvectores o submatrices es muy fcil. Si v es o a >> v = [0:2:8] v = 0 2

Podemos denir un vector e cuyas componentes sean las tres primeras componentes del vector v poniendo >> e=v(1:1:3) e = 0 2

donde el primer uno indica que vamos a tomar el primer elemento de v. El segundo nmero es u el incremento de ndices dentro de v y el ultimo nmero marca el elemento nal. Esta orden u es equivalente a la siguiente >> e=v(1:3) e = 0 2

ya que cuando el incremento es la unidad, se puede suprimir. Pg. 21 a

Lenguajes de Programacin: Gu ECTS o a Ejercicio 0.22 Adivinar cul va a ser el resultado de las dos rdenes siguientes a o >> e=v(2:2:5) >> e=v(1:3:5) Como comentamos al principio, la notacin usada por MATLAB sigue en lo posible la notacin o o estndar de Algebra Lineal que se asume conocida. Es muy sencillo multiplicar matrices y a 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 tamaos de los objetos que se han ido creando. n Ejercicio 0.23 Utilizando el comando size, razona sobre los problemas en lo que se reere a dimensiones en la multiplicacin anterior. o 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

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 operaciones estndar. Por ejemplo, calcular su inversa. Hay que tener cuidado y no olvidar que a las operaciones son clculos numricos realizados por ordenador. En el ejemplo, A no es una a e matriz regular, y sin embargo MATLAB devolver su inversa, pues los errores de redondeo a durante su clculo convierten en invertible a dicha matriz. a Pg. 22 a

UNIDAD DIDACTICA 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 -1.0000 2.0000

5.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 maysculas y minsculas. Este puede ser el u u origen de algunas confusiones si se manejan algoritmos complejos. >> inv(a) ??? Undefined function or variable a.

0.5.

Resolucin de sistemas lineales o

Tambin hay funciones para resolver sistemas lineales. Si Ax = b y queremos encontrar x, e el modo ms directo es simplemente invertir A, y luego premultiplicar por la inversa ambos a lados. Sin embargo, hay medios mucho ms ecientes y estables para resolver sistemas lineales a pero nosotros de momento nos quedaremos con ste. Por ejemplo, el sistema lineal Bx = v e 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: Pg. 23 a

Lenguajes de Programacin: Gu ECTS o a >> B*x ans = 1 3 5 Ejercicio 0.26 Denir una matriz B2 = BB t . Ejercicio 0.27 Encontrar la solucin del sistema lineal BB t x = v asignando esa solucin al o o vector x. Ejercicio 0.28 Comprobar la solucin obtenida realizando el clculo BB T x v. o a Podemos crear una matriz aumentada a partir de B y del trmino independiente y reducirla e hasta convertir el sistema en uno equivalente triangular, efectuando las necesarias transformaciones 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 permutacin de o las, premultiplicando por la identidad permutada: >>IP=[1 0 0;0 0 1;0 1 0]; >>BA=IP*BA BA = 1 0 0 2 1 0 3 -1 -1 1 2 1

Ahora ya es inmediato resolver este sistema por sustitucin hacia atrs: o a 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. Pg. 24 a

UNIDAD DIDACTICA 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 funcin det utilizndola con la matriz B y de la funcin o a o rank utilizndola con la matriz BA. a Ejercicio 0.33 Calcular el determinante de la matriz H.

0.6.

Vectorizacin de operaciones o

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 cmo realizar operaciones sencillas, sumar, restar y multiplicar. Luego las combinaremos para o 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 multiplicacin de vectores y matrices, igual que su suma, sigue las reglas estrictas del o 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 nmero de columnas del primer operando debe ser igual al nmero de las del segundo. u u >> v*b Error using == * Inner matrix dimensions must agree. >> v*b ans = Pg. 25 a

Lenguajes de Programacin: Gu ECTS o a 2 4 6 >> v*b ans = 28 4 8 12 6 12 18

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). Ser estupendo poder usar directamente el a s mbolo pues en realidad estamos haciendo una especie de multiplicacin, pero como esta o multiplicacin tiene otro sentido, necesitamos algo diferente. Los programadores que crearon o MATLAB decidieron usar el s mbolo para realizar estas operaciones. De hecho, un punto delante de cualquier s mbolo 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 qu no ir hasta el nal? e Si aplicamos una funcin matemtica predenida a un vector, MATLAB nos devolver un o a a vector del mismo tamao en el que cada elemento se obtiene aplicando la funcin al elemento n o correspondiente del vector original >> sin(v) ans = 0.8415 0.9093 0.1411 >> log(v) ans = 0 0.6931 1.0986 Saber manejar hbilmente estas funciones vectoriales es una de las ventajas de MATLAB. De a este modo, se pueden denir operaciones sencillas que se pueden realizar fcil y rpidamente. a a En el siguiente ejemplo, se dene un vector muy grande y lo manipulamos de este modo tan sencillo. Pg. 26 a

UNIDAD DIDACTICA 0. TUTORIAL DE MATLAB

>> x = [0:0.1:100] x = Columns 1 through 7 0 0.1000 0.2000 0.3000 ...................... Columns 995 through 1001 99.4000 99.5000 99.6000 99.7000 >> y = sin(x).*x./(1+cos(x));

0.4000

0.5000

0.6000

99.8000

99.9000 100.0000

Usando este tratamiento vectorial, se pueden generar grcos de modo muy sencillo. Damos a 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 recin denido e y = 5et + sin(10t)
2

0.7.

Creacin de grcas o a

En esta seccin presentamos los comandos bsicos para crear representaciones grcas de o a a funciones. Para mostrar el uso del comando plot, utilizaremos la funcin seno y su desarrollo o en serie de Taylor5 en torno al cero con trminos cbicos, x x3 /6. Para dibujar la grca, e u a 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 grcas en MATLAB. Admite una gran variedad de a argumentos. Aqu slo utilizaremos el rango y el formato, y la posibilidad de representar dos o curvas en la misma grca. a
Brook Taylor naci en 1685 en Inglaterra en el seno de una inuyente y adinerada familia. Estudi en o o Cambridge y cuando se gradu ya hab escrito su primer art o a culo matemtico de relevancia. Taylor para ticip activamente en las agrias disputas entre matemticos britnicos (newtonianos) y matemticos euo a a a ropeos (leibnitzianos) sobre la adjudicacin del descubrimiento del Clculo Diferencial, llegando a formar o a parte del Comit que la Real Sociedad form para dar n a tal discusin. e o o Aunque las aportaciones de Taylor a las matemticas son profundas y variadas (entre otras, introdujo a el clculo en diferencias nitas, la integracin por partes, desarroll un mtodo para encontrar soluciones a o o e singulares de ecuaciones diferenciales y sent las bases de la geometr descriptiva y proyectiva) su resultado o a ms conocido es el Teorema de Taylor, que permite el desarrollo de funciones en series polinmicas. Sin a o embargo, no fue Taylor el primero en obtenerlo, James Gregory, Newton, Leibniz, Johann Bernoulli, y de Moivre hab ya descubierto independientemente variantes del mismo. an
5

Pg. 27 a

Lenguajes de Programacin: Gu ECTS o a >>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 despus de go en el comando anterior es la que est en la tecla de e a la interrogacin de cierre. o 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. Tambin es buena idea representar la funcin error: e o >>plot(x,abs(yseno-ytaylor),mx); Para que al nal del chero con todas las rdenes aparezca en pantalla el grco, una vez o a que ste ya ha sido ejecutado alguna vez, se utiliza la orden shg, que hace que la ventana del e grco se convierta en la activa. Usemos este comando para utilizar el comando de peticin a o de ayuda help que es muy util tambin por sus referencias cruzadas a otros comandos. e >> 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 ret cula incorporada (grid). Tambin se puede copiar este grco al portapapeles desde la ventana del grco, para despus e a a e pegarlo en un documento Word por ejemplo, como ya vimos en el ejercicio 0.38.

0.8.

Conjuntos de rdenes o

En esta seccin explicaremos cmo reunir rdenes en cheros ejecutables desde la l o o o nea de comandos de MATLAB. A estos cheros se les suele llamar scripts. Ello permite realizar operaciones ms complejas, y facilita sus repeticiones. a 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 grcas de la seccin 0.7. Para ejecutar los comandos del chero se debe a o especicar el intervalo entre los valores de las abscisas en el muestreo. De este modo, se pueden construir innidad de aproximaciones variando este parmetro. a Primero hay que crear el chero. El editor ms conveniente es el que trae incorporado el a propio MATLAB, aunque cualquier editor de texto es vlido dado que la codicacin de los a o archivos de comandos de MATLAB es el estndar ASCII como sucede habitualmente en los a lenguajes de programacin. El editor de MATLAB es muy simple y suciente para este tipo de o aplicaciones. A partir de la versin 5, viene incorporado al propio MATLAB y mejora de versin o o en versin. Los cheros ejecutables de MATLAB, los M-les, deben tener la extensin .m. o o 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 l neas. Pg. 28 a

UNIDAD DIDACTICA 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 versin de o 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 File con la opcin Set Path. Por defecto, si se guarda en el directorio ..\matlab\bin, u o MATLAB lo encontrar 6 . a Ahora se ha de volver a la ventana con la l nea de comando y se teclea en esta l nea 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, aparecer un mensaje de a error. Se deben denir todas las variables que no se denen en el propio script y que ste e utiliza. >>h = 0.1; >>tutorm >>plot(x,yseno,rx,x,ytaylor) Una vez ejecutada esta instruccin deber aparecer una ventana con una grca como la de o a a la Figura 3. Cuando tecleamos tutorm en la l nea de comandos, MATLAB buscar en los a directorios indicados en el path un chero llamado tutorm.m. Una vez que lo encuentre lo leer y ejecutar los comandos como si se hubiesen tecleado uno detrs de otro en la l a a a nea de comandos. Si se desea ejecutar el programa otra vez pero con un paso diferente, hay que tener
Si se utiliza MATLAB en el centro de clculo o laboratorio de una facultad o escuela, probablemente el a 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 despus se incorpora a la ruta de bsqueda (path), bien con el e u comando path o con el icono correspondiente.
6

Pg. 29 a

Lenguajes de Programacin: Gu ECTS o a

Figura 2: Recuperar vista de la gura 1 cuidado. El programa sobreescribir los vectores x, yseno e yatylor. Si se quieren guardar a estos vectores hay que especicarlo, almacenndolos en nuevas variables. a >>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 dimensin que tienen que tener los vectores x y xp y conrmar el o resultado utilizando la orden size. Ejercicio 0.43 Crear y ejecutar desde MATLAB un chero que se llame BAIP.m con la secuencia 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 Pg. 30 a

UNIDAD DIDACTICA 0. TUTORIAL DE MATLAB

Figura 3: Grca correspondiente al ejemplo tutorm.m. a

Ejercicio 0.44 Pedir ayuda del comando pause e incorporarlo entre algunas l neas 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 recin denido como: e y = 5et + sin(10t) 4. Dibujar la curva (t, y) con cruces rojas y con una ret cula ( grid) incorporada.
2

0.9.

MATLAB y nmeros complejos u

MATLAB entiende la aritmtica compleja y es perfectamente posible trabajar con nmeros e u complejos. Podemos multiplicar dos nmeros complejos como: u >>(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 Pg. 31 a

Lenguajes de Programacin: Gu ECTS o a

0.10.

Matemticas simblicas con MATLAB a o

MATLAB dispone de herramientas para clculo simblico. Para ello es necesario instalar el a o Symbolic Math Toolbox, que es una especie de versin reducida de Maple, un programa de o clculo simblico muy conocido. Aqu podemos usar esta caja de herramientas para resolver a o integrales y calcular determinantes de modo simblico entre otras cosas. Lo primero que o tenemos que hacer es denir una variable como susceptible de ser utilizada en clculo simblico: a o >>syms x Ahora podemos denir una funcin que dependa de x y cuya integral queramos calcular: o >>f=cos(x)2; >>int(f) ans= 1/2*cos(x)*sin(x)+1/2*x Podemos tambin denir una matriz que dependa de x y de una nueva variable y: e >>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 simblico: o >> det(A) ans = -2*y*x+2*y2+x4-x3*y Ejercicio 0.46 Calcular de modo simblico la inversa de la matriz A. o Podemos evaluar este determinante para valores reales de x e y asignando valores a esas variables y utilizando despus la orden eval: e >> 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, stas dejan de ser s e mbolos. Si queremos que vuelvan a serlo tenemos que hacerlo de modo expl cito Pg. 32 a

UNIDAD DIDACTICA 0. TUTORIAL DE MATLAB

>>syms x Ejercicio 0.47 Denir una funcin f como ex . o Ejercicio 0.48 Pedir ayuda de la funcin di y calcular la derivada de f . Evaluar esta derivada o para x = 3.327. Ejercicio 0.49 Pedir ayuda de la funcin limit y calcular el l o mite de f cuando x .
2

Pg. 33 a

Lenguajes de Programacin: Gu ECTS o a

Pg. 34 a

Unidad Didctica 1 a 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 funcin y la estructura de control condicional, o y la unidad 2, dedicada al estudio de los bucles, son las ms importantes. Constituyen la base a 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, asignacin y la primera estructura de control del curso: el condicional. Tambin se o e realiza primeramente una contextualizacin del curso desde la perspectiva de la historia de la o Programacin y sus fundamentos. o

1.2.

Funciones y variables

La organizacin habitual de un curso de Programacin supone que se comience por los t o o picos 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 programacin funcional, o comenzando por el concepto de funcin y estudiando la entrada y salida ya con el curso o 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 continuo, aadiendo sucesivamente nuevos conceptos y estructuras, conseguiremos que al nal los n alumnos estn ms familiarizados con las estructuras esenciales de la Programacin. Esto es e a o posible porque MATLAB proporciona una interfaz estndar para las funciones y desde la l a nea de comandos es posible ejecutarlas directamente. El entender las cosas desde la perspectiva funcional proporciona la posibilidad de asimilar desde el principio conceptos claves en Programacin, como el de encapsulamiento de tareas, la o divisin de tareas y su codicacin en funciones, crucial cuando se abordan problemas grandes o o y se trabaja en equipo. Tambin se trabajan ideas esenciales relativas a el diseo de funciones e n y a la reusabilidad de cdigo ya escrito, visto ya como cajas negras que realizan determinadas o tareas, y que servir de base para construir nuevas funciones, etc... a La que ahora presentamos es la funcin ms sencilla que veremos durante el curso. Tiene un o a argumento de entrada, x y un argumento de salida y. Lo unico que se hace es calcular una expresin matemtica sencilla y asignar ese valor a y. o a
% ud1_f1.m

Pg. 35 a

Lenguajes de Programacin: Gu ECTS o a


% Una funcin sencilla o % un argumento function y=ud1_f1(x) y=x2-log(x);

El s mbolo = en Programacin es una asignacin, no siendo por tanto simtrico; se asigna o o e a lo que est a la izquierda del s a mbolo igual lo que haya a la derecha del mismo, una vez realizadas las operaciones que estn especicadas en esa parte derecha. e El nombre de la funcin, para evitar confusiones, debe coincidir con el nombre del archivo .m o donde esta funcin se encuentra. Por tanto, como este primer ejemplo es la funcin ud1_f1, o o debemos guardarla en el archivo ud1_f1.m. La primera l nea comienza con la palabra reservada function lo cual es comn a todas las funciones que veremos en el curso. u Lo ms interesante es entender a partir de este ejemplo cmo se pasan los argumentos desde a o la l nea de comandos hasta las funciones. Cuando invocamos esta funcin desde la l o nea de comandos podr amos 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 funcin o ud1_f1.m, y se crea espacio en memoria para la variable x. En ese espacio se coloca el valor 5. Se crea espacio tambin para y. Las variables x e y se llaman variables locales de la e funcin; el adjetivo locales procede de que viven en el espacio de memoria de la funcin. Una o o vez hecho esto, el ordenador ejecuta las sentencias de la funcin (en este caso una sola) de o arriba abajo. Durante esta ejecucin se dene la variable de salida y, en la cual al nal de la o misma est el resultado, 23.3906. Una vez terminada la ejecucin se devuelve el control a la a o l nea de comandos, se asigna en este caso el resultado a la variable por defecto ans y se borra de la memoria RAM la funcin ud1 f11 . o Podemos invocar a la funcin ud1_f1.m ahora del siguiente modo: o
>> 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 funcin y o las variables z y t viven en el espacio de memoria asignado a la ventana de comandos. Cuando se llama a la funcin, x copia el valor de t y cuando se termina la ejecucin de la funcin es o o o z la que copia el valor de la calculada y antes de que esta desaparezca (ver gura 1.1). La situacin no cambia sustancialmente si invocamos a la funcin del siguiente modo: o o
>> 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 funcin ud1_f1.m mientras sta se ejecuta. o e
1

Esto no es exactamente as pero esta es la imagen ms adecuada para un principiante en Programacin. , a o

Pg. 36 a

UNIDAD DIDACTICA 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 cdigo de la funcin, la variable t del prrafo o o a anterior y la variable x del espacio de memoria de la ventana de comandos no se ven afectadas. O sea que si cambiamos la funcin ud1_f1.m y la grabamos ahora como: o
function y=ud1_f1(x) x=2; y=x2-log(x);

Si la invocamos desde la l nea de comandos del siguiente modo,


>> x=5; >> y=ud1_f1(x) y = 3.3069 >> x x = 5

el resultado no ser correcto, pero x tampoco habr cambiado su valor. Ello es as porque la a a variable local x vive en la funcin. Al principio de la misma, copia el valor de la variable x o del espacio de comandos, y aunque cambiemos la variable local en la funcin, la variable en o el espacio de comandos no se ve afectada; estn en mundos diferentes que slo se comunican a o a travs de la l e nea 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 ao en que n empieza el curso y Y Y las dos ultimas cifras del ao en que termina. En el curso 2008-2009, la n carpeta se llamar C0809. Dentro de esa carpeta crea otra que se llame LP . Dentro de esta,crea a una carpeta llamada ud1. Esta ser tu carpeta de trabajo para todo slos ejemplos y ejercicios de la a unidad 1.

Pg. 37 a

Lenguajes de Programacin: Gu ECTS o a Ejercicio 1.2


Edita manualmente la funcin ud1 f1 creando un archivo nuevo con el editor on desde la ventana de o comandos (con File, New ), gurdala en tu carpeta de trabajo y ejecuta: a >> >> >> >> ud1_f1(2.3) ud1_f1(0.1) ud1_f1(0) ud1_f1(-2.2)

Son correctos los resultados? Qu errores o problemas da? e

Ejercicio 1.3
Crea una funcin que reciba el radio de un c o rculo y devuelva su rea. MATLAB conoce el valor de a , pide ayuda sobre pi para usarlo.

Ejercicio 1.4
Prueba la funcin que has creado con un c o rculo de radio la unidad. Deber devolver . Prubala a e con 2; deber devolver 4 (puedes calcular ese valor con MATLAB). a

1.3.

Funciones con varios argumentos de entrada

El siguiente paso es construir funciones en las que haya ms de un argumento de entrada. a Tenemos as la siguiente, la cual calcula el rea de un rectngulo. Si necesitamos ms argu a a a mentos de entrada, simplemente los colocamos uno tras otro separados por comas dentro de los parntesis a la derecha del nombre de la funcin. e o
% ud1_farea % primera funcin con ms de un argumento. o a % rea del rectngulo de lados a y b a a function area=ud1_farea(a,b) area=a*b;

Para invocarla, se nos ocurren estas tres posibilidades, aprovechando lo explicado en la seccin o 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 nmeros, los cuales son copiados por las variables u 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 travs de la lista de argumentos. Finalmente en la tercera, e Pg. 38 a

UNIDAD DIDACTICA 1. FUNCIONES Y CONDICIONALES

tenemos una combinacin de las dos posibilidades anteriores. o En el siguiente ejemplo los argumentos no conmutan entre s Se trata de calcular el rea de . a un pol gono regular sabiendo el nmero de lados y el lado. En el clculo de la apotema los dos u a 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 funcin en la que usamos variables locales a la funcin. Si invocamos esta funcin o o o desde la ventana de comandos, y preguntamos despus lo que valen esas variables locales, las e 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, gurdalas en tu carpeta de trabajo a y prubalas desde la ventana de comandos de MATLAB. e

Ejercicio 1.6
Crea una funcin que reciba la base y la altura de un tringulo y devuelva el rea. o a a

Ejercicio 1.7
Crea una funcin que reciba la masa y la velocidad de un mvil y devuelva la energ cintica. o o a e

Ejercicio 1.8
Consideramos la funcin o function d=ud1_fprueba(a,b,c) b=c; a=b; d=a+b+c;

Pg. 39 a

Lenguajes de Programacin: Gu ECTS o a


Sin ejecutar la funcin, qu valor devolver si invocamos desde MATLAB ud1 f prueba(1, 2, 3)? o e a Raznalo primero y comprubalo despus editando la funcin y ejecutando esa orden. Es la primera o e e o funcin que tiene ms de dos argumentos. Conmutan entre s los argumentos de entrada? o a

Ejercicio 1.9
Crea una funcin que reciba los tres coecientes a, b, c, de un polinomio de segundo grado y devuelva o la ra z b + b2 4ac . 2a Cuando se invoque la funcin, se elegirn los coecientes para que la ecuacin tenga ra reales. Se o a o ces recomienda usar una variable auxiliar D para denir el discriminante b2 4ac. Conmutan entre s los argumentos de entrada?. Para comprobar si tu cdigo es correcto, usa los coecientes del polinomio o x2 7x + 12, que tiene como ra 3 y 4. ces

Ejercicio 1.10
Crea una funcin anloga para la otra ra o a z, b b2 4ac . 2a

Ejercicio 1.11
Crea una funcin que reciba dos alturas, h1 y h2 y una masa y devuelva la energ potencial perdio a da/ganada por el cuerpo al caer/subir de h1 a h2 .

1.4.

Estructura de control condicional if

Hasta ahora, todas las sentencias se han ejecutado de modo consecutivo, una detrs de la otra. a No disponemos todav de herramientas que permitan controlar de algn modo la ejecucin a u o o realizar operaciones ms complejas con la informacin de entrada a la funcin. La primera a o o de esas herramientas y una de las ms importantes es el condicional y nos pone en la parrilla a de salida del desarrollo de estrategias y algoritmos para resolver los problemas de los que un ordenador es capaz. Adems, y no menos importante, se convierte en el primer mecanismo de a provocacin de vuestra capacidad de pensar y de articular un discurso complejo a partir de o elementos m nimos, o sea, PROGRAMAR. La estructura condicional aparece en los lenguajes de programacin normalmente mediante la o palabra reservada if. En MATLAB lo hace de ese modo, tal como se indica en las siguientes l neas. function y=nombrefuncion(arg1,arg2,....) .... .... if cond .... .... end .... .... Pg. 40 a

UNIDAD DIDACTICA 1. FUNCIONES Y CONDICIONALES

Por cond nos referimos a una condicin lgica o combinacin de ellas. As cond puede ser o o o , que una variable sea mayor que un determinado valor, igual, mayor o igual (>=) etc. En caso de que eso sea as se ejecutarn las sentencias que estn entre la sentencia del if y la primera , a a sentencia end que se encuentre. Es importante para que los cdigos sean legibles tabular o indentar las instrucciones correso pondientes a una estructura de control 3 o 4 espacios (sern 4 en nuestros ejemplos), como a hemos hecho con el puntead en el bloque if anterior. Uno de los ejemplos ms sencillos que se pueden poner de esta estructura es el de una funcin a o que devuelva el mayor de dos nmeros a, b supuestos distintos entre s Se puede abordar este u . problema de varias maneras. La primera es mediante dos estructuras if, la primera controlando 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 nmeros a,b u % a,b se supondrn diferentes a 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 nmeros a,b u % a,b se supondrn diferentes a 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, dndole primero el valor a. Despus a e se compara b con esa variable, y si en la comparacin gana b, se actualiza el valor de mayor. o
% ud1_fmayorab0 % Devuelve el mayor de dos nmeros a,b u % a,b se supondrn diferentes a function mayor=ud1_fmayorab1(a,b) mayor=a; if b>mayor mayor=b; end

Los ejercicios correspondientes a este ejemplo son los siguientes: Pg. 41 a

Lenguajes de Programacin: Gu ECTS o a Ejercicio 1.12


Abre la ventana principal de MATLAB, copia manualmente las funciones ud1_fmayorab, ud1_fmayorab0 y ud1_fmayorab1, gurdalas en tu carpeta de trabajo y prubalas . a e

Ejercicio 1.13
Crea una funcin que reciba un nmero r y devuelva el rea del c o u a rculo de radio r si r 0 y 1 en caso contrario.

Ejercicio 1.14
Crea una funcin que reciba un valor x y devuelva el valor y de la funcin denida a trozos: o o y= x + 1 x < 1 1 x2 x 1

Ejercicio 1.15
(Para valientes) Crea una funcin que reciba tres nmeros a, b, c, que se supondrn diferentes entre o u a 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 ejecutar el primer a 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 funcin que calcula el mayor o de dos nmeros supuestos distintos. Se comprueba si el primero es mayor que el segundo y si u no es as se toma el mayor como el segundo. ,
% ud1_felseab % primer uso de la estructura if-else % Devuelve el mayor de dos nmeros a,b u % a,b se supondrn diferentes a function mayor=ud1_felseab(a,b) if a>b mayor=a; else mayor=b; end

Pg. 42 a

UNIDAD DIDACTICA 1. FUNCIONES Y CONDICIONALES

Los ejercicios correspondientes a este ejemplo son los siguientes: Ejercicio 1.16
Edita manualmente la funcin ud1_felseab, modicando alguna de las anteriores, gurdala en tu o a carpeta de trabajo y prubala. Adivina cul ser el resultado si pasas como argumentos dos nmeros e a a u iguales.

Ejercicio 1.17
Crea una funcin que reciba un nmero r y devuelva el rea del c o u a rculo de radio r si r 0 y 1 en caso contrario, utilizando la estructura if-else.

Ejercicio 1.18
Crea una funcin que reciba un valor x y devuelva, utilizando la estructura if-else, el valor y de la o funcin denida a trozos: o x + 1 x < 1 y= 1 x2 x 1

1.6.

Funcin que llama a otra funcin o o

Una vez que con una funcin hemos resuelto un determinado problema y/o hemos agrupado o una serie de tareas, esa funcin es muy cmodo verla como una caja negra que recibe unos o o argumentos de entrada y devuelve unos argumentos de salida (de momento uno slo de salida). o Vista de ese modo, es natural que sea llamada por otra funcin que la necesita como parte o de la misma. La sintaxis de ello no ofrece ningn problema invocndose de modo anlogo a u a a como se invoca desde la l nea de comandos. En el siguiente ejemplo codicamos una funcin o denida a trozos, similar a la del ejemplo 1.4, en la que el valor de uno de los trozos de la funcin se obtiene llamando a una funcin creada previamente, la ud1_f1.m. o o
% ud1_ftrozos2 % primera funcion q llama a otra funcion % ud1_ftrozos2(x). Devuelve el valor de la funcin: o % 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 funcin desde otra es muy poderoso y es la base para tanto o resolver grandes problemas como ser capaz de repartir la escritura de grandes cdigos entre o un equipo de programadores. Haremos uso abundante de esta tcnica durante el curso y si el e estudiante es hbil conseguir simplicar la resolucin de muchos ejercicios si hace buen uso a a o 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 funcin ud1_ftrozos2, gurdala en tu carpeta de trabajo y prubala. o a e

Pg. 43 a

Lenguajes de Programacin: Gu ECTS o a


>> >> >> >> ud1_ftrozos2(2.3) ud1_ftrozos2(1.1) ud1_ftrozos2(0) ud1_ftrozos2(0.9)

Son correctos los resultados? Qu errores o problemas da? e

Ejercicio 1.20
Utilizando la funcin del rea del rectngulo (ud1_farea), crea una funcin que reciba los dos o a a o lados de la base y la altura de una pirmide de base rectangular y devuelva su volumen (el volumen a de la pirmide es 1/3 del rea de la base por la altura). a a

Ejercicio 1.21
Usando las funciones de los ejercicios 1.9 y 1.10, crea una funcin que reciba los tres coecientes de o un polinomio de segundo grado de ra ces reales y devuelva el producto de las mismas (se elegirn a los coecientes para que as sean). Prueba con varios polinomios (el producto de las dos ra ces ha de ser c/a).

Ejercicio 1.22
(Para los valientes). Crea una funcin que que reciba los tres coecientes de un polinomio de grado o 2, llame a la funcin del apartado anterior para calcular el producto de sus ra y que cuando las o ces ra sean nmeros complejos o cuando sea una ra doble, devuelva 0 en lugar del producto de las ces u z ra ces. Para ver si las ra con complejas o reales, puedes ver el signo del discriminante, b2 4ac. ces

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 tambin es habitual que dentro del bloque e 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 ser 0, y si n es estrictamente positiva, el signo ser 1. Por tanto, hay que gestionar a a tres posibilidades excluyentes, lo que abordaremos primero eliminando una de ellas frente a las otras dos y despus las otras dos entre si. e Pg. 44 a

UNIDAD DIDACTICA 1. FUNCIONES Y CONDICIONALES

% ud1_fsigno % funcin que devuelve el signo de un nmero entero n o u % -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 funcin ud1_fsigno, gurdala en tu carpeta de trabajo y prubala, desde o a e la ventana de comandos de MATLAB.

Ejercicio 1.24
Se trata de construir una funcin que reciba una calicacin (entre 0 y 10) y devuelva 0 si es o o suspenso (calicacin estrictamente menor que 5), 1 si es aprobado (calicacin mayor o igual que 5 o o y menor que 7), 2 si es notable (calicacin mayor o igual que 7 y menor que 9), 3 si es sobresaliente o (calicacin mayor o igual que 9 y menor o igual que 10) y -1 si el argumento no est entre 0 y 10. o a No se podrn utilizar operadores lgicos. a o

Ejercicio 1.25
Crea una funcin que reciba un valor x y devuelva el o sin(x) x y= 2 x + log(x) No se podrn utilizar operadores lgicos. a o valor y de la funcin denida a trozos: o x<0 0x<1 x1

Ejercicio 1.26
Funcin q devuelva el salario semanal de un trabajador en funcin del coste hora, de las horas que ha o o trabajado y de un jo de productividad que se cobra si se trabajan ms de 30 horas. Si se trabajan a ms de 40 horas, las horas por encima de esas 40 se pagan un 50 % ms caras (horas extras). No se a a podrn utilizar operadores lgicos. a o

Ejercicio 1.27
Codica la funcin o f (x) = mx{ud1 f 1(x), 7 cos(6x)}. a donde mx signica mximo. En la denicin de ud1 f1 hay un logaritmo del argumento x implicado. a a o Por tanto, cuando x sea menor o igual que cero, ese logaritmo no podr ser evaluado y tomaremos a como mximo la unica funcin que est denida. No se podrn utilizar operadores lgicos. a o a a o

Pg. 45 a

Lenguajes de Programacin: Gu ECTS o a

1.8.

Variante elseif en el condicional

Una variante bastante util del condicional es la que permite abrir el abanico de posibilidades de ejecucin a no slo el verdadero o falso referido a una determinada condicin. La idea es o o o que si una condicin es cierta se ejecuten unas sentencias, pero si esta es falsa, se compruebe o una segunda condicin y si esta es cierta, se ejecuten el correspondiente segundo grupo de o sentencias, pero si la segunda condicin es falsa, se pase a una tercera y as sucesivamente. o Finalmente, la orden terminar con una sentencia else cuyo bloque de instrucciones posterior a se ejecutar si ninguna de las condiciones ha resultado cierta. Pretendemos reejar esto con a 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 condicin 1, cond1, es cierta, se ejecutar el bloque 1 de sentencias, y a posteriori se o a pasar directamente a las sentencias posteriores a la sentencia end. Si la condicin 1 fuese a o falsa, se evaluar la condicin 2 y si est fuese cierta, se ejecutar el bloque 2, pasando a o a a directamente a las sentencias posteriores a la sentencia end. Si ninguna de las condiciones fuese cierta, se pasar directamente a la ejecucin del bloque n. a o Vemos esta estructura con el siguiente ejemplo. Se trata de construir una funcin que reciba o una calicacin (entre 0 y 10) y devuelva 0 si es suspenso (calicacin estrictamente menor o o que 5), 1 si es aprobado (calicacin mayor o igual que 5 y menor que 7), 2 si es notable o (calicacin mayor o igual que 7 y menor que 9) y 3 si es sobresaliente (calicacin mayor o o o igual que 9). Para codicar este ejemplo, lo primero que comprobamos es si la nota es menor que 5. Si no lo es, slo comprobamos si es menor que 7, por que ya sabemos que va a ser o mayor o igual que 5. Los dems casos son anlogos. a a
% 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;

Pg. 46 a

UNIDAD DIDACTICA 1. FUNCIONES Y CONDICIONALES

else clave=3; end

Los ejercicios correspondientes a este ejemplo son los siguientes: Ejercicio 1.28
Edita manualmente la funcin ud1_fnotas, gurdala en tu carpeta de trabajo y prubala, desde o a e la ventana de comandos de MATLAB. Que ocurre si el valor del argumento no est entre 0 y 10? a

Ejercicio 1.29
Se trata de construir una funcin que reciba una calicacin (entre 0 y 10) y devuelva 0 si es o o suspenso (calicacin estrictamente menor que 5), 1 si es aprobado (calicacin mayor o igual que 5 o o y menor que 7), 2 si es notable (calicacin mayor o igual que 7 y menor que 9), 3 si es sobresaliente o (calicacin mayor o igual que 9 y menor o igual que 10) y -1 si el argumento no est entre 0 y 10. o a Se utilizar la variante elseif del condicional para realizar este ejercicio. a

Ejercicio 1.30
Crea una funcin que reciba un valor x y devuelva el o sin(x) x y= 2 x + log(x) valor y de la funcin denida a trozos: o x<0 0x<1 x1

Se utilizar la variante elseif del condicional para realizar este ejercicio. a

Ejercicio 1.31
Funcin q devuelva el salario semanal de un trabajador en funcin del coste hora, de las horas que ha o o trabajado y de un jo de productividad que se cobra si se trabajan ms de 30 horas. Si se trabajan a ms de 40 horas, las horas por encima de esas 40 se pagan un 50 % ms caras (horas extras). Se a a utilizar la variante elseif del condicional para realizar este ejercicio. a

Ejercicio 1.32
Codica la funcin o f (x) = mx{ud1 f 1(x), 7 cos(6x)}. a donde mx signica mximo. En la denicin de ud1 f1 hay un logaritmo del argumento x implicado. a a o Por tanto, cuando x sea menor o igual que cero, ese logaritmo no podr ser evaluado y tomaremos a como mximo la unica funcin que est denida. Se utilizar la variante elseif del condicional a o a a para realizar este ejercicio.

1.9.

Operadores lgicos o

Si queremos construir condiciones algo ms interesantes, necesitaremos combinar condiciones a elementales mediante los operadores lgicos habituales, estudiados a menudo durante la etapa o de la educacin secundario. Necesitaremos saber escribir al menos los operadores Y lgico y el o o lgico. Si se pretende construir una condicin que mezcle varias condiciones se pueden usar O o o parntesis para establecer qu operaciones lgicas se hacen primero, de modo similar a como e e o sucede con las operaciones aritmticas. e Para el Y lgico se usa el s o mbolo reservado &. En el siguiente ejemplo vemos como se utiliza este operador para construir una funcin que devuelva el mayor de tres nmeros supuestos o u distintos. Si uno de los nmeros es mayor lo ser porque es al mismo tiempo mayor que uno u a y mayor que otro. Pg. 47 a

Lenguajes de Programacin: Gu ECTS o a


%% 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

o Otro operador interesante es el O lgico (inclusivo). Para ste se usa el s e mbolo |, que se obtiene pulsando la tecla Alt Gr y la del 1. En los siguientes ejercicios veremos algn ejemplo de u utilizacin de este operador. o Ejercicio 1.33
Edita manualmente la funcin ud1_fmayor, gurdala en tu carpeta de trabajo y prubala, desde o a e la ventana de comandos de MATLAB.

Ejercicio 1.34
Construye una funcin que reciba tres valores a, b y c (que se supondrn diferentes) y devuelva 1 si o a a es el mayor, 2 si b es el mayor, y 3 si lo es c.

Ejercicio 1.35
Construye una funcin que reciba tres valores a, b y c devuelva el mayor si alguno de ellos es positivo o y el menor en caso contrario.

Ejercicio 1.36
Construye una funcin que reciba tres valores a, b y c (que se supondrn diferentes) y devuelva el o a mayor de ellos. No se podrn utilizar operadores lgicos, solo un bloque if-else y una llamada a la a o funcin ud1 fmayorab o

Ejercicio 1.37
Cul es el signicado del argumento de salida de la siguiente funcin? a o function mayor=ud1_fmayortres(a,b,c) mayor=a; if b>mayor mayor=b; if c>mayor mayor=c; end end

Ejercicio 1.38
Qu devuelve la siguiente funcin? e o

Pg. 48 a

UNIDAD DIDACTICA 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 despus comprubalo con algunos ejemplos. e e

Ejercicio 1.39
Usando la funcin ud1 fmayor, construye una funcin que devuelva el mximo de cuatro valores. o o a

Ejercicio 1.40
(Para valientes) Idem con seis valores. Trata de hacerlo con un unico if else y utilizando dos veces la funcin del apartado 1.36. o

Ejercicio 1.41
(Para valientes) Idem con siete valores. Trata de hacerlo con el menor nmero posible de if else u (ninguno).

Ejercicio 1.42
(Para valientes) Qu errores hay en el siguiente programa? Se supone que la funcin deber devolver e o a 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 cul es la relacin de orden entre los valores pero si a o fuesen crecientes, la potencia ser (b a) (c b). a
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 deber dar 0). a

Pg. 49 a

Lenguajes de Programacin: Gu ECTS o a

1.10.

Operadores de comparacin: son iguales? o

La operacin de comparar si dos valores enteros son iguales tiene una sintaxis espec o ca en MATLAB, colocando el s mbolo = de modo duplicado, ==. Cuando se trate de valores correspondientes a nmeros reales, esta operacin es ms delicada y hablaremos de ella ms u o a a adelante. En el siguiente ejemplo se muestra su uso para construir una funcin que indica si o 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 negacin lgica se escribe en MATLAB anteponiendo al operador correspondiente el s o o mbolo , el cual se obtiene pulsando las teclas AltGr y 4. Por tanto, el operador para comprobar si dos valores son distintos ser =. En los siguientes ejercicios veremos algn ejemplo de a u utilizacin de este operador. o Ejercicio 1.43
Edita manualmente la funcin ud1_figuales, gurdala en tu carpeta de trabajo y prubala, desde o a e la ventana de comandos de MATLAB.

Ejercicio 1.44
Construye una funcin que reciba tres nmeros enteros a, b y c y devuelva 1 si son iguales entre si, o u y 0 en caso contrario.

Ejercicio 1.45
Construye una funcin que reciba tres nmeros enteros a, b y c y devuelva 1 si a = b, 2 si a = b y o u b = c y 3 si los tres valores son iguales.

Ejercicio 1.46
Construye una funcin que reciba tres nmeros enteros a, b y c y devuelva 2 si los tres son iguales o u 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 nmeros reales: precisin y valor abu o soluto

Entender cmo el ordenador almacena y trabaja con nmeros con cifras decimales escapa o u al contenido de este libro. Sin embargo, dado que la memoria RAM es nita, en nmeros u racionales peridicos o en nmeros irracionales, es fcil entender que ser imposible almacenar o u a a las innitas cifras que hay a la derecha del punto decimal. Adems de estas dicultades de ala macenamiento, est la dicultad conceptual relativa a la idea de igualdad entre nmeros reales. a u Pg. 50 a

UNIDAD DIDACTICA 1. FUNCIONES Y CONDICIONALES

La mejor respuesta es pensar que dos nmeros reales (y en general dos objetos cualesquiera en u la vida profesional) son iguales cuando las diferencias entre ellos sean tan pequeas como lo n requiera una determinada tarea. As dos sillas del mismo modelo son objetivamente distintas , si las vemos con mucho cuidado, pero si no tienen ningn defecto, sern a todos los efectos u a iguales. Lo mismo sucede con los nmeros reales. Diremos que dos nmeros reales son iguales u u cuando el valor absoluto de su diferencia sea menor que un umbral de precisin determinado o que depender del signicado y utilidad de dichas cantidades. a En el siguiente ejemplo observamos cmo se dene ese umbral para comprobar si un tringulo o a es equiltero, issceles, etc., y como se comprueba la igualdad de los lados recurriendo a la a o funcin valor absoluto, abs en MATLAB. o
% ud1_ftriangulos % recibe a, b y c, los lados de un tringulo a % devuelve 3 si son los lados de un tringulo equiltero a a % devuelve 2 si son de un tringulo issceles a o % devuelve 1 si son los lados de un tringulo escaleno a % idea: cuando dos numeros reales son iguales, para % comprobarlo hay q definir una precisn-umbral. o function tipo=ud1_ftriangulos(a,b,c) % Precisin con la que trabajamos. Todo nmero menor que o u % esa cantidad ser cero para nosotros a 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 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 funcin ud1 ftriangulos. o Ejercicio 1.49 Crea una funcin que reciba tres valores, a, b y c y devuelva 1 si pueden ser los lados de un tringulo o a (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 tringulo (usa la funcin creada en el apartado 1.49), 3 si es un tringulo equiltero, a o a a 2 si es issceles y 1 si es escaleno. o Ejercicio 1.51 Codica el ud1_ftriangulos en una sola l nea usando la funcin ud1 ftriangulos y el ejercicio o 1.49. Ejercicio 1.52 (Para valientes) Construye una funcin que reciba 4 nmeros a, b, c, d, correspondientes a los lados o u 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 rectngulo, 3 si es un trapecio y 4 si no es ninguna de estas posibilidades. a Asignaturas\LP \Ejemplos.

Pg. 51 a

Lenguajes de Programacin: Gu ECTS o a

1.12.

Variables enteras y reales como argumentos

Hasta ahora hab amos utilizado variables que eran esencialmente o nmeros enteros o nmeros u u reales. En el siguiente ejemplo conviven ambos tipos como argumentos. La funcin recibe los valores o correspondientes a las dimensiones principales de una determinada gura elemental (rectngulo, a tringulo, c a rculo, etc...) y recibe tambin un entero indicando el tipo de gura concreta a la que nos e referimos de entre esa lista. La funcin devuelve el rea de dicha gura. o a
% ud1_fareafig % primera funcin que combina variables esencialmente diferentes, o % una como tipo que funciona como un indicador de especie (nmero u % entero) y otras (a,b) q funcionan como nmeros reales. u % ademas b a veces es inutil. % ud1_fareafig(tipo,a,b) devuelve el rea de distintas figuras a % Si tipo=1, devuelve el rea del rectngulo de lados a y b a a % Si tipo=2, devuelve el rea del crculo de radio a a % Si tipo=3, devuelve el rea del tringulo de base a y altura b a a % Si tipo=4, devuelve el rea del cuadrado de lado a a % Si tipo=5, devuelve el rea del tringulo equiltero de lado a a a 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 funcin ud1_fareafig, bien editndola manualmente o trayndola de una carpeta o a e determinada. Ejercicio 1.54 Modica la funcin ud1_fareafig para que tambin calcule el rea del rombo. o e a Ejercicio 1.55 Codica ud1_fareafig sin la orden else ni la elseif. Ejercicio 1.56 Construye una funcin que reciba un parmetro, raiz, y los coecientes a, b y c de un polinomio de o a segundo grado. Devolver la ra con el + en la frmula si raiz es 1 y la ra con el - si raiz es a z o z = 1. Para calcular estas ra ces llamaremos a las funciones 1.9 y 1.10. Para comprobar si tu cdigo o 2 7x + 12, que tiene como ra es correcto, usa los coecientes del polinomio x ces 3 y 4. Ejercicio 1.57 Codica una funcin que reciba los coecientes de un polinomio de grado 2 y devuelva la suma de o sus ra ces, para lo cual usar del modo que corresponda la funcin del ejercicio 1.56. Para comprobar a o 2 7x + 12, que tiene como ra si tu cdigo es correcto, usa los coecientes del polinomio x o ces 3 y 4. Ejercicio 1.58

Pg. 52 a

UNIDAD DIDACTICA 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 funcin que reciba una cantidad, un nmero que indicar en o u a qu sistema de medida est (0 para el sistema internacional (SI) y = 0 para el sistema ingls) y otro e a e nmero que indicar en qu unidades est (1,2 o = 1, 2 segn sea mm, cm o metros en SI y 1, 2 u a e a u o = 1, 2 segn sea pulgadas, pies o yardas en el sistema ingls). La funcin devolver la magnitud u e o a convertida a metros si se ha recibido en el sistema ingls y convertida a pies si se ha recibido en el e 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 asignacin. A la izquierda tendremos siempre una variable y a la o derecha un expresin que puede combinar llamadas a funciones con operadores aritmticos y lgicos. o e o El funcionamiento de la operacin es que primero se evala la expresin a la derecha y el valor o u o obtenido es asignado a la variable que est a la izquierda. a Esto abre la puerta para operaciones que no tienen sentido matemtico pero s en Programacin, a o como decir que i = i + 1. Lo que esto signica es que se evala la expresin i + 1 y se asigna su valor u o a i, con lo cual esta variable habr incrementado su valor original en una unidad. En el siguiente a ejemplo aplicamos esta idea para encontrar la suma de los positivos entre cuatro nmeros. u %% ud1_fsumapos %% primera variable sumadora (x=x+algo) %% suma de los positivos entre 4 nmeros. u 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 funcin ud1_fsumapos o Ejercicio 1.60 Construye una funcin que reciba 5 nmeros a, b, c, d, y e y cuente cuntos son estrictamente o u a positivos. Ejercicio 1.61 Construye una funcin que reciba 5 nmeros x, y, z, t, y s y dos nmeros a y b y devuelva la suma o u u de aquellos nmeros de entre esos 5 que son mayores e iguales que a y menores o iguales que b. u Ejercicio 1.62 Construye una funcin que reciba 5 nmeros a, b, c, d, y e y un nmero adicional positivo ref y o u u devuelva la suma de aquellos valores que sean negativos pero que su valor absoluto sea mayor que ref . Por ejemplo, si los nmeros son, -7, 12, 4, -3, -6 y ref vale 3.7, la suma ser -7-5-=-13. u a

Pg. 53 a

Lenguajes de Programacin: Gu ECTS o a

1.14.

Funcin parte entera o

Hay una funcin propia de MATLAB que se usa en muchos cdigos y que conviene citar. Es la funcin o o o que extrae la parte entera, redondeando hacia , de un nmero. As la parte entera de 3.45 es 3, u , y la de -4.32 es -5. En el siguiente ejemplo se usa este operador, oor, para comprobar si un nmero u 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 funcin ud1_fesentero. o Ejercicio 1.64 Construye una funcin que reciba 4 nmeros a, b, c, d y devuelva la suma de los que entre ellos son o u enteros. Ejercicio 1.65 Construye una funcin que reciba un nmero natural n y devuelva 0 si n es par y 1 si n es impar. o u Ejercicio 1.66 (Para valientes) Construye una funcin que reciba 4 nmeros a, b, c, d y un nmero entero n y o u u devuelva la suma de los que entre ellos son enteros y adems mltiplos de n. a u

Pg. 54 a

Unidad Didctica 2 a Bucles


2.1. General

Como ya se indic al comienzo de la unidad 1, esta segunda unidad contiene junto con la primera la o mayor de las herramientas que un alumno va a tener que utilizar a lo largo del curso. a La unidad se centra en la estructura de control ms importante, la que permite realizar repeticiones: a los bucles. El bucle junto con los condicionales representan la base de la programacin estructurada. o

2.2.

Bucles

En muchos problemas de matemticas se requiere repetir o iterar un mismo procedimiento. Es por a ello que todos los lenguajes de programacin contienen la posibilidad de crear bucles. Un bucle en o programacin es una sentencia que se realiza repetidas veces. Un bucle se utiliza para hacer un accin o o repetida sin tener que repetir varias veces el mismo cdigo, lo que ahorra tiempo, deja el cdigo ms o o a claro y facilita su modicacin en el futuro. o La variable entera que cuenta el nmero de veces que regula la evolucin del bucle se conoce como u o 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 ms del programa y su valor es a controlado en todo momento por el programador. Con este tipo de bucles, el n de la iteratividad viene determinado por una condicin sobre una variable del programa que aparece a continuacin o o del comando WHILE. El primer ejemplo ilustra uno de los usos ms t a picos 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 funcin. La o condicin de corte del proceso iterativo que requiere la estructura WHILE se ejecutar cuando el o a ndice i sea mayor que n, en cualquier otro caso i se ir incrementando en una unidad y la variable suma a se ver incrementada en el valor del propio a ndice i. De esta forma cuando el bucle se interrumpa la variable suma contendr el valor resultante de la suma de los n primeros nmeros naturales. a u %ud2_fsuma % Suma de todos los naturales entre 1 y n % primer bucle function suma=ud2_fsuma(n) suma=0; i=1;

Pg. 55 a

Lenguajes de Programacin: Gu ECTS o a


while i<=n suma=suma+i; i=i+1; end Mediante los siguientes ejercicios se podr aanzar el concepto de bucle. a Ejercicio 2.1 Crea una carpeta llamada ud2 en Z : Copia en ella todos los ejemplos cuyo nombre empiece por ud2 , los cuales encontrars en la carpeta: a Asignaturas\LP \Ejemplos Aade la carpeta Z :\ud2 al path o Current Directory de MATLAB. n Ejercicio 2.2 Prueba la funcin ud2 fsuma o Ejercicio 2.3 Construye una funcin que reciba dos nmeros naturales, m y n, con m < n, y devuelva la suma de o u los naturales entre m y n. Ejercicio 2.4 Idem sin usar bucles y llamando a la funcin ud2 fsuma. o Ejercicio 2.5 Construye una funcin que reciba un nmero natural, n y devuelva o u sin(1) + sin(2) + . . . + sin(n 1) + sin(n) n+1

Ejercicio 2.6 (Para valientes) Construye una funcin que reciba dos nmeros, reales a, b, con a < b, un nmero o u u 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. Tambin se puede ver como la posicin vertical del centro de gravedad de la curva y = sin(x) entre e o a y b si la consideramos representada por esos n + 1 puntos. Ejercicio 2.7 (Para valientes) Construye una funcin que reciba dos nmeros, reales a, b, con a < b, un nmero o u u natural n, y calcule la posicin vertical del centro de gravedad de la curva y = sin(x), considerada o como una poligonal que se apoya en n + 1 puntos de esa curva cuyas abscisas estn equiespaciadas a entre a y b. Ejercicio 2.8 (Para valientes) Construye una funcin que reciba dos nmeros, reales a, b, con a < b, un nmero o u u natural n, y calcule el centro de gravedad del supercie denida por los rectngulos que tiene como a base h = (b a)/n y como altura sin(xi ), con xi = a + i h, 0 i < n.

Pg. 56 a

UNIDAD DIDACTICA 2. BUCLES

2.3.

Bucles con incremento variable

El segundo ejemplo es una variante del caso anterior donde se desea que tan slo se sumen los o nmeros pares. La primera diferencia estriba en que el primer valor que debe tomar el u 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 funcin ud2 fsumapares o Ejercicio 2.10 Construye una funcin que reciba un nmero natural, n, y devuelva la suma de los impares entre 1 o u y n. Ejercicio 2.11 Construye una funcin que reciba un nmero natural, n, y devuelva la suma de los mltiplos de 3 o u u entre 1 y n. Ejercicio 2.12 (Para valientes) Construye una funcin que reciba un nmero natural n y devuelva 0 si n es par y 1 o u si n es impar. No se podr usar la orden f loor. a

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 nmeros que son siempre el mismo en este u caso x, estaremos hallando la potencia ensima de dicho nmero. e u % 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:

Pg. 57 a

Lenguajes de Programacin: Gu ECTS o a


Ejercicio 2.13 Prueba la funcin ud2 fpotencia o Ejercicio 2.14 Construye una funcin que reciba un nmero natural, n, y devuelva o u n! = 1 2 . . . (n 1)n Ejercicio 2.15 Qu devuelve la siguiente funcin? e o 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 qu devolver ud2 f prueba(2, 15, 3). Comprubalo con MATLAB. e a e Ejercicio 2.16 Construye una funcin que reciba un nmero x y un nmero natural, n, y devuelva xn sin usar o u u ni llamar a ud2 fpotencia. Ejercicio 2.17 Llamando a la funcin ud2 f potencia y la funcin que has creado en el ejercicio 2.16, construye una o o funcin que reciba un nmero x y un entero a y devuelva xa . o u Ejercicio 2.18 Construye una funcin que reciba x y n, calculando: o xi
i

para lo cual llamar a ud2 f potencia. a

2.5.

Bucles y relaciones de recurrencia

Otra aplicacin interesante de los bucles viene a partir del uso de las frmulas de recurrencia, muy o o usadas en mtodos numricos y clculo innitesimal. El valor de una variable en un paso n depende e e a de su valor en el paso anterior n 1. El ndice del bucle ser capaz de ir avanzando con en nmero a u 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)

Pg. 58 a

UNIDAD DIDACTICA 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 funcin ud2 fnewton con algunos valores y comprueba que los resultados son correctos. o Ejercicio 2.20 Construye una funcin que reciba un nmero natural n y devuelva el trmino n-simo de la sucesin o u e e o xi+1 = 2xi , x1 = 3.57, i N. A qu valor converge la sucesin cuando n ? e o Ejercicio 2.21 Construye una funcin que reciba un nmero natural n y devuelva xn xn1 , siendo xn y xn1 o u los trminos n y n 1 de la sucesin del ejercicio 2.20. Se llamar a la funcin creada en dicho e o a o ejercicio. Ejercicio 2.22 Construye una funcin que reciba un nmero natural n y devuelva xn xn1 , siendo xn y xn1 o u los trminos n y n 1 de la sucesin del ejercicio 2.20. No se podr llamar a la funcin creada en e o a o dicho ejercicio y solo se podr usar un bucle. a Ejercicio 2.23 Construye una funcin que reciba un nmero natural n y devuelva el n-simo trmino de la sucesin o u e e o 1. de Fibonacci xn+2 = xn + xn+1 , x1 = 1, x2 = 2.

Ejercicio 2.24 Modica el ejemplo 2.23 para que reciba un nmero natural n y dos nmeros x1 y x2 y devuelva el u u trmino n-simo de la sucesin de Fibonacci. e e o
Leonardo Pisano naci en 1170 probablemente en Pisa, en el seno de la familia Bonacci, de ah su o sobrenombre Fibonacci, por el que es generalmente conocido. Su padre fue representante de los mercaderes de la Repblica de Pisa en el norte de Africa, en lo que es hoy el noroeste de Argelia. All creci y se u o educ Fibonacci. En los numerosos viajes en los que acompa a su padre, Fibonacci aprendi las ventajas de o no o los sistemas matemticos utilizados en otras culturas. Hacia 1200 regres a Pisa y recopil en diversos libros a o o lo aprendido en sus viajes aadiendo adems notables contribuciones propias. n a Por ejemplo, en uno de sus libros introdujo el sistema decimal indo-arbigo, sistema de numeracin posicional a o que usamos actualmente y extendi por Europa el uso del sistema rabe de numeracin. En el mismo libro o a o aparece la conocida sucesin de Fibonacci, 1, 1, 2, 3, 5, 8, 13, 21, 34,... (en la que cada trmino es suma o e de los dos anteriores) como solucin al siguiente problema: Un hombre aisla un par de conejos en un corral. o Cuntos pares de conejos hay al cabo de un ao si se supone que cada par de conejos engendra un nuevo a n par que a partir del segundo mes se hace frtil? e Sin embargo, la mayor aportacin matemtica de Fibonacci se encuentra en el rea de la Teor de los o a a a Nmeros, en la que, entre otros resultados destaca el estudio de mtodos matemticos para encontrar triples u e a Pitagricos, es decir, tres nmeros naturales, m, n y k que verican m2 + n2 = k 2 . o u
1

Pg. 59 a

Lenguajes de Programacin: Gu ECTS o a


Ejercicio 2.25 (Para valientes) Construye una funcin que reciba tres nmeros enteros p, q y r y devuelva 1 si o u r pertenece a la sucesin de Fibonacci iniciada por p y q y 0 en caso contrario (supondremos la o sucesin montona). o o Ejercicio 2.26 (Para valientes) Idem siendo p, q y r nmeros reales (supondremos la sucesin montona). u o o Ejercicio 2.27 (Para valientes) El nmero , se puede obtener mediante la frmula u o = 4 (1 1/3 + 1/5 1/7 + . . . + (1)i 1 + . . .). 2i+1

Construye una funcin que reciba un nmero n y devuelva la aproximacin de mediante los n o u o primeros sumandos de la expresin anterior (no hace falta utilizar ). o

2.6.

Bucles y condicionales

A continuacin se nos plantea la necesidad de contar los divisores de un nmero natural n. Para o u 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 condicin la variable de conteo de divisores se incrementa en una unidad y o 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. Prubalo con algunos valores y comprueba que los e resultados son correctos. Ejercicio 2.29 Construye una funcin que reciba un nmero natural n y devuelva 0 si n es par y 1 si n es impar. Se o u usar la orden mod. a Ejercicio 2.30 Construye una funcin que reciba un nmero n, cuente los nmeros que son pares y no son mltiplos o u u u de 3 entre 1 y n y devuelva ese valor.

Pg. 60 a

UNIDAD DIDACTICA 2. BUCLES

Ejercicio 2.31 Construye una funcin que reciba un nmero n, recorra los valores o u sin(1), sin(2), sin(3), . . . , sin(n), y devuelva el nmero de ellos que son positivos. u Ejercicio 2.32 Construye una funcin que reciba un nmero n, recorra los valores o u sin(1), sin(2), sin(3), . . . , sin(n), y devuelva el producto de los que son positivos. Ejercicio 2.33 Construye una funcin que reciba un ao y devuelva su siglo. o n Ejercicio 2.34 La siguiente funcin que recibe un nmero n y deber devolver el nmero de valores entre 1 y n o u a u 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 funcin que reciba dos nmeros naturales m y n, y devuelva la cantidad de divisores o u comunes. Ejercicio 2.36 (Para valientes) Construye una funcin que reciba dos nmeros naturales m y n, y devuelva su o u mximo comn divisor. a u Ejercicio 2.37 (Para valientes) Construye una funcin que reciba dos nmeros naturales m y n, y devuelva su o u m nimo comn mltiplo. u u Ejercicio 2.38 (Para valientes) Construye una funcin que reciba 3 naturales m, n, p y devuelva una variable f lag tal o que f lag = 1 si el m nimo de los mximos comunes divisores entre dos de estos nmeros corresponde a u a la pareja m, n. f lag = 2 si es m, p y f lag = 3 si es n, p. Si por ejemplo m = 20, n = 30, p = 15, f lag valdr 2. No se podr llamar a 2.36. a a Ejercicio 2.39 (Para valientes) Construir una funcin que reciba un nmero natural y devuelva el nmero de ceros o u u que hay en l (as por ejemplo, en 304 hay un cero, en 30 hay un cero y en 115 no hay ningn cero). e , u Para contar cuntas cifras tiene el nmero, podis usar log10. a u e

Pg. 61 a

Lenguajes de Programacin: Gu ECTS o a

2.7.

Uso de bucles para vericar una condicin sobre un o conjunto.

El ejemplo que se ilustra a continuacin tan slo devuelve un valor 1 o 0 en el caso de que el nmero o o u 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 condicin, en este caso ser o divisor del argumento numero. A diferencia del caso anterior basta con que la condicin se cumpla o una vez para que no haga falta continuar el bucle, y podamos asegurar que el nmero no es primo u 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 funcin ud2 fesprimo. o Ejercicio 2.41 Construye una funcin que reciba un nmero natural n y devuelva su divisor ms grande distinto de o u a s mismo. Ejercicio 2.42 Idem ms pequeo y distinto de 1. a n Ejercicio 2.43 Construye una funcin que reciba dos enteros, m, n, con m < n y devuelva el menor nmero entero o u r entre m y n tal que sin(r) > 0 (se usar break). Se supondr que existe solucin. Por ejemplo, si a a o m = 16 y n = 27 el resultado debe ser 19. Ejercicio 2.44 Idem sin break. Ejercicio 2.45 Construye una funcin que reciba un natural n y devuelva el mayor nmero entero positivo m < n o u tal que sin(m) < 0. (se usar break). Se supondr que existe solucin. Por ejemplo, si n = 29 el a a o resultado ha de ser 25.

Pg. 62 a

UNIDAD DIDACTICA 2. BUCLES

Ejercicio 2.46 Idem sin break. Ejercicio 2.47 o Utilizando la funcin ud2 f cuentadiv, construye una funcin que haga lo mismo que ud2 f esprimo. o Ejercicio 2.48 Construir una funcin que reciba un nmero natural n y un valor prec, itere la sucesin o u o xi+1 = 2xi , x1 = 8, 32, i N y si para algn 1 < i n, |xi xi1 | < prec, devuelva xi . Si no, devolver xn . u a Ejercicio 2.49 Modicar la funcin creada en el ejercicio 2.23 para que reciba un nmero num, y devuelva el primer o u elemento xi de la sucesin de Fibonacci x1 = 1, x2 = 2, xi = xi1 + xi2 tal que xi sea mayor que o num. Nota: Como en cada iteracin sumamos ms de 1, como mucho tendr o a amos que hacer n iteraciones. Ejercicio 2.50 Crea una funcin que reciba un nmero num, calcule los trminos de la sucesin de Fibonacci x1 = 1, o u e o x2 = 2, xi = xi1 + xi2 menores que num y devuelva el nmero de ellos que son primos. u Ejercicio 2.51 (Para valientes) Crea una funcin que reciba un nmero num y devuelva 1 si descompone en producto o u de dos primos y 0 si no es as Por ejemplo, para num = 6 = 3 2 devolver 1 y para num = 7 o . a num = 12 devolver 0. Usa la funcin ud2 f esprimo para determinar si un nmero es primo o no. a o u

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 continuacin vamos a contar la cantidad o de nmeros primos que hay menores o iguales que el argumento de entrada n sin contar con el 1, u 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 porqu se limita el e crecimiento del ndice j hasta que sea menor o igual que la ra cuadrada de i. z % ud2_fnprimos.m % ud2_fnprimos(n) devuelve el nmero de primos u % 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)

Pg. 63 a

Lenguajes de Programacin: Gu ECTS o a


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 funcin ud2 fnprimos o Ejercicio 2.53 Construye una funcin que calcule el nmero de primos menores o iguales que un nmero n sin o u u utilizar un doble bucle y llamando a ud2 fesprimo. Ejercicio 2.54 Construye una funcin que reciba dos naturales, m y n, con m < n y devuelva la suma de los o nmeros primos entre m y n. u Ejercicio 2.55 Construye una funcin que calcule la suma de de los primos menores o iguales que un nmero n sin o u llamar a ud2 fesprimo. Ejercicio 2.56 Construye una funcin que reciba dos naturales, m y n, con m < n y devuelva el producto de los o nmeros primos entre m y n (sin llamar a ud2 fesprimo). u Ejercicio 2.57 Construye una funcin que reciba 3 naturales, m, n, p, con m < n y calcule: o m + m2 + + mp + (m + 1) + (m + 1)2 + + (m + 1)p + + n + n2 + + np

Ejercicio 2.58 Construye una funcin que reciba dos naturales, m y n, con m < n y devuelva el mayor nmero o u primo entre m y n. (Para valientes) Hacerlo sin usar break. Ejercicio 2.59 Construye una funcin que reciba dos naturales, m y n, con m < n y devuelva el menor nmero o u primo entre m y n. (Para valientes) Hacerlo sin usar break. Ejercicio 2.60 (Para valientes) Construye una funcin que reciba dos naturales, m y n, con m < n y devuelva el o mayor nmero primo entre m y n. No se podr usar ud2 fesprimo. u a

Pg. 64 a

Unidad Didctica 3 a Vectores


3.1. General

La unidad 3 introduce un elemento fundamental en Programacin: los vectores o arraysde datos. o No hay apenas rdenes nuevas en esta unidad y nos concentramos en desarrollar algoritmos ms o a interesantes, los cuales permiten resolver problemas ms complejos y similares a los reales. Los a vectores estn muy relacionados con los bucles que hemos estudiado en la unidad 2 pues son los a bucles los que nos permiten movernos con generalidad por los vectores.

3.2.

Vectores como argumentos de funciones

Este ejemplo es la primera funcin en la que se usa un vector. Adems, ese vector es en si mismo el o a argumento de entrada de la funcin, lo cual no requiere ninguna sintaxis espec o ca. Como sabemos, desde que hicimos el tutorial (apndice 0), podemos preguntar a un vector o a una e matriz su tamao. Para ello disponemos de la orden length. Esto no es en general as si usamos otro n lenguaje de programacin, ya que en principio, adems del vector, habr que pasar como argumento o a a un nmero natural correspondiente a su dimensin. En MATLAB no es necesario pero la primera u o l nea de la funcin es una asignacin de ese valor a una nueva variable n que nos va a permitir montar o o 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 dimensin para tener la media. o
% 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 dimensin o nmero de o u % 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 Pg. 65 a

Lenguajes de Programacin: Gu ECTS o a


Crea una carpeta llamada ud3 en Z : Copia en ella todos los ejemplos cuyo nombre empiece por ud3 , los cuales encontrars en la carpeta: a Asignaturas\LP \Ejemplos Aade la carpeta Z :\ud3 al path o Current Directory de MATLAB. n

Ejercicio 3.2
Prueba la funcin ud3 fmedia.m para diferentes vectores. o

Ejercicio 3.3
Crea una funcin que reciba un vector y devuelva la media de los cuadrados de los elementos del o vector. Coincidir el resultado con la media al cuadrado? a

Ejercicio 3.4
Crea una funcin que reciba un vector y devuelva la media geomtrica de los elementos del vector. o e n a a ...a . La media geomtrica de {a1 , . . . , an } es e 1 2 n

Ejercicio 3.5
Crea una funcin que reciba dos vectores y devuelva el producto escalar de los mismos. Esta funcin o o tambin se puede hacer sin utilizar bucles, como vimos en el tutorial. Se supondr que los dos vectores e a tienen la misma dimensin. o

3.3.

Funciones que llaman a funciones con argumentos vectores

Del mismo modo que en el ejemplo 1.6 estudiamos una funcin que llamaba a otra funcin, o o en este ejemplo vemos una funcin que recibe un vector y llama a otra funcin que recibe un o o 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 funcin que recibe un vector (ud3_fmedia) o 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 funcin no haremos ningn ejercicio espec o u co, simplemente probar la funcin para o 1 diferentes vectores, comprobando el signicado del concepto varianza . Tendremos ocasin de o hacer abundantes ejemplos ms adelante. a Ejercicio 3.6
Prueba la funcin ud3 fvarianza.m para diferentes vectores. o
Es una medida de como de semejantes son los elementos de un vector. Si son similares, la varianza es pequea y si son muy diferentes, la varianza ser grande. n a
1

Pg. 66 a

UNIDAD DIDACTICA 3. VECTORES

3.4.

Clculo de extremos a

Los algoritmos de bsqueda de extremos son fundamentales en este curso y el ms bsico de u a a todos ellos es el de encontrar el mximo de una serie o vector. Para ello, se supone que el a mximo es el primero inicializando con ese valor una variable maxi que ser la que almacene a a el mximo al nal. A continuacin se van barriendo los dems elementos y en el momento en a o a 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 funcin que realiza esta misma tarea, max, pero ello no es obice para estudiar el algorito 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 funcin ud3 fmaximo.m para diferentes vectores. o

Ejercicio 3.8
Crea una funcin que reciba un vector y devuelva el m o nimo de los elementos del vector.

Ejercicio 3.9
Crea una funcin que reciba un vector de nmeros naturales y devuelva el nmero de elementos del o u u vector que sean mltiplos de tres. u

Ejercicio 3.10
Crea una funcin que reciba un vector v, cambie de signo todos los elementos del vector, calcule el o mximo del nuevo vector y lo devuelva cambiado de signo. Qu valor has obtenido? a e

Ejercicio 3.11
Crea una funcin que reciba un vector y calcule la media de los elementos positivos del vector. En o lugar de sumar todos los elementos, tendrs que comprobar si un elemento es positivo o no antes de a sumarlo.

Ejercicio 3.12
Crea una funcin que reciba un vector de nmeros naturales y utilizando la funcin ud2 f esprimo, o u o devuelva el nmero de elementos del vector que son primos. u

Pg. 67 a

Lenguajes de Programacin: Gu ECTS o a Ejercicio 3.13


Idem sin if.

Ejercicio 3.14
Crea una funcin que reciba un vector y que devuelva 1 si todos los elementos del vector son positivos o y 0 en caso contrario.

Ejercicio 3.15
Crea una funcin que reciba un vector de nmeros naturales y utilizando la funcin ud2 f esprimo o u o y sin utilizar if devuelva 1 si todos los elementos del vector son primos y 0 en caso contrario.

Ejercicio 3.16
Codica una funcin que reciba un vector de naturales v y devuelva el primer nmero primo que o u aparezca en el vector. Caso de que no haya ninguno, devolver 0. Por ejemplo, si v = (9, 14, 11, 7, 12), a la funcin devolver 11. o a

Ejercicio 3.17
Crea una funcin que reciba un vector v y devuelva el m o nimo 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 m nima es 3 3.25 = 0.25.

Ejercicio 3.18
Crea una funcin que reciba un vector v y devuelva el valor del elemento de v que est ms cerca o e a de la media. Por ejemplo, si v = [3 2 1 7], la media vale 3.25 y el elemento ms proximo a la media a es 3.

Ejercicio 3.19
Crea una funcin que reciba un vector v y devuelva el o ndice del elemento de v que est ms cerca de e a la media. Por ejemplo, si v = [3 2 1 7], la media vale 3.25 y el elemento ms proximo a la media es el a 1. Cambiad de orden los elementos en este ejemplo para probar el cdigo y comprobar que funciona o en todas las circunstancias.

Ejercicio 3.20
Crea una funcin que reciba un vector v y devuelva el m o nimo 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 m nima es 1-3.25=-2.25.

Ejercicio 3.21
Crea una funcin que reciba un vector v y devuelva el o ndice del elemento en el que se d el m e nimo 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 m nima es 1-3.25=-2.25. El ndice del elemento cuyo valor es 1 es 3, pues ocupa la tercera posicin en el vector. o

Ejercicio 3.22
Qu valor devuelve la siguiente funcin (v es un vector de nmeros naturales)? e o u

Pg. 68 a

UNIDAD DIDACTICA 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 funcin que reciba un vector de naturales y devuelva 1 si todos los elementos o son primos y 0 en caso contrario, sin usar if.

3.5.

Clculo de posicin de extremos a o

A veces no interesa tanto el valor del mximo como su posicin en el vector. En esta funcin a o o se juega con esa idea, de tal modo que se guarda posicin cuando se supera la posicin de o o referencia inicial (la primera). Es un algoritmo muy interesante y esencialmente ms complicado a y dif de entender que el anterior. cil
% 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 posicin de la mayor de las componentes o

Los ejercicios correspondientes a este ejemplo son tambin bastante interesantes. e Ejercicio 3.24
Prueba la funcin ud3 max.m para diferentes vectores. o

Ejercicio 3.25
Crea una funcin que reciba un vector de naturales y devuelva el o ndice del primer nmero primo que u aparezca en el vector. En caso de que no haya ninguno, devolver 0. a

Ejercicio 3.26
Crea una funcin que reciba un vector de naturales y devuelva el o ndice del mayor primo que aparezca en el vector. En caso de que no haya ninguno, devolver 0. a

Ejercicio 3.27 Pg. 69 a

Lenguajes de Programacin: Gu ECTS o a


La siguiente funcin recibe un vector y deber devolver la mayor diferencia entre dos trminos o a e 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 Prubala con los vectores (1, 1, 1), (1, 2, 1), (1, 2, 4) y (4, 2, 1) (deber devolver 0, 1, 2 y -1. e a

3.6.

Evaluacin de un polinomio o

El ejemplo correspondiente a esta seccin ejemplica el caso de una funcin que recibe escalares o o 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 identicacin de un polinomio de grado n con un vector de n + 1 componentes y o por tanto, dimensin n + 1. As si tenemos el siguiente polinomio de grado n la representacin o , o habitual que de l se hace ser e a: a0 + a1 x + a2 x2 + + an1 xn1 + an xn De este modo, este polinomio se identicar de modo inmediato con el vector a. a a = (a0 , a1 , , an1 , an ) Sin embargo, no podemos trasladar esto directamente a MATLAB pues la indexacin de los o vectores siempre empieza por la componente 1. Ello invita a repensar polinomio y vector del siguiente modo: a1 + a2 x + a3 x2 + + an xn1 + an+1 xn Por tanto, el polinomio 2.53.7x2 +0.5x3 se corresponder con el vector a = (2.5, 0.0, 3.7, 0.5). a Como se puede observar, grado 3 pero dimensin 4. La forma ms directa de construir una o a funcin que evaluase este polinomio a en un punto x ser o a 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 ai xi1 , hasta que i sea n + 1. Para invocar esta funcin desde la l o nea de comandos, evaluando el ejemplo anterior en x = 2 tendremos: Pg. 70 a a = (a1 , a2 , , an , an+1 )

UNIDAD DIDACTICA 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 Horner2 En el algoritmo de Horner, el polinomio escribe del

Figura 3.1: Zoetropo de Horner

siguiente modo: Es como si el polinomio 2.53.7x2 +0.5x3 lo escribisemos como 2.5+x(0.0+x(3.7+x0.5)). e Ello conduce a un algoritmo diferente en el que se empieza por el trmino de grado ms alto y e a se va hacia abajo despus. Con ello, en este ejemplo aprendemos a recorrer el vector utilizando e un orden distinto al habitual y aprendemos tambin a desconectar la variable n de la dimensin e o del vector, algo que en general os cuesta mucho.
% % % % % % ud3_fevalua.m ud3_fevalua(a,x), recibe un vector a de dimensin n+1 y un escalar x y o 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

a1 + x(a2 + x(a3 + x(a4 + + x(an + xan+1 ))))

function y=ud3_fevalua(a,x) n=length(a)-1;


William George Horner (Bristol, 1786, Bath, 1837), matemtico ingls conocido por haber desarrollado a e mtodos para resolver ecuaciones polinmicas y sobre todo por ser el inventor del zoetropo(g. 3.1), artilugio e o que creaba la ilusin ptica de movimiento, y a partir del cual se evolucion hasta la invencin del cine. o o o o
2

Pg. 71 a

Lenguajes de Programacin: Gu ECTS o a


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 funcin ud3 fevalua.m. o

Ejercicio 3.29
Aproximacin del seno. Para obtener un valor aproximado del seno de un ngulo evaluamos el o a polinomio de Taylor: 3 5 7 + 3! 5! 7! Usando la funcin ud3 f evalua.m, crea una funcin que reciba un valor de y devuelva el valor del o o seno de , calculado a partir de la frmula anterior. o

Ejercicio 3.30
La siguiente funcin recibe un vector v y una posicin i y devuelve la diferencia entre el primer y el o o elemento i-simo. Es correcta? Podr hacerla ms eciente? e as a 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 deber usar un bucle ni un condicional. a

Ejercicio 3.31
Crea una funcin que reciba dos vectores, el primero de los cuales sern los coecientes de un o a polinomio p(x). La funcin devolver 1 si en el segundo vector aparece una ra de p(x) y 0 en caso o a z contrario. Utiliza ud3 f evalua.m para comprobar si un nmero es ra del polinomio o no. u z

Ejercicio 3.32
Crea una funcin que reciba un vector t y un nmero x y evalu en x el polinomio o u e (x t1 )(x t2 ) . . . (x tn ), donde n es la dimensin del vector t. Es decir, evala en x el vector de coeciente principal 1 cuyas o u ra son los elementos de t. ces

Ejercicio 3.33 Pg. 72 a

UNIDAD DIDACTICA 3. VECTORES

Crea una funcin que reciba un vector de naturales v y un natural d y devuelva 1 si todos los o elementos de v son divisibles por d y 0 en caso contrario.

Ejercicio 3.34
Crea una funcin que reciba un nmero y un vector y devuelva el nmero de veces que aparece ese o u u nmero en el vector. u

Ejercicio 3.35
(Para valientes) Usando la funcin creada en el apartado 3.34, construir una funcin que reciba un o o vector y devuelva el elemento que se repite ms veces. Por ejemplo, en [0 1 2 1] devolver 1. a a

Ejercicio 3.36
(Para valientes) Crea una funcin que reciba y un nmero n y devuelva el valor del seno en o u aproximndolo por el polinomio de Taylor en 0 de grado n. a

3.7.

Funcin que devuelve un vector o

A menudo, la salida de nuestras funciones pueden ser tambin vectores. En MATLAB, la e sintaxis no cambia con respecto a la de una variable escalar convencional. En este ejemplo, adems ese vector se construye a partir de varios escalares, pues de lo que se trata es de a construir un vector con los trminos de la sucesin de Fibonacci, la cual ya estudiamos en el e o 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 funcin ud3 bo.m. o

Ejercicio 3.38
Construye una funcin que reciba un nmero natural n y devuelva un vector v tal que sus componentes o u sean 1 i vi = 1 + , 1in i Llama desde MATLAB a la funcin. A qu tienden las componentes del vector resultado?. o e

Ejercicio 3.39 Pg. 73 a

Lenguajes de Programacin: Gu ECTS o a


Construye una funcin que reciba un nmero natural n y devuelva un vector formado por los n o u primeros trminos de la sucesin e o x1 = 2, 456, xi+1 = 2xi , i N Comprobar que converge a 2.

Ejercicio 3.40
Crea una funcin que reciba dos valores, xmin, xmax, y el nmero de tramos n. La funcin calcuo u o lar el valor a xmax xmin h= , n y devolver un vector x de n+1 componentes que contenga los puntos entre xmin y xmax separados a cada dos una distancia h. As pues, x1 = xmin, x2 = xmin + h, ..., xn+1 = xmin + nh = xmax.

Ejercicio 3.41
(Para valientes) Construye una funcin que reciba un nmero natural y devuelva el vector formado o u por sus cifras. As si introducimos 1423, devolver [1 4 2 3]. , a

Ejercicio 3.42
(Para los ms valientes) Criba de Eratstenes. La manera ms rpida de obtener todos los nmeros a o a a u primos menores que un nmero dado n es mediante la Criba de Eratstenes. El procedimiento es el u o siguiente: se toman todos los nmeros menores que n y se van eliminando de la lista los mltiplos u u de dos, los mltiplos de tres y as sucesivamente hasta llegar a los mltiplos de la ra cuadrada de u u z n.

Ejercicio 3.43
Crea una funcin que reciba un nmero n y devuelva todos los nmeros primos menores que n o u u mediante la Criba de Eratstenes. Como lista de nmeros, usaremos un vector v de dimensin 100 o u o que tenga en la posicin i el nmero i y para marcar el nmero como eliminado, pondremos un 0 en o u u dicha posicin. o Para mejorarlo, elimina los mltiplos de los nmeros primos entre 2 y n en lugar de eliminar u u o u los mltiplos de todos los nmeros entre 2 y n. Ntese que segn vamos aplicando la criba de u u Eratstenes vamos obteniendo los nmeros primos, as que podemos utilizar la informacin guardada o u o en el vector para este caso.

Ejercicio 3.44
Determina qu valor devolver la siguiente funcin si v = (1, 3, 2, 5, 4). e a o 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

Pg. 74 a

UNIDAD DIDACTICA 3. VECTORES

3.8.

Funciones que reciben y devuelven vectores

Cuando queramos por ejemplo una funcin que nos devuelva una curva evaluada en una serie o de valores estructurados a su vez como un vector, deberemos tener la posibilidad de recibir un vector en la funcin y devolver otro vector. La sintaxis no ofrece ningn problema, pero o u conceptualmente hay que saber moverse a travs del vector de partida y generar otro. Vamos e a plantear primero un ejemplo sencillo en el que se trata simplemente de codicar una funcin o que reciba un vector de abscisas x y devuelva un vector de ordenadas y tal que para cada abscisa xi , la ordenada correspondiente yi sea el mximo de las funciones seno y coseno a evaluadas en xi .
% 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 funcin que recibe un vector y devuelve otro vector o % 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 funcin podemos ejecutar los siguientes comandos desde la ventana de coo mandos de MATLAB.
>>x=0:0.01:8*pi; >>y=ud3_fmaxsincos(x); >>plot(x,y);

Otra posibilidad sencilla pero tambin interesante es el de tener una funcin que reciba un e o vector y uno o varios escalares y devuelva otro vector. Presentamos este ejemplo en el que se trata simplemente de codicar una funcin que reciba un vector x y un escalar a. La funcin o o devolver un vector y, tal que la componente yi de ese vector ser 0 si la correspondiente xi a a 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

Pg. 75 a

Lenguajes de Programacin: Gu ECTS o a Presentamos un ejemplo ms que tiene el inters de que llamamos a una funcin para ir a e o calculando el valor de cada componente del vector resultado. Se trata de codicar una funcin o que reciba un vector de naturales u y devolver un vector vprimos tal que cada componente de vprimos vale uno o cero en funcin de que la correspondiente componente de u sea o no o 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 vectorizacin de operaciones explicada en el tutorial o para evitar uno de los bucles en la funcin, pero en general eso no ser posible. Los ejercicios o a 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 funcin que reciba un vector x y devuelva un vector y tal que yi = x2 log(x2 + 1) (se o i i podr hacer sin while, vectorizando las operaciones). a

Ejercicio 3.47
a o Crea una funcin similar a la funcin ud3 fmaxsincos.m que calcule el mximo entre la funcin del o o ejercicio 3.46 y el seno. Dibuja la curva resultado de modo anlogo a como se dibuj la de dicha a o funcin. o

Ejercicio 3.48
Crea una funcin que reciba un vector x y devuelva un vector y tal que para cada o ndice i, yi sea la aproximacin de sin(xi ) dada por: o yi = xi x3 x5 x7 i + i i. 3! 5! 7!

Se llamar a la funcin del ejercicio 3.29 del modo que convenga. Dibuja con MATLAB el seno y su a o aproximacin por la funcin anterior en [/2, /2], con al menos 1000 puntos. o o

Ejercicio 3.49
Construye una funcin que reciba un vector de naturales, (m1 , m2 , . . . , mn ) y devuelva el vector o de los factoriales, (m1 !, m2 !, . . . , mn !). Representa en una grca la funcin factorial entre 1 y 10 a o y la funcin exponencial entre 1 y 10. o Para mejorar la grca, cambiamos la escala a logar a tmica, es decir, aplicamos el logaritmo a cada una de las funciones. Cul de las dos funciones crece ms rpido? a a a

Ejercicio 3.50 Pg. 76 a

UNIDAD DIDACTICA 3. VECTORES

Crea una funcin que reciba un vector v y devuelva un vector con los elementos del vector v pero o en orden inverso al original.

Ejercicio 3.51
Crea una funcin que reciba un vector x y dos valores a y b, con a < b, y devuelva un vector y que o es el original truncado entre a y b.

Ejercicio 3.52
Crea una funcin que reciba un vector y devuelva los datos escalados entre cero y uno. Para ello o determinaremos el valor m nimo del vector. Restamos ese valor al vector para que los datos comiencen en cero. Calculamos el mximo del nuevo vector y dividimos cada elemento del vector por dicho a mximo. Al nal tenemos que obtener un vector de nmeros entre cero y uno, de modo que el menor a u 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 funcin anterior para que reciba un vector y dos valores a y b y devuelva o el vector escalado entre a y b.

3.9.

Construccin de vectores o

A menudo surgen problemas en los que a partir de un vector es necesario construir un nuevo vector que no tiene la misma dimensin que el original, situacin esencialmente ms sencilla o o a que ya hemos contemplado en la seccin 3.8. Adems, al construir este nuevo vector a partir o a del original, a menudo no sabemos el tamao o dimensin del vector resultante. La gestin n o o de la memoria RAM en estos casos requerir un cierto cuidado en muchos lenguajes de a programacin pero MATLAB lo maneja con mucha simplicidad. As a medida que vamos o , deniendo nuevas posiciones del vector, ese vector crece en tamao y la memoria RAM que n se necesita para l es gestionada de modo automtico por MATLAB. e a Para ilustrar esta idea planteamos un ejemplo muy sencillo pero tambin muy bonito, y que e adems sugiere innidad de ejercicios muy interesantes, los cuales aparecern a lo largo del a a resto del curso. Se trata de una funcin que recibe un vector y devuelve otro vector que contiene o unicamente las componentes positivas del vector original, colocadas en el mismo orden en el que estn en ste. a e Para ir construyendo este segundo vector, de tal modo que cada componente vaya en la posicin o correcta, necesitamos un nuevo contador slo de componentes positivas. A medida que ese o contador se va incrementando, vamos colocando en cada posicin el elemento correspondiente. o El cdigo completo de este ejemplo es el siguiente: o
% 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 dimensin distinta o % 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

Pg. 77 a

Lenguajes de Programacin: Gu ECTS o a Los ejercicios correspondientes a este ejemplo espec camente son los siguientes: Ejercicio 3.54
Prueba ud3 f positivas.m.

Ejercicio 3.55
Crea una funcin que reciba un vector u de nmeros naturales, un natural m y devuelva un vector o u 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 ser v = (10, 4, 5) a

Ejercicio 3.56
Crea una funcin que reciba un vector y devuelva un vector con los nmeros primos que contiene. o u

Ejercicio 3.57
Crea una funcin que reciba un nmero n y devuelva un vector con los nmeros primos que sean o u u 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 nmeros enteros y queremos saber cuantos elementos u 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 funcin ud3 guales. o

Ejercicio 3.59
Modica la funcin ud3 guales para que funcione con vectores de nmeros reales. o u

Pg. 78 a

UNIDAD DIDACTICA 3. VECTORES

Ejercicio 3.60
Construye una funcin que reciba un vector v de naturales y devuelva 1 si tiene dos elementos iguales o y 0 en caso contrario.

Ejercicio 3.61
Construye una funcin que reciba un vector v de naturales y devuelva o ninguna funcin y por tanto habr que usar bucles anidados. o a vi !. No se podr llamar a a

Ejercicio 3.62
(Para valientes) Crea una funcin que reciba un vector de nmeros naturales y sin utilizar la funcin o u o u ud2 fesprimo, devuelva el nmero de elementos del vector que son primos.

Ejercicio 3.63
(Para valientes) Crea una funcin que reciba un vector de nmeros naturales y sin utilizar la funcin o u o ud2 fesprimo, devuelva el primer elemento de del vector que sea primo.

Ejercicio 3.64
(Para valientes) Crea una funcin que reciba un vector de nmeros naturales y sin utilizar la funcin o u o a ud2 fesprimo, calcule y devuelva la media de los elementos primos para lo cual llamar a su vez a la funcin ud3 fmedia. o

Ejercicio 3.65
(Para valientes) Crea una funcin que reciba un vector de nmeros enteros y devuelva 1 si la suma o u de dos cualesquiera de sus elementos es igual a un tercero y cero en caso contrario. Por ejemplo, para v = [2, 7, 5] devolver 1 y para [1, 2, 5] devolver 0. a a

Ejercicio 3.66
(Para valientes) Construye una funcin que reciba un vector v de naturales y devuelva el nmero de o u veces que se repita el que ms veces se repita. a

Ejercicio 3.67
(Para valientes) Construye una funcin que reciba un vector v de naturales y devuelva el mayor de o los repetidos, sin llamar a ninguna funcin. o

Ejercicio 3.68
(Para valientes) Construye una funcin que reciba un vector v de naturales y devuelva el mayor de o los repetidos, llamando a ud3 fmaximo

Ejercicio 3.69
(Para valientes) Crea una funcin que reciba un vector x, un entero n y devuelva un vector y tal o que para cada ndice i, yi sea la aproximacin de sin(xi ) dada por un polinomio de Taylor en el 0 de o grado n.Se usar la funcin 3.36. Por ejemplo, si introducimos el vector x = (1.9, 2.5, 2.8) y n = 7, a o el vector devuelto ser la el resultado de evaluar el polinomio a x3 x5 x7 + . 3! 5! 7! en los puntos (1.9, 2.5, 2.8), o sea devolver el vector y = (0.9454, 0.5885, 0.3078). El seno toma a 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. x

Ejercicio 3.70
(Para valientes) Idem pero la evaluacin del polinomio en cada valor del vector x se realizar llamando o a a la funcin ud3 fevalua. o

Ejercicio 3.71
(Para valientes) Idem sin llamar a ninguna funcin. o

Pg. 79 a

Lenguajes de Programacin: Gu ECTS o a

3.11.

Funciones con salidas mltiples u

En esta seccin se presentan funciones que tienen ms de un argumento de salida. Es un tema o a que no plantea dicultad a los estudiantes y que permite hacer funciones ms interesantes. En a mltiples ocasiones es necesario obtener varios resultados en una misma funcin, para lo cual es u o 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 ms a elemental que se nos ha ocurrido es el de resolver una ecuacin de segundo grado, la cual o siempre tendr 2 soluciones, sean reales, complejas o una ra doble. MATLAB es capaz de a z trabajar directamente con complejos pero es un tema al que apenas hemos prestado atencin o y que escapa a los contenidos del curso. Por tanto, propondremos ejemplos de ecuaciones que tengan ra reales. ces
% 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 funcin desde la l o nea 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 ra 1 y 2 de la ecuacin x2 3x + 2 = 0. ces o Ejercicio 3.72
Copia ud3 f e2grado.m a tu directorio y prubala. e

Ejercicio 3.73
Crea una funcin que reciba los coecientes de una ecuacin de segundo grado y devuelva la suma o o y el producto de las soluciones.

Ejercicio 3.74
Crea una funcin que reciba los coecientes de la ecuacin ax4 + bx2 + c = 0, que resuelva utilizando o o y = x2 llamando para ello a ud3 f e2grado.m, que deshaga el cambio de variable mediante x = y y que devuelva las cuatro soluciones de la ecuacin original. o

Ejercicio 3.75
Modica la funcin ud3 f e2grado.m para que si las ra son nmeros imaginarios (el discriminante o ces u b2 4ac es negativo) devuelva r1 = 0, r2 = 0 y otra variable error = 1. Si no son nmeros u imaginarios devolver las dos ra en r1 y r2 y error = 0. a ces

Ejercicio 3.76 Pg. 80 a

UNIDAD DIDACTICA 3. VECTORES

Crea una funcin que reciba un vector y devuelva el mximo y el m o a nimo de sus elementos, sin usar las funciones min y max.

Ejercicio 3.77
Crea una funcin que reciba un vector y devuelva la posicin del mximo y del m o o a nimo de sus elementos.

Ejercicio 3.78
Crea una funcin que reciba un vector y devuelva el mximo, el m o a nimo y sus posiciones.

Ejercicio 3.79
Crea una funcin que reciba un vector u y devuelva dos vectores up y un con las componentes o positivas y negativas del vector u respectivamente, colocadas en el mismo orden.

Ejercicio 3.80
Crea una funcin que reciba un vector u de nmeros naturales y devuelva un vector con los nmeros o u u primos que contiene y otro con los no primos.

Ejercicio 3.81
Crea una funcin que reciba un nmero n y devuelva un vector con los nmeros primos que sean o u u divisores de n.

Ejercicio 3.82
Crea una funcin que reciba un vector v y devuelva un vector w y un nmero error de modo que: o u 1. Si todos los elementos de v son estrictamente positivos, devolver w(i) = Ln(v(i)), 1 i n a y error = 0. 2. Si algn elemento es menor o igual que cero, devolver w = v y error = 1. u a

Ejercicio 3.83
Crea una funcin que reciba los tres lados de un tringulo y devuelva en una variable lado, 1 si o a es equiltero, 2 si es issceles y 3 si es escaleno y en una variable angulo, 3 si es obtuso, 2 si es a o rectngulo y 1 si es agudo. (Para valientes) La funcin devolver 0 en las dos variables si los valores a o a introducidos no forman un tringulo. a

Pg. 81 a

Lenguajes de Programacin: Gu ECTS o a

Pg. 82 a

Parte II Gu ECTS para estudiantes a

Pg. 83 a

Cap tulo 1 Introduccin o


Uno de los objetivos de este libro es ser un soporte de la introduccin de la metodolog o a basada en los crditos europeos ECTS1 en la asignatura, aprovechando esta oportunidad para e transformar el modo en el que enseamos Programacin. As se pasa de un paradigma con una n o , evaluacin que obtiene informacin unicamente de un examen nal, a una evaluacin basada o o o completamente en los procesos, incorporada a los mismos y mucho ms rica. En esta parte a del libro se pretende documentar con todo detalle esta metodolog de evaluacin, para que a o 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, proponindole mecanismos de enganche a e 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 sensacin de o 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 qu medida creemos que dichas actividades contribuyen e a la consecucin de los objetivos, e indicando tambin el tiempo que estimamos es necesario o e para realizar dichas actividades. Tambin destacamos los recursos que creemos son necesarios para realizar dichas actividades, e para nalmente reexionar sobre el tipo de evaluacin que creemos adecuado para un curso o de este tipo, discutiendo sus ventajas e inconvenientes, y razonando sobre el esfuerzo que es necesario para realizarla. Esperamos que esta gu resulte util y que cumpla los objetivos que antes citamos y que nos a 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.

Los crditos LRU, los que se asocian a cada asignatura al hacer la matr e cula, se establecen unicamente en funcin del nmero de sesiones presenciales; por cada 10 horas de clase, un crdito. Los crditos ECTS o u e e contabilizan no slo las horas de clase sino que intentan denir el peso de la asignatura teniendo en cuenta o el esfuerzo en tiempo que le cuesta aprobarla a un alumno medio. Este esfuerzo signica no solo asistir a las clases sino tambin un trabajo bien individual bien con los compaeros realizado fuera de las horas de clase. e n

Pg. 85 a

Lenguajes de Programacin: Gu ECTS o a

Pg. 86 a

Cap tulo 2 Datos generales


2.1.
2.1.1.
Primero

Temporalidad y carcter a
Ciclo

2.1.2.
Primero

Curso

2.1.3.
Primero

Cuatrimestre

2.1.4.

Carcter a

Obligatoria

2.2.

Crditos LRU e

4.5 siendo 1.5 tericos y 3.0 prcticos o a

2.3.

Departamento

Departamento de Enseanzas Bsicas de la Ingenier Naval n a a

2.4.

Profesores

Antonio Souto Iglesias, antonio.souto@upm.es Leo Gonzlez Gutirrez, leo.gonzalez@upm.es a e Alicia Cantn Pire, alicia.canton@upm.es o Pg. 87 a

Lenguajes de Programacin: Gu ECTS o a

2.5.

Crditos ECTS e
Horas presenciales Teor a Prcticas a Horas no presenciales Prcticas a Examen Total Horas/semana Total horas 1 15 2 30 Total 45 Total horas 41 4 Total 45 90

Pg. 88 a

Cap tulo 3 Objetivos


3.1. General

Para contextualizar la denicin de objetivos, algunas de las titulaciones disponen de su libro o blanco correspondiente, en el cual se especican los perles profesionales a los que se orienta la titulacin. En el caso de la titulacin INO esto no ha sido as hasta bien entrado 2005, o o momento en que aparecin un libro blanco orientado a las nuevas titulaciones post-Bolonia1 . o Aunque en el estudio de las competencias transversales, no se presta una atencin particular en o ese libro a la Informtica, sta es, junto con los idiomas modernos, sealada como la materia a e n bsica ms importante, para lo cual se recurri a un signicativo nmero de encuestas entre a a o u profesionales en activo. De hecho en el plan de estudios genrico que se elabora en ese libro e blanco, se da una importancia equivalente a la formacin obligatoria en Informtica a la que o a corresponde a este curso de Lenguajes de Programacin. o Hablaremos as primero de unos objetivos generales de la asignatura, a travs de una catego e rizacin de los mismos en conocimientos, capacidades y actitudes. A partir de estos objetivos o generales disearemos una serie de actividades las cuales agruparemos en una secuencia de n unidades didcticas, que cubrirn unos objetivos espec a a cos, y precisarn de unos determinados a recursos.

3.2.

Objetivos generales: descripcin o

Como hemos comentado, agrupamos los objetivos generales en 3 categor as: 1. Conocimientos. Cubren los aspectos ms tericos de la formacin. a o o 2. Capacidades. Referidos a aplicaciones, cuestiones prcticas, habilidades.... muy en l a nea 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

Pg. 89 a

Lenguajes de Programacin: Gu ECTS o a CoA. Adquirir una formacin elemental en Informtica conociendo el ordenador como una o a herramienta de trabajo y conocer de modo bsico su estructura y funcionamiento. a CoB. Conocer los principales tipos de datos y estructuras de control de la programacin o declarativa y aprender su sintaxis en un lenguaje de programacin concreto. Hemos o elegido el lenguaje script de MATLAB porque es una herramienta estndar en Ingea nier y porque, al tener una sintaxis sencilla, permite profundizar en los elementos a de programacin. o Capacidades: Realizar un programa de ordenador es un proceso que consta de 4 fases: especicacin, o diseo, codicacin, validacin/vericacin. La primera, la especicacin, consiste en n o o o o denir las caracter sticas 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 gestin a resolver, y no proceder su estudio en un o curso de introduccin a la Prgramacin. Las capacidades que queremos desarrollar son o o las necesarias para las otras tres etapas: CpA. Codicacin. El alumno debe ser capaz de traducir algoritmos sencillos a cdigo o o MATLAB. Este es un requisito normal en el sentido de que es un objetivo que necesariamente deber alcanzarse para superar la asignatura. Sern en general a a cdigos no muy complejos, de una, dos o tres acciones a lo sumo. o CpB. Diseo. El alumno debe ser capaz de analizar un problema sencillo y elaborar un n 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. Validacin. El alumno debe ser capaz de encontrar sus errores, entenderlos y coro regirlos. Este es un requisito esperado: no se evala directamente, pero est imu a pl cito en la evaluacin de los objetivos CpA y CpB. o Actitudes: AcA. Conseguir una motivacin en el alumno que le impulse a profundizar en la Ino formtica como herramienta necesaria para su futuro acadmico y profesional. a e AcB. Trabajo en equipo. Hoy en d casi ningn proyecto involucra a un unico ingeniero. a u 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 superacin y la perseverancia son o actitudes necesarias para un buen ingeniero. AcD. Mejora continua. El aprendizaje, sobre todo el que perdura, no es labor de un d a ni de una semana, sino que requiere constancia y esfuerzo. AcE. Autocr tica. El alumno debe ser capaz de reexionar sobre sus capacidades, esfuerzo y proceso de aprendizaje para determinar en qu punto est y qu acciones debe e a e tomar en el futuro. Pg. 90 a

CAP ITULO 3. OBJETIVOS

3.3.

Prerrequisitos

LP es una asignatura del primer cuatrimestre del primer ao, y por tanto los prerrequisitos n se reeren unicamente a que el estudiante debe haber cursado y aprobado los estudios de educacin secundaria. Por tanto, se le supone una formacin bsica en Matemticas. Adems o o a a a se puede suponer que estn cursando simultneamente las asignaturas de Clculo y Algebra I, a a a 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 vigente2 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 Mtodos Numricos3 , y de las asignaturas optativas o de libre conguracin e e o Leguajes de Programacin II y Complementos de Informtica. Adems, los lenguajes de o a a programacin son utiles para muchas otras asignaturas, que pueden incluir trabajos para los o que se necesite MATLAB y algunos elementos de Programacin. o

Plan 2002 de Ingeniero Naval y Ocenico de la Universidad Politcnica de Madrid a e En realidad esto esta impl cito en la estructura del plan de estudios vigente, dado que no es posible matricularse de ninguna asignatura de cuarto ao si no se han aprobado todas las del primer ao n n
3

Pg. 91 a

Lenguajes de Programacin: Gu ECTS o a

Pg. 92 a

Cap tulo 4 Programa y Metodolog a


En esta seccin describiremos todas las actividades que creemos necesarias para conseguir los o objetivos descritos en 3.2. Agruparemos estas actividades en una serie de unidades didcticas a para facilitar su descripcin, organizacin y temporalizacin. o o o

4.1.
4.1.1.

Mtodos docentes e
Parte terica de las sesiones DHOf o

Todas las sesiones DHOf1 se impartirn en el Centro de Clculo (CC). Durante la parte de a a exposicin de teor se introducir cada uno de los temas ayudndose de ejemplos (ver parte o a a a I), utilizando la pizarra electrnica que proporciona la interfaz tablet del porttil. Adems, o a a se comentarn los problemas observados durante la parte ms prctica de la clase y cmo a a a o evitarlos. Asimismo, al principio de cada sesin habr un recordatorio de las sesiones previas o a utilizando el archivo que para cada grupo se guarda en el tablet PC. El objetivo de las clase tericas es exponer los conceptos bsicos y errores frecuentes a todos o a los alumnos a la vez, tratando de evitar repetirlos a cada uno por separado.

4.1.2.

Parte prctica de las sesiones DHOf a

La parte prctica consistir en la realizacin de ejercicios en el CC (ver parte I), con la supera a o visin de uno o varios profesores, dependiendo del nmero de alumnos y de la disponibilidad de o u docentes. Esta parte prctica, de acuerdo con la distribucin de crditos, cubrir dos terceras a o e a partes de la asignatura. Los alumnos se organizarn en parejas para que empleen la tcnica de pair programming de a e la metodolog extreme programming. En cada pareja de programadores/alumnos, uno de a ellos disea el programa y el otro lo codica (escribe el cdigo) siguiendo las instrucciones del n o anterior, mientras trata de encontrar los fallos que pueda tener el diseo. Al terminar cada ejern cicio se intercambian los papeles. El objetivo del pair programming es que el conocimiento est igualmente repartido entre los miembros de la pareja, lo que es muy conveniente durante e el examen individual y en general, al nal del proceso de aprendizaje planteado en LP. Se potenciar el que los alumnos deendan sus propios cdigos proyectando los mismos en a o
1

DHOf por dentro del horario ocial

Pg. 93 a

Lenguajes de Programacin: Gu ECTS o a la pizarra electrnica. Ello es posible porque la carpeta Mis Documentos de cada mquina o a est compartida, y puede ser accedida desde el PC del profesor, proyectando desde ste, el a e ejercicio correspondiente.

4.2.
4.2.1.

Temario y estimacin del tiempo de estudio o


Temario

Unidad 0. Introduccin a MATLAB. o Introduccin al curso. Conceptos bsicos del entorno MATLAB. Operaciones elemeno a tales. Variables. Actividades: Sesiones en el CC (4h). Repaso y estudio I2 FHOf3 (2h). Unidad 1. Funciones. Denicin y uso de las funciones. Variables de entrada y salida. Condicionales. Funciones o 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 G4 ) (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. Denicin de vector. Recorrido de un vector. Seleccin de o o ndices. Funciones con vectores. 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 3

I por individual FHOf por fuera del horario ocial 4 G por en grupo

Pg. 94 a

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

Presentacin del curso. (1h) o 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)

Pg. 95 a

Lenguajes de Programacin: Gu ECTS o a

Pg. 96 a

Cap tulo 5 Recursos


5.1. Gu a

El ms importante de todos los recursos es esta Gu Docente. En ella, adems de denir el a a a contexto del curso de modo preciso se muestran los ejemplos y ejercicios correspondientes al mismo en la parte I. Tambin se disponen de exmenes propuestos en otras convocatorias, el e a tutorial de MATLAB y diversa documentacin importante para el alumno. o

5.2.

Tutor as
http://www.etsin.upm.es/

Para los horarios y ubicacin de las tutor podis consultar la pgina web de la escuela: o as e a

Independientemente de esas horas, y dado que los tres profesores tienen dedicacin completa, o no tendrn inconveniente en resolver dudas a cualquier hora, salvo que tuviesen alguna urgencia a puntual o no estuviesen en sus despachos. Algunas de estas tutor podr ser en algunos casos en el CC, lo cual se anunciar a lo largo as an a del curso en clase, en la pgina web de la asignatura (5.4) o v e-mail. a a

5.3.

Tutor virtuales as

Con la cha que han rellenado los estudiantes al principio de curso se formar una lista de correo a para informarles de asuntos relativos a la asignatura (publicacin de notas, sesiones especiales o de prcticas, ...). Los estudiantes pueden consultar sus dudas mandndolas a las direcciones de a a correo de los profesores, antonio.souto@upm.es, alicia.canton@upm.es, leo.gonzalez@upm.es.

5.4.

Pgina web - Plataforma de B-learning a

La asignatura tiene vida paralela en la plataforma de B-learning del Gabinete de tele-educacin o 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 travs de Politcnica Virtual en la web de la UPM. El curso 2007e e 2008 fue la primera edicin de esta plataforma, la cual sustituye y supera a la pgina web de la o a Pg. 97 a

Lenguajes de Programacin: Gu ECTS o a asignatura. En ella se ir colgando toda la informacin relativa a la asignatura, as como calia o caciones(la publicacin de las mismas ser anunciada por correo electrnico), documentacin, o a o o ejercicios y se utilizar como tabln de anuncios. Se dispone adems de un foro, la participacin a o a o en el cual forma parte del item Participacin de la evaluacin de la asignatura. Para acceder a o o esta plataforma necesitais disponer de una direccin de correo electrnico de la UPM, la cual o o os es facilitada al matricularos.

5.5.

Copias

En copias estar disponible una versin completa encuadernada de esta gu docente. a o a

5.6.

Centro de Clculo a

Los estudiantes pueden y deben usar el CC para estudiar LP, aunque han de respetar las normas(ver apndice B). De vez en cuando, organizaremos sesiones de tutor all (sobre todo e as 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 trmite y ver las normas en el apndice B). a e

5.7.

Bibliograf a

Los siguientes libros, de los cuales damos un pequeo comentario, los podis encontrar en la n e biblioteca de la ETSIN: 1. T tulo: MATLAB. Una introduccin con ejemplos prcticos. o a Autores: Amos Gilat Editorial: Revert e Ao: 2006 n Excelente texto introductorio a MATLAB y a la Programacin con MATLAB. Creemos o que es el que mejor trata la parte de Programacin, aunque el orden de los temas no o 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 espec cos y no estar disponibles en general en los lenguajes de programacin. o 2. T tulo: Aprenda MATLAB 5.3 como si estuviera en primero. Autores: Javier Garc de Jaln, Jos Ignacio Rodr a o e guez, Alfonso Brazlez a Editorial: Escuela Superior de Ingenieros Industriales Ao: 2001 n Gu para aprender MATLAB paso a paso. Est pensada para estudiantes de primero y a a se puede seguir con facilidad. Aunque la parte de Programacin es demasiado escueta, o es interesante tenerla para utilizarla como ayuda cuando utilicemos el MATLAB para otras asignaturas. Se puede comprar en reprograf de la ETSII o descargar de a Pg. 98 a

CAP ITULO 5. RECURSOS

http://mat21.etsii.upm.es/ayudainf/aprendainf/MATLAB53/matlab53.pdf

3. T tulo: MATLAB, edicin de estudiante. Versin 4 gu de usuario. o o a Autores: The Math Works inc. Editorial: Prentice Hall Ao: 1998 n Manual de referencia para la versin de estudiante. Recoge todos los aspectos del proo grama e incluye ejemplos para cada uno. Es muy escueta en la parte de Programacin. o 4. T tulo: MATLAB guide Autores: Desmond J. Higham, Nicolas J. Higham Editorial: Siam Ao: 2000 n Otra gu de referencia de MATLAB. Ms tcnica que las anteriores y un poco ms a a e a extensa en el apartado de Programacin. o 5. T tulo: Programing in MATLAB Autor: Marc E. Herniter Editorial: Thomson learning Ao: 2001 n Gu de programacin con MATLAB. Contiene numerosos ejemplos y ejercicios. Es muy a o tcnica, por lo que es ms recomendable para profundizar en lo aprendido que como e a libro de texto. 6. T tulo: Getting Started with MATLAB Autor: Rudra Pratap Editorial: Oxford University Press Ao: 2002 n Comentario: Otra gu de MATLAB. La parte de Programacin est ms detallada que a o a a en algunas de las otras gu y contiene algunos ejercicios. as 7. T tulo: Algoritmos en C++ Autor: Robert Sedgewick Editorial: Addison-Wesley Iberoamericana Ao: 1995 Comentario: Otra gu de MATLAB. La parte de Programacin est ms n a o a a detallada que en algunas de las otras gu y contiene algunos ejercicios. as

Pg. 99 a

Lenguajes de Programacin: Gu ECTS o a

Pg. 100 a

Cap tulo 6 Evaluacin o


6.1. General

La parte de evaluacin del curso tiene como objetivo detectar si el estudiante ha conseguido o los objetivos que se persiguen con la asignatura, los cuales hemos enumerado en el cap tulo 3 de esta gu En LP tratamos tambin que las propias actividades de evaluacin contribuyan a. e o en s mismas al proceso formativo. Para ello, el alumno podr elegir entre dos modelos de a evaluacin, el tradicional, que se ha venido utilizando hasta ahora, y el modelo ECTS, que se o deber implantar en Europa en cumplimiento de la declaracin de Bolonia y de lo que sta ha a o e implicado en la conguracin del Espacio Europeo de la Educacin Superior. Por otro lado, se o o ha establecido el Premio SENER a la mejor progresin durante el desarrollo de la asignatura o LP con el objeto de motivar a los estudiantes que llegan a la titulacin con unas notas medias o de la educacin secundaria bajas, ofrecindoles la oportunidad de que una buena progresin o e o respecto a la posicin de partida suponga una recompensa econmica, con repercusin pblica o o o u y curricular. Las bases de este premio estn descritas en el apndice D. a e

6.2.

Evaluacin tradicional o

Consistir en un examen nal en el que se tratar de evaluar en qu grado se han alcanzado a a e los objetivos descritos en 3.2. Los objetivos y estructura del examen estn descritos en 6.4. a Dado el carcter eminentemente prctico de la asignatura (3 de los 4.5 crditos de LP son a a e prcticos) y el cambio importante que para un estudiante de primer ao supone su entrada a n en la universidad, creemos que es necesario que sigan el curso de modo regular. En la planicacin que se ha hecho del curso no se ha considerado adecuado establecer sesiones tericas y o o prcticas espec a cas, conviviendo ambos aspectos en casi todas ellas. Debido a ello, el criterio de superacin de las prcticas ser simplemente asistir a dos tercios (3/4.5) de las clases, para o a a lo cual llevaremos un registro de asistencia. En las convocatorias extraordinarias de Junio y Septiembre solo se podr optar a la evaluacin a o tradicional.

6.3.

Evaluacin ECTS o

La calicacin ECTS est desglosada a partir de la evaluacin de las siguientes actividades: o a o Pg. 101 a

Lenguajes de Programacin: Gu ECTS o a 1. Trabajo en equipo: 35 %. En algunas de las sesiones se propondr una prueba-control a a realizar en pareja. Estos controles pretenden evaluar la dinmica del grupo (AcB) y que a el alumno compruebe la evolucin de los conocimientos (AcD). Los controles consistirn o a en la realizacin de unos ejercicios similares a los de las hojas del tema en curso (CoA, o CoB, CpA y CpC). Los controles se debern hacer en pareja, no pudiendo hacerlo en a caso de que falte uno de sus integrantes. Estos exmenes no sern anunciados. Adems, a a a no se permitir el acceso al aula a los estudiantes que lleguen ms de 5 minutos tarde. a a 2. Examen nal consistente en la resolucin de una serie de problemas prcticos: 35 %. Los o a objetivos y estructura del examen estn descritos en 6.4. a 3. Participacin activa en las clases: 15 %. El profesor valorar la participacin (AcA) y la o a o actitud positiva ante los problemas (AcC) a partir de la participacin de los alumnos en o clase: preguntas, salir a la pizarra, comentarios, etc. Se valorar que el alumno sea activo con hasta cinco puntos, es decir, que salga a a explicar sus programas, comente los de los dems, pregunte lo que no quede claro, etc, y a con otros cinco puntos la calidad de esa participacin, es decir, que los programas sean o interesantes y las explicaciones claras, que las preguntas sean interesantes y demuestren saber de lo que se est hablando, etc. a Para que a los profesores les sea ms fcil la evaluacin de la participacin, los alumnos a a o o deber entregar una fotograf con su nombre y DNI en el reverso al comenzar el curso, a a junto con la cha con el resto de sus datos personales y decisin de optar al premio o SENER. Se realizarn y publicarn dos calicaciones, una cuando haya transcurrido la mitad del a a curso con efectos informativos, y la otra cuando haya transcurrido el curso completo. La nota ser la correspondiente a la valoracin nal. a o 4. Otras actividades: 10 %. Las actividades que forman parte de este apartado corresponden a la valoracin de las intervenciones en el foro de la plataforma de B-learning (ver secc. o 5.4), las cuales permitirn valor objetivos relativos a conocimientos (CoB) y los objetivos a actitudinales de actitud positiva y de mejora continua (AcC, AcD). Los comentarios y sugerencias sobre esta propia Gu as como la correccin de erratas de la misma se a o considera parte de este item de evaluacin. o Adems, y ms importante, se propondrn actividades para realizar fuera de clase durante a a a el curso, como por ejemplo que el estudiante proponga ejercicios similares a los del curso, los cuales sern resueltos o al menos intentados por parte del compaero de grupo. a n Con ello se pretenden evaluar los objetivos de capacidades relativos a diseo(CpB), n codicacin(CpA) y validacin(CpC). o o Finalmente, dentro de este item se considerar tambin el llevar al d la hoja de control a e a y contabilizacin de tiempo y esfuerzo (objetivo AcD), la cual adems ayuda al alumno o a a establecer si est realizando el esfuerzo recomendado por los profesores para seguir el a curso (objetivo AcE). 5. Realizacin de la encuesta sobre la asignatura (3 %) y participacin en el debate posterior o o (2 %). Esta encuesta ser realizada una vez publicadas las notas de la asignatura. En el a debate se mostrarn los resultados de la encuesta y se pedir la opinin de los alumnos. a a o Pg. 102 a

CAP ITULO 6. EVALUACION

Estas dos notas se conservarn para las convocatorias de junio y septiembre a los que a hayan suspendido. Se valorar de este modo tambin la la actitud positiva ante los a e problemas (AcC), la capacidad de autocr tica (AcE), as como la de mejora continua (AcD). En caso de que un alumno complete los requisitos que le habilitan para seguir los dos mtodos e de evaluacin (tradicional y ECTS), su nota nal ser la mayor de las dos calicaciones. o a

6.4.
6.4.1.

El examen
Tipo de examen

El examen consistir en la codicacin en el Centro de Clculo de una serie de ejercicios a o a similares a los propuestos de modo continuo durante el curso y similares tambin a los que e forman los exmenes por grupos. Se facilitan ejemplos de enunciados en el apndice A. Estos a e exmenes se realizarn en clase en la ultima parte del curso. a a El cdigo a entregar no debe tener errores y debe realizar las tareas correspondientes al correso pondiente ejercicio. Se nombrarn los cdigos correspondientes a cada ejercicio como f1.m, a o f2.m etc.... Las normas para escribir los cdigos son las habituales con la que se trabaja en el o curso y estn explicadas en la seccin 6.4.3. a o

6.4.2.

Criterios de evaluacin o

El examen individual tendr ejercicios diversos, con los cuales evaluar la consecucin de los a o tipos de objetivos CpA y CpB. As habr ejercicios en los cuales se detallar un algoritmo que el alumno tendr que codicar , a a a en MATLAB. En estos ejercicios no se esperan capacidades innovadoras y su puntuacin o acumulada ser suciente para aprobar el examen. Algunos de estos algoritmos tendrn cierta a a complejidad. Tambin habr ejercicios un poco ms abiertos en los que el propio estudiante tenga que e a a pensar y disear los algoritmos. Finalmente, reconocemos que de manera impl n cita estamos valorando CpC. Por ello, cuando proceda, proporcionaremos al alumno una serie de ejemplos que funcionarn como bater de pruebas del cdigo. a a o

6.4.3.

Normas del examen

Normas para la realizacin de los ejercicios en los exmenes. o a


1. Las funciones se ubicarn en cheros independientes, cuyo nombre coincidir con el de a a la funcin a falta por supuesto de la extensin .m. o o 2. La funcin del ejercicio 1 se llamar f 1, la del ejercicio 2 se llamar f 2, y as sucesivao a a mente. ESTO ES IMPORTANTE!. No se llamarn ni examen1, ni examen f 1, etc... a Los nombres han de ser f 1, f 2, etc... 3. El unico material permitido es un bol grafo. No se permite el uso de ningn dispositivo u de almacenamiento, incluidas memorias USB. Pg. 103 a

Lenguajes de Programacin: Gu ECTS o a 4. Deber estar escrito en MATLAB. No se permitir usar funciones propias de MATLAB a a no estudiadas durante el curso, ni conceptos o estructuras correspondientes a ejemplos y unidades didcticas que todav no se hayan explicado. No se permitir el uso de la a a a vectorizacin de operaciones explicada en el tutorial, ni la multiplicacin directa de matrio o 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 utilizacin de una rutina estudiada en el o curso o incluida en el enunciado, sta no podr ser modicada. Deber ser e a a usada tal y como est escrita en los apuntes o en el enunciado. Si crees que a necesitas modicarla para poderla utilizar es que lo ests haciendo mal. a 6. Las funciones se ubicarn en cheros independientes, cuyo nombre coincidir con el de la a a funcin a falta por supuesto de la extensin .m. La funcin del ejercicio 1 se llamar f 1, o o o a la del ejercicio 2 se llamar f 2, y as sucesivamente. a 7. En las funciones slo se utilizarn aquellos argumentos de entrada y salida que se eso a peciquen en el enunciado. 8. La primera l nea de cada programa o funcin ser un comentario con vuestros apellidos, o a nombres y el nmero de mquina en la que estis. u a a 9. Todos los cheros estarn ubicados en la carpeta C : \examenes. a 10. Se podrn usar todos los ejemplos (no ejercicios) que se han estudiado en el curso hasta a el d del examen, los cuales puedes encontrar en la carpeta correspondiente. a 11. Se podrn crear funciones auxiliares (como una que calcule el factorial por ejemplo), si a crees que te pueden simplicar el trabajo 12. Al terminar el examen, se cerrar la sesin pero NO se apagar el ordenador. a o a

6.4.4.

Publicacin de calicaciones o

La publicacin de calicaciones ser unicamente online mientras estas calicaciones sean proo a visionales. Una vez denitivas, se redactar el acta correspondiente para pasarla a los servicios a de Secretar de la ETSIN. a 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.

Revisin del examen o

En el enunciado de cada examen se anunciar una fecha aproximada de publicacin de las a o notas y un d y hora para la revisin de examen. Los estudiantes que deseen revisar su examen a o debern comunicarlo, por email o por cualquier otro medio a los profesores. En la revisin se a o facilitar a cada estudiante su examen as como una copia de las soluciones. Durante 60 a tendr a los profesores de LP a su disposicin para responder todas las dudas que considere a o pertinentes. Pg. 104 a

CAP ITULO 6. EVALUACION

6.5.

Evaluacin de los objetivos o

La siguiente tabla relaciona los objetivos generales de la asignatura, descritos en la seccin 3.2, o con los diferentes apartados de la evaluacin ECTS descritos en 6.3. Es decir, resume qu se o e calica en cada tem de la evaluacin. o Participacin o CoA CoB CpA CpB CpC AcA AcB AcC AcD AcE Examen x x x x x Otras act. x x x x x Grupos x x x x x x x x x x x x x x Encuesta/debate

x x x x

Pg. 105 a

Lenguajes de Programacin: Gu ECTS o a

Pg. 106 a

Parte III Apndices e

Pg. 107 a

Apndice A e Ejemplos de Exmenes a

Pg. 109 a

Examen nal de Lenguajes de Programacin. Febrero 2008 o


Escuela Tcnica Superior de Ingenieros Navales e Fecha aproximada de publicacin de las notas: 29/02/2008 o D y hora de la revisin: 03/03/2008, 12h30m a o Tiempo para esta parte : 85 minutos Puntuacin: 10 puntos. o

Normas para la realizacin de los ejercicios en los exmenes. o a


1. Las funciones se ubicarn en cheros independientes, cuyo nombre coincidir con a a el de la funcin a falta por supuesto de la extensin .m. o o 2. La funcin del ejercicio 1 se llamar f 1, la del ejercicio 2 se llamar f 2, y as sucesio a a vamente. ESTO ES IMPORTANTE!. No se llamarn ni examen1, ni examen f 1, a etc... Los nombres han de ser f 1, f 2, etc... 3. El unico material permitido es un bol grafo. No se permite el uso de ningn disu positivo de almacenamiento, incluidas memorias USB. 4. Deber estar escrito en MATLAB. No se permitir usar funciones propias de MATa a LAB no estudiadas durante el curso, ni conceptos o estructuras correspondientes a ejemplos y unidades didcticas que todav no se hayan explicado. No se permitir a a a el uso de la vectorizacin de operaciones explicada en el tutorial, ni la multiplicacin o o directa de matrices. 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 utilizacin de una rutina estudiada en o el curso o incluida en el enunciado, sta no podr ser modicada. Deber e a a ser usada tal y como est escrita en los apuntes o en el enunciado. Si a crees que necesitas modicarla para poderla utilizar es que lo ests haciendo mal. a 6. Las funciones se ubicarn en cheros independientes, cuyo nombre coincidir con a a el de la funcin a falta por supuesto de la extensin .m. La funcin del ejercicio 1 o o o se llamar f 1, la del ejercicio 2 se llamar f 2, y as sucesivamente. a a 7. En las funciones slo se utilizarn aquellos argumentos de entrada y salida que se o a especiquen en el enunciado. 8. La primera l nea de cada programa o funcin ser un comentario con vuestros o a apellidos, nombres y el nmero de mquina en la que estis. u a a 9. Todos los cheros estarn ubicados en la carpeta C : \examenes. a 10. Se podrn usar todos los ejemplos (no ejercicios) que se han estudiado en el curso a hasta el d del examen, los cuales puedes encontrar en la carpeta correspondiente. a

11. Se podrn crear funciones auxiliares (como una que calcule el factorial por ejemplo), a si crees que te pueden simplicar el trabajo 12. Al terminar el examen, se cerrar la sesin pero NO se apagar el ordea o a nador.

Ejercicios.
1. Crea una funcin que reciba un vector v de nmeros naturales y un natural m o u y nos devuelva el nmero de elementos de v que son mltiplos de m. Devolver u u a adems el nmero de elementos de v que son mltiplos de m + 1. Por ejemplo, si a u u v = (7, 6, 15, 8, 5) y m = 2, devolver 2 y 2, porque el 6 y el 8 son mltiplos de 2, a u y el 6 y el 15 son mltiplos de 3 (2.5 puntos). u 2. Construir una funcin que reciba un nmero n y devuelva un vector que contenga o u a todos los nmeros mgicos menores o iguales que n. Se dene un nmero mgico u a u a 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 funcin devolver el vector o a [1 6 28] (2.5 puntos). 3. Crea una funcin que reciba un nmero natural n, un nmero real x y devuelva el o u u polinomio de Mc-Laurin de de grado n de la funcin ex , evaluado en x. o ex 1 + x + xn x2 x3 + + + 2! 3! n!

Para evaluar el polinomio de Mc-Laurin, se construir ste componente a compoae a nente y se utilizar del modo adecuado la funcin ud3 f evalua. No se podr usar a o la funcin propia de MATLAB f actorial para hacer el clculo del factorial. La o a alternativa es o bien escribir una funcin aparte que calcule el factorial, o bien o cualquier otra idea que se os ocurra. Por ejemplo, si n = 3 y x = 0.5, devolver 1 + 0.5 + 0.52 /2 + 0.53 /6 = 1.6458, que a 0.5 es bastante similar a e = 1.6487. La funcin devolver tambin la diferencia en valor absoluto entre ex y el polinomio o a e citado evaluado en x. Por tanto, en este caso, devolver tambin 0.0029 (2.5 a e puntos). 4. Codica una funcin que reciba dos vectores u y v ordenados de modo creciente o por hiptesis, que carecen de elementos comunes y de dimensiones m y n que son o en general distintas. La funcin devolver otro vector w construido a partir de o a todas las componentes de u y v, tales que el vector w tambin est ordenado. No se e e podr llamar a ninguna funcin. Por ejemplo, si u = (2, 4, 5, 9, 10) y v = (1, 3, 6, 8), a o el resultado ser w = (1, 2, 3, 4, 5, 6, 8, 9, 10). Como comprobacin adicional, si a o intercambiamos u y v en la llamada, el resultado tiene que ser el mismo (2.5 puntos).

Ejercicios. Examen nal de Lenguajes de Programacin. Junio 2008 o


Escuela Tcnica Superior de Ingenieros Navales e Fecha aproximada de publicacin de las notas: 30/06/2008 o D y hora de la revisin: 03/07/2008, 19h30m a o Tiempo para esta parte : 85 minutos Puntuacin: 10 puntos. o

1. Crea una funcin que reciba un vector u de nmeros positivos y devuelva un vector o u ue con los nmeros enteros que contiene y otro ur con los no enteros, as como sus u respectivos m nimos 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 funcin que reciba un vector v de naturales y te devuelva 1 si la resta o de dos cualesquiera de los nmeros es igual a un tercero. Por ejemplo, si v = u (3, 10, 7, 14, 6), la funcin devolver un 1, pues 10 7 = 3. Sin embargo, si el vector o a es v = (3, 11, 7, 15, 6) la funcin devolver 0. Se recomienda probar la funcin o a o cambiando de orden los elementos del primer ejemplo (2.5 puntos). 3. Crea una funcin que reciba un vector p cuyas componentes asimilamos a los coo ecientes de un polinomio del modo como se ha hecho en el curso. La funcin o ha de recibir tambin un vector x de n nmeros reales y devolver el elemento e u a del vector x que se encuentra ms cerca de la media que resulta de que se evale a u 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 ms cerca tiene su valor de la media (2.5 puntos). a 4. Construye una funcin que reciba dos nmeros naturales p, q y devuelva el menor o u primo mayor que p y q que pertenezca a la sucesin de Fibonacci iniciada por p o y q (2.5 puntos). No se tendrn en cuenta ni p ni q. La sucesin de Fibonacci se a o construye de tal modo que. xi = xi1 + xi2 , x1 = p, x2 = q, i > 2

Por ejemplo, si p = 1 y q = 3, la sucesin de Fibonacci estar formada por 1, 3, 4, o a 7, ..., y el primer primo ser el 7. Si p = 4 y q = 5, tendr a amos 4, 5, 9, 14, 23, ... y el primer primo ser el 23(2.5 puntos). a

Ejercicios. Examen nal de Lenguajes de Programacin. Sept 2008 o


Escuela Tcnica Superior de Ingenieros Navales e Fecha aproximada de publicacin de las notas: 22/09/2008 o D y hora de la revisin: 24/09/2008, 19h30m a o Tiempo : 90 minutos Puntuacin: 10 puntos. o Nombre: Nmero de PC: u Firma:

1. Crea una funcin que reciba un vector v de naturales y te devuelva un vector vp o 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 funcin devolver un los vectores vp = (3, 7) y vnp = (10, 14, 6) (2.5 puntos). o a 2. Crea una funcin que reciba un vector p cuyas componentes asimilamos a los coo ecientes de un polinomio del modo como se ha hecho en el curso. La funcin o ha de recibir tambin un vector x de n nmeros reales y devolver el e u a ndice del elemento del vector x que se encuentra ms cerca de la media que resulta de que a se evale el polinomio p en todos los elementos del vector x. As si p = [1 1 2] y u , 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 ms cerca tiene su valor de la media, cuyo a ndice es 3, que ha de ser el unico valor que nalmente devuelva la funcin (2.5 puntos). o 3. Construye una funcin que reciba tres nmeros naturales p, q y r. La funcin ir o u o a calculando trminos de la sucesin de Fibonacci iniciada por p y q e ir comproe o a bando si son mltiplos de p. En el momento en que hayamos encontrado r mltiplos u u de p la funcin terminar, devolviendo el trmino en que estemos de la sucesin de o a e o Fibonacci (2.5 puntos). No se tendrn en cuenta los valores p y q. La sucesin de a o Fibonacci se construye de tal modo que. xi = xi1 + xi2 , x1 = p, x2 = q, i > 2

Por ejemplo, si p = 3, q = 4 y r = 2, la sucesin de Fibonacci estar formada por o a 3, 4, 7, 11, 18, 29, 47, 76, 123..... Como 18 y 123 son los dos primeros mltiplos u de 3, el valor a devolver ser 123 (2.5 puntos). Si p = 2, q = 1 y r = 3, la funcin a o devolver en este caso 76, pues los tres primeros mltiplos de 2 ser 4, 18 y 76. a u an 4. Crea una funcin que reciba un vector u de nmeros naturales y otro vector v de o u nmeros racionales positivos. La funcin devolver 1 si existe alguna combinacin u o a o de fracciones formadas por elementos del vector u tomados de dos en dos, que sea

igual a algn elemento del vector v y 0 en caso contrario. Se denir en la funcin u a o una variable prec igual a la milsima parte de la suma de los elementos de u. Se e considerar que dos nmeros son iguales si su diferencia en valor absoluto es menor a u 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 Programacin: Gu ECTS o a

Pg. 116 a

Apndice B e Gestin del CC o

Pg. 117 a

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.

Apndice C e Control de tiempos y cha

Pg. 123 a

ETSI NAVALES - UPM LENGUAJES DE PROGRAMACIN (LP) CURSO 2008-2009. FICHA PERSONAL - URGENTE!!!!!!!!!!!!! FOTO (pegadla por donde querais, en zonas blancas de esta ficha)

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:

FICHA DE CONTROL DE TIEMPOS APELLIDOS: NOMBRE: Semana Fecha DHOf Acum InFHOf Acum 29/09/2008 0 0 06/10/2008 0 0 13/10/2008 0 0 20/10/2008 0 0 27/10/2008 0 0 03/11/2008 0 0 10/11/2008 0 0 17/11/2008 0 0 24/11/2008 0 0 01/12/2008 0 0 08/12/2008 0 0 15/12/2008 0 0 22/12/2008 0 0 29/12/2008 0 0 05/01/2009 0 0 12/01/2009 0 0 19/01/2009 0 0 26/01/2009 0 0 02/02/2009 0 0 09/02/2009 0 0 EqFHOf Acum 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 Total 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 Acum 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 16 17 16

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 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

Lenguajes de Programacin: Gu ECTS o a

Pg. 126 a

Apndice D e Premio SENER

Pg. 127 a

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

1/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.55.4)+(9.0-6.2)=4.9 puntos. La puntuacin mxima ser de 10 puntos, (105)+(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
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.
1

2/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.

3/4

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.
14 12 10 8 6 4 2 0 -8 -6 -4 -2 0 2 4 6
Puntuacin <= Nmero de grupos

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

Indice alfabtico e
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 clculo simblico, 32 a o carpeta activa, 29 ventana de comandos, 13 operadores lgicos, 47 o O, 47 negacin, 47 o Y, 47 pi, 38 sumadores, 53 Taylor, Brook, 27 Wittgenstein, L., 1

Pg. 132 a

You might also like