02.ejercicios 13-14 Bloque II MATLAB Programación
02.ejercicios 13-14 Bloque II MATLAB Programación
02.ejercicios 13-14 Bloque II MATLAB Programación
E.T.S.
RELACIÓN DE EJERCICIOS DE
INGENIEROS
INDUSTRIALES PROGRAMACIÓN EN MATLAB
Este manual no hace hincapié en las posibilidades de MATLAB en aspectos tales como la programación
orientada a objetos, las módulos (toolboxes) específicos de distintas ramas de la ciencia y la ingeniería o
las peculiaridades del lenguaje de programación M, sino que trata de ser una base común a cualquier
lenguaje de programación estructurada y de profundizar en el diseño de algoritmos para resolver
problemas matemáticos. No se trata de realizar diseño de software, sino algoritmos para resolver
problemas.
La programación requiere de paciencia y constancia en la mayor parte de los casos, ya que al principio el
avance es muy lento. No desesperéis.
Como regla para homogeneizar los nombres de las funciones, y salvo que se especifique lo contrario en
el enunciado, se recomienda que éstas se nombren del siguiente modo: Como regla, cada función o
fichero de comandos debe nombrarse como funcionXX, siendo XX el número del ejercicio. En el caso
de que haya varios apartados, el nombre del fichero será funcionXXY, donde Y será el apartado (a, b,
c, etc.).
DIFICULTAD
AYUDA
Cuando se recomienda utilizar una función de MATLAB, es imprescindible hacer uso del comando help
en la ventana de comandos, o de la ayuda de la barra de menús. Por ejemplo, para saber cómo usar la
función disp deberíais teclear:
Overloaded methods:
...
ERRORES EN LOS ARGUMENTOS DE ENTRADA
En todos los ejercicios (excepto en los ficheros de comandos), con independencia de si está
específicamente escrito o no en el enunciado, habrá que comprobar la corrección de los argumentos de
entrada para evitar que se produzcan errores en tiempo de ejecución. Si no se especifica ninguna acción
a tomar, se deberá mostrar un mensaje de error y salir sin hacer cálculos.
Aunque esto no es crítico en MATLAB, ya que gestiona dichos errores de una manera excelente, en otros
lenguajes de programación (JAVA, C…) se convierte en algo vital.
ROBUSTEZ
Cuando se introduzcan datos por teclado (mediante la función input de MATLAB) se deberá realizar una
lectura robusta de los mismos. Por ejemplo, en el ejercicio 10, cuando se solicita que la introducción de
la opción sea robusta, implica que se debe leer un número y que este debe estar dentro del rango de
opciones permitido. Si no es así, se vuelve a solicitar. Ejemplo:
>> funcion07
----Menu----
1. Saludo
2. Pregunta
3. Exclamacion
4. Piropo
5. Despedida
Elija una frase del menu (1-5): 7
----Menu----
1. Saludo
2. Pregunta
3. Exclamacion
4. Piropo
5. Despedida
Elija una frase del menu (1-5): 1
Hola, amigo
Una pregunta muy interesante. En general, utilizaremos bucles for cuando el número de repeticiones
esté claramente definido por algún parámetro o constante, y el bucle while cuando dependa del
cumplimiento de una condición que no está determinada por el número de repeticiones.
Muchos de los ejercicios propuestos en este documento pueden resolverse directamente utilizando una
función de MATLAB. Sin embargo, la idea de los mismos es aprender a programar qué es lo que hay
debajo.
INICIALIZACIÓN
Es conveniente, siempre que sea posible, definir los tamaños de los vectores y matrices que se utilicen
antes de usarlos. Esto acelera la ejecución de los programas ya que la memoria sólo se tiene que reservar
una vez. Si no lo hacemos, no se producirá ningún error, pero probablemente nos saltará un ‘warning’
avisando del problema.
Algunos ejercicios están coloreados. En azul os iré poniendo los que hacemos en clase de prácticas, en
verde los que se dejen propuestos en clase de prácticas y en marrón los que se han puesto en exámenes
anteriores.
1. () Escribir un fichero de comandos que imprima por pantalla la frase ‘Hola, mundo’. Consejo: utilizar la
función disp() de MATLAB para mostrar mensajes y resultados por pantalla. También se puede utilizar
la función fprintf().
2. () Escribir un fichero de comandos que muestre por pantalla las operaciones de suma, resta, multiplicación
y división de dos datos reales definidos dentro del fichero de comandos.
3. () Escribir un fichero de comandos que pregunte el precio de una serie de frutas (peras, naranjas y
manzanas) y las cantidades que se van a comprar de cada una, y muestre por pantalla el precio total de la
compra.
4. () Escribir un fichero de comandos que permita transformar los grados Fahrenheit en Celsius y muestre
el resultado por pantalla. El valor a transformar se debe pedir al usuario mediante la función input() de
MATLAB.
5. () Escribir un fichero de comandos que pregunte la masa de un cuerpo y la distancia a la que se encuentra
del sol y calcule cuál es la fuerza de atracción gravitacional entre ambos. Nota: la masa del sol es de
1,989·1030 kg.
6. (*) Un isótopo radioactivo de un elemento es una forma del elemento que no es estable, sino que decae
Escriba un programa que lea el porcentaje de C14 restante en una muestra, utilizando la función input(),
= , , = , ,
=! − + − + −
7. (*) La distancia entre dos puntos y en un sistema de coordenadas
cartesiano de tres dimensiones viene dada por la ecuación .
alimentación de voltaje )* y con resistencia interna +* a una carga de resistencia equivalente +, , que se
8. (**) Escribir un fichero de comandos que calcule la máxima transferencia de potencia de una fuente de
La manera más correcta de hacer esto sería calcular el máximo de la función (a mano), e implementar
dicho cálculo dentro de la función. Otra posibilidad consiste en representar la potencia de la carga , en
función de +, (con la función plot() de MATLAB) y ver manualmente dónde está el máximo.
MANEJO DE SENTENCIAS DE DECISIÓN (IF-ELSE, IF-ELSEIF-ELSE, SWITCH-CASE)
9. () Escribir un fichero de comandos que muestre por pantalla un menú general con 5 posibles opciones a
elegir una por el usuario. Una vez elegida la opción se imprimirá por pantalla un mensaje característico
de dicha opción. Si la opción no es válida se mostrará un mensaje informando de ello. Consejo: Se
recomienda el uso de la estructura switch-case.
10. () Escribir un fichero de comandos que modifique el ejercicio anterior para que la elección del menú se
realice de manera robusta. Pista: Utilice para ello un bucle while.
11. (*) Escribir un fichero de comandos que permita transformar los grados Celsius en Fahrenheit y viceversa
y muestre el resultado por pantalla. El programa mostrará un menú con tres opciones: Pasar Celsius a
Fahrenheit, Pasar Fahrenheit a Celsius y Salir del programa. Mientras que el usuario no seleccione la
última opción, el programa deberá volver al menú inicial.
12. (**) Escribir una función que calcule las soluciones de una ecuación de segundo grado. Los coeficientes
de la ecuación se facilitarán como tres argumentos de entrada: a, b y c. Estudie los distintos casos que
pueden aparecer: soluciones degeneradas, una solución o dos soluciones (real doble, reales simples,
complejas conjugadas).
MANEJO DE BUCLES (FOR, WHILE)
13. () Escribir una función que calcule el factorial de un número n que se pasa como argumento de entrada y
devuelva el resultado como argumento de salida. Si el argumento de entrada n no fuera válido, el
programa debe salir del método devolviendo un -1 como código de error.
. . . .
14. (*) Escribir una función que, recibiendo como argumento de entrada dos números enteros y positivos, n
y m, calcule el número combinatorio - 0, sabiendo que . ≥ /, - 0 = - 0 = 1 y que - 0 =
2!
/ 0 . / 4! 2 4 !
.
Pista: Haciendo uso de la función del ejercicio anterior, es inmediato realizar el cálculo.
15. (**) Escribir una función que, recibiendo como argumento de entrada un número entero y positivo n,
devuelva solamente el término n-ésimo de la serie de Fibonacci sin utilizar vectores. Pista: Necesitará
definir tres variables de tipo escalar.
16. (*½) Entre otras muchas propiedades de la serie de Fibonacci, la división de un término de la serie entre
el anterior tiende a un número conocido como “la divina proporción” cuando la longitud de la serie tiende
a infinito. Se pide escribir una función que recibiendo como argumento de entrada la longitud de la serie
de Fibonacci devuelva la aproximación de la “divina proporción” para esa longitud de la serie.
17. (***) Repetir el ejercicio anterior utilizando como argumento de entrada un valor de tolerancia. El valor
de la divina proporción se considerará calculado con una aproximación satisfactoria cuando la diferencia
entre el término n y el n-1 sea menor que dicha tolerancia. La función devolverá el valor calculado así
como el valor de truncamiento n. Consejo: utilizar un bucle while para comprobar la condición.
18. (*½) Se pide escribir el código de varias funciones que calculen el valor de un conjunto de funciones
definidas mediante su desarrollo en series de potencias. Dichas funciones recibirán el punto de evaluación
de la función, x, que será un número real, y el orden de truncamiento de la serie, n, que será entero. Las
funciones a calcular son:
6
5
=1+ + + + +⋯ , −∞ < <∞
1! 2! 3! 4!
6 < =
sin = − + − +⋯ , −∞ < <∞
3! 5! 7!
?
cos =1− + − +⋯ , −∞ < <∞
2! 4! 6!
19. (***) Repetir el ejercicio anterior utilizando como argumento de entrada un valor de tolerancia. El valor
de la función se considerará calculado cuando la diferencia entre el término n y el n-1 sea menor que
dicha tolerancia. Las funciones devolverán el valor calculado así como el valor de truncamiento n.
20. (***) Escribir un procedimiento que proporcione el desglose en billetes y monedas de una cantidad exacta
de euros que se pasará como argumento de entrada al mismo. Considérese que los billetes existentes son
de 500, 200, 100, 50, 20, 10 y 5 €, y las monedas de 1 y 2 €. Por ejemplo, si deseamos conocer el desglose
de 1433 €, el procedimiento mostrará por pantalla el siguiente resultado:
2 billetes de 500 euros
2 billetes de 200 euros
1 billete de 20 euros
1 billete de 10 euros
1 moneda de 2 euros
1 moneda de 1 euro
Observar que la palabra (billete y/o moneda) concuerda en número con la cantidad de billetes (o
monedas) y que si no hay piezas de un determinado tipo (en el ejemplo, de 5 euros), no muestra el
mensaje correspondiente.
Notas: En caso de que la cantidad de euros introducida no sea mayor que cero, la función saldrá sin hacer
nada. Se recomienda utilizar un vector de constantes con los posibles valores de los billetes para
aprovechar el uso de bucles.
21. (***) En la siguiente figura se muestra un “rectángulo áureo” que consta de dos rectángulos, uno grande
y otro pequeño, cuya proporción en superficies es igual a la constante conocida con el nombre de la
“divina proporción”, denotada por la letra griega ϕ.
S grande n
ϕ= ∝
S pequeño naciertos
22. (***) Escribir un fichero de comandos que, introduciendo por teclado un número entero, represente por
pantalla su equivalente en el sistema binario. Si el número es negativo, se deberá escribir el
correspondiente signo menos antes del número.
23. (**½) Se pide realizar una función que evalúe un polinomio en un punto. La función recibirá como
argumentos de entrada un vector de coeficientes, c, en orden decreciente de potencias de la variable
independiente, de manera que el último elemento del vector corresponda con el término independiente,
y el valor de la variable independiente, x, en que hay que evaluar el polinomio.
24. (***½) Se pide realizar una función que, recibiendo como argumento de entrada los 4 coeficientes de una
ecuación de tercer grado, encuentre una de las soluciones de la función mediante el método de la
bisección. Se deberá primero realizar una etapa de tanteo para encontrar dos valores iniciales que
cumplan el teorema de Bolzano (usando la función rand() de MATLAB).
FIGURAS
25. Se pide escribir el código de varios procedimientos con los nombres que figuran en la siguiente tabla.
Éstos reciben como argumento de entrada un número entero n correspondiente al lado de las figuras de
asteriscos que dibujan:
En el caso de que el número que se pasa como argumento a la función no sea positivo, la función saldrá
sin hacer nada.
26. (* después de hacer los anteriores) Realizar procedimientos análogos a los del ejercicio anterior, pero que
impriman por pantalla las mismas figuras sin los asteriscos interiores (sólo los bordes).
28. (*½) Escribir una función que dibuje un tablero de ajedrez. Representando las casillas blancas mediante
“B” y las casillas negras mediante “N”. Se recuerda que en un tablero de ajedrez, la esquina inferior
derecha (y por tanto la superior izquierda también) debe ser blanca.
29. (*½) Escribir una función que pidiendo por teclado la posición inicial de la torre, represente un tablero de
ajedrez con “B” y “N”, mostrando la posición de la torre y sus posibles movimientos con “*”.
30. (**) Escribir una función que pidiendo por teclado la posición inicial del alfil, represente un tablero de
ajedrez con “B” y “N”, mostrando la posición del alfil y sus posibles movimientos con “*”.
31. (**)Escribir una función que pidiendo por teclado la posición inicial de la dama, represente un tablero de
ajedrez con “B” y “N”, mostrando la posición de la dama y sus posibles movimientos con “*”.
32. (**½) Escribir una función que pidiendo por teclado la posición inicial del rey, represente un tablero de
ajedrez con “B” y “N”, mostrando la posición del rey y sus posibles movimientos con “*”.
33. (***) Escribir una función que pidiendo por teclado la posición inicial del caballo, represente un tablero
de ajedrez con “B” y “N”, mostrando la posición del caballo y sus posibles movimientos con “*”.
MANEJO DE VECTORES
34. Escribir funciones que, recibiendo como argumento de entrada un vector de números reales, devuelvan:
35. (*) Escribir una función que recibiendo como argumento de entrada un vector de números enteros v y un
número entero n, devuelva el número de veces que está n contenida en el vector v.
36. (*) Escribir una función que recibiendo como argumento de entrada un vector de enteros v, devuelva el
vector normalizado.
Nota: Para normalizar un vector, se dividen todas las componentes del vector por el módulo del mismo.
El módulo de un vector es igual a la raíz cuadrada de la suma de las componentes al cuadrado del vector.
37. (*½) Escribir una función que recibiendo como argumento de entrada dos vectores reales, devuelva el
producto escalar de dichos vectores.
38. (*) Escribir una función que, recibiendo como argumento de entrada un número entero y positivo n,
devuelva un vector con los n primeros términos de la serie de Fibonacci. Los dos primeros términos de la
serie de Fibonacci son iguales a 1 y los restantes igual a la suma de los dos anteriores. Pista: Valore el caso
n=1 como un caso particular.
39. (*½) Escribir una función que recibiendo como argumento de entrada un número entero n, devuelva un
vector que contenga los n primeros términos de la siguiente serie:
x0=1
x1=-6
x2=4
...
xi=xi-1-xi-2-xi-3, i=3,...n-1;
40. (**) Escribir una función que reciba un vector de números reales, v, como argumento de entrada y
determine cuál de todos ellos es el más cercano al primero de los elementos del vector y devuelva su
posición, p, dentro del vector.
Nota: En caso de que el vector no tenga al menos dos componentes, el método devolverá un -1.
41. (**½) Escribir una función que recibiendo como argumento de entrada un vector de número enteros
devuelva otro vector de la misma dimensión con las componentes ordenadas de menor a mayor.
42. (**) Escribir una función que reciba como entrada un número entero positivo distinto de 1 y genere, a
partir de él una secuencia de números cuyo primer elemento es el que se pasa como argumento al método
y que sigue estas reglas:
43. (**) La media móvil de n elementos de un vector, v, se define como otro vector, mm, que contiene en
cada posición la media de n de los elementos de v contados desde dicha posición. Realice una función de
MATLAB llamada mi_media_movil() que, recibiendo como parámetros de entrada un vector, v, y un
número de elementos n, devuelva el vector, mm, que contenga la media móvil de n elementos de v.
@ = 6, 9, 9, 8, 8, 7, 5, 6 , . = 8 → // = 7.25
Nota: Si sólo se recibe el vector, v, se calculará por defecto la media móvil de 5 elementos. Si no se recibe
ningún argumento de entrada, o si n no es un valor válido, se mostrará el correspondiente mensaje de
@ = 6, 9, 9, 8, 8, 7, 5, 6 , . = −4 → CCDC
44. (**) Realice las siguientes funciones relacionadas con los números primos:
a. Recibe como entrada un número entero n y devuelve un vector con los n primeros números
primos, empezando en el 1.
b. Recibe como entrada un número entero n y devuelve un vector con los números primos que
existan entre 1 y n, ordenados de menor a mayor.
c. Recibe como entrada un número entero n y devuelve un vector con los números primos que
existan entre 1 y n, ordenados de mayor a menor.
d. Recibe como entrada dos números enteros n y m y devuelve el menor de los números primos
existentes en el intervalo [n,m]. Si no hubiese ningún número primo, se devolverá un -1.
e. Recibe como entrada dos números enteros n y m y devuelve el mayor de los números primos
existentes en el intervalo [n,m]. Si no hubiese ningún número primo, se devolverá un -1.
f. Recibe como entrada dos números enteros n y m y devuelve un vector que contenga todos los
números primos existentes en el intervalo [n,m]. Si no hubiese ningún número primo, se
devolverá un -1.
Si en los métodos a, b o c la entrada no es mayor que 1, el método devolverá un -1. Si en los métodos d,
e o f alguna de las entradas (n y m) no es positiva, o m no es mayor que n, el método devolverá un -1.
45. Escribir una función que, recibiendo como entrada un vector de números enteros, devuelva:
c. (**½) Una matriz con dos columnas. La primera contendrá el anterior vector (números
distintos que aparecen en el vector), mientras que la segunda indicará cuántas veces aparece
cada número en el vector.
a. (**) Calcule el mínimo común múltiplo de dos números enteros que se pasarán como
argumentos de entrada y lo devuelva como argumento de salida.
b. (**) Calcule el máximo común divisor de dos números enteros que se pasarán como
argumentos de entrada y lo devuelva como argumento de salida.
d. (***) Calcule el mínimo común múltiplo de otros dos números enteros haciendo uso de su
descomposición en factores simples.
e. (***) Calcule el máximo común divisor de otros dos números enteros haciendo uso de su
descomposición en factores simples.
47. (**½) Escribir una función que recibiendo como argumento de entrada un número real x y un número
entero n, devuelva un vector de tipo char que contenga la conversión en binario de x con n bits de
precisión (incluyendo la coma). Si el número x recibido fuera negativo, se deberá representar el
equivalente binario de su módulo absoluto. Si n fuera no positivo, el método deberá devolver ‘0’.
48.
MANEJO DE MATRICES
50. () Realizar una clase con un método que reciba como argumento una matriz entera y devuelva la traza del
vector.
Nota: la traza de una matriz es igual a la suma de los elementos de su diagonal principal.
51. (*) Escribir una función que, recibiendo como argumento de entrada un número entero n, devuelva una
matriz cuadrada de dimensión n con la siguiente forma:
1 0 1 0 ⋯ 0
0 1 0 1 ⋯ 1
G L
1 0 1 0 ⋯ 0
F
F0 K
1 0 1 ⋯ 0K
⋮ ⋮ ⋮ ⋮ ⋱ ⋮
E1 0 1 0 ⋯ 1J
Nota: La dimensión de la matriz n debe ser siempre par, si no lo fuera la función deberá devolver un -1.
52. (**½) Escribir una función que recibiendo como argumento de entrada un número entero n devuelva una
matriz, M, de dimensión n×n que contenga de forma ordenada los n*n primeros términos de la serie de
Fibonacci.
1 1 2 3
1 1 5 8 13 21
Ejemplos:
.=2→M=- 0 .=4→M=N O
2 3 34 55 89 144
233 377 610 987
53. (**) Escribir una función que reciba un número entero n como argumento de entrada y devuelva la matriz
de Vandermonde de dimensión nxn.
54. (**) Escribir una función que recibiendo como argumento de entrada una matriz entera y un vector
entero, devuelva la multiplicación de la matriz por el vector.
55. (***) Escribir una función que multiplique dos matrices de números enteros sin utilizar el operador de
multiplicación matricial de MATLAB. Las matrices se pasarán como argumentos de entrada al método, y
éste deberá comprobar la coherencia de las dimensiones antes de realizar la operación.
56. (**) Escribir una función que tomando como argumento de entrada un número entero devuelva una
matriz triangular superior de dimensión n×n que tenga la siguiente forma:
1 2 3 4 5 6 7 8 9
1 2 3 4
0 1 2 3 4 5 6 7 8
0 1 2 3 0
0 0 1 2 3 4 5 6 7
0 1 2
0 0 0 1 2 3 4 5 6
0 0 0 1
0 0 0 0 1 2 3 4 5
0 0 0 0 0 1 2 3 4
0 0 0 0 0 0 1 2 3
0 0 0 0 0 0 0 1 2
0 0 0 0 0 0 0 0 1
57. (**) Escribir una función que tomando como argumento de entrada un número entero n devuelva una
matriz triangular inferior de dimensión n×n que tenga la siguiente forma:
9 0 0 0 0 0 0 0 0
4 0 0 0 8 9 0 0 0 0 0 0 0
3 4 0 0 7 8 9 0 0 0 0 0 0
2
3 4 0 6 7 8 9 0 0 0 0 0
1 2 3 4 5
6 7 8 9 0 0 0 0
4 5 6 7 8 9 0 0 0
3 4 5 6 7 8 9 0 0
2 3 4 5 6 7 8 9 0
1
2 3 4 5 6 7 8 9
58. (**) Escribir una función que tomando como argumentos de entrada un número entero para la posición
en filas y otro para la posición columnas sobre una matriz de dimensión 8×8, devuelva la matriz de 8×8
donde cada elemento de la matriz sea la distancia (en filas + columnas) de dicha posición a la posición
inicial:
2 1 0 1 2 3 4 5 10 9 8 7 6 7 8 9
3 2 1 2 3 4 5 6 9 8 7 6 5 6 7 8
4 3 2 3 4 5 6 7 8 7 6 5 4 5 6 7
5 4 3 4 5 6 7 8 7 6 5 4 3 4 5 6
6
6 5 4 5 6 7 8 9
5 4 3 2 3 4 5
7 6 5 6 7 8 9 10 5 4 3 2 1 2 3 4
8 7 6 7 8 9 10 11 4 3 2 1 0 1 2 3
9 10 11 12 5 4 3 2 1 2 3 4
8 7 8 9
59. (**) Escribir una función que contenga un método que recibiendo como argumento de entrada la posición
inicial en filas y columnas devuelva una matriz de caracteres de dimensión 8×8 como la de la estructura
del siguiente ejemplo:
f f f e f f f f
f f e d e f f f
f e d c d e f f
Ejemplo: fila= 5, columna = 4: e d c b c d e f
d c b a b c d e
e d c b c d e f
f e d c d e f f
f
f e d e f f f
Si el método recibiera como argumento de entrada una posición inicial fuera de la matriz, deberá devolver
una ‘x’.
60. (***) Escribir una función que recibiendo como argumento de entrada una posición en filas y columnas
sobre una matriz de dimensión 10×10 devuelva la siguiente matriz de caracteres:
u u u
o o o o o o o
u u u
o i i i i i o
Ejemplo: filas=4, columnas=6 u u u
o i e e e i o
u u u
o i e a e i o
u u u
o i e e e i o
u u u
o i i i i i o
u u o o o o o o
u o
u u u u u u u u u u
u u u u u u u u u u
u u u u u u u u u u
Si la posición inicial recibida en forma de fila y columna no estuviera dentro del tablero, el método deberá
devolver una ‘x’.
61. (**) Escribir una función que recibiendo como argumento de entrada un número entero y positivo n,
devuelva una matriz de tamaño nxn conteniendo las n primeras filas del triángulo de tartaglia debajo de
la diagonal principal.
1 0 0 0 0 0
Ejemplo: n=7 1
1 1 0 0 0 0
G L
1 1
1 2 1 0 0 0
P=F K
1 2 1
F1 3 3 1 0 0K
1 3 3 1
1 4 6 4 1 0
1 4 6 4 1
1 5 10 10 5 1 E1 5 10 10 5 1J
M
62. (**½) Escribir una función que, tomando como entrada una matriz de números reales, devuelva un vector
con la posición en filas y columnas del elemento de la matriz más cercano a cero. En caso de que haya
más de un elemento que cumpla dicha característica, se devolverán las posiciones de todos ellos.
63. (**) Escribir una función que recibiendo como argumento de entrada un número entero n y un número
real x, devuelva una matriz real de dimensión n×n que siga la estructura de los siguientes ejemplos:
Si el método recibiera como argumento de entrada un valor de n no positivo, deberá devolver un -1.0.
64. Forma matricial: (*) Forma escalar: (**½) Escribir una función que reciba como argumento de entrada dos
matrices y devuelva como argumento de salida una matriz que esté formadas por cajas en la diagonal de
las otras dos matrices:
2 5 − 4 2 5 − 4 0 0
Ejemplo: 9 7 8 9 7 8 0 0
1 0 14 ⇒ 1 0 14 0 0
0 0 0 2 3
2 3
1 5 0 0 0 1 5
a. (*) Reciba como argumento de entrada una matriz de números enteros y devuelva su simétrica
respecto de la horizontal.
b. (*) Reciba como argumento de entrada una matriz de números enteros y devuelva su simétrica
respecto de la vertical.
c. (*) Reciba como argumento de entrada una matriz de números enteros y devuelva su simétrica
respecto de la diagonal.
d. (*½) Reciba como argumento de entrada una matriz de números enteros y devuelva su simétrica
respecto de la contradiagonal.
e. (**) Reciba como argumento de entrada una matriz de números enteros y la devuelva girada 90º
en el sentido de las agujas del reloj.
f. (**) Reciba como argumento de entrada una matriz de números enteros y la devuelva girada
180º en el sentido de las agujas del reloj.
g. (**) Reciba como argumento de entrada una matriz de números enteros y la devuelva girada
270º en el sentido de las agujas del reloj.
66. (**½) Realizar una función que obtenga la ‘matriz integral’ de una matriz numérica, A, dada como
argumento de entrada. Cada elemento de una matriz integral es la suma de los elementos de la matriz
original que están por encima y a la izquierda de esa posición.
Ejemplos:
0 0 0 0
1 2 3
0 1 3 6
Q = R4 5 0S → T = N O
0 5 12 15
1 2 1
0 6 15 19
0 0 0
−2 1
Q=- 0 → T = R0 −2 −1S
7 5
0 5 11
@= 7 1 1 5 5 3 7 → T = 29
67. (**) Realizar una función que reciba dos argumentos de entrada (A, una matriz de números enteros, y n,
un número natural), y calcule el histograma de la matriz A. El histograma de una matriz se define como
un vector con la frecuencia relativa de cada uno de los diferentes números que hay en ella. Se supondrá
que los posibles números que se pueden encontrar en la matriz son números enteros entre 1 y n
(argumento de entrada).
Ejemplos:
1 3 2
Q = R3 5 3S , . = 5 → ℎ = 2/9 1/9 3/9 1/9 2/9
4 1 5
1 6 1
2 1 6
Q=N O , . = 7 → ℎ = 5/12 3/12 0 1/12 0 3/12 0
1 2 6
4 2 1
Nota: Si falta algún argumento de entrada, se generará un error. Si A contiene valores que no estén entre
1 y n, se generará otro error distinto.
68. (**) Realizar una función que, recibiendo como argumento de entrada una matriz A, devuelva dos
argumentos de salida, correspondientes a las filas y las columnas de la posición desde la que se ‘ven’ más
ceros. Los ceros que se ‘ven’ desde una determinada posición corresponden a los que hay en la misma fila
o columna que dicha posición (exceptuando a ella misma).
Ejemplos:
1 2 0 2
2 14 0 1
Q=N O → W = 4; Y = 3
1 0 0 3
0 5 3 1
Ejemplos:
10 6 7 −5 −1 0
0 8 3 1 1 2
Q=N O→Q=N O
−5 2 −1 3 4 6
4 1 1 7 8 10
a. (**) Dadas una matriz de números reales y una posición en filas y columnas, extrae la matriz de
3x3 que rodea al número que se encuentra en dicha posición y la devuelve como argumento de
salida.
b. (**½) Dadas una matriz de números enteros y una posición en filas y columnas, extrae los
elementos que rodean a dicha posición y los coloca por filas dentro de un vector, (excluyendo al
propio número), comenzando por la esquina superior izquierda y terminando en la inferior
derecha, que devolverá como argumento de salida.
Si la matriz no es, al menos, de tamaño 3x3, o si la posición en filas y columnas no está en la parte interna
de la matriz (es decir, que no debe estar tampoco en el borde), el método devolverá un -1.
c. (***) Exactamente igual al método del apartado a) salvo porque se debe permitir extraer
submatrices incluso en los bordes de la matriz. En caso de que la posición elegida esté en el
borde, los elementos que no existen se rellenarán con ceros en la submatriz.
71. (***½) Escribir una función que recibiendo como argumento de entrada una matriz A y un vector b de
números reales resuelva el sistema de ecuaciones Ax=b mediante el método de eliminación gaussiana.
MANEJO DE CADENAS DE CARACTERES
Nota: Para realizar los ejercicios de manejo de cadenas de caracteres en JAVA se tendrán en cuenta
los siguientes datos:
• El tipo char se trata internamente como un entero de 8 bits a efectos de conversión
automática de tipos. Los 127 primeros caracteres se correspondes con los del código ASCII.
• Los códigos numéricos que representan los caracteres alfanuméricos son consecutivos,
comenzando en:
o Mayúsculas:
‘A’ = 65 (41 en hexadecimal)
‘Z’ = 90 (5A en hexadecimal)
o Minúsculas:
‘a’ = 97 (61 en hexadecimal)
‘z’ = 122 (7A en hexadecimal)
o Números:
‘0’ = 48 (30 en hexadecimal)
‘9’ = 57 (39 en hexadecimal)
72. (*½) Escribir un fichero de comandos que lea desde teclado (con la función input) un verbo y lo muestre
por pantalla conjugado en presente de indicativo. Si la cadena de caracteres de entrada no fuese un verbo
(y solamente un verbo), se imprimirá un mensaje de error.
Nota: Existen tres conjugaciones –ar, -er, -ir. Se supondrá que los verbos introducidos son regulares.
a. (*½) Reciba como argumento de entrada una frase y la devuelva convertida por completo a
mayúsculas.
b. (*½) Reciba como argumento de entrada una frase y la devuelva convertida por completo a
minúsculas.
74. (**½) Uno de los métodos de encriptación más simples que existen consiste en “desplazar” un mensaje
un valor fijo de posiciones (este valor se conoce como ‘llave’) en el alfabeto. Así por ejemplo, la palabra
MATLAB desplazada una posición (llave = 1) se convierte en NBUMBC. Escribir funciones que:
a. Recibiendo como argumento de entrada una frase y un valor entero (la ‘llave’) devuelva la frase
encriptada.
b. Recibiendo como argumento de entrada una frase encriptada y un valor entero (la ‘llave’ de
encriptación), devuelva la frase desencriptada.
75. (*½) Para comprobar que el proceso de encriptado ha sido correcto, realice un fichero de comandos en el
cual se pida una cadena de texto al usuario, se encripte usando una llave que se pedirá también al usuario,
se muestre por pantalla la frase encriptada, y se desencripte a continuación mostrando por pantalla el
resultado final (que debe ser igual a la frase introducida por teclado).
a. (*½) Recibe como argumento de entrada una cadena de caracteres y la devuelve invertida.
b. (**) Recibe como argumento de entrada una palabra (vector de caracteres sin espacios ni signos
de puntuación) y dice si ésta es un palíndromo o no.
c. (**½) Recibe como entrada una frase y dice si ésta es un palíndromo o no.
En caso de que el vector de caracteres introducido sea palíndromo, las funciones devolverán un 1. Si no
lo son, devolverán un 0.
Nota: Una frase es un palíndromo si se lee igual de izquierda a derecha que de derecha a izquierda. Los
caracteres de espacio en blanco y signos de puntuación no se tendrán en cuenta a la hora de la
comprobación.
a. (**) Recibe como argumento de entrada dos cadenas de caracteres y muestra el índice del
carácter de la primera cadena, en el que empieza, por primera vez, la segunda cadena. Si la
segunda cadena de caracteres no está contenida en la primera, se devolverá un -2.
b. (**½) Recibe como argumento de entrada dos cadenas de caracteres y devuelva el número de
veces que aparece la segunda cadena contenida dentro de la primera, así como un vector con las
posiciones en las que se ha encontrado.
Nota: Si el segundo vector de caracteres es más largo que el primero se devolverá un -1.
EJERCICIOS AVANZADOS
78. (***½) Realizar una función que rellene en espiral una matriz cuadrada de tamaño nxn con números
enteros en orden creciente.
79. (***½) Escribir una función que calcule la inversa de una matriz que se recibe como argumento de entrada
mediante el método de eliminación gaussiana.
80. (****) Realizar una función que dibuje un círculo de radio r (argumento de entrada) con asteriscos.
81. (****) Realizar una función que haga la peregrinación del caballo por un tablero de ajedrez. La
peregrinación del caballo consiste en desplazar un caballo por un tablero de ajedrez de manera que pase
por todas las casillas sin repetir ninguna en el camino.
82. (****) Realizar una función que consiga colocar 8 damas en un tablero de ajedrez sin que ninguna de ellas
se mate con otra.
83. (****) Realizar una función que consiga colocar 5 damas en un tablero de ajedrez de modo que todo el
tablero esté amenazado.
84. (****) Realizar una función que calcule el determinante de una matriz de orden n mediante la definición
de determinante (desarrollo por adjuntos). Nota: es recomendable realizar esta función de modo
recursivo.