Bienvenido a mis Tutorías © en la UNED
Exámenes
Programación I
1ª Semana, Febrero 2002:
  1. Sean los siguientes conjuntos:
       X := Colores{Rojo, Amarillo, Verde};
       Y := Colores{Amarillo, Azul};
    
    La operación que devuelve TRUE:
    a) X >= Y
    b) X - Y
    c) X / Y
       *** d) X <> Y
  2. En Modula-2 la función predefinida ORD se puede aplicar a:
    a) Conjuntos, INTEGER, CHAR.
       *** b) Enumerados, INTEGER, CHAR.
    c) Enumerados, REAL, Conjuntos.
    d) Enumerados, INTEGER, Ristras.
  3. Un argumento formal:
    a) Solo se puede pasar por valor.
    b) No se puede utilizar en expresiones.
       *** c) Se debe de utilizar en el bloque del subprograma.
    d) Solo se puede utilizar en las funciones.
  4. La expresión: ser OR NOT ser
    a) Es aritmética.
       *** b) Es lógica.
    c) Es existencial.
    d) Es de comparación.
  5. En Modula-2 la sentencia EXIT provoca la salida...
    a) Condicional de un LOOP.
    b) Del módulo principal.
       *** c) Incondicional de un LOOP.
    d) Del modulo de implementación.
  6. El tipo CHAR:
       *** a) Incluye todos los caracteres disponibles en un computador.
    b) Es de tipo enumerado.
    c) No se puede utilizar en ninguna expresión.
    d) Asegura que las minúsculas están ordenadas delante de las mayúsculas.
  7. Dados los siguientes bucles, indique que afirmación es cierta:
       contador := 1;
       WHILE contador <> 20 DO
          contador := contador + 1;
       END;
    
       contador := 0;
       REPEAT
          contador := contador + 1;
       UNTIL contador > 19;
    
    a) Ambos bucles se ejecutan 19 veces.
       *** b) El WHILE se ejecuta 19 y el REPEAT 20.
    c) Ambos bucles se ejecutan 20 veces.
    d) El WHILE se ejecuta 20 y el REPEAT 19.
  8. Una manera de realizar estructuras de datos ilimitadas en Modula-2 es mediante variables:
    a) Estáticas.
    b) Persistentes.
    c) Con variantes.
       *** d) Dinámicas.
  9. Dada la siguiente declaración:
       PROCEDURE Simetrico(texto: ARRAY OF CHAR)
    
    a) Al argumento le falta el rango del índice.
    b) No se puede pasar un vector como argumento.
    c) El argumento siempre se debe de pasar por referencia.
       *** d) El argumento está bien definido.
  10. La reutilización:
       *** a) Está basada en el empleo de abstracciones.
    b) Necesita el empleo de módulos.
    c) Es una característica del lenguaje de programación.
    d) Solo se logra mediante desarrollo ascendente.

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

Escribir SÓLO el módulo de definición para el tipo abstracto de dato (nombre, apellido, DNI y 15 notas) con las operaciones de introducir datos personales, introducir las notas y obtener la media. También hay que realizar un programa que utilice una tabla con los datos de hasta 50 alumnos para obtener el alumno de la nota media más alta.


DEFINITION MODULE Alumnos;
(*
   Modulo de definicion para un tipo abstracto ALUMNO que contiene
   nombre, apellido, DNI y 15 notas
*)

   CONST
      MaxCad=30;      (* Longitud maxima para nombre y apellido *)
      MaxDni=10;      (* Longitud maxima para el DNI *)
      MaxNota=15;     (* Maximo de notas que se guardan *)

   TYPE
      TipoAlumno= RECORD
         Nombre,Apellido: ARRAY[0..MaxCad] OF CHAR;
         DNI: ARRAY[0..MaxDni] OF CHAR;
         Notas: ARRAY[1..MaxNota] OF REAL;
      END;

    PROCEDURE Datos(VAR Alu:TipoAlumno);
    (* Procedimiento para introducir los datos personales de un alumno *)

    PROCEDURE Notas(VAR Alu:TipoAlumno);
    (* Procedimiento para introducir las notas de un alumno *)

    PROCEDURE Media(Alu:TipoAlumno):REAL;
    (* Funcion que devuelve la nota media de un alumno *)

END Alumnos.

MODULE Examen;
(*
   Modulo para manejar los datos de alumnos y obtener la media mas alta
*)

   FROM InOut IMPORT WriteString,WriteLn,WriteCard;
   FROM RealInOut IMPORT WriteReal;
   IMPORT Alumnos;

   CONST
      MaxAlum=50;  (* Maximo de alumnos para la tabla *)

   VAR
      ListaAlumnos: ARRAY[1..MaxAlum] OF Alumnos.TipoAlumno;
      i:CARDINAL;
      MejorAlumno:CARDINAL;

BEGIN

   MejorAlumno:=1;

   FOR i:=1 TO MaxAlum DO
      Alumnos.Datos(ListaAlumnos[i]);
      Alumnos.Notas(ListaAlumnos[i]);

      IF Alumnos.Media(ListaAlumnos[i])>Alumnos.Media(ListaAlumnos[MejorAlumno]) THEN
         MejorAlumno:=i;
      END;
   END;

   WITH ListaAlumnos[MejorAlumno] DO

      WriteLn;WriteLn;
      WriteString("ALUMNO CON MEJOR MEDIA...");WriteCard(MejorAlumno,4);WriteLn;

      WriteString("Nombre: ");
      WriteString(Nombre);WriteLn;

      WriteString("Apellido: ");
      WriteString(Apellido);WriteLn;

      WriteString("DNI: ");
      WriteString(DNI);WriteLn;

      WriteString("Nota Media: ");
   END;

   WriteReal(Alumnos.Media(ListaAlumnos[MejorAlumno]),7);WriteLn;
END Examen.

No dudes en escribir si tienes alguna duda sobre estos ejercicios
abellogijon.uned.es