Examen de prácticas de Programación 1

Documentos relacionados
Examen escrito de Programación 1

Examen escrito de Programación 1

Examen de prácticas de Programación 1

Examen de Programación 1. Viernes 31/enero/2014. Problema 1 o (2.5 puntos) Disponer un documento de identificación con fotografía sobre la mesa.

Examen escrito de Programación 1

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

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

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

Un breve resumen del lenguaje Java

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

HOJA DE EJERCICIOS 5 PROGRAMACIÓN CON EXCEPCIONES EN JAVA

Esta aplicación se compone de 3 programas o clases, según el siguiente esquema: SueldoMedio.java. Sueldo.java

Examen escrito de Programación 1

PROGRAMACION I Archivos directos

Objetivos. El alumno empleará el concepto de excepción en la programación orientada a objetos para el manejo de errores de ejecución.

Examen escrito de Programación 1

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

Práctica No. 2. Tipos de Datos y Entrada/Salida Estándar

Ejemplos de uso de ficheros de acceso secuencial

Práctica 10a. Práctica 10a. José M. Ordax

Ficheros y streams. Desde el punto de vista de Java, cada fichero no es más que una secuencia o flujo de bytes [stream].

Soluciones al Examen de Fundamentos de Computadores y Lenguajes

Práctica 5c. Práctica 5c. José M. Ordax

Estructuras de control selectivas

Práctica 11c. Práctica 11c. José M. Ordax

Solucion al Examen de Fundamentos de Computadores y Lenguajes

Práctica #5: Uso de control de flujo, Excepciones y Lectura Estándar

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

Bloque II. Elementos del lenguaje de programación Java

Práctica No. 5. Estructuras con Memoria Dinámica

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

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

Colas. 5.1 Implementación

Ejercicios de Programación Tema 7. Programación Orientada a Objetos

Curso Informática Lección 4. Instrucciones de control

PRACTICA 4. MANEJO DE ARCHIVOS II

Universidad Nacional del Santa FACULTAD DE INGENIERIA E.A.P de Ingeniería de Sistemas e Informática NETBEANS 7.0

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

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

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

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

CURSO : Programacion Java DOCENTE : ING. JUAN ZEVALLOS VALLE

Ejercicios de Lenguaje Java y Entorno de Desarrollo

Java Optional ifpresent y como utilizarlo

Guía - Taller # 2 (JAVA)

Práctica 11e. Práctica 11e. José M. Ordax

a. Cuántas veces se ejecuta la instrucción System.out.println? b. Cuál es el diagrama de flujo correspondiente a este fragmento?

18. Interfaces Declaración de una interfaz

Implementación del nivel de datos usando db4o

1. (1 punto) Dado el siguiente fragmento en Java:

LISTAS CIRCULARES. // Métodos private CElemento() {} // constructor. ultimo

Ingeniería del Software Separación entre Presentación y Lógica del Negocio

PROCESADORES DEL LENGUAJES Ev. Alternativa

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

Tema 7- Modelo y Aplicación de Pila, Cola y. Tema 7- Modelo y Aplicación de. Lista Con Punto de Interés

TECNICAS DE PROGRAMACION Universidad Católica Los Angeles de Chimbote MODIFICADORES DE ACCESO A LOS MIEMBROS DE UNA CLASE

IIC1103 Introducción a la Programación. Ayudantía: Archivos

CURSO : ESTRUCTURA DE DATOS DOCENTE : ING. JUAN ZEVALLOS VALLE

PRIMER EXAMEN PARCIAL. 5 de febrero de SOLUCIONES

Práctica 11d. Práctica 11d. José M. Ordax

Tema 15: Aserciones 0

Estructura de datos y Programación

Entiendo los métodos de Java equals y hashcode

Introducción a Java 10/02/2011. Tokens. Juan Manuel Fernández Peña Curso Rev Tokens. Tokens

FUNCIONES O MÉTODOS. Algoritmia y Programación

PROGRAMACIÓN EN JAVA

Lenguaje de Programación MSc. Daniel Alejandro Yucra Sotomayor

Unidad 3 Programación Orientada a Objetos. Programación JAVA. Cuestiones I:

Examen Teórico Convocatoria de Junio de 2012

Transcripción:

Examen de prácticas de Programación 1 Escuela de Ingeniería y Arquitectura Departamento de Informática e Ingeniería de Sistemas 3 de septiembre de 2014 Tiempo para realizar el trabajo de programación propuesto: 90 minutos. Entrega del trabajo a través de la plataforma Moodle, a la que deberá subirse el fichero correspondiente al código fuente Java de la clase que se pide desarrollar (fichero de extensión «.java», no «.class»). Especificación del trabajo que debe realizarse En esta prueba se va a trabajar con los mismos tipos de ficheros que se utilizaron en el trabajo de la asignatura: un fichero de clientes y un fichero de ventas. El fichero de clientes es de texto, se denomina «clientes.txt» y se ubica en una carpeta cuya ruta de acceso desde el programa es «datos/trabajo». Su estructura es idéntica a la de los ficheros de ciudadanos con los que se ha trabajado en el capítulo 6 de la colección de problemas y en el trabajo de la asignatura. Para leer la información del fichero de clientes se deberá aprovechar código ya desarrollado y trabajar exclusivamente con los recursos que facilitan las clases problemas.cap6.ciudadano y problemas.cap6.ficherosdeciudadanos desarrolladas en las prácticas de la asignatura. El fichero de ventas es un fichero binario denominado «ventas.dat» y también está ubicado en la carpeta «datos/trabajo». Su estructura es la misma que la descrita en el capítulo 7 de la colección de problemas y en el trabajo de la asignatura, y se muestra a continuación utilizando la notación BNF: <fichero_ventas> ::= { <venta> <venta> ::= <dni_cliente> <código_producto> <cantidad> <fecha> <dni_cliente> ::= int <código_producto> ::= int <cantidad> ::= double <fecha> ::= int 1

Se pide desarrollar una única clase ubicada en el paquete examen.septiembre cuyo nombre coincida con sus apellidos (ej.: class LopezGutierrez). Esta clase debe incluir un método main que, al ser ejecutado, presente en la pantalla un listado con los códigos de los productos que aparecen en el fichero de ventas y el nombre de un cliente que los haya comprado. Dicho nombre se obtendrá del fichero de clientes, ya que el DNI de cliente que aparecen en cada venta del fichero de ventas coinciden con el DNI de exactamente un cliente del fichero de clientes. En el listado, se mostrará cada producto vendido como máximo una vez. Si el producto se vendió a más de un cliente, es indiferente el nombre que se muestre, siempre y cuando sea el de un cliente que haya comprado dicho producto. Es indiferente el orden en el que se muestren los productos. Se sabe que los códigos de los productos están comprendidos entre 0 y 200. El programa también informará acerca del código del producto más comprado por hombres y el más comprado por mujeres. Se muestra a continuación un ejemplo de ejecución de dicho programa. Producto 101 comprado al menos por ESTHER MULA ZAMORA Producto 102 comprado al menos por DIEGO TOMAS TEJEDOR Producto 103 comprado al menos por LAURA BERMUDEZ ESCORIAL... Producto 123 comprado al menos por TIBURCIO ZURDO ACIN Producto 124 comprado al menos por ARANZAZU PANADERO ESCOLANO Producto 125 comprado al menos por MARIA ISABEL BADENES SIPAN El producto más comprado por hombres es el Producto 124 El producto más comprado por mujeres es el Producto 103 Para la realización de pruebas se facilitan un fichero de clientes y otro de ventas a los que se puede acceder a través de la web de la asignatura, en la página «Materiales docentes comunes», accediendo al enlace situado en el apartado «Código Java descargable» y, posteriormente, a la carpeta «datos/trabajo». En esta prueba se valorarán los siguientes aspectos y con este orden de importancia: 1. Comportamiento del programa según las especificaciones de este enunciado. 2. Legibilidad del código. 3. Diseño algorítmico del código. Un programa que tenga errores de compilación o que, al ser ejecutado, no proporcione ningún resultado, será calificado con un cero. 2

Solución package examen.septiembre; import java.io.datainputstream; import java.io.eofexception; import java.io.file; import java.io.fileinputstream; import java.io.ioexception; import problemas.cap6.ciudadano; import problemas.cap6.ficherosdeciudadanos; * Esta clase tiene un método main que, al ser ejecutado, presenta en la * pantalla un listado con los códigos de los productos que aparecen en el * fichero de ventas «FICHERO_VENTAS» y el nombre de un cliente que los haya * comprado, según el contenido del fichero «FICHERO_CLIENTES». También * informa acerca del código del producto más comprado por hombres y el más * comprado por mujeres. * * Ejemplo de ejecución de dicho programa: * * Producto 101 comprado al menos por ESTHER MULA ZAMORA * Producto 102 comprado al menos por DIEGO TOMAS TEJEDOR * Producto 103 comprado al menos por LAURA BERMUDEZ ESCORIAL *... * Producto 123 comprado al menos por TIBURCIO ZURDO ACIN * Producto 124 comprado al menos por ARANZAZU PANADERO ESCOLANO * Producto 125 comprado al menos por MARIA ISABEL BADENES SIPAN * * El producto más comprado por hombres es el Producto 124 * El producto más comprado por mujeres es el Producto 103 public class Laboratorio { * Número máximo de productos distintos. private static final int MAX_PRODUCTOS_DISTINTOS = 201; 3

* Ruta y nombre del fichero de ventas. private static final File FICHERO_VENTAS = new File( "datos/trabajo/ventas.dat"); * Ruta y nombre del fichero de clientes. private static final File FICHERO_CLIENTES = new File( "datos/trabajo/clientes.txt"); * Pre: «FICHERO_VENTAS» y «FICHERO_CLIENTES» existen, pueden ser * abiertos para su lectura y tienen las estructuras planteadas en * el enunciado. * Post: Ha presentado en la pantalla un listado con los códigos de los * productos que aparecen en el fichero de ventas «FICHERO_VENTAS» * y el nombre de un cliente que los haya comprado, según el * contenido del fichero «FICHERO_CLIENTES». También ha informado * acerca del código del producto más comprado por hombres y el * más comprado por mujeres. El formato del listado se corresponde * con el del ejemplo de la cabecera de esta clase. public static void main(string[] args) { // Lectura del fichero de clientes a través de la clase // «FicherosDeCiudadanos» Ciudadano[] clientes = FicherosDeCiudadanos.leerFichero(FICHERO_CLIENTES); if (clientes!= null) { try { // Apertura del fichero de ventas DataInputStream f = new DataInputStream( new FileInputStream(FICHERO_VENTAS)); // Definición de estructuras de datos para almacenar la // información necesaria para resolver el problema: nombres // de los compradores indexados por código de productos y // número de veces que se compran por hombres y mujeres, // también indexados por código de producto. String[] compradores = new String[MAX_PRODUCTOS_DISTINTOS]; int[] veceshombre = new int[max_productos_distintos]; 4

int[] vecesmujer = new int[max_productos_distintos]; // Lectura y procesamiento del fichero de ventas try { while (true) { // Lectura de una venta int dnicliente = f.readint(); int codproducto = f.readint(); f.readdouble(); // cantidad f.readint(); // fecha // Actualización de las estructuras de datos procesarventa(dnicliente, codproducto, clientes, compradores, veceshombre, vecesmujer); catch (EOFException ex) { f.close(); // Escritura en la pantalla de los resultados escribircompradoresproductos(compradores); System.out.println(); escribirmasvendidoporsexo(veceshombre, vecesmujer); catch (IOException ex) { System.out.println("Error de E/S: " + ex.getmessage()); 5

* Pre: 0 <= «codproducto» < MAX_PRODUCTOS_DISTINTOS, * «compradores».length = «veceshombre».length = * = «vecesmujer».length = MAX_PRODUCTOS_DISTINTOS, * existe en «clientes» un ciudadano cuyo DNI es «dnicliente». * Post: Si no había ningún nombre de un comprador en la tabla * «compradores» asociado a «codproducto», se le asocia el nombre * del ciudadano con DNI «dnicliente» según el contenido de la * tabla «clientes». También según el contenido de la tabla * «clientes», si el ciudadano con DNI «dnicliente» es un hombre, * se ha incrementado en una unidad el valor de la componente * correspondiente a «codproducto» de la tabla «veceshombre». * Si es mujer, se ha hecho lo propio con la tabla «vecesmujer». private static void procesarventa(int dnicliente, int codproducto, Ciudadano[] clientes, String[] compradores, int[] veceshombre, int[] vecesmujer) { // Búsqueda del cliente Ciudadano cliente = buscar(dnicliente, clientes); // Actualización de «compradores», «veceshombre» y «vecesmujer» if (compradores[codproducto] == null) { compradores[codproducto] = cliente.nombre() + " " + cliente.apellidos(); if (cliente.eshombre()) { veceshombre[codproducto]++; else { vecesmujer[codproducto]++; 6

* Pre: Existe en «clientes» un ciudadano cuyo DNI es igual a * «dnicliente». * Post: Ha devuelto el objeto de la clase Ciudadano de la tabla * «clientes» cuyo DNI es igual a «dnicliente». private static Ciudadano buscar(int dnicliente, Ciudadano[] clientes) { // Esquema de búsqueda con garantía de éxito int i = 0; while (clientes[i].dni()!= dnicliente) { i++; // clientes[i].dni() == dnicliente return clientes[i]; * Pre: «compradores»!= null. * Post: Ha presentado en la pantalla un listado con los códigos de los * productos que según la tabla «compradores» han sido comprados, * junto con el nombre de un cliente que los ha comprado. El * formato del listado se corresponde con el del ejemplo de la * cabecera de esta clase. private static void escribircompradoresproductos(string[] compradores) { for (int i = 0; i < compradores.length; i++) { if (compradores[i]!= null) { System.out.printf("Producto %d comprado al menos por %s %n", i, compradores[i]); 7

* Pre: «veceshombre».length = «vecesmujer».length. * Post: Ha escrito en la pantalla el código del producto más comprado * por hombres y el código del producto más comprado por mujeres, * según la información de las tablas «veceshombre» y * «vecesmujer». El formato se corresponde con el del ejemplo de * la cabecera de esta clase. private static void escribirmasvendidoporsexo(int[] veceshombre, int[] vecesmujer) { // Índice y código del producto más comprado por hombres int imaxhombre = 0; // Índice y código del producto más comprado por mujeres int imaxmujer = 0; for (int i = 1; i < vecesmujer.length; i++) { if (veceshombre[i] > veceshombre[imaxhombre]) { imaxhombre = i; if (vecesmujer[i] > vecesmujer[imaxmujer]) { imaxmujer = i; System.out.println("El producto más comprado por hombres es el " + "Producto " + imaxhombre); System.out.println("El producto más comprado por mujeres es el " + "Producto " + imaxmujer); 8