1.- NUMEROS PERFECTOS

Anuncio
ETSII
Dpto. de Informática
y Sistemas
ALGORÍTMICA
PARTE 1 - TEORÍA
Fundamentos
de Informática
79
Colección de Ejercicios Propuestos
1.- MCM Y MCD:
Realizar un algoritmo que halle el Mínimo Común Múltiplo y Máximo Común Divisor
de un conjunto de números cualquiera.
2.- NUMEROS PERFECTOS
Preparar un algoritmo que imprima los números perfectos comprendidos entre 1 y
10.000. Número perfecto es aquel que es igual a la suma de sus divisores propios. Por
ejemplo: el número 6 es perfecto pues es igual a 1+2+3.
3.- NUMEROS PRIMOS I
Realizar un algoritmo que determine si un nº es primo o no.
4.- NUMEROS PRIMOS II
Partiendo del algoritmo anterior, preparar un algoritmo que imprima los N primeros
primos.
5.- NUMEROS NO PRIMOS
Obtener un algoritmo que determine todos los nº de 3 cifras tal que no sean primos y
se cumpla la siguiente condición:
centena + decena = unidad.
79
ETSII
Dpto. de Informática
y Sistemas
ALGORÍTMICA
PARTE 1 - TEORÍA
Fundamentos
de Informática
80
6.- CRIBA DE ERATOSTENES
Un procedimiento para la obtención de números primos consiste en el inventado por
Eratóstenes en el Siglo V A.C. Consiste en la creación de una tabla de números cuya
posición representa los N números naturales (inicialmente puesta a cero), y comenzando
por el segundo elemento, avanzar colocando "unos" un número de posiciones igual a la del
elemento que sirve de apoyo (es decir, colocando unos en las posiciones 4,6,8,...). Este
proceso se repite para los restantes elementos de la tabla no marcados, y finalizado el
mismo los ordinales nulos serán números primos. Elaborar un algoritmo que, mediante esta
técnica, calcule los números primos comprendidos entre 1 y N.
7.- PRODUCTO DE MATRICES
Dadas dos matrices: A(MxN) y B(NxM), elaborar un algoritmo que efectúe el producto de
ambas, depositando el resultado en la matriz A; teniendo en cuenta que no se puede utilizar
ninguna matriz auxiliar, como máximo se podrá emplear un vector de apoyo.
8.- MATRIZ ESPIRAL
Se define matriz espiral toda matriz en la que la disposición de valores crecientes
conforme una espiral, por ejemplo:
 1 2 3 4
12 13 14 5


11 16 15 6


