Anda di halaman 1dari 27

1.

Escribir un mtodo que reciba dos variables enteras e intercambie sus valores. El mtodo devolver el valor final de la primera de ellas. Escribir un mtodo que reciba dos valores enteros y devuelva la suma de ambos.

2.

3. Escribir una clase para evaluar ecuaciones de la forma: ax3 + bx2 + cx + d. La clase desarrollada deber tener al menos dos mtodos. El primero permitir asignar valores a los coeficientes a, b, c, d. El segundo nos permitir evaluar la ecuacin 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 centgrados a grados Fahrenheit. Igual que en el caso anterior, la clase desarrollada tendr dos mtodos. El primero nos permitir asignar una determinada temperatura medida en grados centgrados. El segundo nos facilitar la conversin de la temperatura anterior a grados Fahrenheit. Nota: La relacin entre los grados centgrados y los grados Fahrenheit viene dada por la expresin: Fahrenheit = 9/5 * centgrados + 32 5. Revisar el ejercicio anterior, para que las conversiones puedan utilizarse en los dos sentidos. Para conseguirlo, podramos plantear dos mtodos que asignen valores (uno para grados centgrados y otro para grados fahrenheit) y otros dos que permitan recuperarlos. De esta forma, se podrn asignar temperaturas en grados centgrados y obtenerlos en grados fahrenheit o a la inversa. Nota: para realizar la conversin a la inversa, podremos utilizar la siguiente relacin: centgrados = (5/9) * (fahrenheit 32)

Esquemas condicionales.
6. Suponer que A, B, C, D son cuatro variables numricas 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 despus de la ejecucin de esta secuencia si, antes de la ejecucin los valores de estas variables son los siguientes: A B C D 5 3 4 6 6 3 4 5 -1 -4 -2 -3

Caso 1: Caso 2: Caso 3:

7. Supongamos que las variables numricas 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 verdadero verdadero falso falso Y>0 verdadero falso verdadero falso S

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 accin S 1. 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, cul sera 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 versin que resulte ms concisa: if (X > 0) else 10. Observar el siguiente fragmento de un algoritmo e intentar escribir una nueva versin que resulte ms concisa: if (X = 3) else 11. Observar el siguiente fragmento de un algoritmo e intentar escribir una nueva versin que resulte ms concisa: if (X = 5) else 12. Qu resultados se obtienen al realizar las operaciones siguientes? Si hay errores en alguna lnea, 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 nmeros de tipo int. 14. Determinar si un nmero introducido por teclado es positivo o negativo.

15. Desarrollar un algoritmo que reciba dos nmeros 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 nmeros son iguales. En ese caso devolver un 0. Estudiar diferentes alternativas. 17. 18. 19. Escribir un algoritmo que reciba un nmero y escriba su valor absoluto. Escribir un algoritmo que reciba un nmero y diga si es par o impar. Escribir un algoritmo que reciba dos nmeros y diga cual es el mayor.

