Você está na página 1de 13

UNIVERSIDAD DE CALDAS – PROGRAMACIÓN I

Ejercicios para recuperación nota primer parcial

Vectores

1. Suponga que se quiere construir un algoritmo que califique un examen de


selección múltiple presentado por un estudiante de Programación de
Computadores. En cada una de las preguntas del examen, el estudiante
debió elegir una de cinco opciones, identificadas con las letras A,B,C,D y E.
Las entradas (datos conocidos) para el algoritmo son:
 El número de preguntas que tenía el examen
 Cada una de las respuestas dadas por el estudiante
 Las respuestas correctas
La salida esperada (dato desconocido) es:
 la nota obtenida. Esta nota corresponde al número de aciertos que tuvo el
estudiante.

En este problema, los arreglos son útiles para guardar las respuestas
correctas y las opciones elegidas por el estudiante. El número de preguntas
del examen se puede guardar en una variable entera, al igual que la nota.

2. Escriba un algoritmo que lea dos arreglos de números enteros


ORDENADOS ascendentemente y luego produzca la lista ordenada de la
mezcla de los dos. Por ejemplo, si los dos arreglos tienen los números 1 3 6
9 17 y 2 4 10 17, respectivamente, la lista de números en la pantalla debe
ser 1 2 3 4 6 9 10 17 17.

3. Escriba un algoritmo que lea un arreglo de números enteros, y un número


x, y escriba en la pantalla todos los índices de las posiciones del arreglo
donde está x. Por ejemplo, si el arreglo es el que aparece enseguida y x es
2:
1 2 3 100 23 2 2 1

El programa debe escribir: 1 5 6.

4. Un arreglo de números se llama partidario si todo número que está en una


casilla par (0,2,4,…) es mayor que cualquiera de los números que están en
las casillas impares (1,3,5,…). Escriba un algoritmo que lea un arreglo de
números enteros y luego, diga si es partidario o no. Por ejemplo, si el
arreglo es el siguiente:

100 5 200 1 1000 0 600 50 300 4

El programa debe escribir: es partidario.

Prof: Carlos Alberto Ruiz Villa Pag: 1


UNIVERSIDAD DE CALDAS – PROGRAMACIÓN I

5. Un palíndromo es una palabra o frase, si se quiere del idioma español, que


se puede leer igual de izquierda a derecha y de derecha a izquierda,
obviando signos de puntuación y espacios. Para aclarar, son palíndromos
las siguientes frases y palabras:
• Anilina
• Amor a Roma
• Dábale arroz a la zorra el abad
• Reconocer
• Anita lava la tina
• ala
Considere el problema de construir un algoritmo que lea una PALABRA, de
longitud máxima 30, y determine si es palíndromo o no.

6. Construya un algoritmo que lea una FRASE, de longitud máxima 30, y


determine si es palíndromo o no. El algoritmo debe procesar correctamente
frases de más de una palabra.

7. Construya un algoritmo que lea una frase de máximo 100 caracteres y


determine cuántas palabras, vocales y consonantes tiene.

8. Construya un algoritmo que lea dos palabras y determine si la primera es


sufijo de la segunda. Por ejemplo, lote es sufijo de casalote.

9. Construya un algoritmo que lea dos palabras del español y determine si la


primera es parte de la segunda. Por ejemplo, alo es parte de casalote.

10. Suponga que la operación longitudCadena no está disponible. Escriba un


algoritmo que calcule la longitud de una cadena, bajo el supuesto de que el
terminador de cadena aparece en alguna casilla del arreglo.

11. Suponga que la operación compararCadena no está disponible. Escriba un


algoritmo que compare dos cadenas, bajo el supuesto de que ambas tienen
un terminador de cadena.

12. Escriba un algoritmo que invierta una cadena. Por ejemplo, si la cadena es
épica, su inversa es acipé.

13. Dado el vector T de tamaño n. Si el tamaño es par invertir los elementos de


cada mitad de los elementos.

14. Crea un programa que escriba por teclado una palabra de menos de 20
letras e imprima por pantalla el número de letras de esa palabra y la escriba
al revés.

