Você está na página 1de 10

Universidad Politcnica de Madrid Escuela Universitaria de Informtica Departamento de Lenguajes, Proyectos y Sistemas Informticos

Asignatura PROGRAMACIN II EXAMEN DE LA CONVOCTORIA DE SEPTIEMBRE Plan: 92 / Curso: 2000-2001


Madrid a 18 de Septiembre de 2001

APELLIDOS:...................................NOMBRE:................................................. N DE MATRCULA:........DNI:................GRUPO: .........................................

CALIFICACIONES
TEORA PROB_1 PROB_2 TOTAL

CUESTIONES TERICAS
Valoracin: 3 puntos.
Pregunta correcta:..................................0'2 puntos. Pregunta no contestada o incorrecta:.-0'15 puntos

I.

PROGRAMACIN CONCURRENTE.

1. En qu arquitecturas no es directamente aplicable el modelo de variables compartidas?. En las arquitecturas distribuidas

2. Explica los problemas que pueden surgir en el anidamiento de llamadas a monitores. La situacin puede explicarse de la forma siguiente: Un proceso P1, entra en un Monitor A para ejecutar un procedimiento, en ese procedimiento se produce una llamada a un procedimiento de otro monitor B. Simultneamente otro proceso P2 entra a ejecutar un procedimiento del monitor B y desde ese procedimiento se produce una llamada a un procedimiento del monitor A. En esta situacin, si los procesos mantienen la exclusin mutua de los monitores, se produce un interbloqueo de procesos.

Pgina 1 de 10

Programacin II

Septiembre 2001

3. Qu ventajas proporcionan los monitores frente a los semforos?. Mayor estructuracin del cdigo, ya que los accesos a las variables compartidas se reunen en el cdigo de los monitores. Mayor seguridad ya que el acceso a las variables del monitor est garantizado, por el propio monitor, que se realiza bajo exclusin mutua 4. En qu consiste el problema de la exclusin mutua selectiva?. Pon un ejemplo de problema de esta clase y justifica la respuesta. En los problemas de exclusin mutua selectiva, cada proceso compite por sus recursos no con todos los dems procesos sino con un subconjunto de ellos. Dos casos tpicos de dicha competencia se producen cuando los procesos compiten por los recursos segn su tipo de proceso o por su proximidad. Ejemplos de Exclusin mutua selectiva son: El problema de los filsofos y el problema de los lectores y escritores. 5. Cul es la poltica utilizada para liberar un proceso mediante RESUME en un Monitor de PASCAL-FC? La poltica seguida por Pascal_FC es la que se conoce con el nombre de reanudacin inmediata. El proceso que ejecuta una operacin RESUME sobre una variable de tipo CONDITION del monitor, cede la exclusin mutua del monitor al proceso que acaba de liberar, en el caso de que exista un proceso bloqueado en la susodicha CONDITION, pasando a una cola de ALTA PRIORIDAD; si la cola de la variable CONDITION est vaca, el proceso continua su ejecucin en el procedimiento del monitor.

II.

PROGRAMACIN ORIENTADA A OBJETOS.

6. Programticamente, cmo se establece una relacin de asociacin entre una clase cliente y otra clase servidor en PIIPOO? La clase cliente tiene como atributo un puntero a un objeto de la clase servidor. 7. Qu caractersticas diferencian una relacin de uso de una relacin de asociacin en POO?. Visibilidad pblica en las dos relaciones, aunque en la de uso puede ser privada. Versatilidad total en la de uso mientras que en la de Asociacin es poco verstil. Temporalidad poco duradera en la de uso mientras que en la de asociacin es duradera.

Pgina 2 de 10

Programacin II

Septiembre 2001

cA cB cC cD

8. En la relacin de herencia del grfico de la izquierda, es posible que la clase cA no sea una clase abstracta y sin embargo que la clase cC s lo sea? Razone la respuesta. S, la clase cC puede aadir un nuevo mtodo diferido o redefinir un mtodo heredado de su clase padre como diferido. En este caso, la clase cC es abstracta.