20. Disear un programa que admita un carcter y de como resultado su valor, suponiendo que el carcter representa un dgito romano. De modo que: I = 1, V = 5, X = 10, L = 50, C = 100, D = 500 y M = 1000 Si el carcter no se corresponde con un dgito romano, el resultado ser cero. 21. Realizar un programa que ordene tres nmeros entrados por teclado, teniendo en cuenta que en cada condicin preguntaremos solo por una pareja de valores. 22. Escribir un mtodo que reciba un nmero entre 1 y 7 y devuelva una cadena con el da de la semana correspondiente ( 1 = Lunes, 2= Martes, etc.) Realizar un aversin utilizando la sentencia if y otra con la sentencia switch. 23. Determinar el precio de un billete de ida y vuelta por avin, conociendo la distancia a recorrer, el nmero de das de estancia y sabiendo que si la distancia es superior a 1000 Km. y el nmero de das de estancia superior a 7, la lnea area le hace un descuento del 30 por 100 (precio por kilmetro = 8'50). 24. Dados dos nmeros 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 nmeros x, y, z se dice que forman una trada de Pitgoras 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 averige si tres nmeros introducidos por el usuario forman una trada de Pitgoras. 27. Realizar un programa en el que dada la longitud del lado de un cuadrado, se nos permita elegir entre calcular el permetro o la superficie de dicho cuadrado. 28. Realizar un programa que resuelva una ecuacin de segundo grado.

29. Escribir un programa que acepte seis enteros, representando: da, mes y ao del nacimiento de un individuo y da, mes y ao actuales. El programa escribir "MAYOR" si es mayor de edad y "MENOR" si no lo es.

30. Escribir un algoritmo que lea cuatro valores numricos y despus escriba el ms pequeo de ellos. Utilizar slo esquemas condicionales con predicados elementales. 31. Escribir un algoritmo que lea cuatro valores numricos y despus escriba el ms pequeo de ellos. Esta vez , utilizaremos predicados compuestos.

Esquemas iterativos.
32. Disear un programa que imprima los mil primeros nmeros en orden creciente. 33. Disear un programa que imprima los mil primeros nmeros en orden decreciente. 34. Realizar un programa que muestre y cuente los mltiplos de 3 existentes entre 1 y 100. 35. Disear un programa que muestre los mltiplos de cuatro existentes entre dos nmeros dados. 36. Imprimir y contar los nmeros naturales menores de 100, que son mltiplos 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 Centgrados. Se recomienda utilizar la clase que se defini en el ejercicio 5. 38. Disear un programa que sume los nmeros impares inferiores a un nmero dado. 39. Dado que no disponemos de un operador de exponenciacin, necesitamos resolver un algoritmo que dados los nmeros A y B, calcule A^B. Nota: El exponente podr ser positivo, negativo o cero. 40. Escribir una tabla con distancias en kilmetros 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 = 39.27 pulgadas; 1 pie = 12 pulgadas). Se aportar como dato un nmero de metros y el algoritmo mostrar el nmero de pies completos a los que equivale, y cuntas pulgadas sobran. 42. Disear un algoritmo que reciba una variable LIMITE y encuentre el entero positivo ms pequeo NUM para el cual la suma 1 + 2 + 3 + ... + NUM sea menor que LIMITE. 43. Escribir un algoritmo que reciba un nmero natural (entero positivo) menor de 500. y que muestre, sume y cuente los nmeros que estn separados entre s 8 posiciones, desde ese nmero al 500 (incluidos los extremos). 44. Realizar un algoritmo que reciba dos nmeros inferiores a 1000. Si el ms pequeo se incrementa de 5 en 5 y el mayor se decrementa de 2 en dos, imprimir ambas series de nmeros, de una forma alternativa, hasta que el menor supere al mayor (incluida esta superacin).

45. Obtener un algoritmo que permita calcular la tabla de multiplicar mediante bucles anidados. 46. Realizar el ejercicio de la exponenciacin 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 frmula: 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 mtodo que reciba un nmero y calcule su factorial de forma ascendente y descendente. 49. 50. Realizar un mtodo que decida si un nmero recibido es o no capica. Realizar un mtodo que averige si un nmero dado es primo. es un

Nota: Un nmero N ser primo si ninguno de los cocientes N/2, N/3, N/4, ..., N/ valor entero.

