Está en la página 1de 17

Este material, de distribucin gratuita, no contiene necesariamente las modificaciones

que se hayan incorporado durante la realizacin de las evaluaciones.


PONTIFICIA UNIVERSIDAD CATLICA DEL PER
ESTUDIOS GENERALES CIENCIAS
TCNICAS DE PROGRAMACIN

Prctica N 1
Semestre acadmico 2011-2
Elaborado el profesor del curso
Notas:
No se pueden usar apuntes de clase ni calculadoras.
CONTROL DE LECTURA
Segn el documento Separata-Tcnicas de Programacin que se le pidi leyera para esta prctica,
responda a las siguientes preguntas:
1. (2 puntos) Explique cmo el diseo de las estructuras de datos en un programa puede influir en la
eficiencia del programa.
2. (1.5 puntos) Explique el concepto de back-words.
3. (1.5 puntos) Explique cmo se representan los nmeros reales o de punto flotante en el
computador.
4. (1.5 puntos) Explique las caractersticas que debe tener un algoritmo.
5. (1.5) Explique en qu consisten los lenguajes funcionales.
DISEO DE ALGORITMOS:
6. (5 puntos) Los nmeros romanos se emplean en muchos medios, las reglas para formar un nmero
romano se detalla a continuacin 1 :
- La numeracin romana utiliza siete letras maysculas a las que corresponden los siguientes valores: I = 1, V = 5, X=10,
L=50, C=100, D=500, M=1000. Ejemplos: XVI = 16; LXVI = 66.
- Si a la derecha de una cifra romana de escribe otra igual o menor, el valor de sta se suma a la anterior. Ejemplos:
VI = 6; XXI = 21; LXVII = 67.
- La cifra "I" colocada delante de la "V" o la "X", les resta una unidad; la "X", precediendo a la "L" o a la "C", les resta
diez unidades y la "C", delante de la "D" o la "M", les resta cien unidades. Ejemplos: IV = 4; IX = 9; XL = 40; XC = 90;
CD = 400; CM = 900.
- En ningn nmero se puede poner una misma letra ms de tres veces seguidas. Ejemplos: XIII = 13; XIV = 14; XXXIII
= 33; XXXIV = 34
- La "V", la "L" y la "D" no pueden duplicarse porque otras letras ("X", "C", "M") representan su valor duplicado.
Ejemplos: X = 10; C = 100; M = 1.000
- Si entre dos cifras cualesquiera existe otra menor, sta restar su valor a la siguiente. Ejemplos: XIX = 19; LIV = 54;
CXXIX = 129
- El valor de los nmeros romanos queda multiplicado por mil tantas veces como rayas horizontales se coloquen encima de
los mismos. Ejemplo: M = 1.000.000.

Explique de manera muy detallada, en forma ordenada y empleando sus propias palabras cmo
representara un nmero romano, dado cualquier nmero entero como por ejemplo: 1734.
En la calificacin se tomar en cuenta, el orden, la caligrafa, la ortografa y la ausencia de
ambigedades en las oraciones. No puede emplear trminos de algn lenguaje de programacin.
PROGRAMACIN
7. (3.5 puntos) Escriba las expresiones siguientes, que permitan calcular el valor de . Se deber
emplear las reglas de sintaxis del Pascal:

Tomado de : http://roble.pntic.mec.es/msanto1/ortografia/numrom.htm

1 de 2

Contina

Este material, de distribucin gratuita, no contiene necesariamente las modificaciones


que se hayan incorporado durante la realizacin de las evaluaciones.

tanh ( + 5 )
+ 2
1

cotan (8.23 + tan(85.7) ) senh


( + 5 )

log
6

3.76

=
3.5 ( + )
log + (2.5 + 3.9 )
* 6.53

3.76

cotan -1 = arco cotangente

tanh(x) = senh (x ) / cosh(x )

e x e x

senh (x ) =
donde :
2

e x + e x

cosh(x ) =

2
85.7 = 87.5 grados sexagesimales

Considerar que y son variables que fueron asignadas antes de la evaluacin de las expresiones.
Deber declarar todas sus variables.
8. (3.5 puntos) Se pide escribir un programa en Pascal que, empleando nicamente los operadores
de bits (NO: +, -, *, /, exp, ln, sin, , etc.), permita realizar lo siguiente:
Dado un nmero entero representados en 4 bytes, de modo que tenga la forma de ABCD donde A,
B, C, D son las representaciones binarias de cada uno de los bytes del nmero. El programa deber
generar otro nmero a partir del primero que tengan la forma de CADB. Donde C contiene lo
mismo que C pero con los bits pares invertidos. A contiene lo mismo que A pero los 4 bits ms
significativos se colocan como los menos significativos y los 4 menos significativos como ms
significativos. D contiene lo mismo que D pero con los bits impares invertidos. B contiene lo
mismo que B pero con los dos bits menos significativos intercambiados en posicin.
Ejemplo:
Datos:
X = 902661613

A
B
C
D
00110101 11001100 10000101 11101101
C
10000101

C
11010000

A
00110101

