













Prepara tus exámenes y mejora tus resultados gracias a la gran cantidad de recursos disponibles en Docsity
Gana puntos ayudando a otros estudiantes o consíguelos activando un Plan Premium
Prepara tus exámenes
Prepara tus exámenes y mejora tus resultados gracias a la gran cantidad de recursos disponibles en Docsity
Prepara tus exámenes con los documentos que comparten otros estudiantes como tú en Docsity
Encuentra los documentos específicos para los exámenes de tu universidad
Estudia con lecciones y exámenes resueltos basados en los programas académicos de las mejores universidades
Responde a preguntas de exámenes reales y pon a prueba tu preparación
Consigue puntos base para descargar
Gana puntos ayudando a otros estudiantes o consíguelos activando un Plan Premium
Comunidad
Pide ayuda a la comunidad y resuelve tus dudas de estudio
Ebooks gratuitos
Descarga nuestras guías gratuitas sobre técnicas de estudio, métodos para controlar la ansiedad y consejos para la tesis preparadas por los tutores de Docsity
Asignatura: Programacion de Sistemas, Profesor: , Carrera: Ingeniería Técnica de Telecomunicación: Telemática, Universidad: UC3M
Tipo: Exámenes
1 / 21
Esta página no es visible en la vista previa
¡No te pierdas las partes importantes!