9. En qu se diferencia la ley estricta de la ley flexible de Demeter? En la ley flexible de Demeter est permitido el acceso a los atributos heredados de la clase padre en la implantacin de los mtodos de la clase. En la ley estricta de Demeter no se puede acceder a los atributos heredados de la clase padre.

10. Dado el siguiente cdigo: CLASS INTERFACE cX PUBLIC METHODS OPERATOR := (pX : ^cX); END CLASS INTERFACE cX CLASS INTERFACE cY INHERITS FROM cX PUBLIC METHODS OPERATOR := (pY : ^cY); END CLASS INTERFACE cY p : ^cX; q : ^cY; p^ := q; q^ := p;

(*A*) (*B*)

Son vlidas las dos asignaciones (*A*) y (*B*)? Razone la respuesta. (*A*) No es vlida porque el mtodo de asignacin de la clase cX espera un puntero a un objeto de la clase cX y le llega un puntero a un objeto de la clase cY. (*B*) s es vlida porque la clase cY tiene sobrecargado el operador de asignacin, en este caso se ejecuta el mtodo heredado de su clase padre que recibe como parmetro un puntero a un objeto de la clase cX

Pgina 3 de 10

Programacin II

Septiembre 2001

III.

PROGRAMACIN FUNCIONAL.

11. Es correcta la definicin de la siguiente funcin? En caso afirmativo, escriba su tipo y describa qu hace mediante un ejemplo. let rec f = function [ ] -> [ ] | cab::cola -> (hd cab, tl cab):: f cola;; La funcin es correcta y su tipo es: a list list -> (a * a list) list. Lo que hace es transformar una lista de listas de cualquier tipo en una lista de tuplas del tipo: a * a list f [[1; 3;4]; [2]];; a * a list = [(1, [3; 4]); (2, [ ])] 12. Indquese para cada una de las siguientes tuplas si corresponden a una posible expresin, a un posible patrn, ambas cosas o ninguna: 1) (4, _) 1) Un patrn. 2) (4, 0) 3) (4>0, 0)

2) Un patrn y una posible expresin. 3) Una posible expresin. 13. Defina tipo y sistema de tipos Un tipo es un conjunto de los posibles valores de datos que pertenecen a dicho tipo. Sistema de tipos es un conjunto de reglas que determina el tipo para cada uno de los valores de datos que entran en juego en un programa y las reglas de compatibilidad entre los distintos tipos del lenguaje de programacin. 14. Existe un patrn que se corresponda con listas de enteros con longitudes entre 2 y 3 elementos? No existe tal patrn. CAML no permite definir este tipo de patrones. 15. Describa en qu consiste la tcnica de reduccin y en qu casos es aplicable Esta tcnica consiste en utilizar la cabeza de una lista como acumulador del resultado final de la funcin recursiva. Para poder aplicar esta tcnica el tipo de la funcin debe ser a list -> a.

Pgina 4 de 10

Programacin II

Septiembre 2001

Universidad Politcnica de Madrid Escuela Universitaria de Informtica Departamento de Lenguajes, Proyectos y Sistemas Informticos

Asignatura PROGRAMACIN II ENUNCIADOS DE LOS PROBLEMAS DEL EXAMEN DE LA CONVOCATORIA DE SEPTIEMBRE Plan: 92 / Curso: 2000-2001
Madrid a 18 de Septiembre de 2001
Fechas de Publicacin de Notas y de Revisin de Exmenes Publicacin de Notas Mircoles 26 de Septiembre de 2001 Revisin de Examen y Prcticas: Viernes 28 de Septiembre de 2001 en horario que ser publicado en el tabln de la Asignatura a la publicacin de las notas Puede consultar sus notas en: www.lpsi.eui.upm.es/ProgramacionII/Notas.htm

PROBLEMA 1: PROGRAMACION CONCURRENTE

Puntuacin: 2'5 puntos

