Soluciones al Examen de Fundamentos de Computadores y Lenguajes

Documentos relacionados
Examen de Fundamentos de Computadores y Lenguajes

Soluciones al Examen de Fundamentos de Computadores y Lenguajes

Solucion al Examen de Fundamentos de Computadores y Lenguajes

Soluciones del Examen de Fundamentos de Computadores y Lenguajes

Solución al Examen de Fundamentos de Computadores y Lenguajes

Soluciones al Examen de Fundamentos de Computadores y Lenguajes

Examen de Prácticas de Programación Ingeniería Informática

Examen de Introducción al Software (Ingeniería Informática)

Práctica 7. Práctica 7

Examen de Programación (Grados en Física y Matemáticas)

Fundamentos de Computadores y Lenguajes

Programación en Lenguaje Java

CLAVE EXAMEN: a cd. c u r s o r = c u r s o r. g e t S i g u i e n t e ( ) ; p o s i c i o n ++;

Examen de Programación II (Ingeniería Informática)

HOJA DE EJERCICIOS 5 PROGRAMACIÓN CON EXCEPCIONES EN JAVA

Bloque II. Elementos del lenguaje de programación Java

Parte I: Programación en un lenguaje orientado a objetos

Fundamentos de Computadores y Lenguajes

Solución al Examen de Prácticas de Programación (Ingeniería Informática)

Examen de Estructuras de Datos y Algoritmos (Ingeniería Informática)

FUNDAMENTOS DE PROGRAMACIÓN - FEBRERO 2009 SOLUCIONES

Examen de Lenguajes de Alto Nivel

Unidad Didáctica 2. Elementos básicos del lenguaje Java Tipos, declaraciones, expresiones y asignaciones

FUNDAMENTOS DE INFORMÁTICA

Examen Teórico. Convocatoria de Febrero de 2015

FUNDAMENTOS DE PROGRAMACIÓN. SEPTIEMBRE 2005

Problema 1: Órdenes de la shell; Datos de una clase; Tipos primitivos; Sangrado

PROGRAMACIÓN ORIENTADA A OBJETOS 1/7/2009. Examen de Java. Nombre: DNI: Titulación:

Examen Teórico. Convocatoria de Julio de 2015

Examen parcial Convocatoria de junio de 2005 FUNDAMENTOS DE LA PROGRAMACIÓN

SUBPROGRAMAS. Los subprogramas pueden ser invocados varias veces desde diferentes partes del programa.

Agradecimientos. Nota de los autores. 1 Problemas, algoritmos y programas 1

Unidad Didáctica 3. Tipos genéricos. Fundamentos de Programación Departamento de Lenguajes y Sistemas Informáticos

Programación en Lenguaje Java

Práctica 5. Fecha límite de entrega: viernes, 14 de diciembre

PROGRAMACIÓN ORIENTADA A OBJETOS 10/02/2009. Examen de Java. Nombre: DNI: Titulación:

Problema 1: Órdenes de la shell; Datos de una clase; Literales; Sangrado

Titulación: Ingeniero Técnico en Informática de Gestión Curso: 2º. Nombre-Apellidos:

Consiste en asumir que el usuario podrá usar de forma incorrecta y por tanto el programador deberá contemplar esos errores.

Programación Orientada a Objetos (Grado en Ingeniería Informática y Grado en Ingeniería en Tecnologías de la Información - UNED)

Paquete fundamentos. Lectura

Lenguajes de programación. Algoritmos y Estructuras de Datos I. Lenguajes compilados. Lenguajes compilados

Examen Teórico Convocatoria de Junio de 2012

2. Indica cuál de las siguientes afirmaciones es cierta:

Algoritmos y Estructuras de Datos Tema 2: Diseño de Algoritmos

Diseño de tipos Igualdad, representación, código, copia y relación de orden

Examen de Fundamentos de Computadores y Lenguajes

Examen Teórico. Convocatoria de Febrero de 2016

Estructuras de control selectivas

Examen de Prácticas de Programación Ingeniería Informática

Examen de Lenguajes de Alto Nivel

Bloque II. Herramientas

Programación Tema 4: Métodos. Programación DIT-UPM

Examen escrito de Programación 1

Diseño y Programación Orientados a Objetos 29 de Abril de Primer Certamen

Examen de Métodos de Programación Ingeniería Informática Primera Parte

ESTRUCTURA DE DATOS Y ALGORITMOS Titulación: Ingeniero Técnico en Informática de Gestión Curso: 2º Nombre y apellidos: Nota:

Estructuras de datos y algoritmos

