Docsity
Docsity

Prepara tus exámenes
Prepara tus exámenes

Prepara tus exámenes y mejora tus resultados gracias a la gran cantidad de recursos disponibles en Docsity


Consigue puntos base para descargar
Consigue puntos base para descargar

Gana puntos ayudando a otros estudiantes o consíguelos activando un Plan Premium


Orientación Universidad
Orientación Universidad


Examen final Programacion UC3M Telematica, Exámenes de Ingeniería de Telecomunicaciones

Asignatura: Programacion de Sistemas, Profesor: , Carrera: Ingeniería Técnica de Telecomunicación: Telemática, Universidad: UC3M

Tipo: Exámenes

2016/2017

Subido el 16/05/2017

cebridani
cebridani 🇪🇸

2 documentos

1 / 21

Toggle sidebar

Esta página no es visible en la vista previa

¡No te pierdas las partes importantes!

bg1
Universidad Carlos III de Madrid. Departamento de Ingeniería Telemática
Grados en Ingeniería de Sistemas de Comunicaciones, Ingeniería Telemática,
Ingeniería de Sistemas Audiovisuales, Ingeniería de Tecnologías de Telecomunicación
1
NOMBRE:
APELLIDOS:
NIA:
GRUPO:
2ª Parte: Problemas (7 puntos sobre 10)
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
Problema 1 (2 puntos)
Se quiere realizar un programa para la gestión de un conocido banco. Para ello se proporciona la
siguiente interfaz, la cual define un método para realizar cargos o retiradas de dinero (withdraw):
public interface Withdrawal {
boolean withdraw(double amount);
}
Apartado 1.1 (0,6 puntos)
Implemente la clase BankAccount, la cual representa las cuentas bancarias del banco e implementa la
interfaz Withdrawal. Esta clase tendrá un atributo privado de tipo double llamado balance, un
constructor que inicializa dicho atributo a 0, y un método “get” para acceder a dicho atributo. Esta
clase tendrá además otros tres métodos:
deposit, el cual recibe como parámetro una cantidad de tipo double que se añade al balance
y no devuelve nada.
withdraw, el cual recibe como parámetro una cantidad. Esta cantidad se resta al balance
(devolviendo además true) si y sólo si la cantidad a retirar es menor o igual que el balance
disponible. En caso contrario no se realiza ninguna operación y se devuelve false.
transfer, el cual recibe una cantidad y un objeto de la clase BankAccount, y retira de la
cuenta bancaria actual dicha cantidad (siempre que sea posible), depositando esa misma
cantidad en la cuenta bancaria que se recibe como parámetro. Este método devolverá true si y
sólo si la transferencia se ha podido completar correctamente. Se entiende que la transferencia
se ha realizado correctamente si y sólo si se ha podido retirar la cantidad de la cuenta bancaria
origen (cuenta bancaria actual) y depositar dicha cantidad en la cuenta bancaria destino (cuenta
bancaria recibida como parámetro).
pf3
pf4
pf5
pf8
pf9
pfa
pfd
pfe
pff
pf12
pf13
pf14
pf15

Vista previa parcial del texto

¡Descarga Examen final Programacion UC3M Telematica y más Exámenes en PDF de Ingeniería de Telecomunicaciones solo en Docsity!

Grados en Ingeniería de Sistemas de Comunicaciones, Ingeniería Telemática,

Ingeniería de Sistemas Audiovisuales, Ingeniería de Tecnologías de Telecomunicación

NOMBRE:

APELLIDOS:

NIA:

GRUPO:

2ª Parte: Problemas (7 puntos sobre 10)

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

Problema 1 (2 puntos)

Se quiere realizar un programa para la gestión de un conocido banco. Para ello se proporciona la

siguiente interfaz, la cual define un método para realizar cargos o retiradas de dinero (withdraw):

public interface Withdrawal {

boolean withdraw(double amount);

Apartado 1.1 (0,6 puntos)

Implemente la clase BankAccount, la cual representa las cuentas bancarias del banco e implementa la

interfaz Withdrawal. Esta clase tendrá un atributo privado de tipo double llamado balance, un

constructor que inicializa dicho atributo a 0, y un método “get” para acceder a dicho atributo. Esta

clase tendrá además otros tres métodos:

● deposit, el cual recibe como parámetro una cantidad de tipo double que se añade al balance

y no devuelve nada.

● withdraw, el cual recibe como parámetro una cantidad. Esta cantidad se resta al balance

(devolviendo además true) si y sólo si la cantidad a retirar es menor o igual que el balance

disponible. En caso contrario no se realiza ninguna operación y se devuelve false.

● transfer, el cual recibe una cantidad y un objeto de la clase BankAccount, y retira de la

cuenta bancaria actual dicha cantidad (siempre que sea posible), depositando esa misma

cantidad en la cuenta bancaria que se recibe como parámetro. Este método devolverá true si y

sólo si la transferencia se ha podido completar correctamente. Se entiende que la transferencia

se ha realizado correctamente si y sólo si se ha podido retirar la cantidad de la cuenta bancaria

origen (cuenta bancaria actual) y depositar dicha cantidad en la cuenta bancaria destino (cuenta

bancaria recibida como parámetro).

Grados en Ingeniería de Sistemas de Comunicaciones, Ingeniería Telemática,

Ingeniería de Sistemas Audiovisuales, Ingeniería de Tecnologías de Telecomunicación

Apartado 1.1. (0,6 puntos) Clase BankAccount

Grados en Ingeniería de Sistemas de Comunicaciones, Ingeniería Telemática,

Ingeniería de Sistemas Audiovisuales, Ingeniería de Tecnologías de Telecomunicación

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.

Apartado 1.4. (0,6 puntos) Clase CreditCard

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 first; private LinkedNode last; int size;

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) {...} }

