UNIVERSIDAD TECNOLÓGICA DE PEREIRA- FACULTAD DE INGENIERIAS
PROGRAMA DE INGENIERÍA DE SISTEMAS Y CIENCIAS DE LA COMPUTACIÓN
ASIGNATURA: PROGRAMACION I – IS105 – Profesor: Doctor Ricardo Moreno Laverde
Publicado el Jueves 2023-03-30. Algunos de estos ejercicios fueron socializadas el Miércoles 2023-03-29
RECOMENDACIONES:
1. Leer y entender cada problema. 2. Saberlo hacer manualmente en papel y lápiz. 3. Construya el código en el
lenguaje de programación Racket. Haga pruebas antes de entregar su examen.
CONTRATO
Requisitos o especificaciones
1. Usted, debe entregar su propuesta de solución en un máximo de una(1) hora y cincuenta y cinco(55) minutos
contados a partir de la hora oficial del inicio de la clase.
2.- Se debe cumplir TODOS los requisitos del contrato.
3. USE SOLO STRING’s. No puede utilizar vectores, matrices ni listas(No vistos en clase a la fecha). Para imprimir
algo solo podrá utilizar la función (printf) El código debe estar documentado y ser amable con el usuario. En los
comentarios dentro del código, como documentación de la aplicación, debe tener en este orden lo siguiente:
-Fecha de publicación
-Hora
- Versión de su código
-Autor. Ing(c)
- Nombre del lenguaje utilizado
- Versión del lenguaje utilizado
- Presentado a: Doctor Ricardo Moreno Laverde
- Universidad Tecnológica de Pereira
- Programa de Ingeniería de Sistemas y Computación
- Un descriptivo de que hace el programa
- Para cada identificador, haga un comentario de para que lo usara dentro del código
-Salvedades si las hubiese. Ejemplo: Salvedad: Para valores fuera de este rango, no garantizamos los resultados.
4. Máxima fecha y hora de envío, de la respuesta del examen, al email de la asignatura: Viernes 2023-03-31 hasta
las 07:00 horas.
5. Usted defenderá su propuesta de solución el Viernes 2023-03-31 en hora de clase, de forma presencial e individual.
Observación:
- No se aceptara que se presente el mismo examen de otro estudiante, compartan ideas, pero no se copien el código.
Desde el primer día de clases, se indicó que cuando se hiciera un examen, se podían reunir a compartir ideas de como
enfrentar el problema y colaborativamente plantear soluciones. Si se llegase a presentar el mismo código, cosa que
es fácil demostrar(identificadores iguales, nombres diferentes de identificadores(variables) pero con la misma lógica,
funciones con el mismo nombre ó con nombre cambiado y/o ubicadas en diferente lugar dentro del código, etc) la
nota para todos los que presenten el examen de esa forma será de cero punto cero(0.0), independiente de quien le
copio a quien. (No comparta código, comparta ideas).
El NO cumplir con los requisitos mínimos, se calificará con cero punto cero (0.0) todo el parcial.
-Salvedades si las hubiese. Ejemplo: Salvedad: Para valores fuera de este rango, no garantizamos los resultados.
Desde el primer día de clases, se indicó que cuando se hiciera un examen, se podían utilizar sus apuntes, reunirse a
compartir ideas de como enfrentar el problema y colaborativamente plantear soluciones, que en todo caso, serán
individuales. Comparta ideas no código..
RESUELVA SOLO DOS(2) DE LOS SIGUIENTES EJERCICIOS
Problema 1:Laberinto. Realizar un programa que permita simular un laberinto con una matriz de dimensiones
30*30 , donde los pasos libres estarán representados por el carácter ASCII=32 (espacio en blanco = sp = space) y los
muros por el carácter ASCII = █ = 219. Se generará aleatoriamente el laberinto y en todo caso la periferia estará
siempre con el carácter ASCII = 219 = █. (0,2 hasta 0,29); (0,29 hasta 29,29) (29,29 hasta 29,0); (29,0 hasta 2,0), las
coordenadas de entrada será la fila 0 y columna 0, y la salida se generara en forma aleatoria sobre la columna más a
la derecha del arreglo (columna 29), sin tocar el muro de la periferia. Se pide:
1. Construir e imprimir el arreglo en forma clara y ordenada.(calificación de esta parte sobre el ejercicio 30%)
2. Construir una función que encuentre una(1) salida. Si no es posible, debe indicar que no tiene salida. La salida o
camino de salida desde la posición fila 0 y columna 0, será indicado sobre la misma matriz con el carácter ASCII =
169 = ©. Si hay salida debe imprimir el laberinto con esa salida(calificación de esta parte sobre el ejercicio
70%)Ejemplo:
Se debe presentar solo el laberinto de la siguiente forma:
Problema 2: Una empresa marca todos sus productos con un código QR como el de la figura, que es un arreglo de
30x30 píxeles negros y blancos(string de 900 caracteres). Es posible detectar un producto falsificado comprobando
una serie de características en el código QR.
Se pide escribir un aplicativo, para gestionar estos códigos de acuerdo con los siguientes
pasos:
1. Declarar un arreglo de 30 x 30 y llenarlo con números unos(1) y ceros(0) en forma
aleatoria, donde el uno(1) represente un pixel negro y el cero(0) un pixel blanco. En
todo caso los pixeles de la periferia estarán siempre en blanco. (0,0 hasta 0,29); (0,29
hasta 29,29) (29,29 hasta 29,0); (29,0 hasta 0,0). Debe imprimir este arreglo con los
códigos ASCII = 219 = █ que representa el pixel negro y el ASCII=32 (espacio en
blanco = sp = space) para el pixel blanco. (calificación de esta parte sobre el ejercicio
30%)
2. Comprobar si el código QR tiene las características de los códigos QR asignados por la empresa, y en caso
contrario, calcular el número de errores detectado. calificación de esta parte sobre el ejercicio 70%)
Información adicional:
Los códigos QR asignados por la empresa cumplen los siguientes requisitos:
a) Los píxeles de la periferia están siempre en blanco;
b) El código tiene reservados un cuadrado de 7x7 píxeles encajado en la parte más externa superior derecha(sin
incluir la periferia, esto es no incluir fila 0 ni la columna 29), que debe estar formado por al menos 25 píxeles negros,
con cualquier disposición.
c) En la séptima fila(subíndice 6 de la figura), las columnas de la figura con subíndices 2, 4, y 25 son píxeles de
color negro.
Para la verificación de sus resultados; imprima el código QR de las siguientes maneras (Como usted genero el
arreglo de forma aleatoria, este puede ser solo un ejemplo):
Esta primera figura debe imprimirse Esta figura debe imprimirse debajo de la primera
Luego imprima en pantalla, los resultados de la siguiente manera:
Requisitos:
a) Los píxeles de la periferia están siempre en blanco
b) El código tiene reservados un cuadrado de 7x7 píxeles encajado en la parte más externa superior derecha(sin
incluir la periferia), que debe estar formado por al menos 25 píxeles negros, con cualquier disposición
c) En la séptima fila(subíndice 6 de la figura), las columnas en la figura 2, 4, y 25 del arreglo son píxeles de color
negro.
Cualquier producto que no cumpla los tres requisitos anteriores se considera falsificado. El número de errores se
calculará teniendo en cuenta solo el último requisito (c), asignando un punto por cada píxel de los citados que no
sea negro.
Condición a: Se cumple
Condición b: NO se cumple. Número de pixeles negros = ##
Condición c: NO se cumple.
Errores: 2 No es original
Para la condición b: Siempre debe aparecer el número de pixeles negros, se cumpla o no la condición.
Problema 3. Se pide construir un programa, tal que:
1. Lea en una cadena de caracteres(string) una función polinómica del tipo ;
n n-1 1
f(x)= A X + A X + ...A X + b
1 2 n
Donde: A1, A2...An son los coeficientes y b el termino independiente. Ejemplos: f(x) = “348X5–784X2+6”.
f(x) = “-10-X”. f(x) =”-3X+5+4X35”.
Consideraciones:
- En cualquier caso la ecuación, debe leerse como una cadena de caracteres.
- Los coeficientes son enteros positivos y/o negativos.
2. Imprima en pantalla los coeficientes y las potencias del polinomio. Ejemplos:
Para el string “348X5-6–784X2+6” Para el string “-10-10-34X(-345)+X”
Coeficiente Potencia Coeficiente Potencia
348 5 -10 0
-6 0 -10 0
-784 2 -34 -345
6 0 1 1
Problema 4. Construir un programa de computador en lenguaje Racket, tal que cree una pantalla (60 columnas x
30 filas) en modo texto y en forma aleatoria tal que aparezca lo siguiente en pantalla; ejemplo:
A. Esta primera figura debe imprimirse B. C. Esta figura imprímala debajo de la primera
........................................................... Ahora, busque como ...........................................................
...........o.............................................. conformar rectángulos, ...........o..............................................
.......o.........................o....................... donde la letra "o" sea una .......o.........................o.......................
.............o.......o................................... esquina de ese .............o.......o...................................
........................................................... rectángulo, dibújelos e ...........................................................
......................o...........o...................... imprima el área del ......................o...........o......................
........................................................... menor de ellos (si los ...........................................................
........................................................... hay, para un rectángulo ...........................................................
........................................................... de mínimo dos(2) filas ...........................................................
........................................................... y/o dos(2) columnas). ...........................................................
...........o.....................o....................... ...........oxxxxxxxxxxxxo....................
................................................o......... ...........xxxxxxxxxxxxxx.............o.....
...........o.....................o....................... Para este ejemplo el área ...........oxxxxxxxxxxxxo....................
........................................................... más pequeña es 6 x 2 ...........................................................
...........o............................................... ...........o...............................................
........................................................... Esto es el lado superior ...........................................................
........................o......o......................... tiene seis(6) columnas y ........................oxxxxo........................
........................o......o......................... la altura sería de dos(2) ........................oxxxxo........................
........................................................... filas ...........................................................
.........o..........o............o..................... .........oxxxxxoxxxxxxo.....................
........................................................... ..........xxxxxxxxxxxxx......................
.........o..........o............o..................... .........oxxxxxoxxxxxxo.....................
........................................................... ...........................................................
........................................................... ...........................................................
...............o.......................................... ...............o..........................................
........................................................... ...........................................................
.....................................o.................... .....................................o....................
.....................o.................................... .....................o....................................
........................................................... ...........................................................
...........o.............................................. ...........o..............................................
Otro ejemplo:
Para este ejemplo, tenemos tres(3) rectángulos: 1. Azul, 2. Rojo, [Link]. El área del más pequeño seria 4 x 3
Problema 5.
- Usted debe crear la función rush tomando dos(2) valores enteros positivos como argumentos, denominados
respectivamente x e y.
- Su función rush debe mostrar (en pantalla del ordenador) un rectángulo de x caracteres para el ancho, y de y
caracteres para la longitud.
- El profesor podrá modificar los valores de los argumentos durante la defensa, para comprobar si ha manejado todo
como se supone que debe. A continuación, se muestra un ejemplo de la prueba que realizaremos:
( rush 123 42 )
Ejemplo 01 Ejemplo 02 Ejemplo 03 Ejemplo 04 Ejemplo 05
( rush 5 3 ) ( rush 5 1) (rush 1 1) (rush 1 5) (rush 4 4)
/***\ /***\ / / /**\
* * * * *
\***/ * * *
* \**/
\
Problema 6.
Salvedad: Lo solicitado por el cliente, no es una regla gramatical para todas las palabras del idioma ingles.
Implementar plural
Definir la función “plural”, que toma una cadena de caracteres y devuelve otra cadena. Si la cadena dada termina en
“y” ó “Y”, el resultado debe ser el mismo que el de entrada, pero con la “y” ó “Y” sustituido por “ies” ó “IES”. De
lo contrario, el resultado debe ser la misma cadena entrada con una “s” al final.
Ejemplo utiliza: (plural "baby") debe devolver "babies", mientras que ( plural "fish") debe devolver "fishs".
Problema 7.
Tomado y adaptado de: [Link]
Fecha: 2021.04.07
“…El tres en línea, también conocido como ceros y cruces, tres en raya (España, Ecuador y Bolivia), cerito cruz
(en Cuba), michi (en Perú), triqui (en Colombia), cuadritos, juego del gato, gato (en Chile, Costa Rica y México),
tatetí (en Argentina, Paraguay y Uruguay), totito (en Guatemala), triqui traka, equis cero, tic-tac-toe (en Estados
Unidos), o la vieja (en Venezuela), es un juego de lápiz y papel entre dos jugadores: O y X, que marcan los
espacios de un tablero de 3×3 alternadamente.
Ejemplo: Una partida ganada por el primer jugador que tiene las X:
Una partida que termina en empate:
…”
Se pide hacer un programa tal que, permita jugar TRIQUI, tal que funcione así: Al jugador uno(1) se le asignara
una “X” y al jugador dos(2) una “O”.
Ejemplo:
1 | 2| 3
---+---+---
4 | 5| 6
---+---+---
7 | 8| 9
Jugador 1: Entre número casilla: 1 Al teclear uno(1) se colocara en esa casilla la X
X | 2| 3
---+---+---
4 | 5| 6
---+---+---
7 | 8| 9
Jugador 2: Entre número casilla: 5 Al teclear cinco(5) se colocara en esa casilla la O
X | 2| 3
---+---+---
4 |O| 6
---+---+---
7 | 8| 9
Jugador 1: Entre número casilla: 5
Casilla ya jugada - No se debe permitir que un jugador juegue una casilla ya jugada y si
Jugador 1: Entre número casilla: lo hace, debe permitírsele volver a entrar un número de casilla sin
perder su turno.
- El juego termina cuando se gane ó cuando se terminen de jugar todas las casillas.
Problema 8: Resonancia magnética
La resonancia magnética es una técnica de diagnostico por imagen en la que se obtiene información de las
características de diferentes puntos del cuerpo a partir de su respuesta a un campo magnético variable. Supongamos
que tenemos una matriz tridimensional de puntos que representa una imagen adquirida por este método, en el que
cada punto tiene un valor entre 0 y 255, correspondiente a un distinto nivel de gris.
IMAGEN MUESTREO CUANTIFICACION DE PIXELES
DIGITAL
247 245 239 234 208 234 226 250 255
243 245 211 23 82 121 56 192 254
251 171 134 92 137 121 106 144 252
243 115 117 106 135 139 55 53 161
278 143 121 114 125 108 126 107 205
235 107 85 126 98 109 126 107 206
242 202 103 133 74 72 142 236 252
254 252 244 239 178 199 243 249 245
255 244 243 250 227 232 241 251 253
La imagen será́ como la de un cuaderno de 100 hojas, donde cada hoja tendrá una cuadricula de 100 x 100 puntos,
esto es que genera un arreglo de 100 planos (fotografías) en Z(0,1,2,3,4…99)
Se quiere escribir un programa que permita detectar aspectos en la imagen que pueden ser indicadores de una
enfermedad. Como no tenemos los datos que generaría la máquina de “Resonancia magnética”, genere usted el
arreglo con datos aleatorios entre [0 y 255] para probar sus funciones. Para ello se pide:
1. Escribir una función que, para un determinado punto en la imagen (identificado por sus coordenadas x, y ,z) ,
detecte si es sospechoso. Se consideran sospechosos aquellos puntos para los que TODOS los puntos adyacentes
tengan un valor entre 20 y 40 (esto incluye los puntos pertenecientes al mismo plano, al plano inferior y al plano
superior). (calificación de esta parte sobre el ejercicio 15%)
Nota: A la hora de analizar la imagen, no se analizarán los puntos de ninguno de los planos exteriores del cubo.
2. Se pide escribir una función que, para un determinado plano de la imagen, busque líneas sospechosas. Se
considera una línea sospechosa toda línea HORIZONTAL (paralelas al eje X) en la que haya al menos tres(3) puntos
sospechosos consecutivos, para esto se pide que imprima el plano(fotografía, en modo gráfico); ejemplo:
Ejemplo: Fotografía en el plano Z=37
(calificación de esta parte sobre el ejercicio 15%)
3. Escribir un programa que emplee las funciones anteriormente descritas para identificar en una imagen si hay
alguna línea sospechosa y genere el siguiente informe(Ejemplo):
Plano en Z(Fotografia) Líneas sospechosas x plano(foto) Puntos sospechosos por plano(foto)
1 0 7
2 3 25
3 0 16
…….. …. …..
97 0 4
98 1 5
Los valores de todos los elementos de la matriz se supondrán ya cargados en memoria (no es necesario leerlos). En
caso de que existan líneas sospechosas en la imagen, el programa mostrará en qué plano hay más líneas sospechosas
(servirá para saber en qué lugar es mejor hacer una biopsia). (calificación de esta parte sobre el ejercicio 70%)
Problema 9. Se pide construir un algoritmo, tal que permita jugar a un(1) jugador, el juego de memoria llamado
concéntrese (memórama) El juego consiste en “recordar” sobre la pantalla, donde están las parejas de letras,
ocultas bajo el número del recuadro sobre el que este. Para nuestro ejercicio, serían cuatro(4) parejas. Para nuestro
juego, tendríamos el siguiente diseño de pantalla:
JUEGO CONCENTRESE (MEMORAMA) Numero de parejas = 0
1 2 3 4 5 6 7 8
Entre primera opción:
- Se debe utilizar cadenas de caracteres (string) y las funciones que permiten su manejo.
- Defina una cadena inicial, luego aplique un algoritmo que altere el orden aleatoriamente de la posición de los
caracteres y juegue con estos. Ejemplo:
Cadena inicial Cadena modificada aleatoriamente
& & + + @ @ * * & * + & @ + * @
Supongamos que en memoria, tenemos, una cadena de caracteres(string) de ocho(8) posiciones, donde están las
parejas, que el usuario debe “destapar”. Ejemplo:
Es decir:
Pareja 01: es el recuadro 1 y el recuadro 4
& * + & @ + * @
1 2 3 4 5 6 7 8
Pareja 02: es el recuadro 2 y el recuadro 7
Pareja 03: es el recuadro 3 y el recuadro 6
Pareja 04: es el recuadro 5 y el recuadro 8
Si tuviéramos estos datos en la memoria del ordenador, juguemos con un ejemplo:
JUEGO CONCENTRESE (MEMORAMA) Número de parejas = 0
1 2 3 4 5 6 7 8
Entre primera opción: 1
JUEGO CONCENTRESE (MEMORAMA) Número de parejas = 0
& 2 3 4 5 6 7 8 Se destapa la casilla uno(1), mostrando la letra oculta.
Entre segunda opción: 6
JUEGO CONCENTRESE (MEMORAMA) Número de parejas = 0
& 2 3 4 5 + 7 8 Se destapa la casilla seis(6), mostrando la letra oculta.
Desea continuar(s/n) : s
JUEGO CONCENTRESE (MEMORAMA) Número de parejas = 0
1 2 3 4 5 6 7 8 Como las letras de las casillas destapadas no coinciden, no se
completa la pareja y se ocultan nuevamente las letras a
Entre primera opción: memorizar o recordar.
JUEGO CONCENTRESE (MEMORAMA) Número de parejas = 0
1 2 3 4 5 6 7 8
Entre primera opción: 3
JUEGO CONCENTRESE (MEMORAMA) Número de parejas = 0
1 2 + 4 5 6 7 8 Se destapa la casilla tres(1), mostrando la letra oculta.
Entre segunda opción: 3 Aquí al teclear como segunda opción la casilla tres(3) que ya
fue jugada, debe advertirlo y permitirle entrar nuevamente la
Casilla ya jugada segunda opción.
Entre segunda opción: 6
JUEGO CONCENTRESE (MEMORAMA) Número de parejas = 0
1 2 + 4 5 + 7 8 Se destapa la casilla seis(6), mostrando la letra oculta.
Desea continuar(s/n) : s
JUEGO CONCENTRESE (MEMORAMA) Número de parejas = 1 Al haber coincidido que la letra oculta de la casilla tres(3) es
1 2 + 4 5 + 7 8 igual al de la casilla seis(6), se incrementa el número de
parejas, se dejan destapadas estas casilla y se sigue jugando.
Entre primera opción:
El juego acaba cuando se completen las cuatro(4) parejas ó cuando a el jugador se le pregunte ” Desea
continuar(s/n):” y él teclee n
Problema 10.
Se pide hacer un programa tal que, permita jugar “Ahorcado”, y que funcione así: El juego consiste en que el jugador,
debe adivinar una palabra oculta, que ira construyendo letra a letra, de tal forma que si la letra entrada no esta dentro
de la palabra a adivinar, el jugador ira siendo “ahorcado” mostrando su cuerpo parte por parte. 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 pertenece
a la palabra a adivinar, el personaje pierde alguna parte de su cuerpo (un brazo, una pierna, el tronco, etc). Se puede
jugar hasta que el personaje pierda todo su cuerpo, el último resto de su trágica vida.
Requisitos:
- Se pide crear hasta diez(10) palabras, tal que el programa escoja aleatoriamente una de ellas, para que el jugador la
adivine construyéndola letra por letra.
- Lea cada letra de la palabra, desde el teclado.
- El jugador debe adivinar las letras que pertenecen a la palabra y el programa debe terminar cuando todas las letras
se hayan adivinado o bien se haya cometido un número establecido de desaciertos, es decir, el jugador ha muerto
“ahorcado”.
- El código a nivel de comentario debe contener: El enunciado del problema, el autor, la fecha, un descriptivo de
cada “identificador”(variable) a utilizar(utilice nombres nemotécnicos, que representan para que se utilizan).
- Solo puede utilizar string’s. No puede utilizar arreglos, listas u otro temas no desarrollados en clase hasta el día de
hoy.
- Notesé que las letras son entradas sin utilizar doble comilla.
Ejemplo: Supongamos que: a. Se tomen las siguientes palabras: 1- “ola”. 2-”pollito”.3-“murcielago”. 4-
“universidad”. 5-“pereira”.
b. Que el número aleatorio generado sea el dos(2), esto es que la palabra elegida para este juego sería “pollito”
JUEGO AHORCADO JUEGO AHORCADO JUEGO AHORCADO
+----+ 1 +----+ 4 +----+ 7
| _______ | 0 p______ | 0 polli_o
| | | | /|
| Letras Jugadas: | Letras Jugadas: apu | Letras Jugadas: apueol
| | |
----- ----- -----
Entre una letra: Entre una letra: Entre una letra:
a e t
JUEGO AHORCADO
+----+ 2
JUEGO AHORCADO
+----+
5 JUEGO AHORCADO
+----+
8
| 0 _______ | 0 p______ | 0 pollito
| | /| | /|
| Letras Jugadas: a | Letras Jugadas: apue | Letras Jugadas: apueolt
| | |
----- ----- -----
Entre una letra: Entre una letra: ¡¡ GANASTE ¡¡ - fin del juego
p o
-----------------------------------------
JUEGO AHORCADO
3 JUEGO AHORCADO 6 Si el jugador cometiera siete(7)
errores, la figura del "ahorcado"
+----+ +----+
| 0 p______ | 0 po____o completo, sería:
| | /|
| Letras Jugadas: ap | Letras Jugadas: apueo +----+
| | | 0
----- ----- | /|\
Entre una letra: Entre una letra: | |
u L | /\
-----
Reconocimiento:
Problema 1, se tomó la idea de la Universidad Carlos III de Madrid – España; de la serie “OCW-UC3M”, curso “Programación
en Lenguaje C”
Link: [Link]
Fecha: 2023.03.30
Problema 4 y 5, se tomo la idea de U42, de varios proyectos de la prueba “LA PISCINA”
Problema 6, Se tomo la idea el 2022.03.14 de: College of Engineering – The University of Utah – CS 5510: Programming Languages –
Fall 2016 - [Link]