Prof: Carlos Alberto Ruiz Villa Pag: 2


UNIVERSIDAD DE CALDAS – PROGRAMACIÓN I

15. Escribe un programa que pida una palabra y luego diga cuál es la letra más
usada en esa palabra.

16. Ordenación – Método de la burbuja


En muchas ocasiones es necesario ordenar los valores que contiene una
matriz. Para ello es necesario intercambiar los contenidos de los elementos
siguiendo algún método que los ordene.
En este ejercicio vamos a utilizar el método de la burbuja:
• Compararemos el primer elemento de la matriz con el que le sigue. Si
están ordenados, se dejan como están, y si no, se intercambian.
Avanzaremos una posición y repetiremos la operación, y así sucesivamente
hasta llegar al final de la matriz. A este recorrido por la matriz,
denominaremos pasada.
• Si durante la pasada no hemos realizado algún intercambio, entonces la
matriz esta ordenada.
• Por eso, repetiremos la pasada descrita tantas veces como sea necesario,
hasta que en una de ellas no hayamos realizado ningún intercambio. En
ese momento, la matriz estará ordenada.
Escribiremos la función burbuja, que recibe un único argumento, el vector a
ordenar, y devuelve un vector con los valores ordenados, tras emplear el
método descrito.
Elabora un script que solicite el nombre de un fichero que contiene una
serie de datos numéricos. El programa abrirá el archivo y leerá los valores,
cargándolos en un vector. Seguidamente, llamaremos a la función burbuja,
que devolverá el vector ordenado, y presentaremos este en pantalla.
Fíjate en los detalles del procedimiento de ordenación y busca posibles
formas de optimizarlo.

17. Ordenación – Método de selección


Este método de ordenación consta de los siguientes pasos (suponiendo
ordenación de menor a mayor):
• Buscamos el menor elemento del vector. Lo intercambiamos por el
primero en la lista.
• Buscamos el menor elemento comenzando en el segundo. Lo
intercambiamos por el segundo.
Y así sucesivamente...
Escribiremos la función ordselec, que recibe un único argumento, el vector
a ordenar, y devuelve el vector ordenado, tras emplear el método descrito.
Elabora un programa que solicite el nombre de un fichero que contiene una
serie de datos numéricos. El programa abrirá el fichero y leerá los valores,
cargándolos en un vector. Seguidamente, llamaremos a la función
ordselec, que devolverá el vector ordenado, y presentaremos este en
pantalla.

Prof: Carlos Alberto Ruiz Villa Pag: 3


UNIVERSIDAD DE CALDAS – PROGRAMACIÓN I

18. Traducción del código genético


Dada una secuencia de ARN, representada por los caracteres A, G, C, U,
obtendremos la secuencia de aminoácidos de la proteína resultante de la
traducción. Sabemos que el código genético es el siguiente:

Nota: A modo de ejemplo, GC(A,C,G,U), significa GCA, GCC, GCG o GCU


Se leerá desde teclado (o desde un archivo o fichero) una secuencia de
ARN, formada por nucleótidos representados mediante los caracteres A, G,
C, U. Podrá existir también espacio blanco (espacios, tabulaciones y saltos
de línea), pero no tendrá significado alguno para la secuencia.
Se recorrerá la secuencia de nucleótidos hasta detectar el codón AUG, que
inicia la traducción y, además, codifica el aminoácido metionina. Desde ese
punto se recorrerán los codones sucesivos (grupos de 3 nucleótidos),
traduciendo cada uno de ellos al correspondiente aminoácido. El proceso
termina al encontrar cualquiera de los codones de terminación (UAA, UAG
o UGA) o al terminar la secuencia.
Por ejemplo, la secuencia de ARN:
UGUAAGAGGUAUGCACUCAAAAGACUGACACCUG
codifica el polipéptido: Met-His-Ser-Lys-Asp

19. Criba de Eratóstenes


Este conspicuo señor griego se dio cuenta de que si en una lista de
números tachaba todos los múltiplos de cada primo, en la lista solo le
quedaban primos. Utilizaremos este método para calcular los primos
existentes hasta 1000 sin hacer una sola división.
Comenzaremos creando un vector que contenga los número del 1 al 1000.
Aprovechando que sabemos que el 2 es primo, nos ubicamos en el 2 y