Duración: 180 minutos Puntuación máxima: 7 puntos Fecha: 22 de Junio de 2016
Instrucciones para el examen: ● No se permite el uso de libros o apuntes, ni tener teléfonos móviles u otros dispositivos electrónicos encendidos. Incumplir cualquiera de estas normas puede ser motivo de expulsión inmediata del examen ● Rellena tus datos personales antes de comenzar a realizar el examen ● Utiliza el espacio de los recuadros en blanco para responder a cada uno de los apartados de los problemas ● NO SE PERMITE DESGRAPAR HOJAS DEL EXAMEN
Apartado 1.4 (0,6 puntos)
Implemente la clase CreditCard, la cual deriva también de la clase Card. Esta clase tiene dos atributos de tipo double, el límite de la tarjeta de crédito y el balance disponible de crédito. El constructor recibe parámetros para inicializar todos los atributos de esta clase teniendo en cuenta que el balance inicial disponible es igual al límite de la tarjeta de crédito. Cuando un cliente del banco desea realizar un cargo con una tarjeta de crédito, dicho cargo sólo podrá realizarse si el balance de la tarjeta es mayor o igual que la cantidad a retirar. Implemente además un método, reset, que permita restablecer el balance de la tarjeta a su valor inicial.
Problema 2 (2,5 / 7 puntos) Trabajamos para una gran empresa que desarrolla grandes sistemas software. El último encargo es crear un emulador de un sistema operativo basado en Java. El corazón de este sistema de emulación es el gestor de procesos. Nos han pedido programarlo con las siguientes indicaciones y dándonos el código ya implementado que se muestra a continuación. No se nos permite modificar ese código ya que otras aplicaciones ya lo están utilizando y necesitamos que siga funcionando. Sólo podemos añadir nuevos métodos.
public class Process {
private int priority; private String description; private static final int MAX_PRIORITY = 0; private static final int MIN_PRIORITY = 3;
public Process(int priority, String description) throws IllegalArgumentException {...}
public int getPriority() {...} public String getDescription() {...} public String toString() {...} }
public class LinkedList
private LinkedNode
public LinkedList() {...} public int size() {...} public E elementAt(int index) { // a ser implementado APARTADO 2. } public void addFirst(E info) {...} public void addLast(E info) {...} }
public class LinkedQueue
private LinkedNode
public LinkedQueue() {...} public boolean isEmpty() {...} public int size() {...} public void enqueue(E info) {...} public E dequeue() {...} public E front() {...} }
public class LinkedNode
public LinkedNode(E info, LinkedNode
Apartado 2.1 (0,5 puntos) La clase LinkedList contiene la implementación de todos los métodos excepto el método
elementAt, que necesitaremos más adelante. Implemente dicho método teniendo en cuenta que la primera posisción de la lista se considera la posición 0. Si se indica una posición fuera del rango permitido, se debe devolver null.
Apartado 2.3 (1 punto) Por último, implemente el gestor de procesos, ProcessManager, que cumple las siguientes características: ● Toda la gestión de procesos la hace mediante el uso de un objeto de la clase PriorityProcessesList. ● Gestiona 4 colas de procesos, una para cada prioridad posible (0 a 3). ● Tiene un único constructor sin parámetros que inicializa los atributos correspondientes. ● Tiene un método addNewProcess, que recibe un objeto de tipo Process, lo inserta en la cola que le corresponde según la prioridad del proceso y devuelve true. Si la prioridad del proceso está fuera del rango de prioridades consideradas por el gestor, se devolverá false y el método no hará nada. ● Tiene un método getNextProcessToRun que saca y devuelve el primer proceso de mayor prioridad que existe en las colas del gestor. Se considera que la cola en la posición 0 de la lista es la más prioritaria y la cola en la posición es 3 la menos prioritaria. Si no hay procesos pendientes de ejecutar, se devolverá null.
Problema 3 (1 punto)
Dada la implementación de un Árbol Binario de Búsqueda (izquierda) y un ArrayList (derecha recordatorio de uso):
public class TreeNode
public TreeNode(Comparable key, E info, Tree
public class Tree
public Tree() { ... } public boolean isEmpty() { ... } public void insert(Comparable key, E info) { ... } public E search(Comparable key) { ... } public int size() { ... } public int height() { ... } public String toString() { ... }
public ArrayList
} // Tree
Constructor : ArrayList
Siendo - E- la clase de la cual se quiere crear el contenedor.
Añadir un elemento: boolean java.util.ArrayList.add(E e)
Añade el elemento especificado al final de la lista siendo - e- el elemento a añadir.
Devuelve - true-
Se pide:
Implemente en la clase Tree el método public ArrayList
clave y al tranformar cada clave en un String.
Siga el siguiente esquema de solución:
public ArrayList
private void toArrayListString( //SU CODIGO ) { //CODIGO A IMPLEMENTAR }
public class ProcessManagerGUI{ private JTextField field1, field2: private JLabel label1, label2; private JRadioButton addRadio, deleteRadio;
private LinkedQueue
panelBorder.setLayout(.....................................); panelGrid.setLayout(new GridLayout(3,2)); addRadio=new JRadioButton(“Add”,true); deleteRadio=new JRadioButton(“Delete”,false); panelFlow.add(addRadio); panelFlow.add(deleteRadio); label1 = new JLabel("Priority: "); field1 = new JTextField(); field2 = new JTextField(); panelGrid.add(label1); panelGrid.add(field1); label2 = new JLabel("Description: "); panelGrid.add(label2); panelGrid.add(field2); JButton button1 = new JButton("Ok"); JButton button2 = new JButton("Cancel"); panelGrid.add(button1); panelGrid.add(button2); ButtonGroup group = new ButtonGroup(); group.add(addRadio); group.add(deleteRadio);
panelBorder.add(...................,.......................); panelBorder.add(panelGrid, BorderLayout.CENTER); contentPane.add(panelBorder); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setSize(250,100); frame.setVisible(true);
addRadio.addActionListener( .................................. { public void actionPerformed(ActionEvent e) { label1.setText("Priority: "); label2.setText("Description: ");
label2.setVisible(.................);
field2.setVisible(.................); } });
deleteRadio.addActionListener(..................{ public void actionPerformed(ActionEvent e) { label1.setText("Num. Tasks: ");
label2.setVisible(.....................);
field2.setVisible(.....................); } });
button1.addActionListener(.....................{ public void actionPerformed(ActionEvent e) { if(addRadio.isSelected()){ try{ int priority = ...................
String description = ............ Process newProcess = new Process(.......,.......); queue.enqueue(newProcess); } catch(Exception E){ System.out.println("Error"); } } else{ try{ intnum DeleteProcess= (Integer.valueOf(..........)); while(numDeleteProcess >0 && queue.size()>0){
queue.dequeue(); numDeleteProcess--; } } catch(Exception E){ System.out.println("Error"); } } } });
button2.addActionListener(......................{ public void actionPerformed(ActionEvent e) { System.exit(0); } }); } // fin del constructor } //fin de la clase
Soluciones
Problema 1 (0,6 puntos)
● Declaración de la clase implementando Withdrawal => +0, ● Atributo balance y método get correctos => +0, ● Constructor correcto=> +0, ● Método deposit correcto=> +0, ● Método withdraw correcto=> +0, ● Método transfer correcto=> +0,
Cualquier error en cada una de esas partes supone 0 puntos en dicha parte
Problema 1.2 (0,4 puntos)
● Declaración de la clase correcta como clase abstracta que implementa Withdrawal =>+0, ● Atributo number y método get correctos => +0, ● Atributo estático correcto => +0, ● Constructor correcto => +0, ● Método abstracto correctamente declarado => +0,
Cualquier error en cada una de esas partes supone 0 puntos en dicha parte
Problema 1.3 (0,4 puntos)
if(index>=0 && index<size) { LinkedNode
// Solución Apartado 2. public class PriorityProcessesList {
private LinkedList<LinkedQueue
public PriorityProcessesList() { processQueues = new LinkedList<LinkedQueue
public void addQueue(LinkedQueue
public LinkedQueue
// Solución Apartado 2. public class ProcessManager {
private static final int PRIORITY_0 = Process.MAX_PRIORITY;
private static final int PRIORITY_3 = Process.MIN_PRIORITY;
private PriorityProcessesList processList;
public ProcessManager() { this.processList = new PriorityProcessesList(); for(int i = PRIORITY_0; i<=PRIORITY_3; i++) { processList.addQueue(new LinkedQueue
}
public void addNewProcess(Process p) { processList.getQueuePriority(p.getPriority()).enqueue(p); }
public Process getNextProcessToRun() { for(int i = PRIORITY_0; i<=PRIORITY_3; i++) { if(processList.getQueuePriority(i).size() > 0) { return processList.getQueuePriority(i).dequeue(); } }
return null; }
...
}
import java.util.ArrayList;
class TreeNode
public class Main { public static void main(String args[]) { Tree
public class ProcessManagerGUI{ private JTextField field1, field2; private JLabel label1, label2; private JRadioButton addRadio, deleteRadio; private LinkedQueue
panelGrid.add(button1); panelGrid.add(button2); ButtonGroup group = new ButtonGroup(); group.add(addRadio); group.add(deleteRadio); panelBorder.add(.... ..panelFlow… ..., …. .BorderLayout.NORTH ….); panelBorder.add(panelGrid, BorderLayout.CENTER); contentPane.add(panelBorder); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setSize(250,100); frame.setVisible(true);
Apartado 4.2 (0,5 puntos)
addRadio.addActionListener( .......new ActionListener()..0,15... { public void actionPerformed(ActionEvent e) { label1.setText("Priority: "); label2.setText("Description: "); label2.setVisible(...... .true... .......); //0, field2.setVisible(.... .true. ..); =0, } });
deleteRadio.addActionListener(.. new ActionListener().... ......0,15......{ public void actionPerformed(ActionEvent e) { label1.setText("Num. Tasks: "); label2.setVisible(..... false. ..............); //0, field2.setVisible(.... .false. ..............); //0, } });
Apartado 4.3 (0,5 puntos)
button1.addActionListener(.. .new ActionListener(). .....{ //0. public void actionPerformed(ActionEvent e) { if(addRadio.isSelected()){ try{ int priority = ... Integer.valueOf(field1.getText()); ... //0. String description = .. ..field2.getText();... .....// 0. Process newProcess = new Process( priority,description ); // 0. queue.enqueue(newProcess); } catch(Exception E){ System. out .println("The parameters are not correct"); } } else{ try{ int numDeleteProcess=(Integer. valueOf ( field1.getText() ));//0. while(numDeleteProcess >0 && queue.size()>0){ queue. dequeue() ; .. .............; numDeleteProcess--; } }