Examen - Universidad Politécnica de Madrid

Anuncio
Dpto. Ingeniería de Sistemas Telemáticos
Universidad Politécnica de Madrid
ETSI Telecomunicación, Ciudad Universitaria, 28040 Madrid
FUNDAMENTOS DE PROGRAMACIÓN. SEPTIEMBRE 2004.
Normas de examen:
Con libros y apuntes.
Duración: 2 horas.
Responda a cada pregunta en hojas separadas
No se contestará ninguna pregunta durante el examen.
Pregunta 1 (2 puntos)
Para obtener la representación en base B de un número decimal N, puede dividirse repetidamente el valor N dado por la base
B hasta que el cociente sea 0, de forma que la concatenación en orden inverso de todos los restos resultantes en las divisiones
anteriores, es la representación pedida.
Por ejemplo, el número decimal 867 en base 7 se representa como 2 3 4 6. Este valor se calcula dividiendo el valor 867 entre
7, todas las veces que se puede:
867/7
123/7
17/7
2/7
=
=
=
=
123
17
2
0
resto=6
resto=4
resto=3
resto=2
y escribiendo los restos resultantes en orden inverso al de su cálculo.
Nótese que 2*7*7*7 + 3*7*7 + 4*7 + 6 vale 867.
Se pide escribir un método recursivo que imprima por pantalla la representación en base B de un número decimal N. Use un
espacio en blanco para separar entre si los restos al imprimirlos.
public void pregunta1(int n, int b);
Pregunta 2 (3 puntos)
Una máquina que realiza esculturas en mármol es manejada desde un método que toma como parámetro un array de tres
dimensiones. Este array representa la figura a esculpir, y sus tres dimensiones se corresponden con los ejes espaciales X, Y y
Z, divididos en milímetros. Los valores de este array son de tipo booleano, indicando que puntos del bloque de mármol a
esculpir deben eliminarse (false), y que puntos deben mantenerse (true). Así, pasándole a este método un array
tridimensional de booleanos, la máquina es capaz de esculpir la figura que representa.
En esta pregunta se desarrollará una clase, llamada Escultura, cuyos objetos representarán las figuras a esculpir, y que se
usará para proporcionar al método escultor los arrays con los que trabajará.
Pregunta 2.1 (1 punto):
Sabiendo que la clase Escultura almacena el array con la forma de la figura como un atributo privado, que este array se le
pasa al constructor como parámetro, y que existe un método llamado getForma que devuelve el array almacenado, se pide
escribir el código de esta clase.
Pregunta 2.2 (1 punto):
Suponiendo que se desea esculpir versiones en miniatura de las esculturas, añada a la clase anterior un método llamado
miniatura(int n). Este método tomará como parámetro el factor de reducción (int n) de la miniatura a producir, y
devolverá un nuevo objeto de la clase Escultura que represente una figura n veces más pequeña que la original. Para saber
que puntos de la miniatura son sólidos y cuales son aire, divida la escultura original en bloques de nxnxn puntos, elija el
punto de coordenadas menores del bloque, y use el valor de ese punto. Si el punto elegido es sólido, haga que el punto
correspondiente de la miniatura sea sólido, y si es aire haga que sea aire.
Pregunta 2.3 (1 punto):
Escriba otro método que devuelva la situación del centro de gravedad de la escultura. El centro de gravedad se calcula como
la media aritmética de las coordenadas de todos los puntos sólidos de la escultura. La posición del centro de gravedad se
devolverá como un array que almacene tres valores de tipo float.
Pregunta 3 (2 puntos)
En una lista encadenada de números enteros, deseamos conocer cuantos de ellos son pares (se considera el 0 como número
par). Dada la siguiente clase Nodo:
public class Nodo {
int valor;
Nodo siguiente;
public Nodo (int v){ this ( v, null,);}
public Nodo (int v, Nodo s,){ valor=v; siguiente =s;}
public int pares(){
...
}
}
Implemente el método pares que devuelve la cuenta de números pares contenidos en la lista.
Pregunta 4 (3 puntos)
En un supermercado se han definido las siguientes clases:
Producto: define las características básicas de un producto: identificador del producto (idproducto) y precio
del mismo (precio).
Fecha: define una fecha como un día, un mes y un año.
Alimento: aquellos productos que son comestibles tienen además una fecha de caducidad (caducidad).
ProductosEcologicos: define a aquellos productos que cumplen una norma específica de respeto a la
naturaleza y que se caracterizan por disponer de un código de origen que garantiza su carácter de ecológicos.
Si disponemos del siguiente código:
public class Producto {
private int idproducto;
private int precio;
public Producto (int id, int p){idproducto=id; precio=p;}
public int dameIdProducto () { return idproducto;}
public int damePrecio () { return precio;}
}
public class Alimento extends Producto {
private Fecha caducidad;
public Alimento(int id, int p, Fecha c){super(id,p); caducidad =c;}
public Fecha dameCaducidad () { return caducidad;}
}
public class Fecha {
private int dia;
private int mes;
private int año;
public Fecha (int d, int m, int a){ dia=d; mes=m; año=a;}
public int dameDia (){ return dia;}
public int dameMes (){ return mes;}
public int dameAño (){ return año; }
}
public interface ProductoEcologico {
public double codigoOrigen ();
}
Pregunta 4.1 (1 punto): Codifique la clase Carne como una subclase de Alimento
Pregunta 4.2 (1 punto): Codifique la clase TerneraEcologica como un tipo de carne que es además un
ProductoEcologico
Pregunta 4.3 (1 punto): Codifique el siguiente método
boolean hayAlimentosEcologicos(Producto[] Almacen)
que devuelve true si en Almacen hay algún Alimento que sea un ProductoEcologico.
Descargar