Ejercicios para Entregar Matlab 2017-2 Parte 1
Ejercicios para Entregar Matlab 2017-2 Parte 1
Ejercicios para Entregar Matlab 2017-2 Parte 1
1. Años bisiestos. Cuando la Tierra completa una órbita alrededor del Sol, no han transcurrido
exactamente 365 rotaciones sobre sí misma, sino un poco más. Más precisamente, la
diferencia es de más o menos un cuarto de día. Para evitar que las estaciones se desfasen con
el calendario, el calendario juliano introdujo la regla de introducir un día adicional en los años
divisibles por 4 (llamados bisiestos), para tomar en consideración los cuatro cuartos de día
acumulados.Sin embargo, bajo esta regla sigue habiendo un desfase, que es de
aproximadamente 3/400 de día. Para corregir este desfase, en el año 1582 el papa Gregorio
XIII introdujo un nuevo calendario, en el que el último año de cada siglo dejaba de ser bisiesto,
a no ser que fuera divisible por 400. Escriba un programa que indique si un año es bisiesto o
no, teniendo en cuenta cuál era el calendario vigente en ese año, ejemplo:
2. Haga un programa que simule una calculadora, con las operaciones básicas: + - * /
3. Edad. Haga un programa que calcule la edad del usuario a partir de la fecha de su nacimiento.
4. El joven periodista Solarrabietas debe relatar un partido de tenis, pero no conoce las reglas del
deporte. En particular, no ha logrado aprender cómo saber si un set ya terminó, y quién lo
ganó. Un partido de tenis se divide en sets. Para ganar un set, un jugador debe ganar 6 juegos,
pero además debe haber ganado por lo menos dos juegos más que su rival. Si el set está
empatado a 5 juegos, el ganador es el primero que llegue a 7. Si el set está empatado a 6
juegos, el set se define en un último juego, en cuyo caso el resultado final es 7-6.
Ejemplo:
5. Los tres lados a, b y c de un triángulo deben satisfacer la desigualdad triangular: cada uno de
los lados no puede ser más largo que la suma de los otros dos.
Escriba un programa que reciba como entrada los tres lados de un triángulo, e indique: si
acaso el triángulo es inválido (es decir no se puede armar un triángulo); y si no lo es, qué tipo
de triángulo es.
Ejemplo:
Ingrese a: 3.9
Ingrese b: 6.0
Ingrese c: 1.2
No es un triángulo valido.
Ingrese a: 1.9
Ingrese b: 2
Ingrese c: 2
El triángulo es isósceles.
Ingrese a: 3.0
Ingrese b: 5.0
Ingrese c: 4.0
El triángulo es escaleno.
El índice de masa corporal es el cociente entre el peso del individuo en kilos y el cuadrado de
su estatura en metros.
Escriba un programa que reciba como entrada la estatura, el peso y la edad de una persona, y
le entregue su condición de riesgo. i
7. Escriba un programa que muestre la tabla de multiplicar del 1 al 10 del número ingresado
por el usuario:
Ingrese un número: 9
9x1=9
9 x 2 = 18
9 x 3 = 27
9 x 4 = 36
9 x 5 = 45
9 x 6 = 54
9 x 7 = 63
9 x 8 = 72
9 x 9 = 81
9 x 10 = 90
8. Escriba un programa que genere todas las potencias de 2, desde la 0-ésima hasta la
ingresada por el usuario:
Ingrese num: 10
1 2 4 8 16 32 64 128 256 512 1024
9. Escriba un programa que pida al usuario dos números enteros, y luego entregue la suma
de todos los números que están entre ellos. Por ejemplo, si los números son 1 y 7, debe
entregar como resultado 2 + 3 + 4 + 5 + 6 = 20.
Ingrese num: 1
Ingrese num: 7
La suma es 20
10. Un viajero desea saber cuánto tiempo tomó un viaje que realizó. Él tiene la duración en
minutos de cada uno de los tramos del viaje.
Desarrolle un programa que permita ingresar los tiempos de viaje de los tramos y entregue
como resultado el tiempo total de viaje en formato horas:minutos.
El programa deja de pedir tiempos de viaje cuando se ingresa un 0.
Duracion tramo: 15
Duracion tramo: 30
Duracion tramo: 87
Duracion tramo: 0
Tiempo total de viaje: 2:12 horas
Duracion tramo: 51
Duracion tramo: 17
Duracion tramo: 0
Tiempo total de viaje: 1:08 horas
11. Escriba un programa que muestre una tabla de multiplicar como la siguiente:
1 2 3 4 5 6 7 8 9 10
2 4 6 8 10 12 14 16 18 20
3 6 9 12 15 18 21 24 27 30
4 8 12 16 20 24 28 32 36 40
5 10 15 20 25 30 35 40 45 50
6 12 18 24 30 36 42 48 54 60
7 14 21 28 35 42 49 56 63 70
8 16 24 32 40 48 56 64 72 80
9 18 27 36 45 54 63 72 81 90
10 20 30 40 50 60 70 80 90 100
12. Escriba un programa que pida al usuario ingresar la altura y el ancho de un rectángulo y lo
dibuje utilizando asteriscos:
Altura: 3
Ancho: 5
*****
*****
*****
13. Escriba un programa que dibuje el triángulo del tamaño indicado por el usuario de
acuerdo al ejemplo:
Altura: 5
*
**
***
****
*****
14. Escriba un programa que dibuje el hexágono del tamaño indicado por el usuario de
acuerdo al ejemplo:
Lado: 4
****
******
********
**********
********
******
****
15. Desarolle un programa para estimar el valor de π usando la siguiente suma infinita:
( )
La entrada del programa debe ser un número entero n que indique cuántos términos de la
suma se utilizarán.
n: 3
3.466666666666667
n: 1000
3.140592653839794
16. Desarrolle un programa que permita trabajar con las potencias fraccionales de dos, es decir:
en forma decimal:
0.5,0.25,0.125,0.0625,0.03125,0.015625,…
El programa debe terminar cuando la fracción decimal sea menor o igual a 0.000001.
17. El número de Euler, e ≈ 2,71828, puede ser representado como la siguiente suma infinita:
Desarrolle un programa que entregue un valor aproximado de e, calculando esta suma hasta
que la diferencia entre dos sumandos consecutivos sea menor que 0,0001.
La conjetura de Collatz afirma que, al partir desde cualquier número, la secuencia siempre
llegará a 1. A pesar de ser una afirmación a simple vista muy simple, no se ha podido
demostrar si es cierta o no.
n: 18
18 9 28 14 7 22 11 34 17 52 26 13 40 20 10 5 16 8 4 2 1
n: 19
19 58 29 88 44 22 11 34 17 52 26 13 40 20 10 5 16 8 4 2 1
n: 20
20 10 5 16 8 4 2 1
19. Desarrolle un programa que grafique los largos de las secuencias de Collatz de los números
enteros positivos menores que el ingresado por el usuario:
n: 20
1*
2 **
3 ********
4 ***
5 ******
6 *********
7 *****************
8 ****
9 ********************
10 *******
11 ***************
12 **********
13 **********
14 ******************
15 ******************
16 *****
17 *************
18 *********************
19 *********************
20 ********
20. Escriba un programa que muestre los números naturales menores o iguales que un número n
determinado, que no sean múltiplos ni de 3 ni de 7.
Ingrese número: 24
1
2
4
5
8
10
11
13
16
17
19
20
22
23
21. Escriba sendos programas que pidan al usuario la entrada correspondiente y calculen las
siguientes operaciones:
El factorial n! de un número entero n≥0, definido como:
n!=1⋅2⋅3⋅ ⋅n.
̂
La potencia factorial creciente definida como:
̂ ( )( ) ( )
( )
( )
El número de Stirling del segundo tipo S(n,k), que se puede calcular como:
( ) ∑( ) ( )( )
22. Un jugador debe lanzar dos dados numerados de 1 a 6, y su puntaje es la suma de los valores
obtenidos. Un puntaje dado puede ser obtenido con varias combinaciones posibles. Por
ejemplo, el puntaje 4 se logra con las siguientes tres combinaciones: 1+3, 2+2 y 3+1.
Ingrese el puntaje: 4
Hay 3 combinaciones para obtener 4
Ingrese el puntaje: 11
Hay 2 combinaciones para obtener 11
Ingrese el puntaje: 17
Hay 0 combinaciones para obtener 17
23. Escriba un programa que pida al usuario que ingrese varios valores enteros, que pueden ser
positivos o negativos. Cuando se ingrese un cero, el programa debe terminar y mostrar un
gráfico de cuántos valores positivos y negativos fueron ingresados:
24. Escriba un programa que determine la cantidad de dígitos en un número entero ingresado
por el usuario:
Ingrese numero: 12
12 tiene 2 digitos
Ingrese numero: 0
0 tiene 1 digito
Escriba un programa que reciba como entrada las coordenadas en que se encuentra un
caballo, y entregue como salida todas las casillas hacia las cuales el caballo puede desplazarse.
Todas las coordenadas mostradas deben estar dentro del tablero.
Si la coordenada ingresada por el usuario es inválida, el programa debe indicarlo.
Posición invalida.
Se define como:
Cuantos números: 3
n1 = 1
n2 = 3
n3 = 2
H = 1.63636363636363636363
28. En cada ronda del juego del cachipún, los dos competidores deben elegir entre jugar tijera,
papel o piedra.
Las reglas para decidir quién gana la ronda son: tijera le gana a papel, papel le gana a piedra,
piedra le gana a tijera, y todas las demás combinaciones son empates.
El ganador del juego es el primero que gane tres rondas.
Escriba un programa que pregunte a cada jugador cuál es su jugada, muestre cuál es el
marcador después de cada ronda, y termine cuando uno de ellos haya ganado tres rondas. Los
jugadores deben indicar su jugada escribiendo tijera, papel o piedra.
A: tijera
B: papel
1-0
A: tijera
B: tijera
1-0
A: piedra
B: papel
1-1
A: piedra
B: tijera
2-1
A: papel
B: papel
2-1
A: papel
B: piedra
3-1
A es el ganador
29. Un número primo es un número natural que sólo es divisible por 1 y por sí mismo.
Los números que tienen más de un divisor se llaman números compuestos. El número 1 no es
ni primo ni compuesto.
Escriba un programa que reciba como entrada un número natural, e indique si es primo o
compuesto:
Ingrese un número: 17
17 es primo
30. Escriba un programa que muestre los n primeros números primos, donde n es ingresado por el
usuario:
Cuantos primos: 10
2
3
5
7
11
13
17
19
23
29
31. Escriba un programa que muestre los números primos menores que m, donde m es ingresado
por el usuario:
32. Escriba un programa que cuente cuántos son los números primos menores que m, donde m es
ingresado por el usuario:
33. Todos los números naturales mayores que 1 pueden ser factorizados de una única manera
como un producto de divisores primos.
Escriba un programa que muestre los factores primos de un número entero ingresado por el
usuario:
Ingrese número: 204
2
2
3
17
34. La conjetura de Goldbach sugiere que todo número par mayor que dos puede ser escrito como
la suma de dos números primos. Hasta ahora no se conoce ningún número para el que esto no
se cumpla. Escriba un programa que reciba un número par como entrada y muestre todas las
maneras en que puede ser escrito como una suma de dos primos:
Muestre sólo una de las maneras de escribir cada suma (por ejemplo, si muestra 61 + 271, no
muestre 271 + 61).
38. Es posible expresar 100 como la suma de tres cubos, cada uno de los cuales puede ser
negativo o positivo.
Sólo se conocen tres maneras de hacerlo. Una de ellas es la siguiente:
18703−17973−9033=100.
39. Los números de Fibonacci Fk son una sucesión de números naturales definidos de la siguiente
manera:
F0=0
F1=1
Fk=Fk−1+Fk−2, cuando k≥2.
Escriba un programa que reciba como entrada un número entero n, y entregue como salida el
n-ésimo número de Fibonacci:
Ingrese n: 11
F11 = 89
40. Escriba un programa que reciba como entrada un número entero e indique si es o no un
número de Fibonacci:
Ingrese un número: 34
34 es número de Fibonacci
Ingrese un número: 78
78 no es número de Fibonacci
41. Escriba un programa que muestre los m primeros números de Fibonacci, donde m es un
número ingresado por el usuario:
Ingrese m: 7
Los 7 primeros números de Fibonacci son:
0112358
21 22 23 24 25
20 7 8 9 10
19 6 1 2 11
18 5 4 3 12
17 16 15 14 13
43. Escriba un programa que entregue la suma de las diagonales en una espiral de 1001 × 1001
creada de la misma manera que en el ejercicio anterior. Entre todos los enteros mayores a 1
hay solamente cuatro que pueden ser representados por la suma de los cubos de sus dígitos.
37 12 sí 12
18 24 no
9 48 sí 60
4 96 no
2 192 no
1 384 sí 444
Dicha suma es el producto de los dos números. La siguiente tabla muestra el cálculo realizado
para multiplicar 37 por 12, cuyo resultado final es 12 + 48 + 384 = 444.
Ingrese multiplicador: 37
Ingrese multiplicando: 12
Resultado: 444
45. Un par de números m y n son llamados amistosos (o se conocen como un par amigable), si la
suma de todos los divisores de m (excluyendo a m) es igual al número n, y la suma de todos
los divisores del número n (excluyendo a n) es igual a m (con m ≠ n).
Por ejemplo, los números 220 y 284 son un par amigable porque los únicos números que
dividen de forma exacta 220 son 1, 2, 4, 5, 10, 11, 20, 22, 44, 55 y 110, y
1 + 2 + 4 + 5 + 10 + 11 + 20 + 22 + 44 + 55 + 110 = 284
Por lo tanto, 220 es un número amistoso. Los únicos números que dividen exactamente 284
son 1, 2, 4, 71 y 142 y
1 + 2 + 4 + 71 + 142 = 220
Muchos pares de números amigables son conocidos; sin embargo, sólo uno de los pares (220,
284) tiene valores menores que 1000. El siguiente par está en el rango [1000, 1500].
46. El método computacional más común para calcular raíces cuadradas (y otras funciones
también) es el método de Newton de aproximaciones sucesivasii. Cada vez que tenemos una
estimación y del valor de la raíz cuadrada de un número x, podemos hacer una pequeña
manipulación para obtener una mejor aproximación (una más cercana a la verdadera raíz
cuadrada) promediando y con x/y.
Por ejemplo, calculemos la raíz cuadrada de 2 usando la aproximación inicial √ :
Al continuar este proceso, obtenemos cada vez mejores estimaciones de la raíz cuadrada.
El algoritmo debe detenerse cuando la estimación es «suficientemente buena», que debe ser
un criterio bien definido.
a) Escriba un programa que reciba como entrada un número real xx y calcule su raíz
cuadrada usando el método de Newton. El algoritmo debe detenerse cuando el cuadrado
de la raíz cuadrada estimada difiera de xx en menos de 0,0001.
b) Escriba un programa que reciba como entrada el número real xx y un número entero
indicando con cuántas cifras decimales de precisión se desea obtener su raíz cuadrada.
El método de Newton debe detenerse cuando las cifras de precisión deseadas no cambien de
una iteración a la siguiente.
Por ejemplo, para calcular 2√2 con dos cifras de precisión, las estimaciones sucesivas son
aproximadamente 1; 1,5; 1,416667 y 1,414216. El algoritmo debe detenerse en la cuarta
iteración, pues en ella las dos primeras cifras decimales no cambiaron con respecto a la
iteración anterior:
Ingrese x: 2
Cifras decimales: 2
La raíz es 1.4142156862745097
47. Desarrolle un programa que dibuje un triángulo de Pascal, o sea, una disposición de números
enteros tales que cada uno sea la suma de los dos que están por encima de él:
Genere las primeras 20 líneas. Considere que en la línea 20 aparecen números de cinco
dígitos.
48. Un tablero de ajedrez es una grilla de ocho filas y ocho columnas, numeradas de 1 a 8. Dos de
las piezas del juego de ajedrez son el alfil y la torre. El alfil se desplaza en diagonal, mientras
que la torre se desplaza horizontal o verticalmente. Una pieza puede ser capturada por otra si
está en una casilla a la cual la otra puede desplazarse:
Escriba un programa que reciba como entrada las posiciones en el tablero de un alfil y de una
torre, e indique cuál pieza captura a la otra:
Fila alfil: 7
Columna alfil: 6
Fila torre: 4
Columna torre: 3
Alfil captura
Fila alfil: 3
Columna alfil: 4
Fila torre: 7
Columna torre: 4
Torre captura
Fila alfil: 3
Columna alfil: 3
Fila torre: 8
Columna torre: 5
Ninguna captura
Suponga que los datos ingresados son válidos. Su programa debe funcionar para tableros de
cualquier tamaño.
[5.96, 6.74, 7.43, 4.99, 7.20, 0.56, 2.80], entonces el rango es 7.43 − 0.56 = 6.87.
pregunte al usuario cuántos datos serán ingresados, pida al usuario ingresar los datos uno por
uno, y entregue como resultado el rango de los datos.
Valor 1: 5.96
Valor 2: 6.74
Valor 3: 7.43
Valor 4: 4.99
Valor 5: 7.20
Valor 6: 0.56
Valor 7: 2.80
El rango es 6.87
50. En finanzas, el valor actual neto es un indicador de cuán rentable será un proyecto.
Se calcula sumando los flujos de dinero de cada mes divididos por ( ) , donde n es el
número del mes y r es la tasa de descuento mensual, y restando la inversión inicial.
Por ejemplo, en un proyecto en que la inversión inicial es $900, los flujos de dinero estimados
para los primeros cuatro meses son $550, $230, $341 y $190, y la tasa de descuento mensual
es de 4%, el valor actual neto es:
Escriba un programa que pida al usuario ingresar la inversión inicial y el porcentaje de tasa de
descuento. A continuación, debe preguntar el flujo de dinero estimado para cada mes y
mostrar cuál es la parte entera del VAN hasta ese momento.
% tasa de descuento: 4
VAN: -371
VAN: -158
VAN: 144
i
Jennifer Campbell et al. Practical Programming: An Introduction to Computer Science Using Python.
Pragmatic Bookshelf, 2009.
ii
Harold Abelson, Gerald Jay Sussman. Structure and Interpretation of Computer Programs. 2nd Edition. MIT
Press, 1996.