Bienvenido a mis Tutorías © en la UNED
Exámenes
Programación I, 1ª Semana, Febrero 1999:
Test
  1. Respecto a la sentencia:
    Correcto:= calculo(matriz) IN grupo
    A.- matriz y grupo son de tipos compatibles
    B.- calculo es un procedimiento que devuelve como resultado matriz
       *** C.- La funcion calculo devuelve un valor enumerado
    D.- grupo es de tipo BOOLEAN
  2. Los metasimbolos son:
       *** A.- Elementos de la notación BNF
    B.- Elementos de la programacion lógica
    C.- Elementos de la programacion funcional
    D.- Parte del modelo de flujo de datos
  3. La reutilización se consigue mediante desarrollo:
    A.- Sólo ascendente
       *** B.- Ascendente o descendente
    C.- Sólo descendente
    D.- Robusto
  4. Los Tipos opacos:
    A.- Son de Acceso secuencial
    B.- Son datos persistentes
    C.- Son punteros
       *** D.- Son tipos abstractos de datos
  5. Dado el siguiente fragmento de código.
    FOR i:=0 TO 1 BY 0.1 DO
       WriteString("Esto se escribe 10 veces")
    END
       *** A.- Se produce un error por incompatibilidad de tipos
    B.- El cuerpo del bucle se ejecuta 10 veces
    C.- La frase se escribe una vez, pero al incrementar el índice se produce un error
    D.- Aunque no hay errores, el cuerpo del bucle nunca se ejecuta
  6. Dado el siguiente fragmento de código:
    VAR a:CHAR;
    TYPE CHAR= SET OF['1'..'9'];
    VAR b:CHAR;
    ...
    b:=CHAR{'3'..'5'};
    a:=b;
       *** A.- Se produce un error en la asignacion a:=b
    B.- La declaracion de las variables es incompatible
    C.- Se produce un error en la asignacion b:=CHAR{'3'..'5'}
    D.- Es correcto
  7. A la vista únicamente de la siguiente declaración:
    VAR K:POINTER TO SET OF [1..10];
    Solo se puede decir que
    A.- Es incorrecta
       *** B.- K es de tipo anónimo
    C.- K es un dato encapsulado
    D.- K es de tipo opaco.
  8. Dado el siguiente fragmento de código
    datos=dias{L};
    podemos decir que
    A.- dato no tiene tipo
    B.- L puede ser una variable o una constante
    C.- dias es el nombre del tipo referencial
       *** D.- dias{L} es un valor constante de tipo conjunto
  9. Dado el siguiente módulo:
    DEFINITION MODULE Segundo;
       PROCEDURE Previo(VAR dato: tipoDato);
    END Segundo.
    
    A.-Es correcto, tipoDato es un tipo opaco
       *** B.- Es erróneo, se necesita la declaración de tipoDato
    C.- Es erróneo, tipoDato es un tipo anónimo
    D.- Es erróneo, dato debería ser por valor
  10. La cabecera del subprograma WriteString para imprimir cadenas de caracteres podría ser
    A.- PROCEDURE WriteString(a:POINTER TO CHAR);
    B.- PROCEDURE WriteString(VAR a:ARRAY[1..1000] OF CHAR);
    C.- PROCEDURE WriteString(a:CHAR);
       *** D.- PROCEDURE WriteString(a:ARRAY OF CHAR);

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

En el módulo Juegos, se dispone del tipo abstracto de datos CartaBaraja, que representa una carta de la baraja española. También se dispone de dos operaciones asociadas: PonerPalo y Poner Triunfo.

PonerPalo, establece el palo de la carta: oros, copas, espadas o bastos.
Por ejemplo: PonerPalo(carta, oros).
PonerTriunfo, establece el triunfo de la carta: as, dos,..,sota,caballo o rey.
Por ejemplo: PonerTriunfo(carta,rey)

Se pide crear en el módulo principal una baraja de 40 cartas y la operacion Vencer. Una carta vence a otra cuando su triunfo es mayor, excepto cuando una de las cartas es de la "pinta" que entonces gana aún cuando su triunfo sea menor. Si dos cartas tienen igual triunfo vence cualquiera de las dos.

Ejemplo: carta1 es el dos de copas, carta2 es el rey de bastos y la "pinta" es copas.

Vencer(carta1,carta2,copas) devuelven cierto;
Vencer(carta2,carta1,copas) devuelve falso;
Vencer(carta1, carta2, bastos) devuelve falso.

RECOMENDACIONES PARA EL EXAMEN:

  • Antes de escribir en la hoja de examen el programa, desarrollarlo "a sucio".
  • Realizar una adecuada indentación de todo el programa.
  • Prestar mucha atención a la sintaxis: (Mayúsculas-Minúsculas, Puntos, comas, Puntos y comas....)
  • Solo escribir lo que piden; es decir, solo hay que desarrollar los MODULE si lo piden explicitamente (o como es el caso de este programa, resulta necesaria la DEFINITION para ver como se definen las variables y las funciones)

MODULE PR250199;
(* Modulo principal de examen Programacion-I
   FECHA: 25 de Enero de 1999  *)

   IMPORT Juegos;
   CONST
      MaxNumCartas = 40;
   TYPE
      TipoBaraja = ARRAY [1..MaxNumCartas] OF Juegos.CartaBaraja;
   VAR
      baraja: TipoBaraja;

   PROCEDURE CrearBaraja (VAR baraja: TipoBaraja);
   (* Este procedimiento crea una baraja de 40 cartas *)
      VAR
         i: Juegos.TipoPalo;         (*indice Palos*)
         j: Juegos.TipoTriunfo;      (*indice Triunfos*)
         indice: INTEGER;
   BEGIN
      indice:=1;
      FOR i:=oros TO bastos DO
         FOR j:=as TO rey DO
            Juegos.PonerPalo(baraja[indice],i);
            Juegos.PonerTriunfo(baraja[indice],j);
            INC(indice)
         END
      END
   END CrearBaraja;

   PROCEDURE Vencer(carta1,carta2:Juegos.CartaBaraja;
      pinta:Juegos.TipoPalo) : BOOLEAN;
   (* Esta función devuelve CIERTO si carta1 vence a carta2 y
      FALSO en caso contrario*)

   BEGIN
      IF (carta1.palo=pinta) OR (carta2.palo=pinta) THEN 
         RETURN (carta1.palo = pinta)
      ELSE
         RETURN (carta1.triunfo >= carta2.triunfo)
      END
   END Vencer;

BEGIN
   CrearBaraja(baraja)
END PR250199;

(* Aunque el enunciado del problema no lo pide explicitamente, se escribe
   a continuación la Definición del Módulo "Juegos"
   para así poder entender la definición de algunas variables
   utilizadas en el módulo principal  *)

DEFINITION MODULE Juegos;
   TYPE
      TipoPalo=(oros,copas,espadas,bastos);
      TipoTriunfo=(as,dos,tres,cuatro,cinco,seis,siete,sota,caballo,rey);
      CartaBaraja = RECORD
         palo:TipoPalo;
         triunfo:TipoTriunfo
      END;

   PROCEDURE PonerPalo (carta:CartaBaraja; palo:TipoPalo);
   PROCEDURE PonerTriunfo (carta:CartaBaraja; triunfo:TipoTriunfo);

END Juegos.
© Luis Toyos
No dudes en escribir si tienes alguna duda sobre estos ejercicios
abellogijon.uned.es