A
01010011

D
11101101

D
01000111

B
11001101

B
11001110

Resultado:
S = -799848498

C
A
D
B
11010000 01010011 01000111 11001110

Lima, 9 de septiembre del 2011.

2 de 2

Este material, de distribucin gratuita, no contiene necesariamente las modificaciones


que se hayan incorporado durante la realizacin de las evaluaciones.
PONTIFICIA UNIVERSIDAD CATLICA DEL PER
ESTUDIOS GENERALES CIENCIAS
TCNICAS DE PROGRAMACIN

Prctica N 2
Semestre acadmico 2011-2
Elaborado el profesor del curso
Notas:
NO se pueden usar cadenas de caracteres, arreglos ni registros en esta prctica.
No se pueden usar apuntes de clase ni calculadoras.
PREGUNTA 1: (6 puntos)
Se tiene un archivo en el que se encuentre una serie de nmeros enteros menores de 4 000, similar al
que se muestra a continuacin:
23 567 2784
333 12 426
799 3951

1049 993

Se pide que escriba usted un programa que permita crear otro archivo de textos en el que los
nmeros aparezcan en su formato romano. Para el ejemplo anterior el programa generara el
siguiente archivo:
XXIII DLXVII MMDCCLXXXIV
CCCXXXIII XII CDXXVI MXLIX CMXCIII
DCCXCIX MMMXMLI

La cantidad de valores que aparecern en cada lnea debe coincidir con la cantidad de nmeros del
archivo original.
Las reglas para formar un nmero romano se detalla a continuacin 1 :
- La numeracin romana utiliza siete letras maysculas a las que corresponden los siguientes valores: I = 1, V = 5, X=10,
L=50, C=100, D=500, M=1000. Ejemplos: XVI = 16; LXVI = 66.
- Si a la derecha de una cifra romana de escribe otra igual o menor, el valor de sta se suma a la anterior. Ejemplos:
VI = 6; XXI = 21; LXVII = 67.
- La cifra "I" colocada delante de la "V" o la "X", les resta una unidad; la "X", precediendo a la "L" o a la "C", les resta
diez unidades y la "C", delante de la "D" o la "M", les resta cien unidades. Ejemplos: IV = 4; IX = 9; XL = 40; XC = 90;
CD = 400; CM = 900.
- En ningn nmero se puede poner una misma letra ms de tres veces seguidas. Ejemplos: XIII = 13; XIV = 14; XXXIII
= 33; XXXIV = 34
- La "V", la "L" y la "D" no pueden duplicarse porque otras letras ("X", "C", "M") representan su valor duplicado.
Ejemplos: X = 10; C = 100; M = 1.000
- Si entre dos cifras cualesquiera existe otra menor, sta restar su valor a la siguiente. Ejemplos: XIX = 19; LIV = 54;
CXXIX = 129

PREGUNTA 2: (8 puntos)
Uno de los problemas ms frecuentes hoy en da es que la informacin se transmite a travs de
medios electrnicos y por ende es muy susceptible de ser capturada por terceros que le den mal uso.
Es por esa razn que existen muchos mtodos que permiten cifrar la informacin que se enve de
modo que si alguien captura el mensaje y no es el destinatario, no lo pueda entender.
Es este sentido se requiere que usted elabore un programa en Pascal que permita leer un archivo de
texto, codifique el texto y lo almacene en otro archivo.
La codificacin consistir en lo siguiente:
-

Se le pide al usuario que introduzca el nombre del archivo a codificar, el nombre del archivo a
generar y una clave que consistir en nmero entero entre 1 y 7.

Tomado de : http://roble.pntic.mec.es/msanto1/ortografia/numrom.htm

1 de 2

Contina

Este material, de distribucin gratuita, no contiene necesariamente las modificaciones


que se hayan incorporado durante la realizacin de las evaluaciones.
-

El programa deber leer de dos en dos los caracteres del archivo, modificar estos caracteres
segn la clave y luego guardarlos en el archivo final.
La modificacin consistir en girar tantos bits como indica la clave, tomando la representacin
binaria de ambos caracteres como si fuera un solo valor.

Por ejemplo si la clave fuera 3 y el archivo tuviera el siguiente mensaje:


Hola amigos

El proceso de codificacin realizar lo siguiente:


Caracter
H
o

Cdigo ASCII
104
143

Binario
0110 1000
1000 1111

al juntarlos
0110 1000 1000 1111

al girar
0100 0100 0111 1011

al separarlos
0100 0100
0111 1011

Cdigo ASCII
68
123