10 9 8 7
Realizar el algoritmo que genere a partir de la sucesión de los nº naturales una matriz
espiral de (mxn). (OJO: no tiene porqué ser cuadrada).
9.- CAMBIO DE BASE (I)
Escribir un agoritmo que solicite como cadena de texto la expresión de un número en
una base de numeración determinada (que también se ha de solicitar) y escriba el resultado
de la expresión de dicho número en el sistema decimal.
80
ETSII
Dpto. de Informática
y Sistemas
ALGORÍTMICA
PARTE 1 - TEORÍA
Fundamentos
de Informática
81
Recúerdese que cuando una base es mayor que 10, es necesario indicar dígitos para
los valores comprendidos entre 10 y la base-1, y que por convenio se utilizan las letras,
comenzando por la A.
Para convertir un número expresado en cualquier base a la decimal, no hay más que
desarrollar la serie de potencias que dicho número representa, por ejemplo, el hexadecimal
1AB5F se obtendría como:
1AB5F16 = 1 * 164 + 10 * 163 + 11 * 162 + 5 * 161 + 15 * 160 = 10796710
10.- CAMBIO DE BASE (II)
Ahora se pide el algoritmo que realice lo inverso del anterior, es decir, que solicitando
un número en notación decimal y la nueva base, represente dicho número como una
cadena de caracteres.
El método propuesto consiste en dividir sucesivamente dicho número por la base
deseada (volviendo a dividir el cociente obtenido hasta que sea cero). De esta forma. La
sucesión invertida de los restos obtenidos será el número deseado (no se olvide que si la
base es mayor de 10, habrá que sustituir algunos valores por letras).
11.- POKER DE DADOS
Dado un conjunto de 5 dados (con las caras numeradas del 1 al 6), calcular la
frecuencia relativa y absoluta de las veces que se obtiene parejas, dobles parejas, tríos,
poker y escalera mediante una simulación de jugadas, en la que las tiradas de los dados se
obtienen de forma aleatoria.
Frecuencia absoluta: nº de veces que ocurre un suceso especial (pareja, doble, trio,
poker y escalera)
Frecuencia relativa: relación entre el nº de veces que ocurre un suceso especial y el nº
total de sucesos
81
ETSII
Dpto. de Informática
y Sistemas
ALGORÍTMICA
PARTE 1 - TEORÍA
Fundamentos
de Informática
82
12.- NUMEROS ROMANOS
Construir un algoritmo que solicite un entero entre 1 y 5,000 y obtenga una cadena
con su representación en el sistema romano. En este sistema, las letras I, V, X, L, C, D y M
tienen los valores 1, 5, 10, 50, 100, 500 y 1000 respectivamente, y una letra de menor valor
que precede a otra de mayor valor se le resta, por ejemplo, MCMXLVII sería el 1.947.
13.- ESCRITURA DE NÚMEROS EN CASTELLANO
Construir un algoritmo que escriba en castellano el número solicitado.
Ej.: número = 226, escribiría: DOSCIENTOS VEINTE Y SEIS
14.- CUATRO EN RAYA
Se trata de reproducir el conocido juego en el que dos jugadores van dejando caer
alternativamente fichas en un tablero vertical de 64 casillas, ganando la partida aquel que
consigue formar una fila horizontal, vertical o diagonal de 4 fichas de su color. Para ello
considérese una matriz de 8x8, de la que cada jugador irá escogiendo (si no esta llena) la
columna en la que deposita su ficha. El algoritmo determinará el fin de la partida al
producirse la situación de "cuatro en raya" o por agotamiento de las casillas (empate).
Después de cada jugada, volcará la situación resultante en un fichero denominado
"JUGADA.DAT".
15.- MASTER MIND
Se trata de elaborar un programa para jugar al "MASTER MIND" numérico. Este juego
consiste en adivinar una secuencia aleatoria de cuatro dígitos en el menor número de
intentos posible, teniendoen cuenta que el ordenador nos informará, tras cada intento, del
número de dígitos correctos en su posición correcta (que denominaremos "muertos"), y del
número de dígitos correctos pero en posición incorrecta (que definiremos como "heridos").
Para mayor comodidad, no se admiten repeticiones en la generación de los dígitos.
82
ETSII
Dpto. de Informática
y Sistemas
ALGORÍTMICA
PARTE 1 - TEORÍA
Fundamentos
de Informática
83
16.- GRABACION DE MATRICES ESCASAS
Se define como matriz escasa aquella que contiene un elevado número de
componentes nulos. En cálculo matricial es tarea habitual "compactar" estas matrices de
forma que requieren menor cantidad de memoria. Considerese un sistema mediante el cuál
una matriz de dimensiones MxN se compacta en un fichero de forma que cada registro del
fichero contiene: la fila de la matriz, el número de elementos no nulos de la misma y parejas
formadas por los valores de columna con elemento no nulo y elemento propiamente dicho.
Se Pide: Preparar un algoritmo que lea un fichero correspondiente a una matriz MxN,
almacenada en un fichero de enteros (precedida por sendos registros, con los valores de M
y N), y escriba el fichero compactado, igualmente con todos sus elementos numéricos
precedidos de los valores de M y de N.
17.- PRODUCTO DE MATRICES ESCASAS
Dados dos ficheros que contienen matrices escasas como las definidas en el
problema anterior, realizar un algoritmo que deposite su producto en otro fichero de las
mismas características.
18.- ORDENAR MATRICES
Dada una matriz de (MxN) ordenar sus elementos por filas:
4 3 5 1 2 3
2 1 7  4 5 6

 

