Bienvenido a mis Tutorías © en la UNED
Exámenes
Programación I, 2ª Semana, Febrero 2001:
Test
  1. En programación, cual de las siguientes afirmaciones es correcta:
    a) Los valores reales siempre son exactos
       *** b) Los valores enteros siempre son exactos
    c) Los valores enteros y reales siempre son exactos
    d) Los valores enteros y reales nunca son exactos
  2. Después de la palabra clave ELSIF
       *** a) Siempre hay una condición
    b) siempre hay una acción
    c) Puede haber una acción o una condición
    d) Acaba la selección
  3. En Modula-2 las funciones deben devolver un valor ...
    a) De un tipo estructurado
       *** b) De un tipo simple
    c) De cualquier tipo
    d) De un tipo que no sea declarado por el usuario
  4. La compilación separada:
    a) Garantiza la compilación segura
       *** b) Facilita el trabajo en equipo
    c) Es exclusiva de modula-2
    d) Está ligada a los tipos abstractos
  5. Una de las siguientes afirmaciones no siempre es cierta en modula-2
    a) 't' es un valor constante
       *** b) Dias{Lunes} es un valor constante
    c) 43.2 es un valor constante
    d) "Hola" es un valor constante
  6. De un subprograma que devuelva siempre los mismos resultados se puede decir
    a) Que es robusto
    b) Que es funcional
       *** c) Nada
    d) Que es eficiente
  7. La ingeniería del software aporta fundamentalmente a la programación
    a) Modelos abstractos de cómputo más sofisticados
       *** b) Técnicas organizativas para desarrollos a gran escala
    c) Mejores lenguajes de programación
    d) El desarrollo automático de grandes programas
  8. La sentencia de asignación
    a) Necesita variables a ambos lados
    b) Emplea una expresión a su izquierda
    c) Emplea expresiones a ambos lados
       *** d) Necesita una variable a su izquierda
  9. Dado el siguiente fragmento de codigo
    VAR pt1:TipoPunt;
        reg:TipoReg;
    BEGIN
      NEW(pt1);
      reg.dato:=2;
      pt1^.dato:=3;
    
    a) pt1 es memoria dinámica y reg es memoria estática
    b) 2 y 3 estan en memoria dinámica
       *** c) 2 está en memoria estática y 3 en memoria dinámica
    d) 2 y 3 están en memoria estática
  10. Dado el siguiente fragmento de codigo
    FOR cont1:= -1 TO 1 DO
      FOR cont2:= 1 TO cont1 DO
        WriteString("Hola");WriteLn;
      END
    END
    
    El número de veces que hola aparecerá por la pantalla será
       *** a) 1
    b) Hay un error de tipos
    c) 3
    d) 0

Programación I, 2ª Semana, Febrero 2001:
Ejercicio Práctico

Dada una tabla de hasta 10 puntos en el plano (x,y). Realizar un tipo abstracto de dato con las operaciones siguientes:
1.- Determinar si algún punto coincide con el primero devolviendo su posición en la tabla.
2.- Suma de la longitud de los segmentos entre los puntos sucesivos de la tabla desde un punto inicial a otro final.
3.- Perímetro del polígono cerrado formado por el punto inicial y los sucesivos puntos hasta el primer punto de la tabla que coincide con el punto inicial.

DEFINITION MODULE Exam;
   TYPE
      TipoPunto=RECORD
         x,y:REAL
      END;
      TipoIndice=[0..9];
      TipoTabla=ARRAY TipoIndice OF TipoPunto;

   PROCEDURE Coincide(t:TipoTabla):TipoIndice;
   PROCEDURE Suma(t:TipoTabla;p1,p2:TipoIndice):REAL;
   PROCEDURE Poligono(t:TipoTabla):REAL;
END Exam.

IMPLEMENTATION MODULE Exam;
   From MathLib0 IMPORT sqrt;

   PROCEDURE Longitud(pto1,pto2:TipoPunto):REAL;
   BEGIN
      RETURN sqrt((pto2.x-pto1.x)*(pto2.x-pto1.x)+
          (pto2.y-pto1.y)*(pto2.y-pto1.y));
   END Longitud;

   PROCEDURE Coincide(t:TipoTabla):TipoIndice;
      VAR encontrado:BOOLEAN;
          p:TipoIndice;
   BEGIN
      encontrado:=FALSE; p:=HIGH(t);
      WHILE (p>0) OR (NOT encontrado) DO
         encontrado:=(t[0].x=t[p].x) AND (t[0].y=t[p].y);
         DEC(p)
      END;
      RETURN p+1;
   END Coincide;

   PROCEDURE Suma(t:TipoTabla;p1,p2:TipoIndice):REAL;
      VAR suma:REAL;
          i:TipoIndice;
   BEGIN
      suma:=0;
      FOR i:=p1 TO p2-1 DO
         suma:=suma+Longitud(t[i],t[i+1]);
      END;
      RETURN suma;
   END Suma;

   PROCEDURE Poligono(t:TipoTabla):REAL;
      VAR posi:TipoIndice;
          perimetro:REAL;
   BEGIN
      posi:=Coincide(t);
      perimetro:=Suma(t,0,posi);
      RETURN perimetro;
   END Poligono;
END Exam.

© tomytron

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