El responsable de la asignatura de Programacin II ha codificado el siguiente programa que recoge por teclado los datos de los alumnos (nombre, notas de prcticas de concurrencia y objetos y del examen) y, posteriormente, imprime por pantalla nicamente el nombre y nota final de aquellos aprobados en la asignatura: program listadoAprobados; const maxCar=10; maxAlu=100; type tAlumno=record nombre:array [1..maxCar] of char; prpc, prpoo, ex:integer; aprob:boolean; nota:integer; end; tAlumnos=array [1..maxAlu] of tAlumno; procedure rellenar (var alumnos:tAlumnos); var i:integer; begin for i:=1 to maxAlu do begin readln(alumnos[i].nombre); readln (alumnos[i].prpc); readln (alumnos[i].prpoo); readln (alumnos[i].ex); readln (alumnos[i].aprob); end; end; procedure aprobar (var alumno:tAlumno); begin alumno.aprob:=(alumno.prpc>=5)and (alumno.prpoo>=5) and (alumno.ex>=5); end;

Pgina 5 de 10

Programacin II procedure calificar (var alumno:tAlumno); begin alumno.nota:=(alumno.prpc+alumno.prpoo + alumno.ex*8)div 10; end; procedure visualizar (alumno:tAlumno); begin write (alumno.prpc,' '); write (alumno.prpoo,' '); write (alumno.ex,' '); writeln (alumno.nota); end; var alumnos:tAlumnos; begin rellenar(alumnos); for i:=1 to maxAlu do begin Aprobar(alumnos[i]); if alumnos[i].aprob then begin Calificar(alumnos[i]); Visualizar(alumnos[i]); end end end.

Septiembre 2001

Como es lgico, el profesor ms joven de la asignatura corrige los achaques del maduro responsable indicando la innecesaria secuencializacin de aprobar, calificar y visualizar para cada uno de los alumnos frente a la potencial paralelizacin de aprobar a uno, mientras se califica a otro y se visualiza un tercero. Para asistir al maduro responsable se pide codificar un programa concurrente que respete la funcionalidad del programa anterior bajo las siguientes condiciones: Permitir la actualizacin del campo aprobado de un alumno en paralelo con el clculo de la nota final de otros alumnos (supuestamente aprobado) y en paralelo con la visualizacin de un tercer alumno (supuestamente aprobado) mediante los tres procesos Aprobador, Calificador y Visualizador respectivamente. Sincronizar el progreso del proceso Calificador supeditado al progreso del proceso Aprobador (calificando nicamente a alumnos previamente aprobados) y sincronizar el progreso del proceso Visualizador supeditado al progreso del proceso Calificador (visualizando nicamente a alumnos previamente aprobados y calificados).

NOTA.
La solucin precisa nicamente la codificacin correspondiente a las herramientas de concurrencia escogidas (semaforos o monitores), los procesos y el cuerpo del programa principal. La solucin NO precisa la recodificacin correspondiente a las constantes, tipos, subprogramas y variables globales del cdigo anterior pero SI la indicacin de su situacin dentro de la solucin.

Pgina 6 de 10

Programacin II

Septiembre 2001

SOLUCIN:
PROCESS Aprobador (VAR Alumnos: tAlumnos; VAR sAprobar : SEMAPHORE); VAR i: INTEGER; BEGIN FOR i:=1 TO MaxAlu DO BEGIN Aprobar(Alumnos[i]); SIGNAL(sAprobar) END END; PROCESS Calificador (VAR Alumnos: tAlumnos; VAR sAprobar, sCalificar: SEMAPHORE); VAR i: INTEGER; BEGIN FOR i:=1 TO MaxAlu DO BEJN WAIT(sAprobar); IF Alumnos[I].Aprob THEN Calificar(Alumnos[i]); SIGNAL(sCalificar) END END; PROCESS Visualizador (VAR Alumnos: tAlumnos; VAR sCalificar: SEMAPHORE); VAR i: INTEGER; BEGIN FOR i:=1 TO MaxAlu DO BEJN WAIT(sCalificar); IF Alumnos[I].Aprob THEN Visualizar(Alumnos[i]); END END; (*PROGRAMA PRINCIPAL*) VAR Alumnos:tAlumnos; sAprobar, sCalificar: SEMAPHORE; BEGIN INITIAL(sAprobar, 0); INITIAL(sCalificar, 0); Rellenar(Alumnos); COBEGIN Aprobador(Alumnos, sAprobar); Calificador(Alumnos, sAprobar, sCalificar); Visualizador(Alumnos, sCalificar) COEND END.