6 8 9 7 8 9
19.- ENCRIPTACION I
Codificar un mensaje por el método de César. Este método consiste en relacionar
las letras tras desplazar el abecedario un número determinado de posiciones.
83
ETSII
Dpto. de Informática
y Sistemas
ALGORÍTMICA
PARTE 1 - TEORÍA
Fundamentos
de Informática
84
Ejemplo: Sea la palabra BECA, codificarla siendo la primera letra del abecedario
la H.
ABCDEFGHIJ
Palabra a codificar 
BECA
HIJKLMNOPQ
Palabra codificada 
ILJH
20.- ENCRIPTACION II
Codificar un mensaje por el método de la palabra.
Este es una variación del
metodo de cesar, donde el abecedario comienza con una palabra y las letras que la
incluyen son saltadas en la nueva configuración del abecedario.
Ejemplo: Sea la palabra CEBADA, siendo la palabra clave JUEGO.
ABCDEFGHIJKLMNÑOPQRSTUVWXYZ
JUEGOABCDFHIKLMNÑPQRSTVWXYZ
CEBADA  EOUJGA
Fíjese que las letras de la palabra clave se saltan en el nuevo abecedario, y que ésta no
puede tener letras repetidas.
21.- POLINOMIOS
Suponiendo que los grados de un polinomio corresponden a las posiciones de un vector y
los coeficientes están almacenados en dichas posiciones.
Realizar un algoritmo que
divida dos polinomios y otro que multiplique dos polinomios.
22.- NÚMERO DE DÍAS
Dadas dos fechas cualesquiera se pide la realización de un algoritmo que calcule el
número de días que existe entre ambas. Para ello se comprobará previamente que
dichas fechas son correctas (p.ej: una fecha no puede ser el 31 de abril) y considerando
los años bisiestos.
84
ETSII
Dpto. de Informática
y Sistemas
ALGORÍTMICA
PARTE 1 - TEORÍA
Fundamentos
de Informática
85
23.- DÍA DE LA SEMANA:
Dada una fecha cualquiera (anterior o posterior a la actual), elaborar un
algoritmo que, partiendo de una fecha de referencia, calcule el día de la semana para dicha
fecha.
24.- GENERADOR DE CALENDARIO:
Elaborar un algoritmo que, sabiendo que el 1 de enero de 1.900 fue lunes y
aprovechando lo aprendido en los dos ejercicios anteriores, genere el calendario de
cualquier mes de cualquier año.
25.- ORDENACIÓN DE FICHEROS
Dado un fichero de 'n' registros, ordenarlos suponiendo que los 'n' registros pueden
ser almacenados en memoria en un vector.
26.- ORDENACIÓN DE GRANDES FICHEROS
Se propone una extensión del ejercicio anterior, suponiendo que el fichero sea tan
grande que no quepa en la memoria. En este caso, consideraremos que un número de
registros (supongamos 1,000) pueden ser introducidos en la memoria simultáneamente. La
mecánica que se sugiere es leer bloques de 1,000 registros (hasta haber leido el fichero
completamente), que se van ordenando en memoria; y posteriormente intercalando (merge)
con el resultado de la intercalación anterior. De esta forma con dos ficheros temporales se
conseguirá la ordenación de fichero, sea cual sea su número de registros.
27.- REGISTROS IGUALES
Dado dos ficheros ORDENADOS, generar otro fichero donde aparezcan todos los
registros que se encuentren simultáneamente en los dos primeros. El proceso se hará de
forma secuencial, es decir, suponiendo que los datos NO pueden ser leídos completamente
en la memoria.
85
ETSII
Dpto. de Informática
y Sistemas
ALGORÍTMICA
PARTE 1 - TEORÍA
Fundamentos
de Informática
86
28.- REGISTROS DISTINTOS
Dado dos ficheros ORDENADOS, generar otro donde aparezca todos los registros
que no se repitan en los dos primeros. Suponemos que los datos NO pueden ser leídos
completamente en la memoria.
29.- RECUENTO DE PALABRAS:
Realizar un algoritmo que lea los registros de un fichero de texto previamente creado
y cuente el número de palabras existentes en el texto, clasificándolas según el número de
letras de cada una.
30.- DERIVADA DE UNA FUNCIÓN:
Dada una función, realizar un algoritmo que calcule el valor de la derivada en un
punto a partir de la definición de ésta (aplicación del límite).
y  f ( x)
y'  Limx0
f ( x  x)  f ( x)
x
31.- CAMPO MINADO
El objetivo de este algoritmo consiste reproducir la construcción interna de un tablero
del conocido juego del “campo minado”. Para ello, habrá que distribuir aleatoriamente 50
minas (que se representarán por un valor igual a 9) en una matriz entera de 10 filas y 15
columnas, y a continuación obtener para cada casilla no ocupada por una mina el número
de minas adyacentes.
86
ETSII
Dpto. de Informática
y Sistemas
ALGORÍTMICA
PARTE 1 - TEORÍA
Fundamentos
de Informática
87
32.- LETRA DEL NIF:
Mediante la realización de un algoritmo calcular la letra que le corresponde para
completar su Número de Identificación Fiscal (NIF).
Para
ello
se
proponen
las
siguientes operaciones:
Divida entre veintitrés su número del DNI. La parte entera del resultado multiplíquela
también por veintitrés.
operaciones matemáticas)
Reste ambos números (el del DNI y el resultante
y
obtendrá
de
de
las
esa sustracción un número comprendido
entre cero y veintitrés. Compare el número obtenido con la siguiente tabla alfabética y
sabrá cual es su letra para el NIF. Esta operación consiste en realizar el módulo aritmético
del DNI por 23 y el resultado que es el resto compararlo con la tabla siguiente.
Tabla de Equivalencias:
0=T
1=R
2=W
3=A
4=G
5=M
6=Y
7=F
8=P
9=D
10=X
11=B
12=N
13=J
14=Z
15=S
16=Q
17=V
18=H
19=L
20=C
21=K
22=E
23=T
33.- GRABACIÓN OPTIMIZADA:
A partir de las
características
existentes
en
los reproductores de disco
compacto, crear un algoritmo que imite la función de grabación optimizada
de
las
canciones de un CD; es decir, el objetivo que se pretende con la realización del algoritmo
será la de escoger, teniendo en cuenta la duración de la cinta donde se va a grabar (45,
60, 90, 120 minutos), aquella combinación de canciones para que el tiempo sobrante en
una cara de la cinta sea el mínimo.
87
ETSII
Dpto. de Informática
y Sistemas
ALGORÍTMICA
PARTE 1 - TEORÍA
Fundamentos
de Informática
88
34.- SOPA DE LETRAS:
Elaborar un algoritmo que genere una sopa de letras. Una sopa de letras se
puede considerar como una matriz de caracteres en la que se han "escondido" una serie
de palabras (distribuidas en las 8 direcciones posibles), entre una serie de caracteres
generados aleatoriamente. El algoritmo solicitará los siguientes datos:
1.- Número de palabras a esconder en la sopa de letras
2.- Las palabras propiamente dichas
3.- Número de caracteres horizontales y verticales de la sopa (ha de ser como
mínimo superior al de la palabra mas larga).
Ofreciendo como salida un FICHERO DE TEXTO en el que se encuentre la "sopa
resuelta" (es decir, el resultado de distribuir las palabras en la matriz MxN de caracteres
antes de rellenarla con caracteres aleatorios), y a continuación la "sopa definitiva" (tal y co
mo aparece para ser resuelta como pasatiempo).
Funcionalmente, la mayor dificultad de este problema consiste en la distribución de las
palabras en la matriz inicialmente vacía. Proponemos los pasos siguientes para cada
palabra:
1.- Determinar aleatoriamente la posición (fila y columna) de comienzo de escritura de
la palabra en la matriz de caracteres.
2.- Determinar aleatoriamente la dirección de escritura (1 = horizontal, 2 = vertical, 3 =
diagonal positiva, 4 = diagonal negativa). Previamente y también de forma
aleatoria, invertir o no la palabra para que quede "escrita al revés".
3.- Si la palabra "se sale" de la matriz, volver al paso "1".
35.- CONTROL DE PRESENCIA HORARIA:
Dado un fichero de texto (ENTRADAS.DAT) correspondiente a las entradas y salidas
del personal de una empresa a la misma, con el siguiente formato:
D.N.I
8 primeros caracteres
Nombre y apellidos
30 caracteres siguientes
Fecha (AAMMDDHHMMSS)
12 caracteres siguientes
88
ETSII
Dpto. de Informática
y Sistemas
Elaborar
un
ALGORÍTMICA
PARTE 1 - TEORÍA
algoritmo
que
genere
otro
Fundamentos
de Informática
89
fichero (PRESENCIA.DAT), con los
siguientes valores:
D.N.I
8 primeros caracteres
Nombre y apellidos
30 caracteres siguientes
Número de entradas total
4 caracteres siguientes
Total de horas
4 caracteres siguientes
Total de minutos
4 caracteres siguientes
Total de segundos
4 caracteres siguientes
Téngase en cuenta que el fichero de entrada ha de ser tan grande cómo se desee,
de forma que no se podrá contemplar la carga del mismo en memoria. Igualmente,
obsérvese que el fichero original no distingue entre entradas y salidas, por lo que se
contemplarán alternativamente para cada usuario. No obstante, se sabe que el número
total de empleados de la empresa no es muy grande, por lo que el proceso del fichero se
puede hacer de forma directa (leyéndose una vez cada registro).
36.- CLASIFICACIONES DE FÚTBOL:
Dado un fichero CLUBES.DAT que contiene los códigos numéricos (del 1 al 20)
y
los
nombres
de
los 20 clubes de fútbol
de
primera
división,
y
otro
RESULTADOS.DAT, que contiene los siguientes campos:
- Número de jornada
- Código del Club Local
- Código del Club Visitante
- Goles del Club Local
- Goles del Club Visitante
(Siendo todos ellos números enteros)
SE PIDE: Elaborar un algoritmo que a partir de estos dos ficheros genere un
tercero llamado CLASIFICACION.DAT, en el que figuren los siguientes campos:
89
ETSII
Dpto. de Informática
y Sistemas
ALGORÍTMICA
PARTE 1 - TEORÍA
Fundamentos
de Informática
90
- Nombre del Club
- Partidos jugados, ganados, empatados y perdidos
- Goles a favor y en contra
- Puntos (3 por partido ganado y 1 por empatado).
Este fichero será ordenado por puntos de mayor a menor, prevaleciendo en caso
de igualdad la diferencia de goles y en caso extremo el número de goles a favor.
Nota: Considérese que ninguna matriz ni vector de memoria puede tener alguna
de
sus
dimensiones
superior
a
20. Igualmente, el proceso
del
fichero
RESULTADOS.DAT ha de ser secuencial, y el fichero CLASIFICACION.DAT ha de se
generado al final del algoritmo.
37.- REINAS:
Se trata de colocar 8 reinas en un tablero de ajedrez de forma que no se ataquen
entre sí. Como modelo abstracto del problema, consideremos una matriz 8x8 inicialmente
vacía, en la que habrá que seleccionar 8 celdas (elementos a[i,j]), de modo que para
cada una de ellas se cumplan las siguientes restricciones:
a.- ninguna otra casilla seleccionada puede estar en la misma fila
b.- ninguna otra casilla seleccionada puede estar en la misma columna
c.- ninguna otra casilla seleccionada puede estar en la misma diagonal positiva
d.- ninguna otra casilla seleccionada puede estar en la misma diagonal negativa
Este problema es del tipo "laberinto", es decir, la solución se debe hallar colocando la
primera reina en una casilla cualquiera
(por ejemplo la a[1,1]), y las restantes se
intentarán colocar incrementando "i" y "j" de tal modo que se cumplan las 4 restricciones.
En el caso de que sea imposible colocar
una
reina
determinada,
habrá
que
"retroceder", recolocando la anterior en una posición factible (a no ser que no haya más
posiciones, con lo que se retrocedería a su "reina" precedente). Obviamente, la salida de
este algoritmo serán las coordenadas de las 8 reinas correctamente colocadas.
90
Descargar