Caracter
D
{

l
a

108
97

0110 1100
0110 0001

0110 1100 0110 0001

0110 0011 0000 1011

0110 0011
0000 1011

99
11

32
97

0010 0000
0110 0001

0010 0000 0110 0001

0000 0011 0000 1001

0000 0011
0000 1001

3
9

m
i

109
105

0110 1101
0110 1001

0110 1101 0110 1001

0110 1011 0100 1011

0110 1011
0100 1011

107
75

k
K

g
o

103
111

0110 0111
0110 1111

0110 0111 0110 1111

0011 1011 0111 1011

0011 1011
0111 1011

59
123

;
{

115
0

0111 0011
0000 0000

0111 0011 0000 0000

1001 1000 0000 0011

1001 1000
0000 0011

152
3

Por lo tanto, para el mensaje dado como ejemplo, el archivo creado por el programa ser:
D{ckK;{

Nota: si la cantidad de caracteres en el archivo original no es par, se tomar un carcter adicional


con cdigo ASCII cero (0).
Los nicos valores constantes que podr emplear sern 1, 2 3.
PREGUNTA 3: (6 puntos)
Escriba un programa en Pascal que permita calcular el nmero de das que hay entre dos fechas
cualesquiera dadas como dato.
Deber tomar en cuenta que enero, marzo, mayo julio, agosto octubre y diciembre tienen 31 das, que
abril, junio, septiembre y noviembre tienen 30 das, y que febrero tiene 29 das en ao bisiesto y 28
en el resto. Un ao es bisiesto si es divisible entre 4, excepto aquellos divisibles entre 100 pero que
no son divisibles entre 400.
Por ejemplo:
Fecha inicial: 3 10 2006
Fecha final: 23 4 2008
Resultado: 568 das

Lima, 23 de septiembre del 2011.

2 de 2

Este material, de distribucin gratuita, no contiene necesariamente las modificaciones


que se hayan incorporado durante la realizacin de las evaluaciones.
PONTIFICIA UNIVERSIDAD CATLICA DEL PER
ESTUDIOS GENERALES CIENCIAS
TCNICAS DE PROGRAMACIN

Prctica N3
Semestre acadmico 2011-2
Elaborado por los profesores del Curso
Notas:

No se puede usar material de consulta

En ninguna de las preguntas de la prctica se podr utilizar funciones o procedimientos u operadores


que manejen cadenas de caracteres y si emplean variables de tipo String, estas no podrn ser
manipuladas como arreglos. Tampoco se podrn emplear archivos auxiliares.

PREGUNTA 1: (12 puntos)


Se tienen dos archivos de textos que contienen informacin similar a la que se muestra a
continuacin:
Archivo 1:
12.85
1.643
23.4056
3.002
28.4
6.78
33.7773
12.648
35.65
10.02
44.0
8.456
48.901
23.569
52.782
45.873
54.98
78.99
56.0923 89.734
63.5301
79.33
65.35
70.456
71.778
83.45
...

Archivo 2:
50.564 15.82 43.984
98.6393
27.0977 33.056
3.9
12.77 21.334
...

45.838

70
60
50
40
30
20
10
0
0

10

20

30

40

50

60

70

80

Figura 1.

El primer archivo contiene dos columnas de nmeros reales, cada lnea corresponde a una coordenada
X, Y de una grfica como se muestra en la figura 1, los datos estn ordenados ascendentemente por
la primera columna. El segundo archivo contiene una serie de valores reales sin orden alguno. Estos
valores corresponden a valores X para los cuales se desea obtener su correspondiente valor Y.
Se pide que usted escriba un programa en Pascal que permita crear un tercer archivo de textos como
el que se muestra a continuacin, Los valores de yyyi debern ser calculados buscando primero los
valores xi y xi+1 ms cercanos al valor X e interpolando o extrapolando los valores.
Archivo 3:
3.9
12.77
12.85
15.82
21.334
23.4056
27.0977
28.4
33.056
33.7773
35.65
43.984
44.0
45.838
48.901
50.564
52.782
54.98
56.0923
63.5301
65.35
71.778
...

yyy1
yyy2

Interpolacin

1.643

yyy3
yyy4
3.002

yyy5
6.78

yyy6
12.648
10.02

yi+1

yyyi

yi

xi

xi+1

yyy7
8.456

yyy8

Extrapolacin

23.569

yyy9
45.873
78.99
89.734
79.33
70.456
83.45

yyyi

yi

xi

yi+1
xi+1

No se tiene la informacin de cuntos datos tiene cada archivo pero se sabe que cado uno no tiene
ms de 100.
NO SE PODRN EMPLEAR ARCHIVOS AUXILIARES.

Contina

Este material, de distribucin gratuita, no contiene necesariamente las modificaciones


que se hayan incorporado durante la realizacin de las evaluaciones.

PREGUNTA 2: (8 puntos)

Se tiene un archivo denominado Especialidades.txt, contiene la lista de especialidades de la


Universidad, el archivo no est ordenado. El archivo tiene la siguiente forma.
10-0547
Ingeniera Informtica
Ciencias e ingeniera
20-7475
Matemticas

Cdigo de la especialidad
Nombre de la especialidad
Nombre de la Facultad a la que pertenece
Cdigo de la especialidad

En el archivo se almacenan todas las especialidades de que tiene una Universidad. Cada especialidad
est ligada a una facultad, por lo que si bien es cierto en el archivo no se repiten las especialidades,
el nombre de una Facultad puede aparecer varias veces.
Se pide que usted escriba un programa en Pascal que permita crear un archivo de textos en el que
aparezcan las especialidades agrupadas por Facultad. El archivo ser similar al siguiente:
Facultad de Ingenieras
a) Ingeniera informtica
b) Ingeniera Civil

Facultad de Letras y Ciencias Humanas


a) Lingstica
b) Literatura