Pgina 7 de 10

Programacin II

Septiembre 2001 Puntuacin: 2'5 puntos

PROBLEMA 2: PROGRAMACIN ORIENTADA A OBJETOS

La ltima versin del lenguaje PIIPOO proporciona la clase TEXTFILE para tratar ficheros de texto. El interfaz de esta clase es el siguiente:
CLASS INTERFACE CTEXTFILE; PUBLIC METHODS (* recibe la ruta del fichero *) CONSTRUCTOR CTEXTFILE (strFichero : STRING); DESTRUCTOR CTEXTFILE; PROCEDURE RESET; PROCEDURE READLN (VAR strLinea : STRING); FUNCTION EOF : BOOLEAN; PROCEDURE REWRITE; PROCEDURE WRITELN (strLinea : STRING); END CLASS INTERFACE CTEXTFILE;

Adems se conoce de la existencia del siguiente mtodo privado, que se usa para la construccin del fichero a partir de su ruta:
CLASS IMPLEMENTATION CTEXTFILE; PRIVATE METHODS PROCEDURE ASSIGN (strFichero : STRING); END CLASS IMPLEMENTATION CTEXTFILE;

Actualmente se pretende tratar con ficheros de texto cifrados, para lo que se ha establecido el siguiente interfaz de un cifrador de texto abstracto:
CLASS INTERFACE CCifradorTexto; PUBLIC METHODS DEFERRED PROCEDURE Cifrar (VAR strTexto : STRING); DEFERRED PROCEDURE Descifrar (VAR strTexto : STRING); END CLASS INTERFACE CCifradorTexto;

Se pide:
1) Escribir el interfaz y la implementacin de la clase CFicheroTextoCifrado, que especialice la clase CTEXTFILE para leer y escribir ficheros de texto redefiniendo las siguientes funciones: a) El constructor recibir la ruta del fichero y un cifrador polimrfico que implanta el interfaz CCifradorTexto. b) READLN debe leer la lnea del fichero y despus descifrar la linea leda usando su cifrador. c) WRITELN debe cifrar la lnea a escribir usando su cifrador.y despus escribirla en el fichero. 2) Escribir el interfaz y la implementacin de un cifrador de texto CCifradorCesar que implemente: a) Constructor que recibir un desplazamiento mediante un entero. b) Cifrar aplicar este desplazamiento en mdulo 256 a todos los caracteres del texto a cifrar, sumandolo al ordinal de cada carcter. c) Descifrar deshar el desplazamiento en mdulo 256 en todos los caracteres del texto a descifrar, restandolo al ordinal de cada carcter. 3) Escribir el mtodo de una clase CGestorFicheros: a) Copiar, que copie un fichero de texto origen de cualquier clase en otro fichero de texto destino de cualquier clase (ya sean ficheros cifrados o no). Para ello preparar el fichero origen para lectura, el destino para escritura, y leer lnea por lnea el fichero origen y las escribir en el fichero destino.
Pgina 8 de 10

Programacin II CLASS INTERFACE CgestorFicheros PUBLIC METHODS PROCEDURE Copiar (pFicheroOrigen : POLYMORPHIC ^TEXTFILE; pFicheroOrigen : POLYMORPHIC ^TEXTFILE); END CLASS INTERFACE CgestorFicheros

Septiembre 2001