51. Disear un programa que averige el menor nmero primo que sea mayor que un nmero introducido por teclado. 52. 53. Mostrar los nmeros capicas de cuatro cifras que sean mltiplos de 36. Generar la siguiente pirmide, usando bucles anidados: 1 232 34543 4567654 567898765 67890109876 7890123210987 890123454321098 90123456765432109 0123456789876543210

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 cuntas son inferiores a 0 C. 55. Aceptar e imprimir una serie de nmeros, hasta que se introduzca un cero. Decir al final cuntos se han introducido (sin contar el cero). 56. Un programa que acepte nmeros 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 crculos, introduciendo su radio. El programa acabar al introducir un radio igual a cero. Nota: La superficie de un crculo es S = PI * R^2 (donde PI= 3.141592 58. Un programa que acepte nmeros positivos, acabando la serie en cero. Debe mostrar todos los divisores de cada uno de ellos y al final la suma de los nmeros introducidos. 59. Disear un programa que nos pida cuntos nmeros queremos introducir, a continuacin nos pedir esos nmeros y se calcular la media de ellos. 60. Dados 10 nmeros enteros, visualizar la suma de los nmeros pares, cuntos nmeros pares existen y la media aritmtica de los impares. 61. Se llama media armnica de dos nmeros al resultado obtenido al calcular los inversos de los nmeros, promediarlos y calcular el inverso del resultado. Escribir un programa que acepte una serie de nmeros acabados en cero y devuelva la media armnica de ellos (excluyendo el cero). Nota: El inverso de un nmero es aqul 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 ms ptima posible, el nmero que aqul pens, suponiendo que dicho nmero se encuentra entre 1 y 100. 63. Escribir un programa que acepte un capital, un porcentaje de inters anual y el nmero de aos de imposicin. El programa escribir por pantalla un listado del inters producido por ese capital ao a ao, as como el capital acumulado con los intereses anteriores. Nota: Cada ao, se incrementa el capital base con sus intereses. 64. Calcular el mximo comn 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 nmero sea divisible por el otro. Llegado este caso, el MCD es el segundo.

65. Se introduce por teclado el nmero de matrcula, el nombre, y las notas correspondientes a las asignaturas pendientes de un grupo de alumnos. Se imprimir el nmero de matrcula, el nombre y la nota media de cada uno de ellos. El proceso terminar cuando se introduce un 0 en el nmero de matrcula. Nota: El nmero de asignaturas pendientes variar de un alumno a otro. 66. Los trabajadores de una fbrica de automviles tienen tres turnos: maana, noche y festivos. Se desea calcular el sueldo semanal de cada empleado, introduciendo las horas totales trabajadas y el turno en que se encuentra, segn la siguiente tarifa: 600 Pts./hora turno de maana 800 Pts./hora turno de noche 1000 Pts./hora turno de festivos. Adems, 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 inters anual R. Al cabo de cuntos aos se doblar? Nota: El inters producido por un capital en un ao es: i = C*R / 100 68. Se trata de hacer una estadstica de las alturas de los 500 alumnos de un colegio, de acuerdo con la siguiente tabla: Alturas hasta 1.60 m Alturas entre 1.61 m y 1.70 m Alturas entre 1.71 m y 1.80 m Alturas mayores de 1.80 m w nios x nios y nios z nios

69. Se han realizado varias mediciones de la polucin en das consecutivos (los valores son nmeros enteros en el rango de 1 a 100). Estos datos de entrada acaban con un nmero negativo. Escribir un programa que encuentre mximos locales en los valores de la polucin, es decir, valores que sean mayores que los de los das anterior y posterior. Para cada mximo local el programa deber escribir el nmero de da en el que ocurri (contando a partir de 1) y el valor de la polucin ese da. Tambin deber escribir el nmero de mximos encontrados y el nmero de medidas. Los das primero y ltimo no se considerarn nunca mximos locales. Se puede considerar que hay un minino de tres medidas y no se pueden utilizar vectores en la resolucin 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. Cuntos pares de conejos pueden obtenerse a partir de una sola pareja en un ao?. Hemos de suponer que cada par produce un nuevo par cada mes. Cada nuevo par se vuelve frtil 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.

Arrays: nivel bsico


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 cuntas veces se repite. 73. Disear un algoritmo que reciba un vector de valores reales, y el nmero de elementos que dicho vector tiene. La funcin 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 nmero de alumnos con las calificaciones de MUY DEFICIENTE, INSUFICIENTE, SUFICIENTE, BIEN, NOTABLE y SOBRESALIENTE teniendo en cuenta que la calificacin se asigna segn 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 calificacin 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 nmero de elementos que dicho vector tiene. La funcin retornar TRUE si el vector est ordenado creciente o decrecientemente y FALSE en caso contrario. Nota: El vector se recorrer una vez como mximo. 76. 77. Escribir un algoritmo que descomponga cualquier nmero en factores primos. Escribir un algoritmo que imprima el calendario de este ao.

78. He aqu una tcnica interesante para obtener una lista de nmeros primos que estn 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, aadindolo as a la lista de nmeros primos. ii. Eliminar todos los enteros mltiplos 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 mtodo se conoce como Criba de Eratstenes. Escribir un algoritmo que usando ste mtodo escriba todos los nmeros existente entre 1 y un nmero entero dado (n). 79. Escribir un algoritmo que acepte como parmetros un vector de enteros, y el nmero 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 mximo o mnimo local, entendindose por tal aqul que es mayor o menor que los dos elementos que lo circundan. 80. Se dispone de un array T de 50 nmeros 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 continuacin 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 mnimos cuadrados ,, a = (Ni=1(Xi.Yi) - N.Mx.My) / (Ni=1(X2i) - N.Mx2) d. El coeficiente 'b' de ajuste lineal por mnimos 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 nmeros enteros que indiquen el tamao de sendos vectores, tambin de tipo entero. b. Inicializar dichos vectores con nmeros 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 posicin del elemento ms 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 artculos, cada uno de ellos con su precio correspondiente (100, 250, 270, 800 y 315 pts. respectivamente) y una determinada cantidad en stock (70, 50, 10, 25, 80 unidades respectivamente). Nuestro ordenador, pregunta qu producto es el que quiere comprar el usuario y cuntas unidades quiere. Si quedan unidades suficientes, se imprimir el importe de la venta, y se descontarn las unidades del artculo. 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 artculo 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 realizacin 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 la Computacin tiene notas correspondientes a 8 asignaturas diferentes (si una nota es -1, no se present). A cada asignatura le corresponde un determinado coeficiente. 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 exmenes. Nota: La media se realizar slo con los exmenes a los que el alumno se present. 89. Determinar si una matriz de orden 3 x 3 es un cuadrado mgico (se considera un cuadrado mgico aqul 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 nmeros enteros que indiquen el tamao de sendos vectores, tambin de tipo entero. b. Inicializar dichos vectores con nmeros 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 estarn incluidos los que aparecen una vez en cada vector, varias veces en un solo vector o varias veces en ambos vectores. Lgicamente, en el vector destino no aparecer ningn elemento repetido. 91. Escribir un algoritmo que acepte una lista de pases y sus respectivas capitales. A continuacin desordenar aleatoriamente la lista, la mostrar numerada en pantalla y nos pedir que emparejemos cada pas 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 actuacin 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.

Arrays: Dificultad media


93. Realizar un algoritmo que reciba como parmetros un vector de 4000 elementos de tipo entero, y un valor numrico. El procedimiento deber devolver la posicin de aqul elemento del vector que ms se aproxime al valor numrico 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 estn numerados del 1 al 36 en orden aleatorio. Se hace girar la ruleta y se lanza dentro de ella una pequea 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 nmeros paras o impares (excluyendo 0 y 00), 1 a 1. d. Seleccionando los 18 nmeros inferiores ( 1 al 18) o los 18 nmeros superiores ( 19 al 36), 1 a 1. El jugador perder automticamente 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 cuanta 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 tamaos. El nmero 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 tamaos, 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 tamao.

96. Escribir un algoritmo que acepte como parmetros tres enteros: dd, mm, aa. La funcin retornar TRUE si los enteros representan una fecha vlida, y FALSE si los enteros no valen como fecha. Nota: Hay que tener en cuenta que no todos los meses tienen el mismo nmero de das, y que existen aos bisiestos. Otra nota: Un ao es bisiesto si es divisible por cuatro y no es divisible por 1000). O bien, un ao no es bisiesto, si no es divisible por 4, o siendo divisible por 4, tambin lo es de 100 y no lo es de 400. 97. Dadas dos fechas cualesquiera, determinar el nmero de das que las separan. Nota: El mejor camino para conseguirlo, es escribir un algoritmo para calcular los das que hay entre el 01/01/01 y cada una de las fechas y a continuacin restar las cantidades. 98. Escribir un algoritmo que reciba una fecha y un nmero de das y retorne la fecha que ser, cuando transcurran esos das. 99. 100. Averiguar el nmero de das, meses y aos que separan dos fechas. Dada una fecha, averiguar el da de la semana a que corresponde.

101. Escribir un algoritmo que, usando alguno de los de las creados hasta el momento, reciba una cadena alfanumrica indicando una fecha en formato dd/mm/aaaa y sea capaz de retornar otra cadena alfanumrica con la fecha escrita en letras. Por ejemplo: Si recibe 13/03/1988, la funcin 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 perodo de efectos y el nmero 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 das desde el da 2 de Marzo de 2000, tendra que escribir las fechas: 1 de Mayo de 2000 (han pasado 60 das), 31 de Mayo de 2000 (han pasado 90 das) y 30 de Junio de 2000 (han pasado 120 das). Hay que tener en cuenta los posibles cambios de ao y los aos bisiestos. 103. Se desea disear 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. estn 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 smbolos: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F, G, H, I, J. Acepte una cifra numrica 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 Jan: nombre del pueblo, nmero de mujeres y nmero de hombres. a. Imprimir todos los nombres de los pueblos, el nmero de habitantes y el % de mujeres. b. Imprimir el nmero total de habitantes de la provincia, y el nombre y nmero de habitantes del pueblo de menor poblacin. c. Finalmente, imprimir el nmero 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 dividindola en una serie de pequeos rectngulos y calculando en rea de estos rectngulos (regla del trapecio). La frmula 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. Disear la estructura de datos necesaria para almacenar de una forma eficiente las conexiones entre las 300 estaciones de la red ferroviaria de una regin. Una vez concluida la etapa anterior, escribir un programa, que usando la estructura diseada, sea capaz de admitir una ciudad y mostrar todas aquellas con las que est conectada y la distancia a la que se encuentran. Bsquedas y otros algoritmos complejos.

Ejercicios varios.
Algoritmos parametrizados.
109. Disear un algoritmo que acepte como parmetro un entero y retorne el valor 1 si el entero es positivo, 0 si el parmetro es 0 y -1 si es negativo. 110. Realizar un algoritmo que realice la conversin de coordenadas polares (r, ) a coordenadas cartesianas (x, y). (Nota: x = r . cos y = r . sen ) 111. Escribir un algoritmo que admita como parmetros dos enteros (da y mes) y devuelva el valor TRUE si la fecha corresponde a Navidad y FALSE en caso contrario. 112. Disear un algoritmo que acepte como parmetro 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 parmetros dos enteros y devuelva TRUE si el primer nmero es divisible por el segundo y FALSE en caso contrario. 114. Escribir un algoritmo que admita como parmetro 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 fraccin. Para ello, daremos numerador y denominador y el programa los dividir por el MCD, presentando a continuacin los nuevos valores. 116. El mtodo de Newton para calcular races cbicas se basa en que si Y es una aproximacin a la raz cbica de X, se puede calcular una mejor aproximacin con la frmula: ((X / Y) + 2*y) / 3 Usando esta frmula, calcular la raz cbica de un nmero x con una aproximacin mayor que una milsima, 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 nmeros perfectos inferiores a un nmero dado. Un nmero es perfecto si la suma de sus divisores, excepto el mismo, es igual al propio nmero. 119. Se dice que dos nmeros son amigos si cada uno de ellos es igual a la suma de los divisores estrictos del otro (exceptuando el nmero). Por ejemplo 220 y 284 son amigos, ya que: 284: 1 + 2 + 4 + 71 + 142 = 220

220: 1 + 2 + 4 + 5 + 10 + 11 + 20 + 22 + 44 + 55 + 110 = 284 Realizar un algoritmo que escriba todas las parejas de nmeros amigos inferiores o iguales a un nmero dado. 120. Obtener un algoritmo para calcular las coordenadas x e y de la trayectoria de un proyectil de acuerdo a los parmetros y v, con intervalos de 0.1 s, y las frmulas siguientes: x = (v cos )t y = (v seno )t - at donde 0 < < PI/2 y a = 40 m/s 121. Obtener un algoritmo que permita calcular el valor de la constante PI mediante la serie matemtica siguiente: PI= 4. ( 11 3 + 1 5 1 7 + 1 9 ...

Nota: Las operaciones se deben considerar un nmero finito de trminos aunque ello conlleve la prdida de precisin. 122. Escribir un algoritmo que acepte como parmetro un entero representando la duracin, en minutos, de una llamada telefnica y d como resultado el precio a pagar por la llamada. El mtodo a seguir ser el de la antigua facturacin 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. Disear un o varios algoritmos que reciban un nmero 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 nmero de segundos pasados desde la medianoche lo tratamos como real porque puede ser mayor que 32767. 125. El nmero de combinaciones de a elementos tomados de b en b es: (ab) = a! b!(a-b)!

donde ! representa el factorial del nmero correspondiente. Disear un algoritmo con los parmetros a y b que permita calcular el nmero combinatorio (ab). Nota: (a0) = 1

126.

Obtener un procedimiento que imprima el tringulo de Pascal. 1 11 121 1331 14641 ... (10) (10) (11) (20) (21) (22) (30) (31) (32) (33) (40) (41) (42) (43) (44) ...

Recuerda lo indicado en el ejercicio anterior: (ab) = a! b!(a-b)! , (a0) = 1

127. El seno de x se puede calcular aproximadamente sumando los n primeros trminos 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 versin del programa que admita los ngulos en grados (360 = 2PI radianes). 128. Implementar un algoritmo que acepte como parmetros tres enteros representando la hora, minuto y segundo en que estamos y devuelva un entero representando el nmero de segundos que han transcurrido desde la media noche. 129. Realizar un algoritmo que averige si un nmero es primo. Para ello aplicaremos dos pruebas consecutivas: a. El primero ser el Pequeo 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 nmero pasa la primera prueba, habr que dividirlo por todos los nmeros 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 nmeros 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 aqul que recoge el ltimo. 132. Escribir un programa que acepte dos fechas y calcule los das que las separan.

133. Dada una fecha en formato da, mes, ao. Escribir un algoritmo que calcule la fecha que ser al da siguiente. Nota: El ao podr ser bisiesto. 134. Escribir un algoritmo que sea capaz de escribir en romano cualquier nmero 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 nmero 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 nmero decimal cualquiera y la cantidad de decimales que queremos conservar de ste. La funcin devolver el nmero con los decimales especificados. 137. Escribir un algoritmo que reciba un entero N, y retorne el elemento nmero N de la serie de FIBONACCI. En esta serie, los dos primeros trminos 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 nmero en base decimal, a cualquier base inferior a 10. 139. Realizar un algoritmo que averige el Mnimo Comn Mltiplo de dos nmeros, por el procedimiento de multiplicarlos y dividir por el MCD. 140. 141. Escribir un algoritmo que reciba un entero N y averige cuntas cifras tiene. Escribir un algoritmo que reciba un entero un devuelva la suma de sus cifras.

142. Implementar un algoritmo que reciba un nmero n y halle todos los nmeros de 1 a n cifras que sean cuadrados perfectos y que la suma de sus cifras coincidan con la de su raz cuadrada. 143. Si la poblacin de una especie determinada crece a razn de cierto porcentaje anual. Tras cuntos aos se duplicar su tamao original?. 144. La siguiente frmula permite determinar aproximadamente el incremento de la poblacin: P = Po (1 + R / 100)^T Donde: P = poblacin actual. Po = poblacin original. R = porcentaje de incremento anual.

T = nmero de aos. Para que la poblacin duplique su tamao original, la relacin P/Po = 2, es decir (1+R/100)^T = 2. 145. Sabiendo que hoy es Mircoles, determinar qu da de la semana ser dentro de N das. 146. Obtener un programa que permita usar el ordenador como una calculadora ordinaria con las operaciones aritmticas elementales (suma, resta, multiplicacin y divisin) y adems 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 da (maana y tarde). El precio del billete a la ciudad B es de 1000 pts, a la ciudad C de 1500 pts, y a la ciudad C de 2000 pts. Imprimir al final del da el nmero de viajeros que han ido a cada ciudad y el dinero recaudado, segn el siguiente formato: PASAJEROS CIUDAD MAANA TARDE B C D TOTAL

TOTAL

RECAUDACIN

Procesos recursivos
148. Escribir un algoritmo recursivo que imprima en pantalla los nmeros del 1 al 1000. 149. Escribir un algoritmo recursivo que admita una serie de nmeros, acabada en cero, y la muestre en pantalla en orden inverso al de entrada. Nota: Para la resolucin no pueden usarse arrays. 150. n. 151. Escribir un algoritmo recursivo que determine la suma de los enteros 1, 2, 3, ...,

Escribir un algoritmo recursivo para calcular el factorial de un nmero 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. 154. Disear un algoritmo recursivo para imprimir la serie de Fibonacci. 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 10, a otra base cualquiera inferior a diez. 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 nmero dado. 158. Construir un algoritmo recursivo que retorne el nmero de cifras de un nmero 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 tcnicas recursivas. 161. La funcin 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 Disear un algoritmo recursivo que acepte como parmetros dos enteros no negativos M y N y de como resultado el valor de la funcin 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 funcin de Ackerman para esos dos nmeros. 162. Utilizando mtodos recursivos, buscar dicotmicamente un valor dado, en un vector numrico, 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 funcin para que pueda trabajar con cadenas de cualquier longitud. 164. En un tablero de n x n con n^2 cuadros, se sita 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 simetras respecto de ejes o respecto del centro. Repetir el programa anterior, teniendo en cuenta sta particularidad en el clculo. 167. Dado un archivo de artculos de acceso secuencial en disco con el siguiente diseo de registro: .. Descripcin de artculo. .. Precio unitario. .. Cantidad en stock Se pide escribir un programa, que usando tcnicas recursivas, sea capaz de calcular el valor del almacn. Incluir las declaraciones de tipo y de variables necesarias. Nota: El valor del almacn se calcula sumando los productos de la cantidad en stock por el precio unitario de cada artculo.

168. Dado un archivo de artculos de acceso secuencial en disco con el siguiente diseo de registro: .. Descripcin del artculo. .. Precio unitario. .. Cantidad en stock. Se pide un programa, que usando tcnicas recursivas, busque de forma secuencial un cierto artculo en el archivo e imprima el nmero 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 construa laberintos de forma aleatoria sobre una matriz de orden 80x25, escribir otro que consiga resolver recursivamente cualquiera de los laberintos que aqul desarroll. Pensar como podra buscarse la solucin ms corta. 170. Que habra que modificar en el ejercicio anterior para trabajar con laberintos tridimensionales?.

Anda mungkin juga menyukai