PDF de programación - Soluciones al Examen de Fundamentos de Computadores y Lenguajes

Imágen de pdf Soluciones al Examen de Fundamentos de Computadores y Lenguajes

Soluciones al Examen de Fundamentos de Computadores y Lenguajesgráfica de visualizaciones

Publicado el 6 de Junio del 2017
1.357 visualizaciones desde el 6 de Junio del 2017
28,3 KB
6 paginas
Creado hace 20a (09/07/2003)
Soluciones del Examen de Fundamentos de Computadores y Lenguajes

Cuestiones (5 cuestiones, 5 puntos en total)

Examen Final. Junio 2003

1) Escribir un fragmento de programa que haga lo siguiente

Declara una variable entera llamada m y almacena en ella el máximo entre 10 y

otra variable que ya existe, llamada n

Declara y crea un array de m números reales

Inicializa todas las casillas del array al valor -1.0.

int m=Math.max(10,n);

double[] lista = new double [m];

for (int i=0; i<m; i++) {
lista[i]=-1.0;
}

2) Crear una clase para almacenar un triángulo, guardando sus tres lados (a, b, y c) en
campos privados. La clase tendrá los siguientes métodos, en los que no es preciso tratar
ni detectar posibles errores:

constructor: deberá admitir como parámetr os 3 números reales que representan los

lados del triángulo, y almacenarlos en los campos del objeto.

método que retorna el área del triángulo según la expresión siguiente, en la que p es

la mitad del perímetro:

A

=

a–(
p p

) p
b–(

) p
c–(

)

public class Triangulo {

private double a,b,c;

public Triangulo(double a, double b, double c) {
this.a=a;
this.b=b;
this.c=c;
}

public double area() {
double p=(a+b+c)/2.0;
return Math.sqrt(p*(p-a)*(p-b)*(p-c));
}
}

3) Describir mediante pseudocódigo el siguiente algoritmo definido en lenguaje natural:

"Se dispone de una matriz cuadrada de números reales de tamaño n x n y se desea hacer
un método para intercambiar la fila i por la fila j. La matriz, m, así como los valores n, i,
y j son parámetros del método. El método recorre en un lazo desde 0 hasta n-1 las

Página 1


diferentes columnas de la matriz. Para cada columna k, guarda el elemento de la fila i en
una variable temporal, copia el elemento de la fila j en la fila i, y copia la variable
temporal en el elemento de la fila j."
¿Cuál es su tiempo de ejecución en notación O(n)?

método intercambia:
parámetros: m : array [n][n] de double; i, j : int
variables : temp : double; n :int = dimension de la matriz
comienzo instrucciones:
lazo desde k=0 hasta n-1
temp=m[i][k]
m[i][k]=m[j][k]
m[j][k]=temp
fin del lazo
fin instrucciones
fin método intercambia

El tiempo de ejecución de las instrucciones dentro del lazo es O(1). El lazo se hace n
veces. Por ello, el tiempo total es O(n)

4) Se dispone de una clase denominada Poligono con un método para calcular su área, y

otro para borrar los datos del polígono, y que presentan la siguiente interfaz:

public double area() throws AristasSolapadas, FueraRango {...}
public void borrar() {...}

donde AristasSolapadas y FueraRango son dos excepciones declaradas dentro de
la clase Poligono.
Se pide escribir un fragmento de programa que haga lo siguiente con el polígono p ya
creado:

Mostrar el área del polígono en la pantalla
Si se lanza AristasSolapadas, poner en pantalla el mensaje "Las aristas se

solapan"

Si se lanza FueraRango, llamar al método borrar

try {
System.out.println("Area="+p.area());
} catch (Poligono.AristasSolapadas e) {
System.out.println("Las aristas se solapan");
} catch (Poligono.FueraRango e) {
p.borrar();
}

Página 2

5)

Indicar cuáles de las siguientes expresiones son incorrectas en Java, de acuerdo con las
reglas de construcción de expresiones y de compatibilidad de tipos. Razonar las
respuestas. No considerar posibles errores debidos a variables sin inicializar.

Línea

int i,j,k;
double x,y,z;

int[] lista= new int[10];

double vec = new double[3];

i=0*6;
x=0.0;
j=1.0;

k*2=j;

z=i+2;
x=j/k;

Respuesta

Incompatibilidad de tipos
(debería ser double[] vec = ...)

No se puede guardar double en int

Una asignación siempre debe tener
una variable sola a la izquierda

lista[i]=x;

No se puede guardar double en int

vec[2]=1.0e6+lista[0];
k++;
lista[2]+j=lista[6];

Una asignación siempre debe tener
una variable sola a la izquierda

vec[x]=i;

El índice del array debe ser entero

Página 3

Soluciones del Examen de Fundamentos de Computadores y Lenguajes

Problema (5 puntos)

Examen Final. Junio 2003

Se dispone de una clase llamada Tanque ya implementada que representa un tanque que
contiene líquido. Cada tanque tiene una válvula de apertura variable para verter ese líquido, y
un sensor del nivel del líquido. La clase responde a la siguiente especificación, en la que la
función de cada método se describe mediante un comentario de documentación:

public class Tanque {

/** Constructor que crea el tanque y le pone su nombre y el nivel máximo */
public Tanque(String nombre, double maximo) {...}

/** Retorna el nombre del tanque */
public String nombre() {...}

/** Retorna el nivel máximo del tanque */
public double nivelMaximo() {...}

/** Retorna el nivel actual de líquido del tanque */
public double nivel() {}

/** Pone la válvula al valor de apertura indicado por porcentaje
Si detecta que la válcula está atascada lanza Atascada
Si el porcentaje está fuera del rango [0,100], lanza FueraRango */
public void ponValvula (double porcentaje) throws Atascada, FueraRango {...}

/** Retorna el valor actual de apertura de la válvula del tanque */
public double aperturaValvula() throws Atascada {}

}