Programación M.I. Gerardo Avilés Rosas Tercer Examen Parcial

Construcciones del Lenguaje Java

Qué es Java? Un lenguaje de programación Un entorno de desarrollo Un entorno de aplicación Un entorno de despliegue Es similar en sintaxis de C + +.

Manejo de Excepciones

Práctica 2: Java Remote Method Invocation (RMI)

PROGRAMACIÓN EN JAVA. { una línea para definir, crear o ejecutar ; }

INFORMATICA II PRIMER PARCIAL

Programación orientada a objetos

Manejo de Excepciones

Manejo de Excepciones. Agustín J. González ELO329

Bloque II. Elementos del lenguaje de programación Java

Tema 7.- Fundamentos de la Programación Orientada a Objetos

Examen de Prácticas de Programación Ingeniería Informática

Tema 5 Corrección y Robustez Excepciones en Java

Problema 1 (2 puntos)

Unidad IV. Este tipo de codificación nos es permitido gracias a la sobrecarga, la cual se aplica a métodos y constructores.

Fundamentos de Programación

HERENCIA (2ª parte) En Java todas las clases derivan de otra, aunque no se diga explícitamente.

PROGRAMACION CONCURRENTE

Formato para prácticas de laboratorio

Centro Asociado Palma de Mallorca. Antonio Rivero Cuesta

1. (1 punto) Dado el siguiente fragmento de programa:

k. Son métodos de la clases y respectivamente, que analiza un para devolver un entero con

DII. 1. (5 Puntos) Dada la clase Punto con la siguiente interfaz ya implementada

EJERCICIO Y EJEMPLO RESUELTO: USO DE LA INTERFAZ CLONEABLE DE JAVA. MÉTODO CLONE() PARA CLONAR OBJETOS. (CU00912C)

Unidad V. Ya veremos qué poner en "algunas_palabras" y "algo_más", por ahora sigamos un poco más.

Ejercicios de tratamiento de errores

Temario detallado. Conceptos generales de lenguajes y compiladores. Proceso de compilación de un programa en C++ bajo Code::Blocks

Algoritmos y Estructuras de Datos Ingeniería en Informática, Curso 2º SEMINARIO DE C++ Sesión 1

Clases a Implementar (Paquete xklotski): 1. Clase XKlotskiException: package xklotski;

Sesión 2: Introducción a Java

Estructura de datos y Programación

Sebastián García Galán

FUNDAMENTOS DE PROGRAMACIÓN. SEPTIEMBRE 2007.

EXAMEN PROGRAMACIÓN 21 de Septiembre de 2007 INGENIERÍA INFORMÁTICA Primera parte: Cuestiones 1,5 horas

Algoritmos y Estructuras de Datos Iteradores. Guillermo Román Díez

1. Cuántas sentencias hay en la secuencia principal del siguiente programa?

Programación orientada a objetos. Resumen de Temas Unidad 5: Herencia

Tema 14: Excepciones

Transcripción:

Soluciones al Examen de Fundamentos de Computadores y Lenguajes Cuestiones (5 cuestiones, 5 puntos en total) Examen Parcial. Junio 2004 1) Se desea crear una clase para hacer cálculos sobre el movimiento de un cuerpo en un plano inclinado. Crear la clase con los siguientes atributos privados: ángulo del plano inclinado (en grados) masa del cuerpo (kg) coeficiente de rozamiento (sin unidades) velocidad lineal (metros/segundo) posición (en metros) Todos ellos serán números reales, excepto la posición que será un array con dos casillas reales, para guardar las coordenadas x e y del cuerpo. Crear asimismo un constructor al que se le pasen como parámetros los valores iniciales de los dos últimos atributos, para que los copie en ellos. public class CuerpoEnPlanoInclinado private double angulo; // grados private double masa; // Kg private double coef; // coeficiente de rozamiento private double vellineal; // m/s private double[] posicion=new double[2]; // metros public CuerpoEnPlanoInclinado (double vellineal, double posx, double posy) this.vellineal=vellineal; posicion[0]=posx; posicion[1]=posy; 2) Indicar qué pasos seguirías para añadir a la clase anterior un método que escriba en un fichero de texto los tres primeros atributos del objeto, usando un formato como el indicado en el siguiente ejemplo: Angulo : 3.0 grados Masa : 5.3 Kg Coef : 1.2 El nombre del fichero se le pasaría como parámetro al método. No tratar errores. Crearíamos un método que no devuelve nada y al que se le pasa como parámetro un String que contiene el nombre del fichero. Este método hará lo siguiente: Crear un objeto de la clase FileWriter para salida de texto, usando en el constructor el nombre del fichero Crear un objeto de la clase PrintWriter, para salida de texto, usando en el constructor el objeto anterior; llamemos p a este nuevo objeto. continúa... Página 1