Prof: Carlos Alberto Ruiz Villa Pag: 4


UNIVERSIDAD DE CALDAS – PROGRAMACIÓN I

saltamos por la matriz de 2 en 2, poniendo un cero en cada casilla donde


aterricemos. Con esto hemos eliminado los múltiplos de 2. Desde el 2,
avanzamos por el vector hasta encontrar el siguiente número no cero. En
este caso será el 3, así que saltaremos por el vector de 3 en 3, poniendo un
cero en cada lugar donde aterricemos. Repetimos el proceso hasta que
terminamos con la tabla. Entonces quedaran en ella únicamente los primos,
junto con todos los ceros que han sustituido a los no primos. Imprimiremos
exclusivamente los números primos.

Matrices

Una matriz mágica es una matriz cuadrada (tiene igual número de filas que de
columnas) que tiene como propiedad especial que la suma de las filas, las
columnas y las diagonales es igual. Por ejemplo:
276
951
438
En esta matriz las sumas son 15.
1. Considere el problema de construir un algoritmo que compruebe si una
matriz de datos enteros es mágica o no, y en caso de que sea mágica
escribir la suma. El usuario ingresa el tamaño de la matriz máximo hasta
10.

Una primera versión del algoritmo puede ser la siguiente:


Inicio
Paso 1: Leer el tamaño de la matriz
Pado 2: Leer los elementos de la matriz
Paso 3: Determinar si la matriz es mágica o no
Paso 4: Si la matriz es mágica mostrar el valor de la suma.
Fin
Los pasos 1 y 2 son interacciones con el usuario que permiten capturar los datos
de entrada. La versión inicial se puede refinar detallando estos pasos y además
defiendo las variables para hacerlos:

Seudocódigo

Procedimiento principal
variables
i, j, aux, tam, suma: enteros //i señala las filas
//j señala las columnas
magica: matriz [10][10] de enteros
Inicio
escribir(“Por favor digite el número de filas de la matriz (entre 2 y 10): ”)
leer(tam)
para (i=0 hasta tam-1) hacer
Prof: Carlos Alberto Ruiz Villa Pag: 5
UNIVERSIDAD DE CALDAS – PROGRAMACIÓN I

para(j=0 hasta tam-1) hacer


escribir(“Por favor digite el dato en la posición”)
escribir(i,j)
leer(magica[i][j])
fin_para
fin_para
Paso 3
Paso 4
Se puede observar que el primer ciclo para tiene como contador la variable i, esto
indica que se llenará la matriz por filas, el segundo ciclo para que tiene como
contador la variable j, recorrerá la fila columna a columna para ubicar allí el dato
correspondiente.
La parte nuclear de la solución es el paso 3. En este problema en particular se
sabe que el número de filas y de columnas es igual y que hay dos diagonales.
Para el ejemplo mostrado al inicio sería 3 filas, 3 columnas y dos diagonales. Para
almacenar las sumas en un arreglo este tendrá una dimensión de 2*tam+2. La
declaración del arreglo sumas es:
sumas: arreglo [22] de enteros
Ahora para calcular las sumas se puede hacer lo siguiente:
Paso 3.1: Inicializar el arreglo de sumas en cero
Paso 3.2: Sumar fila por fila, columna por columna y las diagonales y guardar su
valor en
el arreglo.
para(i=0 hasta 2*tam+2) hacer
sumas[i]:=0
fin_para
//Sumas correspondientes a las filas
para(i=0 hasta tam-1) hacer
para(j=0 hasta tam-1) hacer
sumas[i]=magica[i][j]+sumas[i]
fin_para
fin_para
//Sumas correspondientes a las columnas
para(j=0 hasta tam-1) hacer
para(i=0 hasta tam-1) hacer
sumas[j+tam]=magica[i][j]+sumas[j+tam]
fin_para
fin_para
//Sumas correspondientes a las diagonales
para(i=0 hasta tam-1) hacer
sumas[2*tam]=magica[i][i]+sumas[2*tam]
fin_para
para(i=0 hasta tam-1) hacer
sumas[2*tam+1]=magica[i][(tam-1)-i]+sumas[2*tam+1];
fin_para
Paso 4: Para determinar si la matriz es mágica se va a recorrer y comparar el
vector sumas, si en algún momento se encuentra un valor diferente se muestra en
Prof: Carlos Alberto Ruiz Villa Pag: 6
UNIVERSIDAD DE CALDAS – PROGRAMACIÓN I