Ingeniera de Derecho

No se tiene el dato de cuntas facultades o especialidades tiene la Universidad pero s que son
alrededor de 30 Facultades, y que cada Facultad no tiene ms de 50 especialidades.
NO SE PUEDEN USAR ARCHIVOS AUXILIARES.

Lima, 28 de octubre del 2011.

Este material, de distribucin gratuita, no contiene necesariamente las modificaciones


que se hayan incorporado durante la realizacin de las evaluaciones.
PONTIFICIA UNIVERSIDAD CATLICA DEL PER
ESTUDIOS GENERALES CIENCIAS
TCNICAS DE PROGRAMACIN

Prctica N4
Semestre acadmico 2011-2
Elaborado por el profesor del Curso
Notas:

No se puede usar material de consulta

En ninguna de las preguntas de la prctica se podr utilizar archivos auxiliares.

PREGUNTA 1: (8 puntos)
El Buscaminas (en ingls: Minesweeper) es un videojuego para un jugador inventado por Robert
Donner en 1989. El objetivo del juego es despejar un campo de minas sin detonar ninguna mina. El
juego ha sido programado para muchos sistemas operativos, pero debe su popularidad a las versiones
que vienen con Microsoft Windows desde su versin 3.1 1 .
Lo que se busca en esta pregunta es que usted escriba un procedimiento en Pascal que solamente
prepare el escenario del juego. Esto es que coloque en un arreglo las minas y la informacin necesaria
para que luego se pueda jugar. En otras palabras dado el siguiente programa:
prgram buscaminas;
const MAX = 50;

type TFila = array[1..MAX] of Char;


TMatriz = array[1..MAX] of TFila;
var tablero:TMatriz;
nFil, nCol, nMin: Integer;
begin
write(Ingrese el numero de filas y columnas del escenario: );
readln(nFil, nCol);
write(Ingrese el numero de minas: );
readln(nMin);

preparaEscenario(tablero, nFil, nCol, nMin);


jugar(tablero, nFil, nCol, nMin);
end.

se le pide que implemente el procedimiento preparaEscenario.


El procedimiento debe colocar aleatoriamente las nMin minas en el tablero, de modo que se verifique
que dos o ms minas no sean colocadas en la misma celda. Luego se debe colocar en cada celda del
tablero que no tenga una mina, el nmero de minas que tiene a su alrededor, las celdas que no tienen
minas alrededor quedarn vacas.
El resultado ser un tablero similar al que se muestra a continuacin:
1
1
1

1
2
3
2

1
1
1
2

5
2

1
1
1

1
3
4

3
2

1
1
1
1
1
2
3

1
3

1
1
1

1
2
2
1

Mina

El programa principal no se puede cambiar, tampoco se pueden definir nuevos tipos de datos.
PREGUNTA 2: (12 puntos)
Se tiene un tablero que contiene informacin similar al que muestra en la siguiente pgina. Las letras
simulan una serie de naves que quieren capturar una bandera (2).
Se pide que escriba un procedimiento en Pascal en el que se simule el movimiento de las naves y
determine si alguna nave pudo capturar la bandera, y en ese caso qu nave la captur.

Tomado de http://es.wikipedia.org/wiki/Buscaminas

Contina

Este material, de distribucin gratuita, no contiene necesariamente las modificaciones


que se hayan incorporado durante la realizacin de las evaluaciones.
A

E
D

F
H
G

2
K
B

La simulacin se realizar de la siguiente manera:


Se mueve una a una las naves. Cada nave se mueve una celda en cada ciclo de la simulacin. El
movimiento de una nave debe ser de modo que la fila y columna de la nave se acerque a la fila y
columna de la bandera. Por ejemplo si la bandera se encuentra en la celda [5][5] y una nave en
la celda [10][7], sta ltima se mover a la celda [9][6]. Se debe empezar a mover primero las
naves que se encuentren ms arriba y a la izquierda del tablero y terminar con las que se
encuentren ms abajo y a la derecha.
Si al mover una nave, sta se coloca en una celda ocupada por otra nave, ambas se destruyen,
eliminndolas del tablero.
Un ciclo de la simulacin se cumple cuando todas las naves del tablero se han movido una celda.
Los tres puntos anteriores se repiten hasta que la simulacin termine.
La simulacin termina inmediatamente cuando:
Una nave llega a la celda de la bandera, o
Cuando todas las naves se han destruido.
El procedimiento deber tener el siguiente encabezado:
procedure simulacion(var tablero: TMatriz; nFil, nCol: Integer);
donde TMatriz ser definido como:
const MAX = 50;
type TFila = array[1..MAX] of Char;
TMatriz = array[1..MAX] of TFila;
Las variables tablero, nFil y nCol llegan al procedimiento cargadas con valores vlidos.
Al final el procedimiento debe imprimir por pantalla:

