Bienvenido a mis Tutorías © en la UNED
Exámenes
Programación I, 1ª Semana, Tipo B, Febrero 2000:
Test
  1. Dado el siguiente fragmento de codigo:
    FOR c1:=1 TO 4 DO NEW(puntero);puntero^:=c1;END;
    FOR c1:=1 TO 4 DO WriteInt(puntero^,3);END;
    El resultado generado será:
    A.3333
       *** B.4444
    C.1234
    D.4
  2. Cuál de las siguientes notaciones BNF generará la cadena ab
    A.{a} | {b}
    B.[a] | [b]
    C.{b} | {a}
       *** D.{a | b}
  3. Dado el siguiente modulo de definición
    DEFINITION MODULE Ajedrez; 
    Var Cuadro (caballo, torre, alfil);
    PROCEDURE Jugar();
    END Ajedrez.
    Si importamos el modulo con la sentencia IMPORT Ajedrez cual de las siguientes sentencias es correcta
    A.DEC(torre);
       *** B.Ajedrez.Jugar;
    C.INC(cuadro);
    D.Ajedrez.cuadro:=torre;
  4. TYPE subletras["A".."C"]; 
    Conjsubletras=SET OF subletras;
    Tconj=POINTER TO Conjsubletras;
    VAR a:Tconj;
    ¿Cuál de las siguientes asignaciones es correcta?
       *** A.a^:=Conjsubletras{"C"};
    B.a:= Conjsubletras{"C"};
    C.a^:=subletras{"C"};
    D.a:=subletras{"C"};
  5. DEFINITION MODULE Juegos; 
    TYPE TipoDato;
    ---
    END Juegos.
    Señalar la afirmación correcta:
       *** A.TipoDato es un dato opaco
    B.Nadie podrá declarar variables del tipo TipoDato
    C.La asignación entre variables de tipo TipoDato no está permitida;
    D.La definición es incorrecta
  6. Dada la siguiente instrucción
    A:= Tpalabra{Ordenar(Dato)};
    Podemos decir
       *** A.Es correcta
    B.Ordenar devuelve un conjunto
    C.Dato es del tipo referencial
    D.Es incorrecta
  7. DEFINITION MODULE Primero; 
    TYPE TipoDato; END Primero.
    
    IMPLEMENTACION MODULE Primero;
    PROCEDURE Magico(dato:TipoDato);
    END Primero.
    A.Magico es anónimo
    B.Magico es opaco
       *** C.Nadie podrá usar Magico
    D.No tiene sentido definir Magico
  8. Dado
    CONST V1=3.0 
    VAR V3:INTEGER;
    V2:CHAR;
    Y la siguiente invocación
    Param(V1,V2,V3);
    La cabecera correcta es
    A.PROCEDURE Param(VAR v1:REAL; VAR v2:CHAR; VAR v3:INTEGER);
       *** B.PROCEDURE Param(v1:REAL; VAR v2:CHAR; VAR v3:INTEGER);
    C.PROCEDURE Param(VAR v1:REAL; v2:CHAR; VAR v3:INTEGER);
    D.PROCEDURE Param(VAR v1:REAL; VAR v2:CHAR; v3:INTEGER);
  9. La definición de un conjunto siempre está basada en un referencial de tipo:
       *** A.Enumerado o subrango
    B.Enumerado, subrango u otro conjunto
    C.Enumerado u otro conjunto
       *** D.Enumerado, subrango o escalar predefinido
  10. Un interprete
       *** A.Simula una máquina virtual
    B.Traduce de un lenguaje fuente a un lenguaje objeto
    C.Analiza la red de operadores
    D.Mejora la eficiencia

Programación I, 1ª Semana, Febrero 2000:
Ejercicio Práctico

Definir en un modulo un tipo de dato que contenga la siguiente información altura, velocidad y rumbo (Norte, Sur, Este, Oeste) y los procesos LeerVelocidad, LeerAltura, LeerRumbo. Desarrollar solamente el módulo de definición. A continuación desarrollar un Programa que haga uso del tipo definido y que imprima por pantalla la información referente a 20 aviones.

DEFINITION MODULE VelAltRu;

TYPE
   TipoRumbo=(Norte, Sur, Este, Oeste);
   TipoVelAltRu= RECORD
      Velocidad:CARDINAL;
      Altura: CARDINAL;
      Rumbo: TipoRumbo;
   END;

PROCEDURE LeerRumbo(AvionaEvaluar:TipoVelAltRu):TipoRumbo;
PROCEDURE LeerVelocidad(AvionaEvaluar:TipoVelAltRu):CARDINAL;
PROCEDURE LeerAltura(AvionaEvaluar:TipoVelAltRu):CARDINAL;
END VelAltRu.

MODULE Aviones;
   FROM InOut IMPORT WriteCard, WriteString, WriteLn, WriteInt;
   IMPORT VelAltRu;
   CONST NumAviones=20;
   TYPE TipodatosAvion=ARRAY [1..NumAviones] OF VelAltRu.TipoVelAltRu;

VAR
   Avion: TipodatosAvion;
   Contador: INTEGER;

PROCEDURE ImprimirDatos
   (AvionaImprimir: VelAltRu.TipoVelAltRu, IdAvion: INTEGER)

VAR
   Altura, Velocidad: CARDINAL;
   Rumbo: VelAltRu.TipoRumbo;

BEGIN
   Altura:=VelAltRu.LeerAltura(AvionaImprimir);
   Velocidad:= VelAltRu.LeerVelocidad(AvionaImprimir);
   Rumbo:= VelAltRu.LeerRumbo(AvionaImprimir);
   WriteInt(IdAvion,5); WriteCard(Altura,8);
   WriteCard(Velocidad,8);WriteString(" ");
   CASE Rumbo OF
      VelAltRu.Norte: WriteString("Norte")|
      VelAltRu.Sur: WriteString("Sur")|
      VelAltRu.Este: WriteString("Este")|
      VelAltRu.Oeste: WriteString("Oeste")|
   END;
   WriteLn;
END ImprimirDatos;

BEGIN
   WriteString("Avion Altura Velocidad Rumbo");WriteLn;
   FOR Contador:=1 TO NumAviones DO
      ImprimirDatos(Avion[Contador];Contador);
   END;
END; 
No dudes en escribir si tienes alguna duda sobre estos ejercicios
abellogijon.uned.es