Grados en Ingeniería de Sistemas de Comunicaciones, Ingeniería Telemática,

Ingeniería de Sistemas Audiovisuales, Ingeniería de Tecnologías de Telecomunicación

public class LinkedQueue {

private LinkedNode front; private LinkedNode tail; private int size;

public LinkedQueue() {...} public boolean isEmpty() {...} public int size() {...} public void enqueue(E info) {...} public E dequeue() {...} public E front() {...} }

public class LinkedNode { private E info; private LinkedNode next;

public LinkedNode(E info, LinkedNode next) {...} public E getInfo() {...} public LinkedNode getNext() {...} public void setNext(LinkedNode next){.} }

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.1 (0,5 puntos) Método elementAt

Grados en Ingeniería de Sistemas de Comunicaciones, Ingeniería Telemática,

Ingeniería de Sistemas Audiovisuales, Ingeniería de Tecnologías de Telecomunicación

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.

Apartado 2.3 (1 punto) Clase ProcessManager

Grados en Ingeniería de Sistemas de Comunicaciones, Ingeniería Telemática,

Ingeniería de Sistemas Audiovisuales, Ingeniería de Tecnologías de Telecomunicación

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 Comparable key; public E info; public Tree left; public Tree right;

public TreeNode(Comparable key, E info, Tree left, Tree right) { ... } } // TreeNode

