Universidad Carlos III de Madrid Ingeniería de

Anuncio
Universidad Carlos III de Madrid
Ingeniería de Telecomunicación
Examen de Programación
Septiembre 2007
Parte de Ejercicios
Responder y entregar cada ejercicio en hojas separadas
Numerar todas las hojas de un mismo ejercicio independientemente del resto del
examen: 1de N, 2 de N, … N de N
Duración: 3h.
Valor: 60%
Ejercicio 1
(2,5 puntos)
Dentro de una aplicación de transmisión de datos, hay que programar un método que
valide si la información recibida en destino es idéntica a la enviada por el ordenador
emisor. El mecanismo de control consiste en que en cada línea de texto, los 4 primeros
caracteres contiene un número entero que denominamos cifra de control, el resto del la
línea es el contenido del texto. Se validará que el tamaño de la línea de texto tenga al
menos 5 caracteres y que los caracteres correspondientes a la cifra de control sean
numéricos.
Esta cifra de control se forma con la suma del valor numérico de cada uno de los
caracteres que componen el contenido del texto.
El método se llamará validarLinea, recibe una línea de tipo String , en la que los 4
primeros caracteres es la cifra de control. Se pide definir el tipo de datos de retorno y
completar el código de este método.
validarLinea (String linea) {
}
Ejemplo:
Este ejemplo es ilustrativo del funcionamiento del algoritmo que hay que programar.
Java dispone de herramientas para conocer el valor numérico de un carácter.
Se recibe un String con el contenido:
“1242la casa del ama”
La longitud de este String es de 19 posiciones, 4 de cifra de control que es 1242, y 15 de
texto.
1
La suma del valor numérico de estos 15 caracteres ASCII es
1321(108+97+…119+97):
L
108
a
97
32
c
99
a
97
s
115
a
97
32
d
100
e
101
l
108
32
a
97
m
109
a
97
Como la cifra de control difiere de la suma obtenida, el String analizado es erróneo.
(1 punto)
Ejercicio 2
En una matriz se tienen almacenados los puntos que ha conseguido cada participante en
el campeonato mundial heptalon en cada una de las carreras celebradas. En cada casilla
se almacenan los puntos conseguidos por cada participante en cada carrera (números
enteros positivos). Las filas (1ª coordenada) representan los participantes y las columnas
(2ª coordenada) las carreras
Realizar un método que reciba como parámetro la matriz de 2 dimensiones de números
enteros con los puntos logrados, y devuelva un array de enteros de 2 dimensiones, con
tantas columnas como tenía la matriz y 2 filas:
en la primera fila estará almacenado el valor mayor de cada columna de la
matriz original y
en la segunda fila estará almacenada la posición (fila) en la que estaba el valor
mayor correspondiente a esa columna, que indicará el ganador de la carrera.
Si existen varios participantes con el máximo de puntos en una carrera se elijará a uno
cualquiera de ellos.
2
Ejemplo:
Matriz original
Participante 0
Participante 1
Participante 2
Participante 3
Carrera 0
12
4
7
11
Carrera 1
8
6
2
15
Carrera 2
3
9
10
1
Carrera 3
1
14
2
5
Carrera 4
9
2
6
2
Matriz Resultado:
Puntos Máximos
Ganador
12
0
15
3
10
2
14
1
9
0
3
(2,5 puntos)
Ejercicio 3
Dado el siguiente interfaz:
interface Lista {
boolean añadir (Object o);
Object obtener();
}
que sirve para definir listas de objetos en las que se pueden agregar objetos con la
operación añadir y obtener objetos de la misma. Cada vez que se obtenga un objeto éste
desaparecerá de la lista.
Y la clase
abstract class ListaConArrayParcial implements Lista{
Object vo[];
int cont;
ListaConArrayParcial (int tamañoMaximo){
cont=0;
vo= new Object[tamañoMaximo];
}
//añadir añade un objeto al principio del array
public boolean añadir (Object o){
boolean ok=false;
if (cont <vo.length) {
vo[cont++]=o;
ok=true;
}
return ok;
}
}
a) Definir la clase ListaConArray que herede de la anterior e implemente el método
obtener de tal forma que cada vez que se llame al mismo devuelva el objeto que
lleva menos tiempo en el array.
b) Definir la clase ListaConArrayCompleta que tenga los métodos añadir, obtener y
obtenerAntiguo , que devolverá el objeto que lleve más tiempo en la lista.
c) Definir un método de la clase UtilizaciónLista que reciba como parámetro
cualquier tipo de lista de las anteriores y muestre en pantalla todos los objetos
que contenga dicha lista. Realizar un pequeño programa principal que utilice el
método UtilizaciónLista.
4
SOLUCIONES
boolean validarLinea(String texto){
int total= 0, i= 0;
boolean resultado = true, esNumerico = true;
String palabra;
if (texto.length()>4)
{while (i<4 && esNumerico)
{if (texto.charAt(i)< '0' || texto.charAt(i) > '9')
esNumerico = false;
i++;
} //While
if (esNumerico )
{int cifraControl=Integer.parseInt
(texto.substring(0,4));
for (i=4;i<texto.length() ;i++ )
total = total + (int)texto.charAt(i);
if (total!= cifraControl)
resultado = false;
}
else resultado =false; // if esNumerico
}
else resultado = false;// if longitud
return resultado;
}
Ej2
int [][] ganadores (int [][] m){
int[][] mgana;
if (m!= null){
mgana= new int[2][m[0].length];
for (int f = 0; f <m.length ; f++) {
int max=-1;
for (int c = 0; c<m[0].length; c++)
if (max < m[f][c]){
max=m[f][c];
mgana[0][c]=max;
mgana[1][c]=f;
}
}
}
else
mgana=null;
return mgana;
}
Ej3
class ListaConArray extends ListaConArrayParcial {
ListaConArray(int tamañoMaximo){
super(tamañoMaximo);
}
5
public Object obtener () {
if (cont==0)
return null;
else
return vo[--cont];
}
}
class ListaConArrayCompleta extends ListaConArray {
ListaConArrayCompleta(int tamañoMaximo){
super(tamañoMaximo);
}
public Object obtenerAntiguo () {
Object aux=null;
if (cont!=0){
aux= vo[0];
cont--;
for (int i=1; i<=cont; i++)
vo[i-1]= vo[i];
}
return aux;
}
}
class UtilizacionLista{
void usarListas ( Lista l){
Object aux;
int i=0;
while ( (aux=l.obtener()) != null)
System.out.println ("Elemento "+ i++ +" es "+ aux);
}
public static void main (String a[]){
ListaConArray la=new ListaConArray(10);
ListaConArrayCompleta lac=new ListaConArrayCompleta(5);
for (int i=0; i<4; i++)
la.añadir(new Integer(i) );
for (int i=10; i<15; i++)
lac.añadir(new Integer (i) );
UtilizacionLista ul=new UtilizacionLista ();
ul.usarListas(la);
ul.usarListas(lac);
}
}
6
Descargar