ALTE DOCUMENTE
|
||||||||||
1. Escribir un método que reciba dos variables enteras e intercambie sus valores. El método devolverá el valor final de la primera de ellas.
2. Escribir un método que reciba dos valores enteros y devuelva la suma de ambos.
3. Escribir una clase para evaluar ecuaciones de la forma: ax3 + bx2 + cx + d. La clase desarrollada deberá tener al menos dos métodos. El primero permitirá asignar valores a los coeficientes a, b, c, d. El segundo nos permitirá evaluar la ecuación para el valor de x pasado como argumento. Finalmente, escribir una segunda clase que cree al menos un objeto de la clase anterior y pruebe su funcionamiento.
4. Escribir una clase que convierta grados centígrados a grados Fahrenheit. Igual que en el caso anterior, la clase desarrollada tendrá dos métodos. El primero nos permitirá asignar una determinada temperatura medida en grados centígrados. El segundo nos facilitará la conversión de la temperatura anterior a grados Fahrenheit.
Nota: La relación entre los grados centígrados y los grados Fahrenheit viene dada por la expresión: Fahrenheit = 9/5 * centígrados + 32
5. Revisar el ejercicio anterior, para que las conversiones puedan utilizarse en los dos sentidos. Para conseguirlo, podríamos plantear dos métodos que asignen valores (uno para grados centígrados y otro para grados fahrenheit) y otros dos que permitan recuperarlos. De esta forma, se podrán asignar temperaturas en grados centígrados y obtenerlos en grados fahrenheit o a la inversa.
Nota: para realizar la conversión a la inversa, podremos utilizar la siguiente relación: centígrados = (5/9) * (fahrenheit – 32)
6. Suponer que A, B, C, D son cuatro variables numéricas que forman parte del entorno de un algoritmo y el que siguiente fragmento forma parte de ese mismo algoritmo:
if (A > 0 || B > C) && (D > A || D < 5)
else
Queremos saber los valores finales de A, B, C, D después de la ejecución de esta secuencia si, antes de la ejecución los valores de estas variables son los siguientes:
A |
B |
C |
D |
|
Caso 1: | ||||
Caso 2: | ||||
Caso 3: |
7. Supongamos que las variables numéricas X, Y, S forman parte del entorno al que pertenece el siguiente fragmento de algoritmo:
if ( X > 0 )
S = 1;
else
Completar la tabla de verdad siguiente, indicando el valor final de la variable S en cada uno de los cuatro casos:
X > 0 |
Y > 0 |
S |
verdadero |
verdadero | |
verdadero |
falso | |
falso |
verdadero | |
falso |
falso |
Se puede deducir otra secuencia que tenga el mismo efecto que la anterior, pero en la que no haya anidamiento de si y no se repita la escritura de la acción S
8. Consideremos el siguiente esquema condicional:
if ( p && q )
e;
else
s;
Si p y q son dos predicados elementales y e y s son acciones, ¿cuál sería la secuencia equivalente en la que se utilizara un esquema condicional distinto para evaluar cada predicado elemental?
9. Observar el siguiente fragmento de un algoritmo e intentar escribir una nueva versión que resulte más concisa:
if (X > 0)
else
10. Observar el siguiente fragmento de un algoritmo e intentar escribir una nueva versión que resulte más concisa:
if (X = 3)
else
11. Observar el siguiente fragmento de un algoritmo e intentar escribir una nueva versión que resulte más concisa:
if (X = 5)
else
12. ¿Qué resultados se obtienen al realizar las operaciones siguientes? Si hay errores en alguna línea, explicar en qué consisten.
int a = 10, b = 3, c = 1, d, e;
float x, y;
x = a / b;
c = a < b && c;
d = a + b++;
e = ++a – b;
y = (flota) a / b;
13. Decidir que tipos de datos se necesitan para escribir un programa que calcule la suma y la media de cuatr 10210d37k o números de tipo int.
14. Determinar si un número introducido por teclado es positivo o negativo.
15. Desarrollar un algoritmo que reciba dos números enteros y devuelva 1 si el primero es mayor y 2 si lo es el segundo.
16. Mejorar el algoritmo anterior para que detecte si los números son iguales. En ese caso devolverá un 0. Estudiar diferentes alternativas.
17. Escribir un algoritmo que reciba un número y escriba su valor absoluto.
18. Escribir un algoritmo que reciba un número y diga si es par o impar.
19. Escribir un algoritmo que reciba dos números y diga cual es el mayor.
20. Diseñar un programa que admita un carácter y de como resultado su valor, suponiendo que el carácter representa un dígito romano.
De modo que: I = 1, V = 5, X = 10, L = 50, C = 100, D = 500 y M = 1000
Si el carácter no se corresponde con un dígito romano, el resultado será cero.
21. Realizar un programa que ordene tres números entrados por teclado, teniendo en cuenta que en cada condición preguntaremos solo por una pareja de valores.
22. Escribir un método que reciba un número entre 1 y 7 y devuelva una cadena con el día de la semana correspondiente ( 1 = “Lunes”, 2= “Martes”, etc.) Realizar un aversión utilizando la sentencia if y otra con la sentencia switch.
23. Determinar el precio de un billete de ida y vuelta por avión, conociendo la distancia a recorrer, el número de días de estancia y sabiendo que si la distancia es superior a 1000 Km. y el número de días de estancia superior a 7, la línea aérea le hace un descuento del 30 por 100 (precio por kilómetro = 8'50).
24. Dados dos números enteros, realizar el algoritmo que calcule el cociente y el resto.
25. Escribir un programa que ayude a una chica de un supermercado a dar el cambio de una compra, suponiendo que dispone de billetes y monedas del siguiente importe: 5000, 1000, 500, 100, 25, 5, 1.
26. Los tres números x, y, z se dice que forman una tríada de Pitágoras si el cuadrado de z es igual a la suma de los cuadrados de x e y (es decir: z^2 = x^2 + y^2). Escribir un algoritmo que averigüe si tres números introducidos por el usuario forman una tríada de Pitágoras.
27. Realizar un programa en el que dada la longitud del lado de un cuadrado, se nos permita elegir entre calcular el perímetro o la superficie de dicho cuadrado.
28. Realizar un programa que resuelva una ecuación de segundo grado.
29. Escribir un programa que acepte seis enteros, representando: día, mes y año del nacimiento de un individuo y día, mes y año actuales. El programa escribirá "MAYOR" si es mayor de edad y "MENOR" si no lo es.
30. Escribir un algoritmo que lea cuatro valores numéricos y después escriba el más pequeño de ellos. Utilizar sólo esquemas condicionales con predicados elementales.
31. Escribir un algoritmo que lea cuatro valores numéricos y después escriba el más pequeño de ellos. Esta vez , utilizaremos predicados compuestos.
32. Diseñar un programa que imprima los mil primeros números en orden creciente.
33. Diseñar un programa que imprima los mil primeros números en orden decreciente
34. Realizar un programa que muestre y cuente los múltiplos de 3 existentes entre 1 y 100.
35. Diseñar un programa que muestre los múltiplos de cuatro existentes entre dos números dados.
36. Imprimir y contar los números naturales menores de 100, que son múltiplos de 2 y 3 a la vez.
37. Escribir una tabla con las temperaturas en grados Fahrenheit de 0 a 300 en intervalos de 20 y su correspondencia en grados Centígrados. Se recomienda utilizar la clase que se definió en el ejercicio 5.
38. Diseñar un programa que sume los números impares inferiores a un número dado.
39. Dado que no disponemos de un operador de exponenciación, necesitamos resolver un algoritmo que dados los números A y B, calcule A^B.
Nota: El exponente podrá ser positivo, negativo o cero.
40. Escribir una tabla con distancias en kilómetros de 0 a 9.000 y su correspondencia en millas, sabiendo que 1 Km. = 0'6214 millas.
41. Se desea un algoritmo para convertir metros a pies y
pulgadas (1m =
42. Diseñar un algoritmo que reciba una variable LIMITE y encuentre el entero positivo más pequeño NUM para el cual la suma 1 + 2 + 3 + ... + NUM sea menor que LIMITE.
43. Escribir un algoritmo que reciba un número natural (entero positivo) menor de 500. y que muestre, sume y cuente los números que están separados entre sí 8 posiciones, desde ese número al 500 (incluidos los extremos).
44. Realizar un algoritmo que reciba dos números inferiores a 1000. Si el más pequeño se incrementa de 5 en 5 y el mayor se decrementa de 2 en dos, imprimir ambas series de números, de una forma alternativa, hasta que el menor supere al mayor (incluida esta superación).
45. Obtener un algoritmo que permita calcular la tabla de multiplicar mediante bucles anidados.
46. Realizar el ejercicio de la exponenciación usando la idea de cuadrados sucesivos. Es decir, que B^4 = B^2 * B^2. Podemos decir que B^N = (B^2)^(N/2) si N es par, y que B^N = B * B^(N-1) si N es impar.
47. Modificar el ejercicio anterior para que B pueda ser elevada a cualquier potencia real o entera.
Nota: se puede usar al fórmula: B^N= e^(N.ln B) (examinar si B tiene un valor negativo).
Otra nota: Usar un valor aproximado de e = 2.7182818284
48. Escribir un método que reciba un número y calcule su factorial de forma ascendente y descendente.
49. Realizar un método que decida si un número recibido es o no capicúa.
50. Realizar un método que averigüe si un número dado es primo.
Nota: Un número N será primo si ninguno de los cocientes N/2, N/3, N/4, ..., N/ es un valor entero.
51. Diseñar un programa que averigüe el menor número primo que sea mayor que un número introducido por teclado.
52. Mostrar los números capicúas de cuatro cifras que sean múltiplos de 36.
53. Generar la siguiente pirámide, usando bucles anidados:
54. Se dispone de 20 temperaturas tomadas a las 8 horas en Majadahonda durante el mes de febrero de 1987. Debemos escribir un programa que acepte dichas temperaturas y nos informe de cuántas son inferiores a 0º C.
55. Aceptar e imprimir una serie de números, hasta que se introduzca un cero. Decir al final cuántos se han introducido (sin contar el cero).
56. Un programa que acepte números acabando la serie en cero. Al final debe de mostrar el mayor y el menor y cuantos entraron entre 5 y 25.
57. Resolver un algoritmo que nos permita calcular la superficie de un conjunto de círculos, introduciendo su radio. El programa acabará al introducir un radio igual a cero.
Nota: La superficie de un círculo es S = PI * R^2 (donde PI= 3.141592
58. Un programa que acepte números positivos, acabando la serie en cero. Debe mostrar todos los divisores de cada uno de ellos y al final la suma de los números introducidos.
59. Diseñar un programa que nos pida cuántos números queremos introducir, a continuación nos pedirá esos números y se calculará la media de ellos.
60. Dados 10 números enteros, visualizar la suma de los números pares, cuántos números pares existen y la media aritmética de los impares.
61. Se llama media armónica de dos números al resultado obtenido al calcular los inversos de los números, promediarlos y calcular el inverso del resultado. Escribir un programa que acepte una serie de números acabados en cero y devuelva la media armónica de ellos (excluyendo el cero).
Nota: El inverso de un número es aquél que multiplicado con éste da como resultado 1. (a * ( 1 / a ) = 1)
62. Escribir un programa que haciendo preguntas al operador, adivine de la forma más óptima posible, el número que aquél pensó, suponiendo que dicho número se encuentra entre 1 y 100.
63. Escribir un programa que acepte un capital, un porcentaje de interés anual y el número de años de imposición. El programa escribirá por pantalla un listado del interés producido por ese capital año a año, así como el capital acumulado con los intereses anteriores.
Nota: Cada año, se incrementa el capital base con sus intereses.
64. Calcular el máximo común divisor por el algoritmo de Euclides. Este algoritmo se basa en que si R es el resto de dividir A por B, el MCD de A y B, es el mismo que el de B y R. Este procedimiento se repite hasta que un número sea divisible por el otro. Llegado este caso, el MCD es el segundo.
65. Se introduce por teclado el número de matrícula, el nombre, y las notas correspondientes a las asignaturas pendientes de un grupo de alumnos. Se imprimirá el número de matrícula, el nombre y la nota media de cada uno de ellos. El proceso terminará cuando se introduce un 0 en el número de matrícula.
Nota: El número de asignaturas pendientes variará de un alumno a otro.
66. Los trabajadores de una fábrica de automóviles tienen tres turnos: mañana, noche y festivos. Se desea calcular el sueldo semanal de cada empleado, introduciendo las horas totales trabajadas y el turno en que se encuentra, según la siguiente tarifa:
600 Pts./hora turno de mañana
800 Pts./hora turno de noche
1000 Pts./hora turno de festivos.
Además, si las horas trabajadas superan 40, las restantes son extras y se pagan un 20% mas caras.
67. Un capital C se coloca a un interés anual R. ¿Al cabo de cuántos años se doblará?
Nota: El interés producido por un capital en un año es:
i = C*R / 100
68. Se trata de hacer una estadística de las alturas de los 500 alumnos de un colegio, de acuerdo con la siguiente tabla:
Alturas hasta 1.60 m |
w niños |
Alturas entre 1.61 m y 1.70 m |
x niños |
Alturas entre 1.71 m y 1.80 m |
y niños |
Alturas mayores de 1.80 m |
z niños |
69. Se han realizado varias mediciones de la polución en
días consecutivos (los valores son números enteros en el rango de
Los días primero y último no se considerarán nunca máximos locales.
Se puede considerar que hay un minino de tres medidas y no se pueden utilizar vectores en la resolución del problema.
70. Escribir un programa que vaya leyendo enteros por teclado acabando la serie en 0 y determine si dichos enteros vienen dados en orden creciente o no, escribiendo el mensaje correspondiente en pantalla.
71. Cuántos pares de conejos pueden obtenerse a partir de una sola pareja en un año?.
Hemos de suponer que cada par produce un nuevo par cada mes. Cada nuevo par se vuelve fértil al cabo de 1 mes y los conejos nunca mueren.
STRING
S1.- Escribir un programa en Java que lea una frase por el teclado y cuente el numero de cada una de las vocales.
S.2- Escribir un programa en Java que lea una frase y me diga en que posicion de la frase esta la primera y la ultima vocal.
S3.- Escribir un programa en Java para leer una frase y una palabra y me diga si la palabra esta en la frase y en que posicion empieza.
S4.- Escribir un programa en Java para jugar al juego del ahorcado.
72. Realizar dos algoritmos: el primero cargará un vector de 1400 elementos con valores enteros aleatorios comprendidos entre 1 y 100. La segunda retornará el menor elemento del vector anterior, y cuántas veces se repite.
73. Diseñar un algoritmo que reciba un vector de valores reales, y el número de elementos que dicho vector tiene. La función retornará la diferencia entre el mayor y el menor elemento.
74. Una clase de 40 estudiantes hace un examen que se califica de 0 a 10. Escribir un programa que calcule:
a. La nota media de la clase
b. El número de alumnos con las calificaciones de MUY DEFICIENTE, INSUFICIENTE, SUFICIENTE, BIEN, NOTABLE y SOBRESALIENTE teniendo en cuenta que la calificación se asigna según la siguiente tabla:
menor que 3 . .. . .. MUY DEFICIENTE
menor que 5 . .. . .. INSUFICIENTE
menor que 6 . .. . .. SUFICIENTE
menor que 7 . .. . .. BIEN
menor que 8.5 .. . .. NOTABLE
de 8.5 en adelante .. SOBRESALIENTE
c. El porcentaje de alumnos con cada una de las calificaciones.
d. Que imprima cada calificación y su diferencia con la media
Nota: Para llevar los contadores hay que usar un vector, no se pueden usar muchas variables diferentes.
75. Escribir un algoritmo que reciba un vector de nombres y el número de elementos que dicho vector tiene. La función retornará TRUE si el vector está ordenado creciente o decrecientemente y FALSE en caso contrario.
Nota: El vector se recorrerá una vez como máximo.
76. Escribir un algoritmo que descomponga cualquier número en factores primos.
77. Escribir un algoritmo que imprima el calendario de este año.
78. He aquí una técnica interesante para obtener una lista de números primos que estén dentro del intervalo desde 2 a n.
a. Generar una lista ordenada de enteros comprendidos en el intervalo de 2 a n.
b. Para un entero particular, i, de la lista realizar las siguientes operaciones:
i. Imprimir el entero, añadiéndolo así a la lista de números primos.
ii. Eliminar todos los enteros múltiplos de i de la lista.
c. Repetir el apartado (b) para cada valor sucesivo de i; comenzar con i=2 y acabar con el último entero restante.
Este método se conoce como «Criba de Eratóstenes».
Escribir un algoritmo que usando éste método escriba todos los números existente entre 1 y un número entero dado (n).
79. Escribir un algoritmo que acepte como parámetros un vector de enteros, y el número de elementos que dicho vector tiene. El algoritmo retornará VERDADERO si el vector es UNIMODAL, y FALSO si no lo es.
Se dice que un vector es unimodal si tiene un único máximo o mínimo local, entendiéndose por tal aquél que es mayor o menor que los dos elementos que lo circundan.
80. Se dispone de un array T de 50 números reales distintos de cero. Modificar el array para que todos sus elementos resulten divididos por el elemento T(K), siendo K un valor dado.
81. Escribir un algoritmo que lea por teclado dos arrays de reales, llamados X e Y, de longitud N (valor que se solicitará al operador que no podrá ser superior a 100). A continuación el programa calculará las siguientes cantidades:
a. La media de X ,, Mx = (1/N) ΣNi=1(Xi)
b. La media de Y ,, My = (1/N) ΣNi=1(Yi)
c. El coeficiente 'a' de ajuste lineal por mínimos cuadrados ,, a = (ΣNi=1(Xi.Yi) - N.Mx.My) / (ΣNi=1(X2i) - N.Mx2)
d. El coeficiente 'b' de ajuste lineal por mínimos cuadrados ,, b = My - a . Mx
Por último, el programa principal imprimirá todos los resultados obtenidos.
82. Escribir un algoritmo con los procedimientos necesarios para realizar las siguientes tareas:
a. Solicitar dos números enteros que indiquen el tamaño de sendos vectores, también de tipo entero.
b. Inicializar dichos vectores con números aleatorios comprendidos entre 1 y 100.
c. Fundir los dos vectores anteriores en uno solo, conteniendo este último una sola copia de aquellos elementos que pudieran aparecer repetidos.
83. La matriz identidad es aquella en que los elementos de su diagonal principal son la unidad y el resto cero. Obtener un procedimiento que inicialice una matriz de orden n x n como matriz identidad.
84. Determinar la posición del elemento más grande de una matriz de orden m x n.
85. Leer una matriz de 3 x 3 elementos y calcular la suma de cada una de sus filas y columnas, dejando dichos resultados en dos vectores, uno de la suma de las filas y otro de las columnas.
86. Escribir un algoritmo que resuelva lo siguiente:
En una
tienda automatizada de ultramarinos existen cinco artículos, cada uno de ellos
con su precio correspondiente (100, 250, 270, 800 y
Nuestro ordenador, pregunta qué producto es el que quiere comprar el usuario y cuántas unidades quiere. Si quedan unidades suficientes, se imprimirá el importe de la venta, y se descontarán las unidades del artículo. Si no quedan unidades suficientes, se avisará al usuario y no se efectuará la venta.
El proceso deberá seguir hasta que se introduzca 0 en el artículo a comprar.
Nota: Para llevar estos contadores, hay que usar vectores o matrices, no variables individuales.
87. Tomando como entrada una tabla de enteros A de orden m x n, y una lista X de enteros con n elementos. Deseamos generar una nueva lista de enteros Y formada por la realización de las siguientes operaciones:
Y(1) = A(1,1)*X(1) + A(1,2)*X(2) + ... + A(1, n)*X(n)
Y(2) = A(2,1)*X(1) + A(2,2)*X(2) + ... + A(2, n)*X(n)
Y(m) = A(m,1)*X(1) + A(m,2)*X(2) + ... + A(m, n)*X(n)
Escribir los datos de entrada (es decir, los valores de los elementos de A y X), seguidos de los valores de los elementos de Y.
88. Cada alumno de una clase de licenciatura en Ciencias
de
a. Escribir un algoritmo que permita calcular la media de cada alumno.
b. Modificar el algoritmo para obtener las siguientes medias:
i. General de la clase.
ii. De la clase en cada asignatura.
iii. Porcentaje de faltas a exámenes.
Nota: La media se realizará sólo con los exámenes a los que el alumno se presentó.
89. Determinar si una matriz de orden 3 x 3 es un «cuadrado mágico» (se considera un cuadrado mágico aquél en el cual las filas, columnas y diagonales suman la misma cantidad).
90. Escribir un algoritmo con los procedimientos necesarios para realizar las siguientes tareas:
a. Solicitar dos números enteros que indiquen el tamaño de sendos vectores, también de tipo entero.
b. Inicializar dichos vectores con números aleatorios comprendidos entre 1 y 100.
c. A partir de los vectores anteriores, se creará un tercero, que contendrá solo aquellos elementos que aparecen repetidos en los vectores. En este caso estarán incluidos los que aparecen una vez en cada vector, varias veces en un solo vector o varias veces en ambos vectores. Lógicamente, en el vector destino no aparecerá ningún elemento repetido.
91. Escribir un algoritmo que acepte una lista de países y sus respectivas capitales. A continuación desordenará aleatoriamente la lista, la mostrará numerada en pantalla y nos pedirá que emparejemos cada país con su capital. Finalmente, nos informará si hemos acertado en las soluciones dadas.
92. Se realiza una encuesta en la calle en la que se pregunta:
a. A qué partido se ha votado (los partidos posibles son alguno de los tres siguientes: OIP, AGTI, OTROS).
b. Si se está satisfecho con la actuación del gobierno (las respuestas pueden ser alguna de las tres siguientes: SI, NO, NO CONTESTA).
Se desea conocer el porcentaje de encuestados que responden a cada una de las 9 posibilidades diferentes.
Hay que llevar los contadores en un vector o en una matriz, pero no en variables individuales.
93. Realizar un algoritmo que reciba como parámetros un vector de 4000 elementos de tipo entero, y un valor numérico. El procedimiento deberá devolver la posición de aquél elemento del vector que más se aproxime al valor numérico dado.
94. La ruleta se juega con una rueda que contiene 38 cuadros diferentes en su circunferencia. Dos de ellos numerados 0 y 00, son verdes; 18 son rojos y 18 son negros. Los cuadros rojos y negros van alternados y están numerados del 1 al 36 en orden aleatorio.
Se hace girar la ruleta y se lanza dentro de ella una pequeña bola de marfil que finalmente se detendrá en una de las casillas que hay debajo de los cuadros. La partida se juega apostando por el resultado de cada tirada en uno de los modos siguientes:
a. Seleccionando un único cuadro rojo o negro, 35 a 1. (Es decir, si un jugador hubiera apostado 100 €. y ganara, recibirá un total de 3.600€; los 100 apostados y 3.500 adicionales.)
b. Seleccionando un color, rojo o negro, 1 a 1.(El jugador recibe el doble de lo apostado.)
c. Seleccionando números paras o impares (excluyendo 0 y 00), 1 a 1.
d. Seleccionando los 18 números inferiores ( 1 al 18) o los 18 números superiores ( 19 al 36), 1 a 1.
El jugador perderá automáticamente si la bola cae en uno de los cuadros verdes (0 ó 00), no importa cual fuera la apuesta.
Obtener un algoritmo interactivo que simule partidas de ruleta. Permita que los jugadores elijan la cuantía y el tipo de apuesta que deseen y muestre el resultado de la partida seguido de un mensaje apropiado indicando si cada jugador ha ganado o perdido y qué cantidad.
Cuando finalice la serie de partidas, el ordenador indicará el resultado obtenido por la banca.
95. Torres de Hanoi: Disponemos de tres barras en las que se pueden apilar aros de distintos tamaños. El número de aros deberá estar entre 2 y 10. Suponiendo que al principio tenemos todos los aros situados en una de las barras, ordenados en orden decreciente de sus tamaños, debemos escribir un algoritmo que calcule la secuencia de movimientos que hay que realizar para mover todos los aros desde la barra inicial, a otra elegida por el usuario, sabiendo que solo se puede mover un aro cada vez, y que no se puede poner un aro sobre otro de menor tamaño.
96. Escribir un algoritmo que acepte como parámetros tres enteros: dd, mm, aa. La función retornará TRUE si los enteros representan una fecha válida, y FALSE si los enteros no valen como fecha.
Nota: Hay que tener en cuenta que no todos los meses tienen el mismo número de días, y que existen años bisiestos.
Otra nota: Un año es bisiesto si es divisible por cuatro y no es divisible por 1000). O bien, un año no es bisiesto, si no es divisible por 4, o siendo divisible por 4, también lo es de 100 y no lo es de 400.
97. Dadas dos fechas cualesquiera, determinar el número de días que las separan.
Nota: El mejor camino para conseguirlo, es escribir un algoritmo para calcular los días que hay entre el 01/01/01 y cada una de las fechas y a continuación restar las cantidades.
98. Escribir un algoritmo que reciba una fecha y un número de días y retorne la fecha que será, cuando transcurran esos días.
99. Averiguar el número de días, meses y años que separan dos fechas.
100. Dada una fecha, averiguar el día de la semana a que corresponde.
101. Escribir un algoritmo que, usando alguno de los de las creados hasta el momento, reciba una cadena alfanumérica indicando una fecha en formato «dd/mm/aaaa» y sea capaz de retornar otra cadena alfanumérica con la fecha escrita en letras.
Por ejemplo: Si recibe «13/03/1988», la función retornará: Jueves trece de marzo de mil novecientos ochenta y ocho.
102. Usando los algoritmos de los ejercicios anteriores, escribir otro para que dada una fecha inicial, el primer período de efectos y el número de letras a girar, sea capaz de escribir las fechas de vencimiento de las letras.
Por ejemplo: Si giramos tres letras de cambio a 60, 90 y 120 días desde el día 2 de Marzo de 2000, tendría que escribir las fechas: 1 de Mayo de 2000 (han pasado 60 días), 31 de Mayo de 2000 (han pasado 90 días) y 30 de Junio de 2000 (han pasado 120 días).
Hay que tener en cuenta los posibles cambios de año y los años bisiestos.
103. Se desea diseñar un algoritmo que obtenga el salario neto de n trabajadores (n, se lee del teclado) de acuerdo a los siguientes puntos:
a. Las 30 horas primeras semanales se cobran a la tarifa ordinaria.
b. Cualquier hora extra a 1'5 veces la tarifa ordinaria.
c. Las 50.000 primeras ptas. están libres de impuestos; las siguientes 40.000 ptas. tienen un impuesto del 25% y las restantes del 45%.
104. Modificar el programa de cambio de base para que, disponiendo de una gama de caracteres constituida por los siguientes símbolos:
0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F, G, H, I, J.
Acepte una cifra numérica en base decimal, nos permita elegir una base compatible con los caracteres de la lista, y realice el cambio de base indicado.
105. Se introducen por teclado 100 ternas de datos, correspondientes a los 100 pueblos de Jaén: nombre del pueblo, número de mujeres y número de hombres.
a. Imprimir todos los nombres de los pueblos, el número de habitantes y el % de mujeres.
b. Imprimir el número total de habitantes de la provincia, y el nombre y número de habitantes del pueblo de menor población.
c. Finalmente, imprimir el número de pueblos en los que los hombres superan el 50%.
106. Supongamos una serie de puntos (x1, y1), (x2, y2), ..., (xn, yn) obtenidos de una curva y = f(x), donde x está acotada entre x1 y xn. Deseamos aproximar el área por debajo de la curva dividiéndola en una serie de pequeños rectángulos y calculando en área de estos rectángulos («regla del trapecio»). La fórmula aplicada es:
A = (y1+y2)(x2-x1)/2 + (y2+y3)(x3-x2)/2 + ... + (y n-1 + yn) (xn - x n-1) / 2
107. Obtener un algoritmo que permita a una persona jugar una partida de «tres en raya» contra el ordenador. El usuario podrá ser el primer o el segundo jugador. Si el ordenador es el primer jugador, el primer movimiento se genera aleatoriamente.
108. Diseñar la estructura de datos necesaria para almacenar de una forma eficiente las conexiones entre las 300 estaciones de la red ferroviaria de una región.
Una vez concluida la etapa anterior, escribir un programa, que usando la estructura diseñada, sea capaz de admitir una ciudad y mostrar todas aquellas con las que está conectada y la distancia a la que se encuentran.
Búsquedas y otros algoritmos complejos.
109. Diseñar un algoritmo que acepte como parámetro un entero y retorne el valor 1 si el entero es positivo, 0 si el parámetro es 0 y -1 si es negativo.
110. Realizar un algoritmo que realice la conversión de coordenadas polares (r, a) a coordenadas cartesianas (x, y). (Nota: x = r . cos a y = r . sen a
111. Escribir un algoritmo que admita como parámetros dos enteros (día y mes) y devuelva el valor TRUE si la fecha corresponde a Navidad y FALSE en caso contrario.
112. Diseñar un algoritmo que acepte como parámetro un entero N y devuelva como resultado otro entero igual a la suma de los enteros impares desde 1 hasta N, en caso de que N fuera impar, o la suma de los enteros pares desde 0 hasta N, en el caso de que N fuera par.
113. Escribir un algoritmo que admita como parámetros dos enteros y devuelva TRUE si el primer número es divisible por el segundo y FALSE en caso contrario.
114. Escribir un algoritmo que admita como parámetro un real y devuelva el valor TRUE si el real tiene decimales y FALSE si no los tiene.
115. Empleando el algoritmo que calcula el MCD, realizar un nuevo programa que sea capaz de simplificar una fracción. Para ello, daremos numerador y denominador y el programa los dividirá por el MCD, presentando a continuación los nuevos valores.
116. El método de Newton para calcular raíces cúbicas se basa en que si Y es una aproximación a la raíz cúbica de X, se puede calcular una mejor aproximación con la fórmula: ((X / Y²) + 2*y) / 3
Usando esta fórmula, calcular la raíz cúbica de un número x con una aproximación mayor que una milésima, partiendo de un valor inicial Y=1.
117. Escribir un algoritmo en el que dados los numeradores y denominadores de dos fracciones, muestre el numerador y denominador de su suma.
118. Calcular e imprimir los números perfectos inferiores a un número dado. Un número es perfecto si la suma de sus divisores, excepto el mismo, es igual al propio número.
119. Se dice que dos números son «amigos» si cada uno de ellos es igual a la suma de los divisores estrictos del otro (exceptuando el número). Por ejemplo 220 y 284 son amigos, ya que:
Realizar un algoritmo que escriba todas las parejas de números amigos inferiores o iguales a un número dado.
120. Obtener un algoritmo para calcular las coordenadas x e y de la trayectoria de un proyectil de acuerdo a los parámetros Ó y v, con intervalos de 0.1 s, y las fórmulas siguientes: x = (v cos a)t y = (v seno a)t - ½ at²
donde 0 < a< PI/2 y a = 40 m/s²
121. Obtener un algoritmo que permita calcular el valor de la constante PI mediante la serie matemática siguiente:
PI= 4. ( 1- | ||||||||
Nota: Las operaciones se deben considerar un número finito de términos aunque ello conlleve la pérdida de precisión.
122. Escribir un algoritmo que acepte como parámetro un entero representando la duración, en minutos, de una llamada telefónica y dé como resultado el precio a pagar por la llamada. El método a seguir será el de la antigua facturación por pasos, teniendo en cuenta lo siguiente:
a. Toda llamada que dure tres minutos o menos tiene un coste de 10 pesetas.
b. Cada minuto adicional es un paso de contador y cuesta 5 pesetas.
123. Diseñar un o varios algoritmos que reciban un número real que indique la cantidad de segundos transcurridos desde la medianoche. Se deberá calcular la hora, minuto y segundo correspondiente a la cantidad de segundos recibidos.
124. Escribir un algoritmo que, utilizando el anterior, escriba una tabla por pantalla donde aparezcan los segundos desde 0 hasta 86400 de 1000 en 1000 y las horas, minutos y segundos que les corresponden.
Nota: El número de segundos pasados desde la medianoche lo tratamos como real porque puede ser mayor que 32767.
125. El número de combinaciones de a elementos tomados de b en b es:
(ab) = |
a! |
b!(a-b)! |
donde ! representa el factorial del número correspondiente. Diseñar un algoritmo con los parámetros a y b que permita calcular el número combinatorio (ab).
Nota: (a0) = 1
126. Obtener un procedimiento que imprima el triángulo de Pascal.
|
Recuerda lo indicado en el ejercicio anterior:
(ab) = |
a! |
(a0) = 1 |
b!(a-b)! |
127. El seno de x se puede calcular aproximadamente sumando los n primeros términos de la serie infinita: sen x = x - x^3/3! + x^5/5! - x^7/7! + ...
Donde x se representa en radianes. Obtener un programa que lea un valor de x y calcule su seno.
Nota: realizar una versión del programa que admita los ángulos en grados (360º = 2PI radianes).
128. Implementar un algoritmo que acepte como parámetros tres enteros representando la hora, minuto y segundo en que estamos y devuelva un entero representando el número de segundos que han transcurrido desde la media noche.
129. Realizar un algoritmo que averigüe si un número es primo. Para ello aplicaremos dos pruebas consecutivas:
a. El primero será el «Pequeño teorema de Ferman», que dice que dado un entero positivo N. Si el resto de 2N/N no es 2, N no es primo.
b. Si el número pasa la primera prueba, habrá que dividirlo por todos los números entre 2 y para comprobar si alguno de los cocientes es entero.
130. Escribir un algoritmo que reciba un valor N y escriba los N primeros números primos.
131. Realizar un algoritmo que juegue contra un operador al juego de los 21 palotes, que consiste en lo siguiente: se colocan sobre una mesa 21 palotes. Cada jugador puede retirar entre 1 y 3 palotes cada vez. Pierde aquél que recoge el último.
132. Escribir un programa que acepte dos fechas y calcule los días que las separan.
133. Dada una fecha en formato día, mes, año. Escribir un algoritmo que calcule la fecha que será al día siguiente.
Nota: El año podrá ser bisiesto.
134. Escribir un algoritmo que sea capaz de escribir en romano cualquier número inferior a 3000. Repetir el proceso cuantas veces desee el operador.
Sabemos que: I=1, V=5, X=10, L=50, C=100, D=500 y M=1000
135. Realizar el algoritmo que sea capaz de escribir en decimal cualquier número romano inferior a 3000. Repetir el proceso cuantas veces desee el operador.
Sabiendo que: I=1, V=5, X=10, L=50, C=100, D=500 y M=1000
136. Realizar un algoritmo que reciba un número decimal cualquiera y la cantidad de decimales que queremos conservar de éste. La función devolverá el número con los decimales especificados.
137. Escribir un algoritmo que reciba un entero N, y retorne el elemento número N de la serie de FIBONACCI. En esta serie, los dos primeros términos valen 1, cualquiera de los restantes se calcula sumando los dos anteriores.
Por ejemplo: 1, 1, 2, 3, 5, 8, 13, 21, ...
138. Realizar un algoritmo que convierta un número en base decimal, a cualquier base inferior a 10.
139. Realizar un algoritmo que averigüe el Mínimo Común Múltiplo de dos números, por el procedimiento de multiplicarlos y dividir por el MCD.
140. Escribir un algoritmo que reciba un entero N y averigüe cuántas cifras tiene.
141. Escribir un algoritmo que reciba un entero un devuelva la suma de sus cifras.
142. Implementar un algoritmo que reciba un número n y
halle todos los números de
143. Si la población de una especie determinada crece a razón de cierto porcentaje anual. ¿Tras cuántos años se duplicará su tamaño original?.
144. La siguiente fórmula permite determinar aproximadamente el incremento de la población: P = Po (1 + R / 100)^T
Donde: P = población actual.
Po = población original.
R = porcentaje de incremento anual.
T = número de años.
Para que la población duplique su tamaño original, la relación P/Po = 2, es decir (1+R/100)^T = 2.
145. Sabiendo que hoy es Miércoles, determinar qué día de la semana será dentro de N días.
146. Obtener un programa que permita usar el ordenador como una calculadora ordinaria con las operaciones aritméticas elementales (suma, resta, multiplicación y división) y además use un registro de memoria (M+, M-, MR, MC).
147. Una empresa de autobuses realiza viajes desde la
ciudad A a tres ciudades diferentes (B, C, D), dos veces al día (mañana
y tarde). El precio del billete a la ciudad B es de
PASAJEROS | ||||
CIUDAD |
MAÑANA |
TARDE |
TOTAL |
RECAUDACIÓN |
B | ||||
C | ||||
D | ||||
TOTAL |
148. Escribir un algoritmo recursivo que imprima en pantalla los números del 1 al 1000.
149. Escribir un algoritmo recursivo que admita una serie de números, acabada en cero, y la muestre en pantalla en orden inverso al de entrada.
Nota: Para la resolución no pueden usarse arrays.
150. Escribir un algoritmo recursivo que determine la suma de los enteros 1, 2, 3, ..., n.
151. Escribir un algoritmo recursivo para calcular el factorial de un número entero.
152. Desarrollar un algoritmo recursivo que calcule el producto de dos enteros por el procedimiento de sumar uno de ellos consigo mismo tantas veces como indique el otro (que debe ser positivo).
153. Diseñar un algoritmo recursivo para imprimir la serie de Fibonacci.
154. Calcular el M.C.D. por el algoritmo de Euclides, empleando recursividad.
155. Escribir un programa que, empleando recursividad,
cambie un entero escrito en base
156. Desarrollar un programa que usando un procedimiento recursivo, imprima en pantalla el contenido de un fichero secuencial de nombres en orden inverso al que se usó para grabarlos.
157. Implementar un algoritmo recursivo para calcular la potencia entera N de un número dado.
158. Construir un algoritmo recursivo que retorne el número de cifras de un número entero dado.
159. Escribir un algoritmo recursivo que reciba un entero N positivo y devuelva la suma de la serie: 1/1 + 1/2 + 1/3 + ... + 1/N
160. Escribir un programa para resolver el problema de las Torres de Hanoi, empleando técnicas recursivas.
161. La función de Ackerman A se define para todos los enteros no negativos M y N del modo siguiente:
A(0, N) = N + 1
A(M, 0) = A(M-1, 1) ,, siempre que M > 0
A(M, N) = A(M-1, A(M, N-1) ,, siempre que M > 0 y N > 0
Diseñar un algoritmo recursivo que acepte como parámetros dos enteros no negativos M y N y de como resultado el valor de la función de Ackerman para esos valores.
Escribir entonces un programa, incluyendo el algoritmo anterior, que acepte por teclado dos enteros no negativos M y N y escriba por pantalla el valor de la función de Ackerman para esos dos números.
162. Utilizando métodos recursivos, buscar dicotómicamente un valor dado, en un vector numérico, ordenado de menor a mayor.
163. Escribir un algoritmo que reciba una cadena de 4 caracteres e imprima las 24 permutaciones posibles de esos caracteres. Una vez resuelto el ejercicio, estudiar la posibilidad de modificar la función para que pueda trabajar con cadenas de cualquier longitud.
164. En un tablero de n x n con n^2 cuadros, se sitúa un caballo de ajedrez en las coordenadas (1, 1). Se pide encontrar, si existe, un recubrimiento del tablero, es decir, calcular un circuito de n^2-1 movimientos de forma que cada cuadro del tablero sea visitado exactamente una vez.
165. Averiguar las posiciones, si existen, en que se pueden situar 8 reinas en un tablero de ajedrez, de manera que ninguna de ellas pueda actuar sobre cualquiera de las otras.
166. Solo 12 de las 92 soluciones calculadas por el programa anterior son esencialmente diferentes, las otras pueden obtenerse mediante simetrías respecto de ejes o respecto del centro. Repetir el programa anterior, teniendo en cuenta ésta particularidad en el cálculo.
167. Dado un archivo de artículos de acceso secuencial en disco con el siguiente diseño de registro:
.. Descripción de artículo.
.. Precio unitario.
.. Cantidad en stock
Se pide escribir un programa, que usando técnicas recursivas, sea capaz de calcular el valor del almacén.
Incluir las declaraciones de tipo y de variables necesarias.
Nota: El valor del almacén se calcula sumando los productos de la cantidad en stock por el precio unitario de cada artículo.
168. Dado un archivo de artículos de acceso secuencial en disco con el siguiente diseño de registro:
.. Descripción del artículo.
.. Precio unitario.
.. Cantidad en stock.
Se pide un programa, que usando técnicas recursivas, busque de forma secuencial un cierto artículo en el archivo e imprima el número de registro en que lo ha encontrado (-1 si no estuviese).
Incluir las declaraciones de tipo y de variables necesarias.
169. Utilizando el procedimiento del nivel 4 que construía laberintos de forma aleatoria sobre una matriz de orden 80x25, escribir otro que consiga resolver recursivamente cualquiera de los laberintos que aquél desarrolló. Pensar como podría buscarse la solución más corta.
170. ¿Que habría que modificar en el ejercicio anterior para trabajar con laberintos tridimensionales?.
|