El nmero de naves que inici la simulacin


La posicin de la bandera
La identificacin y posicin de cada una de las naves.
El nmero de ciclos que tom la simulacin.
Un mensaje que indique si alguna nave captur o no la bandera.
En caso de haber sido capturada la bandera:
La identificacin de la nave que la captur.
La identificacin y posicin de las naves que quedaron en el tablero y que no pudieron
capturar la bandera.

El tipo de dato del tablero y el encabezado del procedimiento no pueden cambiarse, sin embargo si
podr definir en esta pregunta otros tipos de datos y variables.

Lima, 11 de noviembre del 2011.

Este material, de distribucin gratuita, no contiene necesariamente las modificaciones


que se hayan incorporado durante la realizacin de las evaluaciones.
PONTIFICIA UNIVERSIDAD CATLICA DEL PER
ESTUDIOS GENERALES CIENCIAS
TCNICAS DE PROGRAMACIN
1er. Examen
2do. Perodo del 2011
NOTAS:
- NO SE PUEDE USAR MATERIAL DE CONSULTA
- LAS SOLUCIONES DEBERN DESARROLLARSE BAJO UN ESTRICTO DISEO DESCENDENTE, por lo que NO SE
CALIFICARN aquellos mdulos que son llamados por otros que estn incompletos. Cada mdulo no debe sobrepasar las
20 lneas.
- NO SE PODR UTILIZAR ARREGLOS TAMPOCO SE PODR EMPLEAR FUNCIONES, PROCEDIMIENTOS NI
OPERADORES QUE MANEJEN CADENAS DE CARACTERES. SI SE EMPLEAN VARIABLES DE TIPO STRING, STAS
NO PODRN SER MANIPULADAS COMO ARREGLOS.
- NO SE PUEDEN EMPLEAR ARCHIVOS AUXILIARES.
- En la calificacin se tomar en cuenta el buen uso de los nombres de los identificadores, y el eficaz uso de comentarios.
- QUEDA TERMINANTEMENTE PROHIBIDO EL USO DE CALCULADORAS Y CORRECTORES LQUIDOS

PARTE OBLIGATORIA
Una Universidad desea contar con un programa que le permita cuantificar los cursos que llevan los
alumnos en otras especialidades a la propia. Para esto cuenta con varios archivos de textos, los que se
presentan a continuacin:
Alumnos.txt, contiene la informacin acerca de los alumnos de la Universidad, su estructura es la
siguiente:
20073434
Juan Prez Lpez
10-0534
20091122

Cdigo del alumno


Nombre del alumno
Cdigo de la especialidad
Cdigo del alumno

Cursos.txt, contiene los cursos dictados en la Universidad, el archivo no est ordenado. El archivo tiene
la siguiente organizacin:
MEC123
Mquinas elctricas
10-0666
3.5
CIV222
Materiales de construccin

Cdigo del curso


Nombre del curso
Cdigo de la especialidad a la que pertenece
Nmero de crditos
Cdigo del Curso

Especialidades.txt, contiene la lista de especialidades de la Universidad, el archivo no est ordenado.


El archivo tiene la siguiente forma.
10-0547
Ingeniera Informtica
Ciencias e ingeniera
20-7475
Matemticas

Cdigo de la especialidad
Nombre de la especialidad
Nombre de la Facultad a la que pertenece
Cdigo de la especialidad

Finalmente se cuenta con otro archivo de textos que contiene las notas de todos los alumnos
matriculados en la Universidad en un perodo de tiempo determinado, de la siguiente forma:
20109912
INF757
14
2005339

Cdigo del alumno


Cdigo del curso
Nota
Cdigo del alumno

1. (7 puntos) Se pide confeccionar un programa en Pascal que permita determinar para cada
especialidad, el nmero de alumnos de esa especialidad que se encuentra matriculado en cursos de
otra especialidad diferente a la suya. El reporte debe hacerse en un archivo de textos y debe ser
similar al siguiente:
1/3

Contina

Este material, de distribucin gratuita, no contiene necesariamente las modificaciones


que se hayan incorporado durante la realizacin de las evaluaciones.
a)
b)
c)
d)

Nmero alumnos matriculados en otras especialidades, por especialidad


Ingeniera Informtica: 35 alumnos matriculados en cursos de otra especialidad.
Matemticas: 0 alumnos matriculados en cursos de otra especialidad.
Ingeniera Civil: 123 alumnos matriculados en cursos de otra especialidad

CONSIDERACIONES ADICIONALES: un alumno NO puede ser contado dos veces.


2. (8 puntos) Confeccionar un programa en Pascal que permita detectar a los alumnos que estn
llevando cursos en otras especialidades diferentes a la suya, en el reporte debe aparecer el nombre
y la especialidad del alumno, y un detalle del creditaje llevado en cada especialidad diferente a la
suya. El reporte debe ser hecho en un archivo de textos de la siguiente manera:
Alumno

Especialidad

a)

Pedro Gmez

Ingeniera Civil

b)
c)