Para resolver el problema se dispone de las clases primitivas de PIIPOO. Algunas definiciones tiles de estas clases se presentan a continuacin :
CLASS INTERFACE STRING; PUBLIC METHODS FUNCTION GETAT (iPosicion : INTEGER) : CHAR; PROCEDURE PUTAT (iPosicion : INTEGER; c : CHAR); END CLASS INTERFACE STRING; CLASS INTERFACE INTEGER; PUBLIC METHODS FUNCTION CHR : CHAR; (* Devuelve el caracter con este ordinal *) END CLASS INTERFACE INTEGER; CLASS INTERFACE CHAR; PUBLIC METHODS FUNCTION ORD : INTEGER; (* Devuelve el ordinal del caracter *) END CLASS INTERFACE CHAR;

SOLUCIN
(* Apartado 1 *)
CLASS INTERFACE CFicheroTextoCifrado; INHERITS FROM CTEXTFILE; PUBLIC METHODS CONSTRUCTOR CFicheroTextoCifrado (strFichero : STRING; strClave : STRING; pCifrador : POLYMORPHIC ^CCifradorTexto); REDEFINED PROCEDURE READLN (VAR strLinea : STRING); REDEFINED PROCEDURE WRITELN (strLinea : STRING); END CLASS INTERFACE CFicheroTextoCifrado; CLASS IMPLEMENTATION CFicheroTextoCifrado; ATTRIBUTES mpCifrador : POLYMORPHIC ^CCifradorTexto; METHODS DEFINITION CONSTRUCTOR CFicheroTextoCifrado (strFichero : STRING; strClave : STRING; pCifrador : POLYMORPHIC ^CCifradorTexto); BEGIN SELF.ASSIGN(strFichero); mpCifrador := pCifrador; END; PROCEDURE READLN (VAR strLinea : STRING); BEGIN SUPER.READLN(strLinea); mpCifrador^.Descifrar(strLinea) END; PROCEDURE WRITELN (strLinea : STRING); BEGIN mpCifrador^.Cifrar(strLinea); SUPER.WRITELN(strLinea) END; END CLASS IMPLEMENTATION CFicheroTextoCifrado; Pgina 9 de 10

Programacin II

Septiembre 2001

(* Apartado 2 *)
CLASS INTERFACE CCifradorTextoSimple; INHERITS FROM CCifradorTexto; PUBLIC METHODS REDEFINED PROCEDURE Cifrar (strClave : STRING; VAR strTexto : STRING); REDEFINED PROCEDURE Descifrar (strClave : STRING; VAR strTexto : STRING); END CLASS INTERFACE CCifradorTextoSimple; CLASS IMPLEMENTATION CCifradorTextoSimple; ATTRIBUTES miDesplazamiento: INTEGER; METHODS DEFINITION CONSTRUCTOR CCifradorTextoSimple (desplazamiento : INTEGER); BEGIN miDesplazamiento := desplazamiento; END; PROCEDURE Cifrar (VAR strTexto : STRING); VAR i : INTEGER; c : CHAR; BEGIN FOR i := 1 TO strTexto.LENGTH DO BEGIN c := strTexto.GETCHAR(i); c := ((c.ORD + miDesplazamiento) MOD 256).CHR; strTexto.PUTCHAR(i, c) END END; PROCEDURE Descifrar (VAR strTexto : STRING); VAR i : INTEGER; c : CHAR; BEGIN FOR i := 1 TO strTexto.LENGTH DO BEGIN c := strTexto.GETAT(i); c := ((c.ORD - miDesplazamiento) MOD 256).CHR; strTexto.PUTAT(i, c) END END; CLASS IMPLEMENTATION CCifradorTextoSimple;

(* Apartado 3 *)
PROCEDURE Copiar (pFicheroOrigen : POLYMORPHIC ^TEXTFILE; pFicheroOrigen : POLYMORPHIC ^TEXTFILE); VAR strLinea : STRING; BEGIN pFicheroOrigen^.RESET; pFicheroDestino^.REWRITE; WHILE NOT pFicheroOrigen^.EOF DO BEGIN pFicheroOrigen^.READLN(strLinea); pFicheroDestino^.WRITELN(strLinea) END END; Pgina 10 de 10

Você também pode gostar