Escribir cada uno de los tres parámetros en el fichero, usando tres veces el método println() del objeto p, y pasándole un string que será la concatenación del nombre del parámetro, el atributo que contiene su valor, y las unidades Cerrar el fichero con el método close() del objeto p. 3) Se dispone de una clase que contiene los siguientes atributos que almacenan 100 valores de una función real llamada valor(x): public class Interpolacion public final int MAX=100; private double[] x= new double[max]; private double[] valor= new double[max]; El array x contiene valores reales y el array valor tiene en cada casilla i el valor de la función valor en el punto x[i]. Se pide escribir en Java un método que corresponda al siguiente pseudocódigo que realiza la interpolación lineal entre dos de los puntos almacenados, devolviendo el valor de la función que se corresponde con un valor de x llamado pos, que se le pasa como parámetro: método interpola (pos : número real) retorna un valor real i=0; lazo mientras i menor que MAX-1 y pos > x[i]: incrementa i en 1 fin de lazo si i es 0: retorna primera casilla de valor si i > MAX: retorna última casilla de valor en caso contrario:retorna interpolación entre casillas i-1 e i fin del método Siendo el valor de la interpolación: pos x i 1 interpola( i 1, i) = v i 1 + ( v i v i 1 ) ------------------------- x i x i 1 donde x i es la casilla i del array x y v i es la casilla i del array valor. public double interpola(double pos) int i=0; while (i<=(max-1) && pos>x[i]) i++; if (i==0) return valor[0]; if (i>max) return valor[max-1]; return valor[i-1]+(valor[i]-valor[i-1])* (pos-x[i-1])/(x[i]-x[i-1]); Página 2

4) Indicar razonadamente el ritmo de crecimiento del tiempo de ejecución del algoritmo anterior mediante la notación O(n), siendo n=max. 5) Se dispone de una clase que sirve para guardar un vector de números reales, y que responde a la siguiente especificación: public class Vector // cambia el tamaño del vector public void cambiatamano(int nuevotamano)... Vamos a numerar las instrucciones para luego hacer el análisis: public double interpola(double pos) (1) int i=0; (2) while (i<=(max-1) && pos>x[i]) (3) i++; (4) if (i==0) (5) return valor[0]; (6) if (i>max) (7) return valor[max-1]; (8) return valor[i-1]+(valor[i]-valor[i-1])* (pos-x[i-1])/(x[i]-x[i-1]); Las instrucciones (1)(3)(5)(7) y (8) son simples cálculos o asignaciones, luego son O(1). Aunque la (8) es compleja, es una sucesión de instrucciones simples que por la regla de las sumas es O(1) El lazo while (instrucción (2)) se ejecuta en el peor caso un número de veces igual a MAX. Esto multiplicado por lo de dentro (instrucción (3)) es O(MAX) según la regla de los productos Las instrucciones (4) y (6) tanto si se ejecuta el if, como si no, son O(1), dado que lo que se ejecuta en su interior es O(1) y la comparación también La suma de todo es por tanto O(1)+O(MAX)+O(1)+O(1)+O1(). Por la regla de las sumas, el método es O(MAX). // retorna el elemento i del vector public double elemento(int i) throws NoExiste... // cambia el elemento i del vector al valor indicado public void cambia(int i, double valor) throws NoExiste... Donde NoExiste es una excepción declarada en una clase aparte, y que se lanza si el elemento i no existe. Añadir a la clase un nuevo método con los mismos parámetros que cambia, y que haga lo siguiente: llamar a cambia si se lanza NoExiste tratar esta excepción cambiando el tamaño del vector al Página 3

valor de i, con cambiatamano, y luego volver a llamar a cambia. public void cambiasinfallo(int i, double valor) try cambia(i,valor); catch (NoExiste e1) cambiatamano(i); try cambia(i,valor); catch (NoExiste e2) // no hacemos nada, ya que esta vez no falla Página 4