Ana Roncal
Carlos Castro

Ingeniera Informtica
Ingeniera Informtica

d)

...

Crditos en otra especialidad


Especialidad
Crditos matriculados
Matemticas
7.5
Ingeniera Industrial
3.0
Ingeniera Civil
12.5
Fsica
8.0
Ingeniera Mecnica
3.0
Matemticas
6.5

Crditos aprobados
6.0
3.0
10.5
3.5
0.0
2.5

Consideraciones adicionales: en el reporte NO deben aparecer aquellos alumnos que no estn


matriculador en otra especialidad difere4nte a la suya. Tampoco deben aparecer especialidades con
cero (0.0) crditos matriculados.

PARTE ELECTIVA (conteste solamente una de las preguntas planteadas. Anule la


pregunta no contestada en la contra cartula del cuadernillo)
Esta parte electiva est referida a problemas que manejen directamente la representacin interna de
valores, por lo tanto en esta parte SLO PODR EMPLEAR OPERADORES DE BITS. NO puede
emplear operadores aritmticos como +, -, *, /, etc., tampoco funciones estndar como exp, ln, sqr,
etc.). Si podr emplear los procedimientos estndar para incrementar y decrementar y las funciones
ord y chr. EL NO SEGUIR ESTAS INDICACIONES ANULAR LA PREGUNTA.
3. (5 puntos) Se tiene un archivo de textos similar al que se muestra a continuacin:
HM/p6&k^wgye563$#0=73

En el archivo se ha codificado una imagen grfica. Por lo que se quiere hacer un programa que lea el
archivo y muestre la imagen que representa en la pantalla. La codificacin ha consistido en lo
siguiente:
- La representacin binaria de los primeros 4 caracteres, juntos en una variable entera de 4 bytes,
representa la cantidad de filas de puntos que tiene la imagen.
- La representacin binaria de los segundos 4 caracteres, juntos en una variable entera de 4 bytes,
representa la cantidad de columnas de puntos que tiene la imagen.
- La representacin binaria del siguiente carcter indica la cantidad de bits que se emplearn para
representar cada punto de color. Este valor puede ser 2 4.
- A continuacin, de manera continua y sin marcas de separacin vienen los valores de cada punto
de color. Por ejemplo si el siguiente byte fuera el caracter cuyo cdigo ASCII en 234
(11101010b) y la cantidad de bits fuera 2, tendramos los siguientes puntos de color: color 3 (11b),
color 2 (10b), color 2 (10b) y color 2 (10b). si por el contrario la cantidad de bit por color fuera 4,
los puntos de color que tendramos sera el color 14 (1110b) y el color 10 (1010b).
Para mostrar la imagen en pantalla deber emplear el procedimiento putPixel(x, y, color), este
procedimiento pinta un punto en la pantalla, aqu x e y son valores enteros que indican la columna y la
fila en la pantalla donde se quiere pintar el punto, y color es un nmero entero con el valor del color
con que se quiere pintar el punto. La coordenada (0,0) se encuentra en la esquina superior izquierda
de la pantalla.

Contina...
2/3

Este material, de distribucin gratuita, no contiene necesariamente las modificaciones


que se hayan incorporado durante la realizacin de las evaluaciones.
4. (5 puntos) Se desea hacer un programa que realice el proceso inverso al del problema anterior, esto
es, a partir de una imagen pintada en la pantalla, crear un archivo de textos con la codificacin de la
imagen. Para esto se debe emplear la funcin getPixel(x, y), esta funcin devuelve el valor del color
de un punto en la pantalla, aqu, x e y son valores enteros que indican la columna y fila del punto que
se quiere capturar. Considerar slo para esta pregunta que la imagen es cuadrada y puede estar en
cualquier parte de la pantalla. Para determinar el nmero de filas y columnas de la imagen, suponer
que slo hay una imagen en la pantalla, que sta se encuentra sobre un fondo negro, y que no se
encuentra sobre los bordes da la pantalla. Considerar que el valor del color negro es cero (0). La
cantidad de bits por color se obtendr del mximo valor de color encontrado en la imagen (tomar en
cuenta que se tomar 2 o 4 bits). La pantalla que se emplea tiene 1440 puntos en cada fila y 900 en
cada columna, y la coordenada (0,0) se encuentra en la esquina superior izquierda de la pantalla.

Lima, 10 de octubre del 2011.

3/3

Este material, de distribucin gratuita, no contiene necesariamente las modificaciones


que se hayan incorporado durante la realizacin de las evaluaciones.

Este material, de distribucin gratuita, no contiene necesariamente las modificaciones


que se hayan incorporado durante la realizacin de las evaluaciones.

Este material, de distribucin gratuita, no contiene necesariamente las modificaciones


que se hayan incorporado durante la realizacin de las evaluaciones.

Este material, de distribucin gratuita, no contiene necesariamente las modificaciones