Las excepciones Atascada y FueraRango están declaradas en clases independientes.

Se pide hacer una nueva clase, llamada SistemaMezcla que permite gestionar varios tanques,
para conseguir un sistema en el que se puedan mezclar líquidos en diferentes proporciones, en
una planta industrial. La clase deberá responder a la siguiente interfaz:

public class SistemaMezcla {

public SistemaMezcla (int maxTanques) {...}

public void anadeTanque (Tanque t) throws Demasiados {}

public void modificaApertura (String nombreTanque, double apertura)
throws Atascada, NoEncontrado
{...}

public void informe() {...}

}

La clase deberá contener dos campos privados:

tanque: Será un array de objetos de la clase Tanque
num: Será un entero para almacenar el número de tanques contenidos actualmente en el
sistema; inicialmente valdrá cero

Asimismo, deberá contener los métodos definidos en la interfaz, que deberán hacer lo siguiente:

Página 4



constructor: Debe crear el array tanque con un número de elementos igual a
maxTanques; observar que de las casillas de este array sólo se utilizarán las num
primeras casillas; además, debe poner num a valor cero.
anadeTanque: Si num es igual al máximo número de tanques lanzar la excepción
Demasiados. Si no, incrementar num en una unidad y hacer que la casilla num-1 del
array tanque sea igual al tanque t.
modificaApertura: Debe realizar los siguientes pasos:

En primer lugar debe buscar entre los tanques almacenados en el array tanque
aquel cuyo nombre coincide con nombreTanque. Si no lo encuentra, lanza la
excepción NoEncontrado. Si lo encuentra, sigue al siguiente paso.

Limita el valor de apertura para que esté en el rango [0,100]. Para ello, si vale
menos que cero lo pone igual a cero; si vale más que 100, lo pone igual a 100; en
otros casos, lo deja como está.

Pone el valor de apertura (con el método ponValvula) del tanque encontrado en
el paso uno igual al valor de apertura obtenido en el paso dos. Para llamar a este
método el compilador nos obliga a tratar la excepción FueraRango, aunque
sabemos que no va a ocurrir porque hemos limitado la apertura a valores correctos.
En el tratamiento de la excepción poner en pantalla el mensaje "Error inesperado".
informe: Debe mostrar un informe sobre el estado de cada tanque almacenado en el
sistema. Para cada tanque debe mostrar un mensaje con su nombre, nivel actual, y valor
de apertura. Si se lanza Atascada, entonces poner un mensaje indicando el nombre del
tanque e indicando que está atascado, y seguir con los demás tanques de la misma forma.

Las excepciones Demasiados y NoEncontrado están también declaradas en clases
independientes, con constructores sin parámetros.

public class SistemaMezcla {

private Tanque [] tanque;
private int num;

public SistemaMezcla (int maxTanques) {
tanque = new Tanque [maxTanques];
num=0;
}

public void anadeTanque (Tanque t) throws Demasiados {
if (num==tanque.length) {
throw new Demasiados();
}
tanque[num]=t;
num++;
}

// busca el tanque cuyo nombre coincide con nombreTanque y retorna
// la casilla en la que esta; si no lo encuentra, lanza NoEncontrado
private int busca (String nombreTanque) throws NoEncontrado {
for (int i=0; i<num; i++) {
if (nombreTanque.equals(tanque[i].nombre())) {

return i;

}
}
// Si se llega aqui es porque el tanque no se ha encontrado
throw new NoEncontrado();
}

Página 5



public void modificaApertura (String nombreTanque, double apertura)
throws Atascada, NoEncontrado
{
int i=busca(nombreTanque);

// limitar el valor de la apertura para que estÈ en el rango [0,100]
if (apertura<0.0) {
apertura=0.0;
}
if (apertura>100.0) {
apertura=100.0;
}
// poner la apertura
try {
tanque[i].ponValvula(apertura);
} catch (FueraRango e) {
// no se debe entrar aqui ya hemos limitado el rango
System.out.println("Error inesperado "+e);
}
}

public void informe() {
for (int i=0; i<num; i++) {
try {

}
}
}

}

double apertura = tanque[i].aperturaValvula();
System.out.println("Valvula del tanque "+tanque[i].nombre()+

" est· al "+apertura+"%");

} catch (Atascada e){

System.out.println("Valvula del tanque "+tanque[i].nombre()+

" est· atascada");

Página 6
  • Links de descarga
http://lwp-l.com/pdf4320

Comentarios de: Soluciones al Examen de Fundamentos de Computadores y Lenguajes (0)


No hay comentarios
 

Comentar...

Nombre
Correo (no se visualiza en la web)
Valoración
Comentarios...
CerrarCerrar
CerrarCerrar
Cerrar

Tienes que ser un usuario registrado para poder insertar imágenes, archivos y/o videos.

Puedes registrarte o validarte desde aquí.

Codigo
Negrita
Subrayado
Tachado
Cursiva
Insertar enlace
Imagen externa
Emoticon
Tabular
Centrar
Titulo
Linea
Disminuir
Aumentar
Vista preliminar
sonreir
dientes
lengua
guiño
enfadado
confundido
llorar
avergonzado
sorprendido
triste
sol
estrella
jarra
camara
taza de cafe
email
beso
bombilla
amor
mal
bien
Es necesario revisar y aceptar las políticas de privacidad