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

Examen Final [solución]

      Duración: tres horas. Lea bien el examen antes de hacerlo. El examen es a libro abierto. Cuenta el buen estilo, la redacción y la ortografía. Puede hacer el examen con lápiz. ¡No haga más de lo que se le pide! ¡Conteste todas las preguntas, en cualquier orden!

1) [25 pts] Perl

      La compañía Sin-Ton acaba de descubrir que necesita renovarse tecnológicamente, pues sus programas usan bases de datos obsoletas. Para eso lo contratan a usted, pues necesitan cambiar los nombres de los campos y registros usados en la base de datos.

      Cualquier campo que aparece en una relación debe estar calificado por el nombre de la relación. En un programa siempre se sustituye el nombre de una relación aunque aparezca solo, pero no ocurre lo mismo con el nombre de un campo, como se puede ver en el siguiente trozo de código:

{ Trabaja sobre el registro EMPLE }
Procese("EMPLE", "KEY=EMPLE.NOM03", "SX");

      Usted ha sido contratado para escribir un programa Perl que transforme los nombres de campos y relaciones de acuerdo a una tabla de traducción. Esa tabla es un diccionario contenido en un archivo de texto que tiene renglones de dos hileras, o más. El nombre de una relación siempre aparece cargado a la izquierda (a partir de la columna uno), y el de un campo aparece luego de la columna uno. Un ejemplo de esta tabla de traducción es el siguiente:

EMPLE    R_empleado      // Esto es un comentario:
  NOM03    nombre        //   su programa sólo procesa
  APE=#    apellido      //   las primeras dos hileras
  SX       tip_sexo
  DPT00    cod_depto     // Ignore los renglones en blanco

SAL      R_salario       // SAL es nombre de relación
  KID      cod_empleado  //   pues está en la columna 1
  MONT     mon_salario   // MONT es el nombre de un campo de SAL
  FECHA    fch_salario   //   pues está después

      Si se usa su programa Perl para traducir los programas fuente de los sistemas de la compañía Sin-Ton, el bloque de código que aparece arriba quedaría traducido así:

{ Trabaja sobre el registro R_empleado }
Procese("R_empleado", "KEY=R_empleado.nombre", "SX");

      Cuide de evitar traducir una hilera ("SX") en un contexto en que no esté calificada por el nombre de relación ("EMPLE"). Note que las comillas no afectan el resultado final de su programa.

2) [25 pts] Macros y lenguajes

      En el lenguaje Lisp una "macro" tiene propiedades semánticas diferentes a las que tiene en el lenguaje C, o en C++.

2.a) [5 pts] Explique qué es una macro en el lenguaje C. Haga un ejemplo mostrando la definición de una macro, y el resultado de usarla.

2.b) [10 pts] En el contexto del lenguaje C++, explique cuáles construcciones sintácticas han nacido a partir de las macros del lenguaje C. Haga un ejemplo mostrando nuevamente definición y resultado de uso.

2.c) [5 pts] Ahora explique qué es una macro en el contexto del lenguaje Lisp. Diga para qué sirve, y comente sobre su uso.

2.d) [5 pts] ¿Pueden usarse macros C en el lenguaje Lisp? ¿Se puede obtener algún beneficio de ésto?

3) [25 pts] Comparación de lenguajes

3.a) [5 pts] Defina 3 criterios significativamente diferentes para evaluar lenguajes de programación. Justifique su escogencia.

3.b) [10 pts] Uselos para mostrar que C++ es mejor que Pascal.

3.c) [10 pts] Uselos para mostrar que Pascal es mejor que C++.

4) [25 pts] Tipos, programación y polimorfismo

4.a) [6 pts] Defina qué es un tipo de datos, y cuál utilidad tiene en lenguajes de programación. Mencione porqué es importante que un lenguaje tenga verificación fuerte de tipos.

4.b) [3 pts] ¿Puede una variable contener un tipo de datos?

4.c) [8 pts] Mencione dos inconvenientes que tiene usar tipos en un lenguaje de programación. Conteste en el contexto de un lenguaje que usted conozca, e indique cómo estos inconvenientes son resueltos o mitigados.

4.d) [4 pts] Argumente en favor de la siguiente afirmación: "El polimorfismo ad hoc es una forma válida de polimorfismo".

4.e) [4 pts] Argumente en contra de la siguiente afirmación: "El polimorfismo ad hoc es una forma válida de polimorfismo".

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