Problemario Programacion
Problemario Programacion
Con los problemas que se enuncian a continuación se busca que el estudiante posea una
amplia muestra de propuestas a ser resueltas por medio del computador, elaborando un
programa. Se debe hacer énfasis en la lógica de solución sin importar el lenguaje que se
desee emplear y se deja, en términos generales, a su criterio la forma en como se
comunicará con el usuario.
También es recomendable la generación de funciones y/o procedimientos para plantear
las soluciones, en buena medida para fomentar la programación modular, pero como se
notará muchos de los problemas planteados pueden ser resueltos como un simple
programa, esta decisión vendrá en función de las necesidades puntuales que tenga el
estudiante en un momento particular de sus estudios.
Se recomienda que se investigue los diferentes algoritmos existentes para resolver el
problema planteado, ya que en algunos casos se explican brevemente, o tan sólo se
mencionan.
Recuerde que su responsabilidad como programador implica que debe evitar todo tipo de
error que se pueda presentar en una codificación (sintaxis, ejecución y lógica), como
estrategia se le recomienda resolver primero lo que corresponde al problema planteado, y
luego empezar a ubicar cuáles son los posibles obstáculos de funcionamiento que se
puedan tener.
Así mismo es de resaltar que el estudiante puede plantearse variantes en los problemas
planteados para que la entrada y salida de datos sea también a través de archivos tipo
texto, lo que permitirá ejercitar esta área. Lo que si debe de cumplirse, es que todo
problema propuesto implica que siempre se debe presentar el (o los) resultado(s).
Es posible que en algunos problemas no se especifique de manera explícita la validación
de datos, pero el estudiante debe partir en el planteamiento de sus soluciones siempre
con la premisa de verificar todas las condiciones, que deben cumplir los datos que el
usuario deba ingresar al programa y tomar las acciones pertinentes para cada caso. En
este aspecto hay que hacer énfasis en que es una pésima práctica dejar en el usuario la
responsabilidad de validar previamente los datos que vaya a introducir, para el
programador puede ser más cómo pero el producto final es deficiente y alejado de las
buenas prácticas en el desarrollo de programas.
PROBLEMAS INICIALES
1. Diseñe un programa que dadas las coordenadas (x,y) de un punto en el plano,
determine y muestre sus coordenadas polares (R,θ).
2. Diseñe un programa que dados dos puntos en el plano por sus coordenadas (x1,
y1) y (x2, y2) calcule y muestre la longitud del segmento que determinan estos
puntos, y que se calculen y muestren las coordenadas del punto medio de ese
segmento.
3. Dados dos puntos en el plano por sus coordenadas (x1, y1) y (x2, y2), diseñe un
programa para calcular la ordenada correspondiente a una abscisa x cualquiera
(también suministrada como dato) empleando interpolación lineal.
4. Diseñe un programa que dada una cantidad de segundos, entera y positiva,
indique a cuanto equivale en años, meses, días, horas y segundos. Asuma años de
360 días y simplifique a que todos los meses poseen 30 días. Por ejemplo:
31.803.310 segundos equivalen a 1 año, 3 días, 2 horas, 15 minutos y 10
segundos.
5. Diseñe un programa que, dado un recipiente cilíndrico, solicite los datos
pertinentes para poder calcular su volumen y área, y mostrar tales resultados.
Archivo: Problemario Programación 2018.doc Pág - 1 de 37
UNIVERSIDAD CENTRAL DE VENEZUELA
FACULTAD DE INGENIERÍA – CICLO BÁSICO
DEPARTAMENTO DE INVESTIGACIÓN DE OPERACIONES Y
COMPUTACIÓN
(0,2)
(1,1)
(2,0)
24. Realice un programa que permita al usuario llevar adelante una de las siguientes
operaciones para números imaginarios: suma, resta, multiplicación o división. El
usuario debe poder seleccionar una de las operaciones, dar los valores y obtener
el resultado.
25. En un tablero de ajedrez se coloca en la primera casilla un grano de arroz, en la
segunda se coloca el doble de granos que en la anterior y así sucesivamente hasta
la 64ava casilla. Diseñe un programa para presentar un listado en donde se indique
el número de la casilla, el número de granos colocados en esa casilla y la suma de
los granos acumulados hasta esa casilla.
26. Desarrolle un programa que indique si un número entero positivo dado como dato
es lo que se conoce como número primo o no.
27. Dado un número entero y positivo, genere un programa que invierta los dígitos
del mismo; esto es: dado el número 1234 se debe obtener el número 4321. Como
condiciones se debe tomar en cuenta que no se debe pedir el número de dígitos al
usuario y tampoco se debe emplear ninguna función o procedimiento para trabajar
con valores alfanuméricos.
28. Conocidas las coordenadas (x, y) de todos los vértices de un triángulo diseñe un
programa que indique cuantos puntos de coordenadas enteras se encuentran
dentro de tal triángulo.
29. Diseñe un programa que indique si un número entero y positivo “M” leído como
dato, es perfecto o no. Sabiendo que un número es perfecto cuando la suma de
todos sus divisores, salvo él mismo, es igual al mismo número. Por ejemplo: 6 es
dividido de manera exacta por 1, 2 y 3 que al sumarlos da el valor origina: 6.
30. Un número capicúa es aquel que leído de izquierda a derecha es el mismo que
leído de derecha a izquierda, por ejemplo 124421. Desarrolle un programa que
determine si un número dado por el usuario es capicúa o no. Como condición se le
impone que no puede usar artificios basados en el manejo de cadenas
alfanuméricas.
31. Un número entero positivo se le llama primo capicúa cuando siendo primo
también es primo cuando se invierten sus dígitos. Así tenemos que 17, 31, 37 y
113 son ejemplos de primos capicúas pues 71, 13, 73, 311 son también primos.
Diseñe un programa para indicar si un número N dado como dato es primo
capicúa.
32. Se dice que dos números M y N, enteros y positivos, profesan Amistad
Matemática entre sí, cuando al sumar los divisores de M (salvo él mismo) se
obtiene N y al sumar todos los divisores de N (salvo él mismo) se obtiene M. Por
ejemplo:
los divisores de 220 son: 1, 2, 4, 5, 10, 11, 20, 22, 44, 55, 110 que al
sumarlos da 284, y
los divisores de 284 son: 1, 2, 4, 71, 142 que al sumarlos da 220
Generar un programa que dados dos números indique si los mismos profesan
mutua amistad matemática.
33. Existe lo que se llama la Amistad Cuadrática entre dos números cuando se
cumple lo que se narra en el siguiente ejemplo para los números 13 y 16:
El número 16 elevado al cuadrado da 256 y sumando sus dígitos 2+5+6-->13
El número 13 elevado al cuadrado da 169 y sumando sus dígitos 1+6+9--> 16
Cuando lo anterior sucede se dice que los números profesan amistad cuadrática.
Realizar un programa que indique si dos números dados como datos profesan
amistad cuadrática.
34. Realice un programa que calcule y muestre el Máximo Común Divisor de dos
números naturales dados como datos.
35. Desarrolle un programa que dados dos números naturales N y M suministrados
por el usuario, calcule el mínimo común múltiplo (mcm) de los mismos.
36. En la filosofía de ¿Por qué hacerlo fácil? ¡Si se puede hacer difícil! Debe saber que
la parte entera de la raíz cuadrada de un número, puede calcularse como la
cantidad de sumas de números impares sucesivos que hay que hacer para
totalizar el número sin sobrepasarse del mismo. Como ejemplo tome el número 36
y obtiene 1+3+5+7+9+11 cuya suma es 36 observe que se han tomado 6 valores
y esta cantidad es la raíz cuadrada de 36 (se le invita a hacer la prueba con otros
valores). Realice un programa en que basado en el criterio anterior calcule la parte
entera de la raíz cuadrada de un número entero positivo N, leído como dato.
37. Un número natural se define como Automórfico cuando su cuadrado tiene como
últimas cifras las mismas que ese número. Los primeros números automórficos
son 5, 6, 25, 76, 376, 625... En efecto: 52=25, 62=36, 252= 625, 762= 5776.
38. Definamos N como número suficiente si cumple las siguientes características:
ser entero positivo, impar y al sumar todos sus divisores (salvo él mismo) da un
valor superior a N. Diseñe un programa que indique cuántos números suficientes
existen por debajo de un valor M dado como dato.
Archivo: Problemario Programación 2018.doc Pág - 4 de 37
UNIVERSIDAD CENTRAL DE VENEZUELA
FACULTAD DE INGENIERÍA – CICLO BÁSICO
DEPARTAMENTO DE INVESTIGACIÓN DE OPERACIONES Y
COMPUTACIÓN
39. Un número narcisista es aquel número entero y positivo, que es igual a la suma
de cada uno de sus dígitos elevados a la "n" potencia (donde "n" es el número de
cifras del número). La metáfora de su nombre alude a lo mucho que parecen
"quererse a sí mismos" estas cifras. Por ejemplo, el 153 es un número narcisista
puesto que 13 + 53 + 33 = 1 + 125 + 27 = 153. Los primeros números narcisistas
son: 1, 2, 3, 4, 5, 6, 7, 8, 9, 153, 370, 371, 407, 1634, 8208, 9474 y 54748.
Realice un programa que indique si un número entero y positivo leído como dato
es un número narcisista.
40. Se dice que un número natural es Odioso cuando su equivalente en notación
binaria presenta una cantidad impar del número 1. Realice un programa que dado
un número entero suministrado por usuario indique si cumple con la definición
ofrecida.
41. Se dice que un número natural es Poderoso cuando al menos uno de sus
divisores (excepto el 1) es primo y que este divisor elevado al cuadrado, también
divida de forma exacta al número. Por ejemplo: el número 36 tiene los siguientes
divisores 2, 3, 4, 6, 9 y 12 donde 22 es 4, que divide de forma exacta a 36 (igual
pasa con 3). Realice un programa que dado un número entero suministrado por
usuario indique si cumple con la definición ofrecida.
42. Se dice que un número natural es oblongo: si cumple con ser el producto de dos
naturales consecutivos. Por ejemplo, los números 30, 42 y 56 lo son. Diseñe un
programa que indique si un número dado por el usuario cumple con la condición
señalada.
43. Una pareja prima es un par de números primos separados por dos unidades
(como ejemplo tome 11 y 13, así como el 29 y el 31). Realice un programa para
contabilizar cuantas parejas primas se encuentran entre 2 y un valor N dado como
dato por el usuario.
44. Se dice que un número natura es factorion si al sumar los factoriales de los
dígitos que lo componen, dan el mismo número. Por ejemplo, para el número 145
tenemos: 1! + 4! + 5! = 145. Realice un programa que indique si un número
entero y positivo dado como dato por el usuario cumple con esta particular
característica. Nota: 1! = 1 y 2! = 2 no son sumas y por lo tanto no se deben
incluir. Asuma no disponer la función factorial, ni debe emplear funciones de
manejo de alfanuméricos.
45. Se dice que un número entero y positivo de N dígitos es n-pandigital si dicho
número contiene todos los dígitos de 1 a N sólo una vez. Por ejemplo, los números
15423 y 12435 son 5-pandigitales. Realice un programa que dado un valor leído
como dato indique si el mismo es n-pandigital. Como limitante, no puede
emplear funciones para manejos de alfanuméricos.
46. Se dice que tres números naturales A, B y C forman terna pitagórica cuando se
cumple la relación A2 + B2 = C2. Por ejemplo 3, 4 y 5 forman una terna pitagórica
ya que 32 + 42 = 52. Diseñe un programa que cuente cuántas ternas pitagóricas se
forman tales que tanto el Valor de A y de B sean menores que un número N dado
como dato.
47. Se dice que un número entero y positivo es cubifinito cuando al elevar todos sus
dígitos al cubo y sumarlos el resultado es 1, o da otro número cubinfinito. Por
ejemplo, el número 1234 realizamos lo siguiente 13+23+33+43 = 100 que es
cubifinito. Como contraejemplo el número 513 no cumple con lo indicado. Elabore
un programa que indique si un número dado por el usuario cumple con esta
definición.
48. Diseñe un programa que encuentre el menor valor entero de X que hace que el
binomio p(x)=991x2 + 1 sea un cuadrado perfecto.
49. Realice un programa que dado un número real dado por el usuario calcule el
número (cantidad) de cifras enteras y el número (cantidad) de cifras decimales
que lo conforman. Como condición se le impone que no puede usar artificios
basados en el manejo de cadenas alfanuméricas o funciones que realicen
directamente la actividad solicitada.
50. Realice un programa que, dado un número en base diez (entero y positivo),
calcule y presente su equivalente en base binaria, o en base octal. Pida al
usuario que tipo de conversión desea.
51. Realice un programa que, dado un número en base binaria, calcule y presente su
equivalente en base diez.
52. Note que el número 58510 (base decimal) es equivalente a 1001001001 (base
binaria). También debe observar que dicho número es capicúa en ambas bases.
Diseñe un programa que indique si un número natural dado por el usuario cumple
con esta característica.
53. Realice un programa que calcule la suma de todos los dígitos de los números del 1
a un número N suministrado por el usuario.
54. Hay geeks que afirman que el mejor número es el 73 y el razonamiento para tal
declaración se sustenta en varios hechos curiosos: a) 73 es el 21avo número primo,
b) Su espejo, el número 37, es el 12vo número primo, c) 21 es el producto de
multiplicar 7 por 3, y finalmente c) en su representación binaria, 73 es un capicúa:
1001001.
Escriba programas que le permitan responder las siguientes preguntas:
• ¿Existen otros valores p que sean el n-ésimo primo, tales que espejo(p) es
el espejo(n)-ésimo primo?
• ¿Existen otros valores p que sean el n-ésimo primo, tales que n es el
producto de los dígitos de p?
• ¿Cuáles son los primeros diez números primos cuya representación binaria
es un capicúa?
55. El algoritmo de Euclides para encontrar el máximo común divisor (mcd) de dos
números es el siguiente: Dados los enteros A y B (donde A>B), se divide A entre
B obteniendo el cociente Q1 y el resto R1. Si R1 es diferente de cero, se divide B
por R1, obteniendo el cociente Q2 y el resto R2. Si R2 es distinto de cero, se
divide R1 por R2, obteniendo cocientes y restos sucesivos. el proceso continúa
hasta obtener un resto igual a cero. El resto anterior a este es le mcd de A y B.
Diseñe un programa que calcule el mcd de dos valores dados como datos
mediante el algoritmo de Euclides.
56. Diseñe un programa que calcule el logaritmo en base diez de un número entero
suministrado como dato, asuma que no tiene disponible en el lenguaje que está
empleando la función para calcular directamente dicho algoritmo. Como ayuda vea
la figura en la que se le recuerda el origen del algoritmo.
57. Se dice que un número natural es Ambicioso si cumple que si sumamos sus
divisores propios (salvo el mismo número), repitiendo este proceso varias veces,
acabamos obteniendo un número perfecto. Por ejemplo, para 95 es un número
ambicioso, porque sus divisores son 1, 5, 19 y tenemos que 1+5+19=25, y los
divisores de 25 son 1 y 5, por lo que 1+5=6, y 6 es un número perfecto. Realice
un programa que indique si un número dado por el usuario cumple con esta
definición.
58. Diseñe un programa que determine si un número N entero y positivo, leído como
dato, es o no un número primo, sin emplear ni la multiplicación, ni la división en
ninguna de sus variantes, ni una función o procedimiento estándar del lenguaje en
el que se trabaje.
59. Se dice que un número natural (N) es Número de Mesenne si siendo un número
primo, se cumple que 2n-1 también es un número primo. Realice un programa que
dado un número entero suministrado por usuario indique si cumple con la
definición ofrecida. Ejemplos de este número son: 3, 7, 31, 127, 8191… resaltando
no son muchos los encontrados hasta el momento.
60. En 1973, el matemático inglés Neil Sloane definió, definió en una revista dedicada
a las matemáticas recreativas, la persistencia multiplicativa de los números.
Consiste en el número de veces que hay que multiplicar los dígitos de un número
(escrito en base 10) hasta llegar a un número de un único dígito.
Por ejemplo, el número 39 tiene una persistencia multiplicativa de 3: 39
3*9=27 2*7=14 1*4=4
Dada la definición anterior diseñe un programa que, dado un número natural por
parte del usuario, calcule su persistencia multiplicativa.
61. Los números cadena son creados al sumar continuamente el cuadrado de cada
dígito de un número para formar otro. Por ejemplo, si se tiene el número 44, se
procede a elevar cada uno de sus dígitos al cuadrado y la suma de ellos resulta en
32 (42 + 42 = 16 + 16 = 32). Luego se hace lo mismo con el 32 (32 + 22 = 13) y
así sucesivamente. Por ejemplo:
44 32 13 10 1 1
85 89 145 42 20 4 16 37 58 89
Una vez que la cadena llegue a 1 u 89, la cadena queda en un ciclo infinito como
los mostrados en los ejemplos anteriores. Es interesante notar que al comenzar
con CUALQUIER número entero positivo, eventualmente llegará a 1 (y se le llama
número Feliz) u 89 (llamado número infeliz).
Se pide que diseñe un programa que permita conocer cuál es el porcentaje de
números enteros menor a un valor N (leído como dato) cuya cadena llega al
número 89.
62. Una forma de generar números aleatorios es la llamada técnica del cuadrado
medio, que consiste en tomar un número de N cifras, elevarlo al cuadrado, y usar
los N dígitos del medio como el siguiente elemento (semilla) al que se le aplicará
la misma operación. Diseñe un programa que solicite a un usuario el valor de N
para realizar este proceso, verificando que tal valor posea al menos dos dígitos.
Como condición se le impone que no puede usar artificios basados en el manejo de
cadenas alfanuméricas.
63. Realice un programa que calcule y muestre cuántos números enteros no tienen
cifras repetidas dentro de un intervalo [A, B] dado como dato.
64. Un caracol cae en un pozo de H metros de profundidad. Este caracol durante el día
asciende una distancia Ld metros, pero durante la noche, al quedarse dormido,
resbala y desciende Ln metros. Diseñe un programa que simulando el movimiento
del animalito, determine en cuánto tiempo sale del pozo (si es que esto sucede).
65. Una pelota cae verticalmente desde una altura de H metros y rebota cada vez
hasta un 32% de su altura previa. Diseñe un programa que determine la distancia
vertical total que recorre la pelota antes de quedar en reposo. Se considerará
reposo un rebote menor que 10-4 metros.
66. Se deja caer una pelota desde una altura H1 hacia una superficie vertical
totalmente plana, en cada rebote la altura máxima del mismo viene dada por la
pérdida de un porcentaje P de la máxima altura alcanzada en el rebote previo (en
el primer caso se toma la altura desde donde se le deja caer). Realice un
programa que simule el proceso indicado y señale luego de cuántos rebotes la
altura máxima no llega a una altura H2 (obviamente H2 < H1 y que debe ser
verificado).
67. Una persona planea ahorrar una cantidad fija C por mes a una tasa de interés I
anual que capitalice mensualmente. Realice un programa que determine el número
de años y meses requeridos para acumular, al menos, una cantidad final TOTAL si
los intereses son abonados mensualmente.
68. Una persona planea ahorrar una cantidad fija C por mes a una tasa de interés I
anual que capitalice mensualmente, suponga que la persona al finalizar cada año,
justo después de sumar los intereses, hace un retiro por una cantidad total de Y
bolívares. Diseñe un programa que determine cuál será el primer año en que su
balance no permita que haga semejante retiro.
69. Aquiles, el famoso guerrero griego, entabla una carrera con una tortuga a la cual
le da V metros de ventaja. La tortuga se desplaza a una velocidad Vtor metros por
hora y Aquiles es diez veces más veloz que ella. Diseñe un programa que simule
la carrera y genere como resultados el tiempo en horas, minutos y segundos que
tarda Aquiles en alcanzar a la tortuga, y la distancia recorrida desde el punto de
partida al punto donde le da alcance.
70. Una persona se entera de un secreto, al cabo de un mes no se contiene y se lo
cuenta a otras tres personas, pero luego no lo vuelve a comentar. Cada una de
estas tres personas tienen un comportamiento similar al conservarlo durante un
mes, al cabo del cual lo cuentan a otras tres personas y luego no lo vuelven a
contar. Suponiendo que nunca le cuentan este supuesto secreto dos veces a la
misma persona, y que se mantiene este proceso de propagación; diseñe un
programa que calcule en cuántos meses se entera una población de N habitantes.
71. Sabiendo que la población en Venezuela en 1984 fue de 16 millones de habitantes,
y A es la tasa promedio de crecimiento anual esperada (que incluye los
nacimientos e inmigraciones, menos los decesos y emigraciones), realice un
programa que estime la población anual esperada hasta un futuro año X. La tasa A
Archivo: Problemario Programación 2018.doc Pág - 8 de 37
UNIVERSIDAD CENTRAL DE VENEZUELA
FACULTAD DE INGENIERÍA – CICLO BÁSICO
DEPARTAMENTO DE INVESTIGACIÓN DE OPERACIONES Y
COMPUTACIÓN
1 1 1 π 3 2
e. 1 + − − + ..... =
33 53 73 16
84. Dados dos números enteros y positivos, M y K, suministrados como datos por el
usuario realizar un programa que calcule el número combinatorio C entre estos
dos números, según la siguiente fórmula.
m m!
C = =
k k!(m − k )!
Para realizar este programa, asuma que no dispone de la función que calcula el
factorial de un número.
85. Otra forma de generar los números de la Serie de Fibonacci es la que se muestra
abajo (que se basa en el cálculo de valores combinatorios), genere un programa
que muestre en n-esimo término de la serie.
n n−1 n −2
Fn +1 = + + + ...
1 1 2
86. Realice un programa que genere la suma dada por la siguiente serie:
X 2 2 X 3 3X 4
S = −X + − + − ...
2! 3! 4!
Como condiciones debe verificar que se cumpla que el valor de X leído como dato
sea con 0 < X < 1. Obligatoriamente debe generar el término N-simo a partir del
término anterior (en este caso como una unidad y no viéndolo como la generación
del numerador y la del denominador por separado) y detenga el cálculo cuando la
diferencia de dos términos consecutivos (en valor absoluto) sea menor que una
tolerancia también dada por el usuario. La tolerancia también debe ser positiva y
menor que uno.
87. Realice un programa que genere la suma dada por la siguiente serie:
(1 − X ) 4 (1 − X ) 6 (1 − X ) 8
S = (1 − X ) 2 − + − + ...
3! 5! 7!
Como condiciones debe verificar que se cumpla que el valor de X leído como dato
sea 0 < X < 1. Obligatoriamente debe generar el término N-simo a partir del
término anterior (en este caso como una unidad y no viéndolo como la generación
del numerador y la del denominador por separado) y detenga el cálculo cuando la
el último término, en valor absoluto, sumado sea menor que una tolerancia dada
por el usuario. . La tolerancia también debe ser positiva y menor que uno.
88. Realice un programa que genere la suma dada por la siguiente serie:
( X − 1) ( X − 1) 2 ( X − 1) 3 ( X − 1) n−1
S= + + + .......+ + ...
2! 3! 4! N!
Detener el cálculo de la suma cuando el último sumado sea menor en términos
absolutos, a un valor de precisión, también leído como dato, previendo que si no
converge en 20 iteraciones se imprima un mensaje que así lo señale y muestre el
valor calculado hasta el momento.
89. Dada la serie:
Π2 1 1 1
= 1 + 2 + 2 + 2 +....
6 2 3 4
Diseñar un programa para calcular el valor de Π. Detenga el cálculo cuando la
diferencia entre los dos últimos términos sumados en términos absolutos sea
menor que un valor de precisión dado por el usuario. De forma adicional debe de
contarse y mostrar el número de términos calculados.
90. El número e se puede calcular mediante la siguiente serie:
1 1 1
e = 1+ + + + ...
1! 2 ! 3!
Escribir un programa que calcule el valor del número e deteniendo el cálculo de la
serie cuando el valor del último término generado sea menor que un valor de
precisión dado por el usuario. Debe indicar igualmente cuántos términos fueron
empleados en el cálculo.
91. El valor del coseno de un ángulo puede calcularse utilizando el siguiente desarrollo
en serie de Taylor:
X2 X4 X6 X8
Cos ( X ) = 1 − + − + −
2! 4! 6! 8!
X3 X5 X7
Sen( X ) = X − + − + ...
3! 5! 7!
• En caso de que no lo sea, verificamos si f(m) tiene signo opuesto con f(a) o
con f(b)
• Se redefine el intervalo [a, b] como [a, m] ó [m, b] según se haya
determinado en cuál de estos intervalos ocurre un cambio de signo
• Con este nuevo intervalo se continúa sucesivamente encerrando la solución en
un intervalo cada vez más pequeño, hasta alcanzar la precisión deseada
Diseñe un programa que calcule la raíz de una función sobre el método descrito.
103. Para calcular aproximaciones a la raíz de una función, mediante métodos
numéricos existen otros métodos a los antes mencionados, dos de ellos son el
Método de la Secante y Regula Falsi, investigue su forma de aplicación y
diseñe un programa que contenga funciones que los apliquen.
104. Escriba un programa que contenga una función recursiva que calcule el factorial
de un número N, entero y positivo.
105. Escribir una función recursiva que determine el capital Cn obtenido, al situar un
capital inicial C0 a interés compuesto durante N años al interés anual r (expresado
en porcentaje). Siendo la fórmula de interés compuesto:
Cn = C0 * ( 1 + r / 100)
n
CADENAS ALFANUMÉRICAS
En esta sección se presentan una serie de problemas que hacen especial énfasis
en el manejo de cadenas alfanuméricas, se recomienda un adecuado repaso de
las funciones y procedimientos que dispone para el trabajo con este tipo de datos
en el lenguaje que está empleando.
En este punto es recomendable que replantee soluciones de problemas previos,
ya que los mismos pueden ser resueltos con enfoque de uso de alfanuméricos y
las funciones asociadas.
106. Por un momento ubíquese en los viejos tiempos y trabajará para una compañía de
telégrafos ya que debe el calcular el costo del envío de un mensaje según los
siguientes criterios: cada letra cuesta 10 unidades monetarias (u.m.), los
caracteres especiales que no sean letras cuestan 30 u.m. y los dígitos tienen un
valor de 20 u.m. cada uno, los espacios no tienen valor y las letras del castellano
(ñ, á, é, í, ó, ú) se consideran caracteres especiales. Diseñe un programa que
dada una cadena de caracteres indique el costo total del envío de tal mensaje.
107. Se dice que una palabra es pentavocálica cuando está dotada de las cinco
vocales sin repetición, por ejemplo: murciélago, refugiado, abuelito, hipotenusa,
cuadernillo, descuidado, educación, reputación, surrealismo, vestuario, euforia, y
ultraligero. Diseñe un programa que dada una palabra leída como dato indique si
la misma es pentavocálica.
108. Dos palabras son anagramas si tienen las mismas letras pero en otro orden. Por
ejemplo, «torpes» y «postre» son anagramas, mientras que «aparta» y «raptar»
no lo son, ya que «raptar» tiene una r de más y una a de menos. Diseñe un
programa que indique si un par de palabras suministradas como datos son
anagramas.
109. Imagina que usted es un biólogo que examina secuencias de ADN de formas de
vida diferentes. Se le darán dos secuencias de ADN, y su objetivo es encontrar el
conjunto ordenado de bases adyacentes de mayor tamaño que es común en
ambos ADNs.
Las secuencias de ADN se darán como conjuntos ordenados de bases de
nucleótidos: adenina (abreviado A), citosina (C), guanina (G) y timina (T):
Por ejemplo, sea la Cadena # 1: ATGTCTTCCTCGA y la Cadena #2:
TGCTTCCTATGAC
El resultado es CTTCCT porque que es el conjunto ordenado de bases adyacentes
de mayor tamaño que se encuentra en ambas formas de vida. Desarrolle un
programa que le permita llevar adelante sus investigaciones.
110. Diseñe un programa que determine el número de veces que aparece una palabra
‘palabra’ ingresada por un usuario en una cadena de caracteres también ingresada
por el usuario.
111. Desarrolle un programa que lea una cantidad de palabras y calcule el largo de
cada una pero sin considerar las letras repetidas, determinando la más larga y
más corta.
112. Desarrolle un programa que escriba en números romanos un número
suministrado por el usuario en base a diez. Investigue como es la numeración
romana y establezca el máximo valor que su programa podrá representar.
113. Diseñe un programa puede hacer la conversión de un número dado en guarismos
romanos a su equivalente en base a diez.
114. Desarrolle un programa para jugar al popular juego el ahorcado, el cual consiste
en un personaje, el cual está a punto de ser ejecutado. Para salvarlo es necesario
adivinar una palabra, de la cual sólo se conoce su longitud. El jugador debe ir
eligiendo letra por letra, de modo de ir completando la palabra. Si el jugador se
equivoca en una letra, es decir, la letra seleccionada no se encuentra en la palabra
a adivinar, se va dibujando parte de su cuerpo (un brazo, una pierna, el tronco,
etc.) y la horca. Se puede jugar hasta que el personaje sea totalmente dibujado
junto con la horca que acabará su trágica vida.
Realice un programa que solicite a un jugador una palabra y que luego vaya
solicitando letra a letra a la otra persona, el programa debe terminar cuando todas
las letras de la palabra se hayan adivinado, es decir, ganar el juego, o bien se
haya cometido un número establecido de desaciertos, es decir, gana el
computador. Si desea incrementar la dificultad puede ir dibujando el muñequito
con su horca por cada letra errada
115. Una compañía que promociona productos antiguos ha estado recibiendo
telegramas de felicitación. El problema es que los telegramas se han enviado en
código Morse y los espacios entre las letras se han perdido en la transmisión.
Investigue las características de este código, pero es importante saber que en el
código Morse, cada letra del alfabeto se sustituye por una secuencia de puntos y
rayas de la siguiente manera:
a .- h .... o --- v ...-
b -... i .. p .--. w .--
c -.-. j .--- q --.- x -..-
d -.. k -.- r .-. y -.--
e . l .-.. s ... z --..
f ..-. m -- t -
g --. n -. u ..-
Se usan todas las combinaciones de entre 1 y 4 puntos y rayas, a excepción de:
..-- .-.- ---. ----
Tradicionalmente, los puntos se transmitían como una nota breve y los guiones
como una nota más larga, con pausas entre las diferentes letras. Por eso, algunos
teléfonos móviles emiten el sonido ... - ... cuando se recibe un mensaje, ya que
este es el código Morse para SMS.
Si los espacios entre las letras se pierden, los mensajes pueden ser ambiguos. Por
ejemplo, incluso si sabemos que el mensaje -..-----. se compone de tres letras,
aún podría significar: njg, dog, xmg o xon.
Realice un programa que lea un mensaje enviado en código Morse (entre 1 y 10
letras inclusive) determine, y muestre, la cantidad de mensajes con el mismo
número de letras que podría representar.
ARREGLOS LINEALES
Debe considerar que los arreglos lineales (también conocidos como vectores)
poseen N componentes o casillas, donde el valor de N debe ser entero y positivo
(aunque esto puede cambiar según el lenguaje de programación que se use), y
en general el mismo debe ser solicitado al usuario y ser validado adecuadamente
para que sea consistente con las declaraciones realizadas en el programa. Los
arreglos lineales son homogéneos en su composición, ya que todas las casillas
son del mismo tipo de dato.
Dejamos a su criterio de donde serán leídos los valores que componen el vector,
pudiendo ser teclado, desde un archivo, o generados de forma aleatoria.
Si bien es cierto que los problemas propuestos en esta sección, pueden ser
realizados en un programa, se recomienda que los cálculos sean realizados en
rutinas y/o procedimientos en las cuales también se recomiendan diseñar con
pase de parámetros.
En la siguiente sección se presentan enunciados que se indica específicamente el
uso de arreglos lineales:
2 5 6 8 9 12
6 4 2 1 7 5 3 Vector Resultante - B
138. Escribir un programa que contenga una rutina que dado un vector de N posiciones
ordene de mayor a menor los valores (NO las posiciones) pares y de menor a
mayor los valores (nuevamente NO las posiciones) impares. El resultado se debe
guardar en el mismo vector, manteniendo las posiciones que tenían los valores
pares con valores pares y las impares con las impares.
139. El calendario Gregoriano es el que más conocemos y usualmente empleamos, en
este tenemos los meses que contienen una determinada cantidad de días, por otro
lado, en una variación del calendario Juliano, este no posee meses y solamente se
contabilizan los días en secuencia, esto es que el día 15 de enero es el día 15 en el
calendario Juliano, el día 10 de febrero será el día 41 y así sucesivamente. Realice
un programa que dado un día y mes del calendario Gregoriano calcule su
equivalente en el Juliano, y viceversa (para lo que se recomienda dos rutinas).
Recuerde tomar en cuenta el caso de años bisiestos.
140. Se pueden almacenar los coeficientes de un polinomio en un arreglo lineal de N
posiciones, en concordancia con un polinomio de orden N:
AN A A A
X N +1 + N −1 X N + N − 2 X N −1 + ... + 1 X 2 + A0 X
N +1 N N −1 2
ARREGLOS BIDIMENSIONALES
Los arreglos bidimensionales, también conocidos como matrices, son
disposiciones de valores homogéneos en su tipo en una matriz, tome por
convención que el primer índice corresponde a las filas y el segundo índice
corresponde a la columna, así una matriz de orden NxM tendrá N filas y M
columnas. En general se trabaja con dos dimensiones, pero la mayoría de los
lenguajes permiten trabajar con cuantas dimensiones necesite.
Dejamos a su criterio de donde serán leídos los valores que componen la matriz,
pudiendo ser teclado, desde un archivo, o generados de forma aleatoria; con
igual consideración para presentar las matrices resultantes, en aquellos
problemas cuyo resultado también sea una matriz.
Los siguientes problemas son para generar, modificar u obtener resultados de
matrices:
143. Realice un programa que contenga una rutina que sume dos (2) matrices de
orden NxM. Recuerde que para cualquier elemento i,j la suma pedida será C(i,j) =
A(i,j) + B(i,j)
144. Definamos que una matriz pináculo es aquella matriz cuadrada de orden impar
que posee el valor más alto en toda la matriz, en la posición central, esto es, la
intersección entre la diagonal principal y la diagonal secundaria.
Conocida la definición anterior realice un programa que indique si una matriz dada
es o no matriz pináculo, así mismo debe validar el valor de la dimensión de la
matriz.
145. Realice un programa que dada una matriz A de orden NxM indique cual es el
mayor valor que almacena, señalando la posición del mismo; considere la
posibilidad de que dicho valor se encuentre repetido, por lo cual deberá indicar
todas las posiciones.
146. Genere un programa que posea una rutina que dada una matriz de orden NxM
genere su transpuesta.
147. Realice un programa que contenga una rutina que multiplique dos (2) matrices,
se deberá validar los órdenes de las matrices para que sea posible la
multiplicación, o en su defecto se pueda ofrecer un mensaje adecuado.
El resultado de multiplicar dos matrices es otra matriz en la que el elemento que
ocupa el lugar Cij se obtiene sumando los productos parciales que se obtienen al
multiplicar todos los elementos de la fila “i” de la primera matriz por los elementos
de la columna “j” de la segunda matriz.
148. Teniendo una matriz A de orden NxM, desarrolle un programa que indique si tal
matriz es simétrica respecto a la diagonal principal o no. Como variante diseñe un
programa similar, pero en este caso que la simetría sea con respecto a la diagonal
secundaria.
149. Se dice que una matriz a es antisimétrica si para todo par de índices i y j se
cumple que a[i, j] = -a[j, i] (note el signo menos). Diseñe un programa que
posea una rutina que dada una matriz A de orden NxN indique si la misma es o no,
antisimétrica.
150. Dada una matriz numérica, se denomina “Elemento Punto de Silla” aquel valor
que es simultáneamente máximo de su fila y mínimo de su columna. Diseñe un
programa que determine y muestre todos los puntos de silla de una matriz de
orden NxM.
151. La norma de una matriz A cuadrada, de orden N, se determina de la siguiente
forma:
n
A ∞
= Max(1 < i < n )∑ a ij
j =1
En forma operativa se obtiene del siguiente ejemplo de una matriz en donde el
usuario ofreció los valores mostrados de una matriz de 3*3:
1 2 -1
0 3 -2
5 -2 1
Tendremos entonces:
|1| + |2| + |-1| = 4 , |0| + |3| + |-2| = 5, |5| + |-2| +
|1| = 8
En este caso se toma el máximo {4, 5, 8} que es 8. Diseñe un programa que dada
una matriz de orden N calcule su norma según el proceso explicado antes
152. Suponga que llega a tener un sistema de N ecuaciones con N incógnitas reducido
tal como se muestra (se recomienda estudiar el método de Gauss, que consiste
en transformar el sistema dado en otro equivalente), en este caso los elementos
ubicados a la izquierda de la diagonal secundaria son nulos:
0 0 0 0 A1,N XN = B1
0 0 0 A2,N-1 XN-1 + A2,N XN = B2
0 0 A3,N-2 XN-2 + A3,N-1 XN-1 + A3,N XN = B3
0 0 •
•
0 AN-1,2 X2 + . . . + AN-1,N-2XN-2 + AN-1,N-1XN-1 + AN-1,N XN = BN-1
AN,1 X1 + AN,2 X2 + . . . + AN,N-2XN-2 + AN,N-1XN-1 + AN,N XN = BN
154. Diseñe un programa que genere una matriz cuadrada de orden N (que debe ser
par) y es un dato suministrado por el usuario; según el patrón mostrado para un
ejemplo de N = 6.
1 2 3 4 5 6
13 14 15 16 17 18
25 26 27 28 29 30
31 32 33 34 35 36
19 20 21 22 23 24
7 8 9 10 11 12
155. Realice un programa que genere una matriz A de orden NxM en zig-zag horizontal
según la secuencia que se muestra en el ejemplo:
1 2 3 4 5
10 9 8 7 6
11 12 13 14 15
20 19 18 17 16
El ejemplo mostrado es para una matriz de cuatro (4) filas y cinco (5) columnas,
pero recuerde que su propuesta debe ser general.
156. Realizar un programa que contenga procedimientos que realicen y muestren el
llenado de una matriz para cada una de las siguientes formas:
A B C
1 2 3 4 5 1 2 3 4 5 25 23 19 13 5
16 17 18 19 6 10 11 12 13 6 22 18 12 4 9
15 24 25 20 7 17 18 19 14 7 17 11 3 8 16
14 23 22 21 8 22 23 20 15 8 10 2 7 15 21
13 12 11 10 9 25 24 21 16 9 1 6 14 20 24
NOTA: Las matrices anteriores son de ejemplo y el programa debe ser capaz de
generar cualquier matriz de orden N, donde N es leído como dato.
157. Realice un programa que genere y presente una matriz cuadrada A de orden N
(donde N es dato), de la siguiente manera:
Por ejemplo, para N = 5:
1 2 4 7 11
3 5 8 12 16
6 9 13 17 20
10 14 18 21 23
15 19 22 24 25
158. Diseñe un programa para construir y presentar una matriz cuadrada A de orden N
(donde N es dato), de la siguiente manera:
Por ejemplo para N = 5:
1 2 3 4 5
2 1 2 3 4
3 2 1 2 3
4 3 2 1 2
5 4 3 2 1
Archivo: Problemario Programación 2018.doc Pág - 24 de 37
UNIVERSIDAD CENTRAL DE VENEZUELA
FACULTAD DE INGENIERÍA – CICLO BÁSICO
DEPARTAMENTO DE INVESTIGACIÓN DE OPERACIONES Y
COMPUTACIÓN
159. Diseñe un programa que genere y presente una matriz cuadrada de orden N (que
debe ser par) según el patrón mostrado para un ejemplo de N = 6.
1 13 25 36 24 12
2 14 26 35 23 11
3 15 27 34 22 10
4 16 28 33 21 9
5 17 29 32 20 8
6 18 30 31 19 7
160. Diseñe un programa que genere y presente una matriz cuadrada de orden N (que
debe ser par) según el patrón mostrado para un ejemplo de N = 6.
1 3 6 10 15 21
2 5 9 14 20 26
4 8 13 19 25 30
7 12 18 24 29 33
11 17 23 28 32 35
16 22 27 31 34 36
161. El “Rectángulo de Tartaglia” es una forma de representar el Triángulo de Pascal,
su estructura es la siguiente:
1 1 1 1 1 1
1 2 4 3 5 6
1 3 10 6 15 21
1 4 20 1035 56
1 5 35 1570 126
1 6 56 21126 252
1 7 84 28210 462
1 8 36
120 330 792
:
Elabore un programa que dado un número entero y positivo N, genere las
primeras N líneas del Rectángulo de Tartaglia.
162. Un triángulo de Parkside está compuesto de N columnas que contienen
sucesiones periódicas de los números del 1 al 9, comenzando la primera sucesión
en un valor X (denominado valor semilla). Así dados los siguientes valores de N y
X se forman los correspondientes triángulos, a continuación, se muestran dos
ejemplos:
N= 5 X= 3 N= 4 X= 8
3 4 6 9 4 8 9 2 5
5 7 1 5 1 3 6
8 2 6 4 7
3 7 8
8
Escriba un programa que genere triángulos de Parkside dados los valores de N y
X.
163. Realice un programa que a partir de una matriz de orden NxM, genere dos
vectores: el primero de orden N donde cada componente corresponde a la suma
de cada fila y otro vector de orden M, formado por la suma de los elementos de
cada columna de la matriz.
Por ejemplo, para una matriz de 3x4 se tendría lo siguiente:
1 3 7 2 13
5 6 9 1 21
4 1 7 2 14
1 4 6 5 16
11 14 29 10
164. Genere un programa que dada una matriz cuadrada (de orden impar), la rote
siguiendo el esquema mostrado en el ejemplo para una matriz de orden N= 5
(note que no se modifican las diagonales):
Matriz Original Matriz Resultante
1 2 3 4 5 1 16 11 6 5
6 7 8 9 10 22 7 12 9 2
11 12 13 14 15 23 18 13 8 3
16 17 18 19 20 24 17 14 19 4
21 22 23 24 25 21 10 15 20 25
165. Una forma de generar cuadrados mágicos de orden impar se describe a
continuación (en este caso se emplea una matriz de orden igual a 3):
• Coloque un 1 en la columna central de la primera fila
1
2
• Continuando el movimiento (una columna hacia la derecha y una fila hacia
arriba), abandonará eventualmente la matriz por su lado derecho, así que
coloca el valor en la primea columna en la fila correspondiente.
1
3
2
• En algún momento se tratará de llegar a una casilla ya escrita (esto ocurre
con todos los múltiplos del orden de la matriz). En este caso se desciende
una fila y se mantiene en la misma columna desde la posición original.
1
3
4 2
• Como una variante del caso anterior se tiene que tener especial atención al
caso que se presentará siempre en la casilla de la primera fila y última
columna.
8 1 6
3 5 7
4 9 2
Diseñe un programa que solicite y valide adecuadamente el orden del cuadrado
mágico a ser generado, y desarrolle el método antes explicado presentando el
resultado.
166. Desarrolle un programa que contenga una rutina que genere el resultado True
(Verdadero) si una matriz cuadrada, pasada como parámetro, forma Cuadrado
Mágico, en caso contrario el resultado de la rutina será False (Falso).
Entendiéndose como cuadrado mágico aquella matriz que la suma de los
elementos de cada fila da el mismo valor, que a su vez es igual la suma de los
elementos de cada columna, que también es igual a la suma de los elementos de
la diagonal principal y los de la secundaria. En el programa se leerá la matriz, se
invocará la rutina solicitada y se dará el mensaje pertinente.
167. En una matriz de 8 x 8 se puede representar un tablero de ajedrez, por ejemplo,
los valores en cero significan casillas vacías, casillas con valores positivos alojan
piezas de color blanco y casillas con valores negativos son asiento de las piezas
negras, esto. Diseñe un programa que para una torre de color blanco ubicada en
un valor de Fila y Columna dados como datos, debe indicar cuántas piezas
contrarias puede tomar. Es pertinente considerar que las posiciones de todas las
piezas en el tablero deben ser datos de este programa.
168. Piense en el mismo problema anterior, sólo que ahora la pieza a ser evaluada será
un alfil.
169. Bajo los lineamientos de los problemas anteriores, conocida la posición que ocupa
un caballo en un tablero de ajedrez por las coordenadas del cuadro donde se
encuentra, determinar las posiciones a las cuales puede moverse.
170. Realice una rutina que dado un valor N, genere una matriz cuadrada de valores
enteros y que su relleno siga la ley de mostrada en el ejemplo anexo, el valor de N
no debe ser menor a 7, debe ser impar y su valor máximo será de 99 (todas estas
condiciones debe evaluarlas y pasar los parámetros y sus valores pertinentes para
un buen funcionamiento de la rutina.
Por ejemplo, para un valor de N = 9, se obtiene la siguiente matriz:
1 0 0 0 0 0 0 0 9
10 2 0 0 0 0 0 8 18
19 11 3 0 0 0 7 17 27
28 20 12 4 0 6 16 26 36
37 29 21 13 5 15 25 35 45
46 38 30 22 0 24 34 44 54
55 47 39 0 0 0 43 53 63
64 56 0 0 0 0 0 62 72
73 0 0 0 0 0 0 0 81
N
DATOS.DAT
∑X i N :(# de datos)
i =1
Xm = X1
N
N
X2
∑( X − Xm)
2
i X3
i =1
VAR = .
N
DES = VAR .
XN
Realizar un programa que lea un archivo tipo texto ‘Datos.Dat’, el cual posee la
estructura mostrada en la columna de la derecha (note que el número de datos es
un valor escrito en la primera línea), y que calcule y presente los valores de la
Media, la Varianza y la Desviación Estándar de ese conjunto de datos.
172. Realice el problema anterior, pero sin conocer a priori la cantidad de valores que
hay dentro del archivo.
173. Diseñar un programa que escriba en un archivo tipo texto todos los pares de
números (cada par en una línea), cuyos valores no excedan de un valor N
(suministrado por el usuario), tales que su cociente sea múltiplo de tres o siete, y
su producto termine en dos. Por ejemplo: el par 24 y 8 cumplen con lo pedido ya
que 24/8 = 3 y 24*8=192
174. En un archivo tipo texto tiene las coordenadas (x, y, z) de un número no
determinado de puntos en el espacio. Realice un programa que solicite al usuario
un valor real que corresponderá al radio de una esfera cuyo centro se encuentra
en el origen y que calcule los porcentajes de puntos que se encuentran dentro,
sobre o fuera de dicha esfera. Tales valores deben ser anexados al final del archivo
dado.
175. Realice el problema anterior, pero como variante considere que la esfera tiene su
centro en unas coordenadas también suministradas por el usuario.
176. Se desea enviar un mensaje en un archivo tipo texto de la siguiente forma: para
cada palabra W se selecciona un número N y se replica W N veces
horizontalmente. Luego la cadena de caracteres se repite en la siguiente línea,
pero esta vez rotando los caracteres una vez a la izquierda. Este proceso se repite
Archivo: Problemario Programación 2018.doc Pág - 28 de 37
UNIVERSIDAD CENTRAL DE VENEZUELA
FACULTAD DE INGENIERÍA – CICLO BÁSICO
DEPARTAMENTO DE INVESTIGACIÓN DE OPERACIONES Y
COMPUTACIÓN
hasta la línea antes que la palabra W aparezca escrita en la primera columna del
patrón rectangular producido por este procedimiento.
Por ejemplo, cuando se escoge la palabra W = Hola y el número N = 3, debemos
producir el siguiente patrón:
HolaHolaHola
olaHolaHolaH
laHolaHolaHo
aHolaHolaHol…
Como entrada se tendrá un archivo tipo texto que contiene información de una
cantidad indeterminada de palabras en líneas separadas antecedidas por un
número entero menor a 10. Como salida debe generarse un archivo texto
codificado de la forma anteriormente descrita.
Ejemplo de entrada: Ejemplo de salida:
2 Delphi DelphiDelphi
4 Quiz elphiDelphiD
lphiDelphiDe
phiDelphiDel
hiDelphiDelp
iDelphiDelph
QuizQuizQuizQuiz
uizQuizQuizQuizQ
izQuizQuizQuizQu
zQuizQuizQuizQui
177. Pretende llevar en un archivo tipo texto una agenda telefónica, en ella guardará
el primer nombre, el primer apellido y el número de teléfono; la agenda está
organizada de forma alfabética. Realice un programa que solicite los datos de un
nuevo contacto y guarde los mismos en el archivo, pero manteniendo el mismo
ordenado. Decida la estructura del archivo.
178. Realizar un programa basado en una rutina que construya un histograma que
represente la longitud de las palabras que se encuentran en un archivo tipo texto.
El programa debe tomar cada una de las palabras y por cada letra debe imprimir
en otro archivo tipo texto un asterisco, simulando una barra del histograma.
Entrada: La primera línea del archivo de entrada contiene el número de barras
que debe tener el histograma y las siguientes líneas contienen las palabras que
deben representarse en el mismo. Salida: La salida deseada es un archivo texto
con el histograma antes mencionado, el cual debe tener barras representadas por
asteriscos correspondientes al número de letras que tiene cada palabra del archivo
de entrada.
179. Existe en disco un archivo de datos ‘DATOS.DAT’ donde cada línea del archivo
obedece a la siguiente estructura:
Nombre de una persona, Cédula de Identidad, Estatura
180. Dos personas juegan a los dardos con el blanco que se muestra en la siguiente
figura:
Y
183. Una pareja de novios se da cita cada día en la terraza de un café al término de su
jornada laboral. Ambos llegan entre las 5:00 p.m. y las 5:45 p.m., de manera
equiprobable e independiente. Permanecen allí durante T minutos. Diseñe un
programa que con los criterios anteriores permita conocer la probabilidad de que
la pareja se encuentre en dicho café.
184. A un grupo de números naturales se les conoce como Sociables, cumplen lo
mismo que los números amigos, pero en vez de ir en parejas van en grupos más
grandes. Así, la suma de los divisores del primer número da el segundo, la suma
de los del segundo da el tercero, y así sucesivamente. La suma de los divisores del
último da el primer número de la lista. Por ejemplo: los números 12496, 14288,
15472, 14536 y 14264 son números sociables.
185. El número 58510 (base decimal) es igual a 10010010012 (base binaria). Nótese
que dicho número es palindrómico en ambas bases.
Realice un programa que calcule la suma de todos los números menores a un
millón que son simultáneamente palindrómicos en base decimal y base binaria (no
incluya los ceros a la izquierda de los números).
186. Realice un programa que determine cuantos billetes y monedas de cada
denominación se deben emplear para cambiarle el cheque a un cliente, de tal
manera que el número de billetes y monedas de circulación legal sea el mínimo
posible. No tome en cuenta los centavos. La cantidad debe ser verificada no
pudiendo ser negativa, poseer valores decimales o exceder el monto de
100.000.000.000, en cualquiera de los casos se debe dar un mensaje adecuado al
usuario. El resultado debe ser dado en forma que se muestre la denominación del
billete o moneda y la cantidad requerida del mismo, aquellos billetes o monedas
que no sean necesarios no deben ser mostrados.
187. Los números felices se definen de la siguiente forma: Empezando con
un número (dado como dato) entero positivo N, se reemplaza el número por
la suma de los cuadrados de sus dígitos, y se repite el proceso hasta que el
número es igual a 1 o hasta que se entra en un ciclo infinito que no incluye el 1.
Los números que al finalizar el proceso terminan con 1, son conocidos
como números felices. Por ejemplo, el 7 es un número feliz porque el proceso
finaliza en uno, pero el 4 no es feliz por entra en un ciclo infinito que no contiene
al 1.
188. Suponga que está elaborando un sistema que maneje todos los aspectos
relacionados con una nómina en el cual gestiona recibos de pagos de diferentes
fuentes (nómina, vacaciones, etc). Como soporte a lo anterior genere un programa
que, dada una cifra, ingresada por el usuario en números, sea representada en
palabras. Como limitante el programa debe ser realizado para cifras de no más de
nueve (9) dígitos y trabajaremos sin centavos (obviamente estos elementos deben
ser validados adecuadamente).
189. La criba de Eratóstenes es un algoritmo que permite hallar todos los números
primos menores que un número natural dado N. Se forma una tabla con todos los
números naturales comprendidos entre 2 y n, y se van tachando los números que
no son primos de la siguiente manera: Comenzando por el 2, se tachan todos sus
múltiplos; comenzando de nuevo, cuando se encuentra un número entero que no
ha sido tachado, ese número es declarado primo, y se procede a tachar todos sus
múltiplos, así sucesivamente. El proceso termina cuando el cuadrado del mayor
número confirmado como primo es mayor que n. Diseñe un programa que dado un
número entero y positivo realice el procedimiento descrito y muestre los valores
encontrados.
190. Escriba un programa que contenga una función recursiva que genere los
números binarios de N bits que no tengan ceros consecutivos. Por ejemplo, para
N = 3, los números son: 110, 110, 011 y 101.
191. La compresión RLE o Run-Length Encoding es una forma muy simple de
compresión de datos en la que secuencias de datos con el mismo valor
consecutivas son almacenadas como un único valor más su recuento. Esto es más
útil en datos que contienen muchas de estas "secuencias"; por ejemplo, gráficos
sencillos con áreas de color plano, como iconos y logotipos.
Por ejemplo, considere una pantalla que contiene texto en negro sobre un fondo
blanco. Habría muchas secuencias de este tipo con píxeles blancos en los
márgenes vacíos, y otras secuencias de píxeles negros en la zona del texto.
Supongamos una única línea (o scanline), con 0 representando las zonas en negro
y 1 representa las de blanco sería de la siguiente forma:
1111111111110111111111111000111111111111111 (secuencia descomprimida)
Si aplicamos la codificación run-length a ésta línea, obtendríamos lo siguiente:
1(12)0(1)1(12)0(3)1(15).
Interpretado esto como 12 blancos, 1 negro, 12 blancos, 3 negros y 15 blancos.
20 95 64 94 39 63
26 97 17 78 78 96
44 20 45 35 14 00
67 15 94 03 80 04
futuros que hay que numerar (al menos uno), y otra con sus nombres separados
por espacio. Después aparecerán dos líneas más, una con la cantidad de sucesores
futuros que hay que numerar (al menos uno), y otra con sus nombres separados
por espacio.
Todos los nombres estarán compuestos de una única palabra de no más de 20
letras del alfabeto inglés, y serán sensibles a mayúsculas. Además, se garantiza
que en cada caso de prueba no habrá más de 20 nombres de reyes diferentes.
Salida que se desea es: para cada sucesor de cada caso de prueba se indicará,
una línea independiente, el número que le corresponderá. Aunque normalmente se
utilizan números romanos, por simplicidad se indicará el número en la notación
arábiga tradicional. Después de cada caso de prueba se escribirá una línea en
blanco.
201. Se da en un archivo tipo texto un grupo de valores en un número indeterminado
de líneas, en cada línea habrá dos valores enteros A y B (cumpliéndose que: 1 ≤ A
≤ B ≤ 108). Se requiere que realice un programa que produzca otro archivo tipo
texto en el cual por cada línea del archivo de entrada escriba una línea en el
archivo de salida con diez valores enteros; cada uno de estos valores será el
contaje del número de veces que cada dígito (0-9) aparece en todos los números
enteros existentes entre A y B (ambos inclusive). Por ejemplo, si los valores en el
archivo inicial son 10 y 12, todos los números involucrados serán 10, 11 y 12 y se
tendrá que el dígito 0 aparece 1 vez, el 1 aparece 4 veces, el 2 una vez y el resto
de los dígitos no aparecen. Por lo tanto, la línea en el archivo de salida será 1 4 1
0 0 0 0 0 0 0. El conteo de cada dígito se debe escribir en orden creciente del 0 al
9.
Ejemplo de archivo de entrada:
10 12
1 9
12 321
5987 6123
12345678 12345679
203. Diseñe un programa que dado un archivo tipo texto con un número indeterminado
de palabras escritas una debajo de la otra, tenga como una salida una matriz NxN
que sea una sopa de letras que contenga las palabras que se encuentran en el
archivo texto. Las palabras deben aparecer aleatoriamente y con la misma
probabilidad de ocurrencia en cualquier posición de la matriz y con alguna de las
siguientes direcciones: horizontal (izquierda-derecha) o vertical (arriba-abajo).
Asuma que todas las palabras pueden ser colocadas en la matriz y recuerde que
las palabras se pueden cruzar. El dato de entrada será el tamaño de la matriz (N)
y la petición de ubicación del archivo en el sistema.
204. El problema de los filósofos cenando es un problema clásico de las ciencias de la
computación propuesto por Edsger Dijkstra para representar el problema de la
sincronización de procesos en un sistema operativo. Cabe aclarar que la
interpretación está basada en pensadores chinos, quienes comían con dos palillos,
donde es más lógico que se necesite el del comensal que se siente al lado para
poder comer.
El enunciado del problema es el siguiente: cinco filósofos se sientan alrededor de
una mesa y pasan su vida cenando y pensando. Cada filósofo tiene un plato de
fideos y un tenedor a la izquierda de su plato. Para comer los fideos son
necesarios dos tenedores y cada filósofo sólo puede tomar los que están a su
izquierda y derecha. Si cualquier filósofo toma un tenedor y el otro está ocupado,
se quedará esperando, con el tenedor en la mano, hasta que pueda tomar el otro
tenedor, para luego empezar a comer.
Si dos filósofos adyacentes intentan tomar el mismo tenedor a una vez, se
produce una condición de carrera: ambos compiten por tomar el mismo tenedor, y
uno de ellos se queda sin comer.
Si todos los filósofos toman el tenedor que está a su derecha al mismo tiempo,
entonces todos se quedarán esperando eternamente, porque alguien debe liberar
el tenedor que les falta. Nadie lo hará porque todos se encuentran en la misma
situación (esperando que alguno deje sus tenedores). Entonces los filósofos se
morirán de hambre. Este bloqueo mutuo se denomina interbloqueo o deadlock.
Se pide que investigue y programe alguna de las posibles soluciones que permita
que los filósofos nunca se mueran de hambre.
205. Una pequeña editorial pretende poner en marcha una campaña de promoción de la
última novela de uno de sus escritores y para ello va a lanzar al mercado dos
formatos de presentación de la misma, libro de bolsillo y libro de tapa dura. En el
Archivo: Problemario Programación 2018.doc Pág - 36 de 37
UNIVERSIDAD CENTRAL DE VENEZUELA
FACULTAD DE INGENIERÍA – CICLO BÁSICO
DEPARTAMENTO DE INVESTIGACIÓN DE OPERACIONES Y
COMPUTACIÓN