Problema (5 puntos) Examen de Fundamentos de Computadores y Lenguajes Examen Parcial. Junio 2004 Se desea implementar en Java una clase que sirva para guardar los datos del movimiento de cinco bolas de billar en una mesa como la que se muestra en la figura. El origen de coordenadas está en la esquina inferior izquierda de la mesa en el dibujo. Y Largo Ancho 0,0 X Para ello se dispone de una clase ya realizada que se llama Bola y sirve para guardar los datos de una bola. Su interfaz es: public class Bola public static final int paredalolargo=0, // identifica una pared paralela al eje X paredaloancho=1; // identifica una pared paralela al eje Y public static final double radio=0.05; //radio de la bola (m) // Constructor con posiciones(m) y velocidades(m/s) iniciales public Bola(double posx, double posy, double velx, double vely)... // retorna la coordenada x de la posicion de la bola public double posx()... // retorna la coordenada y de la posicion de la bola public double posy()... // Calcula los efectos del choque con una pared // (el tipopared indica si es paralela al eje X o Y u horizontal) public void choquepared(int tipopared)... // Calcula los efectos de un choque con otra bola public void choquebola(bola otra)... Página 5

// Distancia entre dos bolas public double distancia(bola otra)... // Avanza la bola en un intervalo t (seg), en línea recta public void avanza (double t) throws TiempoIncorrecto... La clase TiempoIncorrecto es una excepción declarada aparte de la forma: public class TiempoIncorrecto extends Exception Lo que se pide es crear una nueva clase llamada MesaBillar, con la siguiente interfaz: public class MesaBillar public MesaBillar (double largo, double ancho)... public void avanza(double t)... public void dibuja()... // este método no se pide La clase debe tener los siguientes atributos privados: largo y ancho de la mesa (en metros) array con cinco bolas, de la clase Bola La función que hace cada método es Constructor: Se le pasa el largo de la mesa y el ancho, en metros, para que los guarde en los respectivos atributos. Luego crea las cinco bolas (con new) y les pasa en el constructor los siguientes datos: posx: número aleatorio entre 0 y largo posy: número aleatorio entre 0 y ancho velx: número aleatorio entre 0 y 0.5 vely: número aleatorio entre 0 y 0.5 Nota: Para obtener números aleatorios entre 0 y 1 se usa la función random() de la librería matemática. avanza(): Se le pasa un tiempo en segundos y hace lo siguiente: Avanza el estado de cada bola en el tiempo indicado llamando al método avanza() de cada bola. Si se lanza TiempoIncorrecto se pone un único mensaje en pantalla (no uno por cada bola) y se acaba el método. Detecta choques con las paredes. El choque con una pared "a lo ancho" se da si la coordenada x de la bola vale menos que 0 o más que el atributo largo. El choque con una pared "a lo largo" se da si la coordenada y de la bola vale menos que 0 o más que el atributo ancho. Si se detecta choque, llamar a choquepared() indicando el tipo de pared apropiado. Detecta choques con otras bolas. El choque entre dos bolas ocurre si la distancia entre ellas es menor que dos veces el radio de la bola. Si se detecta choque entre dos bolas, llamar al método choquebola() de una de ellas, poniendo la otra bola como argumento. Para detectar todos los posibles choques utilizar el siguiente Página 6

algoritmo: lazo para i desde 1 hasta 4 lazo para j desde i+1 hasta 5 si (distancia entre bolas i y j < 2*radio) entonces llamar a choquebola() fin si fin lazo fin lazo dibuja(): Dibuja la mesa y las bolas en una ventana. Este método se especifica para dar una visión completa de la clase, pero no se pide en el examen. Página 7

/** * Contiene los datos de una mesa de billar y sus bolas */ public class MesaBillar private double largo, ancho; private Bola[] bola=new Bola[5]; /** * Al constructor se le pasa el largo de la mesa (coordenada x) * y el ancho (coordenada y), en metros */ public MesaBillar (double largo, double ancho) this.largo=largo; this.ancho=ancho; for (int i=0;i<5;i++) bola[i]= new Bola(Math.random()*largo,Math.random()*ancho, Math.random()*0.5,Math.random()*0.5); /** * Avanza las bolas un tiempo t (seg), detectando choques */ public void avanza(double t) try // avanza el tiempo en cada bola for (int i=0;i<5;i++) bola[i].avanza(t); catch (TiempoIncorrecto e) System.out.println("Tiempo Incorrecto"); return; // detecta choques con las paredes for (int i=0;i<5;i++) if (bola[i].posx()<0 bola[i].posx()>largo) bola[i].choquepared(bola.paredaloancho); if (bola[i].posy()<0 bola[i].posy()>ancho) bola[i].choquepared(bola.paredalolargo); // detecta choques con otras bolas for (int i=0;i<4;i++) for (int j=i+1;j<5;j++) if (bola[i].distancia(bola[j])<2*bola.radio) bola[i].choquebola(bola[j]); /** * Dibuja la mesa y las bolas */ public void dibuja()... Página 8