que se hayan incorporado durante la realizacin de las evaluaciones.
PONTIFICIA UNIVERSIDAD CATLICA DEL PER
ESTUDIOS GENERALES CIENCIAS
TCNICAS DE PROGRAMACIN
Examen Especial
2do. Perodo del 2011
NOTAS: - no se puede usar material de consulta
- Las soluciones debern desarrollarse bajo un estricto diseo descendente, por lo que NO SE CALIFICARN aquellos mdulos
que son llamados por otros que estn incompletos.
- Deber modular adecuadamente sus programas procurando que cada mdulo tenga en promedio no ms de 15 lneas. Se
tomar en cuenta en la calificacin el uso de comentarios adecuados, el uso correcto de los nombres de las variables,
funciones y procedimientos. De no respetar esta indicacin, se descontar el 30% de la nota final en la pregunta.
- No se pueden emplear archivos auxiliares en ninguna de las preguntas.
- Queda terminantemente prohibido el uso de calculadoras y correctores lquidos

RESPONDA DOS DE LAS TRES PREGUNTAS PLANTEADAS A CONTINUACIN:


1. (10 puntos) Imagnese un panel como la que se muestra en la figura N 1, imagnese tambin que cada
casilla o celda se puede pintar con uno color, de manera que se puedan formar manchas de forma
rectangular como se muestra en la figura N 2 (cada mancha tiene un solo color). Suponer tambin
que el fondo siempre ser blanco y que en ningn caso las manchas se juntan.

Figura 1

Figura 2

Cada color puede ser representado por un nmero, dependiendo de la cantidad de colores que tenga
la imagen se podrn emplear ms o menos bits para representar esos colores. Por ejemplo si la
imagen fuera en blanco y negro slo se requiere un bit para representarlo (0 = blanco, 1 = negro), si
la imagen tiene hasta 4 colores se requerirn de dos bits (p. e.: 0 = blanco, 1 = rojo, 2 = verde,
3 = azul), hasta 8 colores 3 bits, y as sucesivamente.
Para modelar este panel se ha definido un archivo binario de tipo File of Byte de modo tal que en el
primer byte del archivo se encuentre la cantidad de filas que tienen el panel real, en el segundo byte
el nmero de filas y en el tercero la cantidad mxima de colores que se emplear. A partir de all le
seguir una secuencia de bytes que agruparn los valores de cada color de cada celda del panel real.
La forma como se estructura esta informacin se explica a continuacin.
S por ejemplo, el archivo indica que en el panel se emplearn hasta 8 colores, esto querr decir que
se emplearn 3 bits para representar cada color. Luego en el primer byte de la secuencia (luego de
los tres primeros datos, los tres primeros bits del byte indicarn el color de la celda que se
encuentra en la fila 1, columna 1 del panel. Los segundos tres bits del byte tendrn el color de la
celda que se encuentre en la fila 1, columna 2. En los ltimos dos bits del byte y el primer bit del
siguiente byte estar el color de la celda que se encuentre en la fila 1, columna 3 del panel y as
sucesivamente.
Escriba un programa que pida al usuario las coordenadas de una celda cualquiera en el panel real. El
programa deber imprimir el color de la celda cuyas coordenadas se dan como parmetro y, si este
color es diferente de blanco, las coordenadas en el panel (en trminos de filas y columnas) de la
esquina superior izquierda de la mancha y las dimensiones de la mancha (en trminos de filas y
columnas). ES OBLIGATORIO EL USO DE LOS OPERADORES DE BITS.
Contina
Pgina 1 de 3

Este material, de distribucin gratuita, no contiene necesariamente las modificaciones


que se hayan incorporado durante la realizacin de las evaluaciones.
2. (10 puntos) Una librera cuenta con tres archivos binarios que le permiten catalogar los libros que
posee. Los archivos se describen a continuacin:
I. Archivo de Editoriales (Edit.Dat): este archivo contiene la informacin de todas las editoriales
con las que trabaja la biblioteca. Los campos manejados por cada registro son: el cdigo de la
editorial (nmero entero), el nombre de la editorial, su direccin y el pas de origen.
II. Archivo de Temas (Temas.Dat): este archivo contiene todos los temas de inters en los que se
clasifican los diferentes libros adquiridos por la biblioteca. No todas las editoriales cubren
todos los temas. Los campos que posee este archivo son: el cdigo del tema (nmero entero), el
tema propiamente dicho, y la especialidad interesada en el tema.
III. Archivo de Libros (Libros.Dat): contiene la lista de todos los libros que se pueden encontrar en
las diferentes editoriales. El archivo contiene: el cdigo del libro (nmero entero), el ttulo,
autor, precio (nmero real), la cantidad de volmenes que posee en stock (numero entero),
cdigo de la editorial (nmero entero) y cdigo del tema (nmero entero).
Ninguno de los archivos est ordenado.
La librera necesita crear una serie de archivos binarios, dos por cada editorial, los nombres de
estos archivos tendrn la forma siguiente: XXXXXXXT.DAT y XXXXXXXL.DAT, donde XXXXXXX
corresponde al cdigo de la editorial, la T indica temas, y la L indica libros. Los archivos T guardarn
en cada registro, el cdigo del tema y la cantidad de libros que posee la librera de ese tema, de esa
editorial, no se coloca en este archivo los temas no se poseen libros. Los archivos L contienen en
cada registro, el ttulo del libro, el autor, su precio y la cantidad de ejemplares que hay de ese libro
en la librera. En este ltimo archivo los libros estn agrupados por temas, segn el archivo T, como
se muestra en la figura siguiente:
8976567T.Dat
231156633
3
111005412
2
782354109
4

Open GL
Graficos en Pascal
Graficas 3D
Lenguaje Pascal
Programacin en Pascal
Calculo 1
...

8976567L.Dat
PHilips, John
Pech, George
Jordan, Jane
Prez, Carlos
Castro, Daniel
Bueno, Pedro

105.60
89.99
125.30
23.40
67.35
105.66

12
23
10
14
5
12

Libros del tema 231156633 (3)


Libros del tema 111005412 (2)
Libros del tema 782354109 (4)

Finalmente la librera requiere crear un archivo de textos denominado RESUMEN.TXT en los que en
cada lnea se guarde el nombre de cada archivo T creado.
Se pide:
a) Escriba un procedimiento en Pascal denominado creaArchivos que permita crear los archivos.
b) Implemente un procedimiento en Pascal costoXTema, la cual deber recibir como parmetro el
cdigo y el nombre de un tema en particular y, trabajando nicamente con los archivos creados en
la pregunta anterior y el archivo de editoriales, imprima el valor (precio por cantidad de libros)
que poses la librera en el tema solicitado. Un tema puede aparecer en varias editoriales.
3. (10 puntos) En esta pregunta no podr hacer uso del tipo STRING, ni de cualquier funcin o
procedimiento u operador que manipule el tipo STRING.
Se tiene un archivo de textos que contiene palabras separadas por uno o ms espacios en blanco o
cambios de lnea. Entindase por palabra una secuencia de caracteres que no contiene ni espacios ni
cambios de lnea, ejemplos palabras pueden ser Hola, JUAN, HO-6847, 124, 35.72, F45AB, etc.
El problema con este archivo de textos es que cada lnea puede tener desde 1 hasta 1000
caracteres. Por esta razn este archivo no se puede ser manipulado con comodidad con cadenas de
tipo string.
Para poder manipular este archivo se propone definir un nuevo tipo de dato basado en un arreglo,
como se muestra a continuacin:
Type StringTP = array [1..1001] of char;
Pgina 2 de 3