public class Tree { private TreeNode root;

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 toArrayListString(){ // ejercicio 3 }

} // 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 toArrayListString(){...} que devuelve un ArrayList con los Strings obtenidos al recorrer el árbol ordenadamente por

clave y al tranformar cada clave en un String.

Siga el siguiente esquema de solución:

public ArrayList toArrayListString() { ArrayList listStrings = new ArrayList(); toArrayListString( //SU CODIGO ); return listStrings; }

private void toArrayListString( //SU CODIGO ) { //CODIGO A IMPLEMENTAR }

Grados en Ingeniería de Sistemas de Comunicaciones, Ingeniería Telemática,

Ingeniería de Sistemas Audiovisuales, Ingeniería de Tecnologías de Telecomunicación

Apartado 4.1 (0,5 puntos)

public class ProcessManagerGUI{ private JTextField field1, field2: private JLabel label1, label2; private JRadioButton addRadio, deleteRadio;

private LinkedQueuequeue= new ........................; public ProcessManagerGUI(){ JFrame frame = new JFrame("Process Manager"); JPanel contentPane = (JPanel)..............................; JPanel panelBorder = new JPanel(); JPanel panelFlow = new JPanel(); JPanel panelGrid = new JPanel();

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);

Apartado 4.2 (0,5 puntos)

addRadio.addActionListener( .................................. { public void actionPerformed(ActionEvent e) { label1.setText("Priority: "); label2.setText("Description: ");

label2.setVisible(.................);

field2.setVisible(.................); } });

Grados en Ingeniería de Sistemas de Comunicaciones, Ingeniería Telemática,

Ingeniería de Sistemas Audiovisuales, Ingeniería de Tecnologías de Telecomunicación

deleteRadio.addActionListener(..................{ public void actionPerformed(ActionEvent e) { label1.setText("Num. Tasks: ");

label2.setVisible(.....................);

field2.setVisible(.....................); } });

Apartado 4.3 (0,5 puntos)

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

Grados en Ingeniería de Sistemas de Comunicaciones, Ingeniería Telemática,

Ingeniería de Sistemas Audiovisuales, Ingeniería de Tecnologías de Telecomunicación

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

public class BankAccount implements Withdrawal{

private double balance;

public BankAccount(){

balance = 0.0;

public void deposit(double amount){

balance = balance + amount;

public boolean withdraw(double amount){

if(balance >= amount){

balance = balance - amount;

return true;

return false;

public double getBalance(){

return balance;

public boolean transfer(double amount, BankAccount other){

if (withdraw(amount)){

other.deposit(amount);

return true;

return false;

Grados en Ingeniería de Sistemas de Comunicaciones, Ingeniería Telemática,

Ingeniería de Sistemas Audiovisuales, Ingeniería de Tecnologías de Telecomunicación

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)

public abstract class Card implements Withdrawal{

private int number;

private static int numTarjetas = 0;

public Card (int number){

this.number = number;

numTarjetas++;

public int getNumber(){

return this.number;

public abstract boolean withdraw(double amount);

public class DebitCard extends Card{

private BankAccount account;

public DebitCard(int number, BankAccount account){

super(number);

this.account = account;

public boolean withdraw(double amount){

return account.withdraw(amount);

Grados en Ingeniería de Sistemas de Comunicaciones, Ingeniería Telemática,

Ingeniería de Sistemas Audiovisuales, Ingeniería de Tecnologías de Telecomunicación

if(index>=0 && index<size) { LinkedNode current = this.first; int position = 0; while(current != null && position < index) { position++; current = current.getNext(); } return (current == null? null : current.getInfo()); } return null; }

// Solución Apartado 2. public class PriorityProcessesList {

private LinkedList<LinkedQueue> processQueues;

public PriorityProcessesList() { processQueues = new LinkedList<LinkedQueue>(); }

public void addQueue(LinkedQueue queue) { this.processQueues.addLast(queue); }

public LinkedQueue getQueuePriority(int priority) { return this.processQueues.elementAt(priority); } }

// 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(); } }

Grados en Ingeniería de Sistemas de Comunicaciones, Ingeniería Telemática,

Ingeniería de Sistemas Audiovisuales, Ingeniería de Tecnologías de Telecomunicación

return null; }

...

}

Apartado 2.1 Rúbrica

● 0,2 comprueba el caso de que la lista está vacía y devuelve null.

● 0,2 si utiliza un bucle while o for para recorrer la lista

● 0,2 si utiliza una solución recursiva en lugar de bucle

● 0.1 si calcula correctamente la posición y devuelve la información.

○ 0,1 máximo en todo el problema si no devuelve correctamente el resultado.

Apartado 2.2 Rúbrica

Debido la “complejidad” del ejercicio a nivel conceptual, se valorarán de forma

independientes los siguientes puntos

● 0,2 Detecta correctamente que hay una LinkedQueue

● 0,4 Detecta correctamente que hay que usar LinkedList<LinkedQueue>

● 0,2 Implementa correctamente el método addQueue aunque use otras soluciones

● 0,2 Implementa correctamente el método getQueueByPriority aunque use otras

soluciones

Apartado 2.3 Rúbrica

● 0,2 Define un atributo de tipo PriorityProcessList, 0 si pone las 4 colas como atributo.

Esto no influye en la puntuación de los demás apartados siempre que funcionen.

● 0,2 Define el constructor sin parámetros e inicializa PriorityProcessList y añade 4 colas

(que han sido creadas con new).

○ 0,1 si no crean las listas y las añaden a PriorityProcessList

● 0,3 Si implementa correctamente el encolado de procesos (0 si no)

○ -0,1 si ha usado ifs anidados

● 0,3 Si implementa correctamente el desencolado de procesos

○ 0 si usa processList.getQueueByPriority(0).dequeue()

○ -0,1 si ha usado ifs anidados

Problema 3

import java.util.ArrayList;

class TreeNode { public Comparable key; public E info; public Tree left; public Tree right;

Grados en Ingeniería de Sistemas de Comunicaciones, Ingeniería Telemática,

Ingeniería de Sistemas Audiovisuales, Ingeniería de Tecnologías de Telecomunicación

public class Main { public static void main(String args[]) { Tree tree = new Tree(); tree.insert("Pepe", "GIT"); tree.insert("Juan", "GISC"); tree.insert("Eva", "GISA"); tree.insert("Cristina", "GITT"); System.out.println(tree); System.out.println(tree.toArrayListString()); } }

Problema 3 (sobre 1 punto). Rúbrica:

● 0,2 llamada con parámetro correcto a toArrayListString( listStrings ).

● 0,2 elección correcta del recorrido in-order aunque falle en algún punto en realizarlo.

● 0,2 comprobación de árbol no vacío.

● 0,4 recorrido correcto in-order.

Problema 4

Apartado 4.1 (0,5 puntos) 0.125 cada apartado

public class ProcessManagerGUI{ private JTextField field1, field2; private JLabel label1, label2; private JRadioButton addRadio, deleteRadio; private LinkedQueuequeue= new ... LinkedQueue () ..; public ProcessManagerGUI(){ JFrame frame = new JFrame("Process Manager"); JPanel contentPane = (JPanel) frame.getContentPane(). .....; JPanel panelBorder = new JPanel(); JPanel panelFlow = new JPanel(); JPanel panelGrid = new JPanel(); panelBorder.setLayout(..... ....new BorderLayout(). ........); 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");

Grados en Ingeniería de Sistemas de Comunicaciones, Ingeniería Telemática,

Ingeniería de Sistemas Audiovisuales, Ingeniería de Tecnologías de Telecomunicación

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--; } }