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.
El examen es a libro abierto. Cuenta la documentación. Cuenta la
redacción y la ortografía. Cuentan las convenciones. Puede hacer
el examen con lápiz. ¡No haga más de lo que se le pide! ¡Conteste
TODAS las 4 preguntas!
1) [25 pts] Considere el siguiente programa:
PROGRAM Gambia;USES Dos;
TYPE PNode=^TNode;TNode=RECORD x:STRING[25];prev:PNode;END;
VAR next,node,last:PNode;ext:DirStr;name:PathStr;
path:NameStr;dir:ExtStr;srec:SearchRec;BEGIN
FindFirst(ParamStr(1),AnyFile,srec);next := NIL;WHILE
DosError=0 DO
BEGIN NEW(node);node^.x:=srec.name;node^.prev:=next;next:=node;
FindNext(srec);
END;WHILE next<>NIL
DO BEGIN WriteLn(next^
.x);
node:=next;next:=next^.prev;DISPOSE(node);END;END.
1.a) [20 pts] Reescriba el programa de acuerdo a las convenciones.
1.b) [5 pts] Diga qué hace el programa.
2) [25 pts] Considere el ADT Matriz, cuyo Rep es el siguiente:
CONST / \
N,M = ...; { Dimensiones de la matriz } | 12 11 10 |
TYPE | 7 8 9 |
TMatriz = OBJECT Matriz = | 6 5 4 |
v : ARRAY [1..N, 1..M] OF REAL; | 1 2 3 |
END; \ /
Programe el método TMatriz.Subidor() que imprime los valores
de la matriz en el orden que se muestra en la matriz de ejemplo
3) [25 pts] Programe la rutina que se especifica a continuación.
PROCEDURE Reverse_Merge(
{?} VAR A : Integer_ARRAY; { Arreglo a mezclar }
{+} l,mid,h : WORD; { rangos dentro de A[] }
{?} VAR tmp : Integer_ARRAY { area temporal para mezclar }
);
{ RESULTADO
Intercala los dos sub-arreglos ordenados A[l..mid] y
A[mid+1..h].
- A[] queda ordenado descendentemente.
- A[l..mid] está ordenado ascendentemente.
- A[mid+1..h] está ordenado ascendentemente.
- Para hacer la intercalación usa el arreglo temporal
"tmp" como área de trabajo.
- El esfuerzo usado es O(h-l). }
NO implemente este proceso reordenando los números: haga la
intercalación de los dos sub-arreglos. Note que al final los
valores de A[] quedan ordenados DESCENDENTEMENTE.
4) [25 pts] Considere el procedimiento Numerales(n):
PROCEDURE Numerales(n : LONGINT);
VAR
i : LONGINT;
esta: BOOLEAN;
BEGIN
i := 1;
esta := FALSE;
WHILE (NOT esta) AND (i < n DIV 2) DO BEGIN
INC(i);
esta := (n MOD i = 0);
END;
IF esta THEN BEGIN
Write(i:1, ' ');
Numerales(n DIV i);
END
ELSE BEGIN
Write(n:1, ' ');
END;
END; { Numerales }
3.a) [5 pts] Diga qué imprime Numerales(512);
3.b) [5 pts] Diga qué imprime Numerales(10000);
3.c) [5 pts] Diga qué imprime Numerales(420);
3.d) [10 pts] Diga qué hace Numerales(n);
Soluciones
Adolfo Di Mare <adolfo@di-mare.com>.
Copyright © 1997
Derechos de autor reservados © 1997