pantalla que la matriz no es mágica y se lleva el contador i más allá del final del
arreglo, si por el contrario se llega al final del arreglo, es decir que todo este
contiene el mismo valor y la matriz si cumple con las características evaluadas, se
muestra en pantalla que la matriz es mágica.
//Comparar el vector suma y muestra el resultado
int con=0;
con=sumas[0];
para(i=1 hasta 2*tam+1) hacer
si(con<>sumas[i])
escribir("la matriz no es mágica)
i=2*tam+3;
fin_si
fin-para
si(i=2*tam+2)
escribir(“la matriz es mágica y la suma es:”)
escribir(con);
fin_si

El algoritmo completo se presenta enseguida.


Procedimiento principal
variables
i, j, aux, tam, suma: entero //i señala las filas
//j señala las columnas
con=0: entero
magica: matriz [10][10] de enteros
sumas: arreglo [22] de enteros
Inicio
escribir(“Por favor digite el número de filas de la matriz (entre 2 y 10): ”)
leer(tam)
para (i=0 hasta tam-1) hacer
para(j=0 hasta tam-1) hacer
escribir(“Por favor digite el dato en la posición”)
escribir(i,j)
leer(magica[i][j])
fin_para
fin_para
para(i=0 hasta 2*tam+2) hacer
sumas[i]:=0
fin_para
//Sumas correspondientes a las filas
para(i=0 hasta tam-1) hacer
para(j=0 hasta tam-1) hacer
sumas[i]=magica[i][j]+sumas[i]
fin_para
fin_para
//Sumas correspondientes a las columnas
para(j=0 hasta tam-1) hacer
Prof: Carlos Alberto Ruiz Villa Pag: 7
UNIVERSIDAD DE CALDAS – PROGRAMACIÓN I

para(i=0 hasta tam-1) hacer


sumas[j+tam]=magica[i][j]+sumas[j+tam]
fin_para
fin_para
//Sumas correspondientes a las diagonales
para(i=0 hasta tam-1) hacer
sumas[2*tam]=magica[i][i]+sumas[2*tam]
fin_para
para(i=0 hasta tam-1) hacer
sumas[2*tam+1]=magica[i][(tam-1)-i]+sumas[2*tam+1];
fin_para
con=sumas[0];
para(i=1 hasta 2*tam+1) hacer
si(con<>sumas[i])
escribir("la matriz no es mágica)
i=2*tam+3;
fin_si
fin-para
si(i=2*tam+2)
escribir(“la matriz es mágica y la suma es:”)
escribir(con);
fin_si
fin-procedimiento

2. El dueño de un restaurante entrevista a cinco clientes de su negocio y les


pide que califiquen de 1 a 10 los siguientes aspectos: (1 es pésimo y 10 es
excelente o inmejorable) Atención de parte de los empleados, Calidad de la
comida, Justicia del precio (el precio que pagó le parece justo?)
Ambiente (muebles cómodos?, música adecuada?, iluminación suficiente?,
decoración, etc.)
Escriba un algoritmo que pida las calificaciones de los cinco clientes a cada
uno de estos aspectos, y luego escriba el promedio obtenido en cada uno
de ellos. La lista debe aparecer ordenada del aspecto mejor calificado al
peor calificado.

3. En una hacienda hay un hato que se compone de N vacas. Diseñe un


algoritmo que guarde en una matriz de dimensión 7xN la producción de
leche diaria (en litros) de cada una de las vacas, durante una semana.
Además, el algoritmo debe calcular la producción total del hato en cada uno
de los siete días, y el número de la vaca que dio más leche en cada día.

4. Los siguientes ejercicios tienen como propósito que usted escriba ciclos
que recorran la matriz completa o partes de ella. Suponga que se ha
definido una constante positiva entera N y una matriz mat, de dimensión
NxN.
 Escriba un algoritmo que ponga cero en ambas diagonales de la matriz.

Prof: Carlos Alberto Ruiz Villa Pag: 8


UNIVERSIDAD DE CALDAS – PROGRAMACIÓN I

 Escriba un algoritmo que ponga cero en la primera y la última fila, y en la


primera y la última columna de la matriz.
 Escriba un algoritmo que llene de números la matriz de tal forma que
mat[i][j] sea igual a i+j.
 Escriba un algoritmo que llene la diagonal principal de la matriz con los
números 1,2,3,...N. La diagonal principal de una matriz está formada por las
casillas en las cuales el índice de fila y de columna son iguales.
 Escriba un algoritmo que llene todas las filas pares con los números
1,2,3,...N, y las filas impares con los números N,N-1,N-2,...1.

5. Diseñe un algoritmo que permita guardar en un arreglo las sumas de las


filas de una matriz. Esto es, la suma de los elementos de la primera fila
deberá quedar guardada en la primera posición del arreglo, la suma de los
elementos de la segunda fila en la segunda posición, y así sucesivamente
para todas las filas de la matriz. La máxima dimensión de la matriz es
100x50 (100 filas y 50 columnas) y la del vector es 100.

Por ejemplo, si el usuario ingresa la siguiente matriz de 3x5 (3 filas, 5 columnas)

3.5 6.5 30 8.2 0


4 0 -1 3.6 1.4
10 -1,5 3.4 6 2

El resultado sería un arreglo siguiente:


48,2 8 20,5
porque
3,5 + 6,5 + 30 + 8,2 + 0 = 48,2
4 + 0 + (-1) + 3,6 + 1,4 = 8 y
10 (-1,5) + 3,4 + 6,6 + 2 = 20,5

6. En álgebra lineal las matrices son tema central. Sobre ellas se definen
varias
operaciones, como por ejemplo:
 La suma de dos matrices. Si A y B son matrices de igual dimensión, la
matriz
C=A+B se calcula haciendo que C[i][j] = A[i][j]+B[i][j], para todo i y j
válidos.
 La traspuesta de una matriz. Si A es una matriz de dimensión NxM, la
matriz B=At se calcula haciendo que B[i][j] = A[j][i], para todo i y j válidos.
Note que esto quiere decir que las filas se convierten en columnas y que la
dimensión de B es MxN.
 La traza de una matriz cuadrada. Si A es una matriz de dimensión NxN, la
matriz traza es la suma de todos los elementos de la diagonal principal.

Prof: Carlos Alberto Ruiz Villa Pag: 9


UNIVERSIDAD DE CALDAS – PROGRAMACIÓN I

 La multiplicación de dos matrices. Si A y B son matrices de dimensiones


nxm y mxk, respectivamente, la matriz C=A*B , de dimensión nxk, se
calcula haciendo que:

Especifique y escriba un algoritmo para cada una de estas operaciones.

7. Escriba un programa que pida al usuario ingresar la altura y el ancho de un


rectángulo y lo dibuje utilizando asteriscos:
Altura: 3 Ancho: 5

*****
*****
*****

8. Escriba un programa que dibuje el triángulo del tamaño indicado por el


usuario de acuerdo al ejemplo:
Altura: 5
*
**
***
****
*****

9. Escriba un programa que dibuje el hexágono del tamaño indicado por el


usuario de acuerdo al ejemplo:
Lado: 4
****
******
********
**********
********
******
****

10. La secuencia de Collatz de un número entero se construye de la siguiente


forma:
si el número es par, se lo divide por dos; si es impar, se le multiplica tres y
se le suma uno; la sucesión termina al llegar a uno.
La conjetura de Collatz afirma que, al partir desde cualquier número, la
secuencia siempre llegará a 1. A pesar de ser una afirmación a simple vista
muy simple, no se ha podido demostrar si es cierta o no.
Usando computadores, se ha verificado que la sucesión efectivamente llega
a 1 partiendo desde cualquier número natural menor que

Prof: Carlos Alberto Ruiz Villa Pag: 10


UNIVERSIDAD DE CALDAS – PROGRAMACIÓN I

Desarrolle un programa que entregue la secuencia de Collatz de un número


entero:

n: 18
18 9 28 14 7 22 11 34 17 52 26 13 40 20 10 5 16 8 4 2 1
n: 19
19 58 29 88 44 22 11 34 17 52 26 13 40 20 10 5 16 8 4 2 1
n: 20
20 10 5 16 8 4 2 1

11. Desarrolle un programa que grafique los largos de las secuencias de


Collatz de los números enteros positivos menores que el ingresado por el
usuario:

n: 20

1*
2 **
3 ********
4 ***
5 ******
6 *********
7 *****************
8 ****
9 ********************
10 *******
11 ***************
12 **********
13 **********
14 ******************
15 ******************
16 *****
17 *************
18 *********************
19 *********************
20 ********

12. Un tablero de ajedrez es una grilla de 8 × 8 casillas. Cada celda puede ser
representada mediante las coordenadas de su fila y su columna,
numeradas desde 1 hasta 8. El caballo es una pieza que se desplaza en
forma de L: su movimiento consiste en avanzar dos casillas en una
dirección y luego una casilla en una dirección perpendicular a la primera:
Escriba un programa que reciba como entrada las coordenadas en que se
encuentra un caballo, y entregue como salida todas las casillas hacia las
cuales el caballo puede desplazarse.
Todas las coordenadas mostradas deben estar dentro del tablero.

Prof: Carlos Alberto Ruiz Villa Pag: 11


UNIVERSIDAD DE CALDAS – PROGRAMACIÓN I

Si la coordenada ingresada por el usuario es inválida, el programa debe


indicarlo.

Ingrese coordenadas del caballo.


Fila: 2
Columna: 8
El caballo puede saltar de 2 8 a:
16
36
47
Ingrese coordenadas del caballo.
Fila: 3
Columna: 4
El caballo puede saltar de 3 4 a:
13
15
22
26
42
46
53
55
Ingrese coordenadas del caballo.
Fila: 1
Columna: 9
Posición invalida.

13. La siguiente espiral de 5 × 5 se forma comenzando del número 1, y


moviéndose a la derecha en el sentido de las agujas del reloj:

21 22 23 24 25
20 7 8 9 10
19 6 1 2 11
18 5 4 3 12

Prof: Carlos Alberto Ruiz Villa Pag: 12


UNIVERSIDAD DE CALDAS – PROGRAMACIÓN I

17 16 15 14 13

La suma de las diagonales de esta espiral es 101.


14. Escriba un programa que entregue la suma de las diagonales en una
espiral de 1001 × 1001 creada de la misma manera que en el ejercicio
anterior. Entre todos los enteros mayores a 1 hay solamente cuatro que
pueden ser representados por la suma de los cubos de sus dígitos.
Uno de esos números es 153 pues:
13+53+33=1+125+27=153
Desarrolle un programa para poder determinar los otros tres números.
Tenga en cuenta que los números se encuentran entre 150 y 410.

15. Un tablero de ajedrez es una grilla de ocho filas y ocho columnas,


numeradas de 1 a 8. Dos de las piezas del juego de ajedrez son el alfil y la
torre. El alfil se desplaza en diagonal, mientras que la torre se desplaza
horizontal o verticalmente. Una pieza puede ser capturada por otra si está
en una casilla a la cual la otra puede desplazarse:

Escriba un programa que reciba como entrada las posiciones en el tablero


de un alfil y de una torre, e indique cuál pieza captura a la otra:
Fila alfil: 7
Columna alfil: 6
Fila torre: 4
Columna torre: 3
Alfil captura
Fila alfil: 3
Columna alfil: 4
Fila torre: 7
Columna torre: 4
Torre captura

Prof: Carlos Alberto Ruiz Villa Pag: 13

Você também pode gostar