Universidad de Costa Rica
Escuela de Ciencias de la
Computación e Informática
Profesor Adolfo Di Mare
CI-1101
II Semestre 1997
[<=] [home] [<>] [\/] [=>]
CI-1101 Programación I

Examen Final [solución]

     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

[mailto:] Adolfo Di Mare <adolfo@di-mare.com>.
Copyright © 1997
Derechos de autor reservados © 1997
[home] <> [/\]