Contina

Este material, de distribucin gratuita, no contiene necesariamente las modificaciones


que se hayan incorporado durante la realizacin de las evaluaciones.
Donde una variable de tipo StringTP puede almacenar hasta 1000 caracteres, en esta variable no se
almacenar la longitud de la cadena, en su lugar los caracteres colocados en el arreglo tendrn un
delimitador (el caracter #0) que se coloca inmediatamente despus de los caracteres colocados en
el arreglo, por ejemplo, si en la lnea contiene el texto: Hola amigos, en el arreglo se almacenar:
H

#0

La cantidad de lneas del archivo de textos es muy grande, lo que hace imposible y poco prctico
llevar todo el archivo a la memoria principal del computador.
El archivo adems est organizado por prrafos, un prrafo es una secuencia de caracteres que
termina con un punto seguido de un cambio de lnea. Un prrafo puede tener varias lneas.
Se desea que usted elabore un programa que permita dar un formato ms manejable al archivo de
modo que la prxima vez que se desee manipular el archivo se puede usar simplemente strings.
El programa deber solicitar al usuario un lmite de caracteres que desee que tenga por lnea el
nuevo archivo y una opcin I J, este lmite no podr ser mayor que 255. Una vez hecho esto el
programa deber leer el archivo de textos empleando variables tipo StringST y volverlo a escribir
en otro archivo de modo que se reacomoden los prrafos; este reacomodo significar que cada lnea
debe tener como mximo el lmite de caracteres ingresado sin cortar ninguna palabra. La opcin
ingresada indicar que, si se eligi la opcin I, las palabras debern estar separadas por un solo
espacio en banco o cambio de lnea; si se eligi la opcin J las palabras en una lnea debern estar
justificadas, esto quiere decir todas las lneas deben tener como longitud el lmite dado y que entre
palabra y palabra los espacios suficientes para que esto se de, sin embargo en una lnea la cantidad
de espacios que haya entre una palabra y otra no deben diferir en ms de uno. Las lneas que tienen
los caracteres que indican el fin de un prrafo no se justifican.
As por ejemplo si se tiene un archivo bajo el siguiente esquema (cada cuadro indica una palabra):
1
6
12

13

16

18

11

10

15

17

14

19

Lmite

El archivo deber ser almacenado en otro archivo, de la siguiente manera:


Eligiendo la opcin I

Eligiendo la opcin I
1

13
15

Profesor del curso:

16

12

12

11
13

Lmite

6
8

10

14

12

11

4
9

10

14

15

16

12

Lmite

Miguel Guanira
San Miguel, 5 de diciembre del 2011

Pgina 3 de 3

También podría gustarte