Universidad de Costa Rica
Escuela de Ciencias de la
Computación e Informática
|
|
CI-1101 Programación I
Duración: dos horas. Lea bien el examen antes de hacerlo. Puede hacer el
examen con lápiz. El examen es a libro abierto.
¡ESCOGA 3 DE LAS 4 PREGUNTAS!
1) [33 pts] Implemente el procedimiento Mezclador(F,G,H,BOOL) que intercala
renglón por renglón al archivo F : TEXT con el archivo G : TEXT.
- Si BOOL=TRUE entonces entonces siempre pone el renglón más grande de
primero. De los contrario pone primero al más pequeño.
- El resultado queda en el archivo H : TEXT.
F G
+--------------------------+ +--------------------------+
| 1) 123456.123456.123456. | | 1) abcdef.abcdef. |
| 2) 123456. | | 2) abcdef. |
| 3) 123456.123456. | | 3) abcdef.abcdef.abcdef. |
+--------------------------+ | 4) fin uno |
| 5) fin dos |
+--------------------------+
H <= Mezclador(F,G,H,TRUE) H <= Mezclador(F,G,H,FALSE)
+--------------------------+ +--------------------------+
| 1) 123456.123456.123456. | | 1) abcdef.abcdef. |
| 1) abcdef.abcdef. | | 1) 123456.123456.123456. |
| 2) 123456. | | 2) 123456. |
| 2) abcdef. | | 2) abcdef. |
| 3) abcdef.abcdef.abcdef. | | 3) 123456.123456. |
| 3) 123456.123456. | | 3) abcdef.abcdef.abcdef. |
| 4) fin uno | | 4) fin uno |
| 5) fin dos | | 5) fin dos |
+--------------------------+ +--------------------------+
2) [33 pts] Considere el siguiente programa:
PROGRAM FORIF;
VAR
i, ln: INTEGER;
BEGIN { FORIF }
ln := 0;
FOR i := (5 MOD 4) TO (555 DIV 11) DO BEGIN
IF (i MOD 7) = 3 THEN BEGIN
Write(' ==> ', i:2); ln := ln+1;
IF ln=3 THEN BEGIN
WriteLn; ln := 0;
END;
END;
END;
END. { FORIF }
2.a [11 pts] Indique cuál es el rango que recorre la variable "i" en el FOR.
2.b [11 pts] Explique para qué sirve la variable "ln".
2.c [11 pts] Muestre cuál es el resultado de ejecutar este programa.
3) [33 pts] Implemente el procedimiento Ordene2():
TYPE
TArray = ARRAY [1..600] OF CHAR;
PROCEDURE Ordene2(
{+} n : INTEGER;
{?} VAR A : TArray
);
{ RESULTADO
Ordena los 2*n primeros valores del vector A[] en parejas de letras. }
{ EJEMPLO
n = 4, A = [z,a, a,z, b,d, b,h] ==> A = [a,z, b,d, b,h, z,a]
n = 3, A = [a,b, a,a, a,c] ==> A = [a,a, a,b, a,c] }
4) [33 pts] Implemente la operación TPico.EsPico() que retorna TRUE si los
valores almacenados en _m[] son tales que los de la fila y columna centrales
son estrictamente mayores a todos los demás. Cuando la matriz no tiene un
número impar de filas siempre retorna FALSE.
1 1 6 1 1
.|. 0 1 0 1 2 1 2 2 6 2 2
-+- 1 1 1 2 3 2 3 3 6 3 3
.|. 0 1 0 1 2 1 4 4 6 4 4
5 5 6 5 5
EsPico()=TRUE EsPico()=TRUE
EsPico()=FALSE
3 2 3
0 3 0 0 1
4 0 0 2 3 -1
EsPico()=FALSE EsPico()=FALSE EsPico()=TRUE
Use el objeto TPico, parte de cuya definición es la siguiente:
CONST
Tsize = 200;
TYPE
TPico = OBJECT
PRIVATE
_m : ARRAY[1..Tsize,1..Tsize] OF INTEGER; { matriz del pico }
_n : WORD { tamaño de _m[] }
PUBLIC
... etc ...
FUNCTION EsPico : BOOLEAN;
END; { TPico }
Soluciones
Adolfo Di Mare <adolfo@di-mare.com>.
Copyright © 1997
Derechos de autor reservados © 1997