Examen de prácticas de Programación 1

Documentos relacionados
Examen escrito de Programación 1

Programación 1 Tema 4. Diseño de programas elementales

Examen escrito de Programación 1

Programación 1. Tema II. Diseño de los primeros programas. Lección 4. Diseño de algunos programas elementales

Programación 1 Tema 5. Instrucciones simples y estructuradas

// el módulo tiempo // el módulo subtitulo // el módulo herramientas

Programación 1 Tema 15. Trabajo con ficheros binarios

Programación 1. Tema V Clase de problemas. Desarrollo de un módulo de biblioteca C++ para trabajar con conjuntos de letras

Programación 1 Tema 7. Desarrollo modular y descendente de programas

Examen escrito de Programación 1

Programación 1 Tema 13. Entrada y salida de datos

Programación 1. Tema I. Conceptos y elementos básicos de Programación. Lección 1. Problemas de tratamiento de información, algoritmos y programas

Programación 1. Tema II. Diseño de programas elementales. Lección 7. Diseño modular y descendente de programas

Programación 1. Tema I. Conceptos y elementos básicos de Programación. Lección 2. Lenguaje de programación y ejecución de un programa

Examen de prácticas de Programación 1

Programación 1 Problemas del Composición condicional

Programación 1 Tema II Clase de problemas. Diseño de programas elementales

Programación 1 Desarrollo de proyectos de programación. Desarrollo de un módulo C++ de biblioteca para trabajar con conjuntos de letras

PROGRAMACIÓN ORIENTADA A OBJETOS

Examen escrito de Programación 1. Jueves 5 de febrero de Problema 1 o (3.5 puntos)

Programación 1 Desarrollo de proyectos de programación. Desarrollo de un módulo C++ de biblioteca para trabajar con conjuntos de letras

Programación 1 Problemas 3. Composición condicional

Programación 1 Tema 3. Información, datos, operaciones y expresiones

Programación 1. Tema II. Diseño de programas elementales. Lección 7. Diseño modular y descendente de programas

Recursos predefinidos en C++ que son utilizados en la asignatura Cláusula include Recursos predefinidos visibles Observaciones

Examen de prácticas de Programación 1

ALMACENAMIENTO PERSISTENTE DE DATOS

Programación 1 Tema 16. Trabajo con ficheros: otras posibilidades

Cátedra I Informática Autor I Carlos Bartó

Fundamentos de la programación

Cátedra I Informática Autor I Carlos Bartó

Programación 1 Tema III Clase de problemas. Diseño de algoritmos que extraen información de ficheros de texto (1)

Programación 1 Tema 16. Trabajo con ficheros: otras posibilidades

Programación 1 Tema II Clase de problemas. Diseño de funciones elementales

Examen de prácticas de Programación 1

Fundamentos de la programación

Examen Práctico de Programación 1-27/enero/2017. Especificación del trabajo a desarrollar en el turno 1 o (15:00 horas) Presentación del trabajo

Programación 1 Tema 12. Algoritmos básicos de trabajo con estructuras de datos indexadas

Se debe disponer sobre la mesa un documento de identificación con fotografía.

Programación 1 Tema 3. Información, datos, operaciones y expresiones

Programación 1. Tema III. Diseño de programas que trabajan con estructuras de datos. Lección 11. Estructuración agregada de datos

Programación 1. Tema III. Diseño de programas que trabajan con datos almacenados en ficheros. Lección 14. Trabajo con ficheros de texto

Examen escrito de Programación I

Hoja de ejercicios del Tema 3

Hoja de ejercicios del Tema 3

Programación 1 Tema 12. Algoritmos básicos de trabajo con estructuras de datos indexadas

Entrada y salida de datos en C y C++

Funciones: Pasos por Referencia Recursividad

Introducción a C++. Asignatura Estructuras de Datos Curso 2017/2018 ETSISI UPM

Programación 1 Tema 1. Problemas de tratamiento de información, algoritmos y programas

Programación 1 Tema 1. Problemas de tratamiento de información, algoritmos y programas

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.

Programación 2. Lección 4. Metodología de diseño de algoritmos recursivos

Prof. Dr. Paul Bustamante

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

En el siguiente ejemplo se declara un registro y luego variables de ese tipo de registro:

ASIGNATURA: SISTEMAS INFORMÁTICOS INDUSTRIALES. CURSO 4º GRUPO Julio 2015

SESIÓN DE EJERCICIOS E1

Prof. Dr. Paul Bustamante

Ficheros. Archivo, o fichero: Características:

Fundamentos de la programación

Guía de estilo y buenas prácticas de programación en C/C++

LENGUAJES DE PROGRAMACIÓN. Solución al Trabajo Práctico - Septiembre de 2016

Unidad 2. La lógica de programación. Tema 4. Arreglos y estructuras de repetición

Prof. Dr.Paul Bustamante

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

3. Indicar la salida por pantalla (2 puntos-10 minutos)

Programación 1. Trabajo obligatorio. Curso

Unidad 2. La lógica de programación. Tema 4. Estructuras de decisión

Programación 1 Tema 2. Lenguaje de programación y ejecución de un programa

Tema 5 Archivos o Ficheros

Examen de Fundamentos de la Programación (Modelo 1)

Tema 5 Archivos o Ficheros

Programación 1 Tema 11. Estructuración agregada de datos

LENGUAJES DE PROGRAMACIÓN. Solución al Trabajo Práctico - Septiembre de 2017

#include <fstream.h> ifstream descriptor ( nombre.extensión ); ofstream descriptor ( nombre.extensión );

UTN FRBA Algoritmos y Estructura de Datos Examen Final 13/02/2015. Apellido y nombre: Legajo: Cursó con Prof:

Objetivos de la práctica: - Practicar uso de ficheros: abrir, cerrar y tratamiento de información contenida en el fichero.

Cálculo del histograma de una imagen

Introducción a c++ Introducción a la programación EIS Informática III

Unidad 2 Recursividad. 2.1 Definición 2.2 Procedimientos Recursivos 2.3 Ejemplos de Casos Recursivos

Examen escrito de Programación 1. Viernes 22 de enero de Problema 1 o (3.0 puntos) Problema 2 o (3.0 puntos)

Introducción a C++ Algoritmos y Estructuras de datos II Dra. Carmen Mezura Godoy. Febrero 2009

Macros LENGUAJE DE PROGRAMACIÓN ESTRUCTURADO

Resolución de problemas mediante algoritmos

Estructuras Enlazadas AyED UTN-BA

Programación de Ordenadores

Arboles Binarios de Búsqueda en C++

Ejercicios De Programación De C++ Algoritmos. Lenguaje De Programación C++:

Una clasificación de los tipos de datos existentes en los diferentes lenguajes de programación se presenta a continuación:

Programación 2. Guía de estilo y buenas prácticas de programación en C/C++

Introducción a C++ Índice

UNIVERSIDAD DE LOS ANDES NUCLEO UNIVERSITARIO RAFAEL RANGEL (NURR) DEPARTAMENTO DE FISICA Y MATEMATICA AREA COMPUTACION TRUJILLO EDO.

Unidad 2 Recursividad. 2.1 Definición 2.2 Procedimientos Recursivos 2.3 Ejemplos de Casos Recursivos

Fundamentos de programación

Vectores y Matrices. Dept. Ciencias de la Computación e I.A. Universidad de Granada

TEMA 5: Subprogramas. Programación modular EJERCICIOS DE TRAZAS

FUNDAMENTOS DE PROGRAMACIÓN. 1º ING. INFORMÁTICA (Plan 2000) 1ª Convocatoria. 21 de Enero de 2002

Programación Orientada o Objetos

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 2 de septiembre de 2015 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 C++ con la función main que se solicita y todos aquellos ficheros que sean necesarios para poder compilar el mismo. Especificación del trabajo que debe realizarse Se pide un programa solicite al operador el nombre de un fichero de texto que contenga fechas a razón de una por línea en formato aaaammdd, donde aaaa es el año, mm es el número del mes y dd el día del mes. El programa deberá escribir las mismas fechas en la pantalla, pero en formato dd.mm.aaaa, utilizando números romanos y ordenadas cronológicamente. El programa también informará de cuántas fechas ha escrito en la pantalla. Por ejemplo, supongamos que el contenido de un fichero denominado fechas.txt fuese el siguiente: 20140619 19781206 20140921 20080614 14921012 20150902 20040311 20080914 18080502 1

En ese caso, la ejecución del programa solicitado cuando se introdujese el nombre del fichero anterior presentaría una interacción con el operador como la que sigue: Escriba el nombre del fichero con las fechas: fechas.txt XII.X.MCDXCII II.V.MDCCCVIII VI.XII.MCMLXXVIII XI.III.MMIV XIV.VI.MMVIII XIV.IX.MMVIII XIX.VI.MMXIV XXI.IX.MMXIV II.IX.MMXV 9 fechas en total, comprendidas en el intervalo [ 12.10.1492-02.09.2015 ]. 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. 4. Reutilización al máximo del módulo romanos de la práctica 6, cuyos ficheros de interfaz y de implementación deben entregarse junto con el fichero que contenga el programa solicitado. Un programa que tenga errores de compilación o que, al ser ejecutado, no proporcione ningún resultado, será calificado con un cero. Se sugiere resolver el problema incrementalmente, añadiendo código que vaya cumpliendo con los requisitos gradualmente. 2

Solución #include <iostream> #include <fstream> #include <iomanip> #include "../../practica6/romanos/romanos.h" using namespace std; // Estimación del número máximo de fechas que habrá en el fichero const int MAX_FECHAS = 200; // Símbolo para separar elementos en una fecha const char SEPARADOR_FECHA =. ; * Pre: n >= 0 * Post: fechas[0..n-1] es una permutación de los datos iniciales de * fechas[0..n-1] y todos ellos están ordenados de forma que cada uno * de ellos indexado por un índice i en el intervalo [0, n - 2] es * anterior o igual cronológicamente al indexado por i + 1. void ordenar(int fechas[], int n) { // Ordenación de una tabla por el método de selección: // El orden cronológico de fechas coincide con el orden natural de enteros // con la codificación de fechas seleccionada for (int i = 0; i < n - 1; i++) { // Selección de la menor fecha de fechas[i..n-1] int imenor = i; for (int j = i + 1 ; j < n; j++) { // fechas[imenor] es la menor de fechas[i..j-1] if (fechas[j] < fechas[imenor]) { imenor = j; // fechas[imenor] la menor de fechas[i..j] // fechas[imenor] es la menor de fechas[i..n-1]: // permutación fechas[i] y fechas[imenor]. int aux = fechas[i]; fechas[i] = fechas[imenor]; fechas[imenor] = aux; // Las fechas de fechas[0..i-1] son las menores de la tabla 3

// y ya están ordenadas. * Pre: «fecha» representa una fecha válida en formato «aaaammdd», donde * «aaaa» es el año, «mm» es el número del mes y «dd» el día del mes. * Post: «dia» es el día del mes de la fecha representada por «fecha», * «mes» es el número del mes de la fecha representada por «fecha» y * «agno» es el año de la fecha representada por «fecha». void descomponerfecha(int fecha, int& dia, int& mes, int& agno) { dia = fecha % 100; mes = fecha / 100 % 100; agno = fecha / 10000; * Pre: «fecha» representa una fecha válida en formato «aaaammdd», donde * «aaaa» es el año, «mm» es el número del mes y «dd» el día del mes. * El año correspondiente a «fecha» está comprendido entre 1 y 3999, * ambos inclusive. * Post: Ha escrito en pantalla la fecha representada por el valor de «fecha» * en formato dd.mm.aaaa y utilizando números romanos. void escribirfecharomana(int fecha) { int dd, mm, aaaa; descomponerfecha(fecha, dd, mm, aaaa); En esta función de hace uso de otra función denominada * «convertiraromano», definida en el módulo «romanos» y que asigna a su * segundo argumento la secuencia de caracteres que definen un número * romano equivalente al valor del primer argumento. char dia[max_long_romano]; convertiraromano(dd, dia); char mes[max_long_romano]; convertiraromano(mm, mes); char agno[max_long_romano]; convertiraromano(aaaa, agno); cout << dia << SEPARADOR_FECHA << mes << SEPARADOR_FECHA << agno << endl; 4

* Pre: «fecha» representa una fecha válida en formato «aaaammdd», donde * «aaaa» es el año, «mm» es el número del mes y «dd» el día del mes. * Post: Ha escrito en pantalla la fecha representada por el valor de «fecha» * en formato dd.mm.aaaa, utilizando números arábigos y completando con * ceros a la izquierda cuando es necesario. void escribirfechadecimal(int fecha) { int dia, mes, agno; descomponerfecha(fecha, dia, mes, agno); cout << setfill( 0 ) << setw(2) << dia << SEPARADOR_FECHA << setw(2) << mes << SEPARADOR_FECHA << setw(4) << agno; * Pre: --- * Post: Ha solicitado al operador el nombre de un fichero de texto que * contuviera fechas a razón de una por línea en formato «aaaammdd», * donde «aaaa» es el año, «mm» es el número del mes y «dd» el día del * mes. A continuación, ha escrito las mismas fechas en la pantalla, * pero en formato \emph{dd.mm.aaaa, utilizando números romanos y * ordenadas cronológicamente. El programa también informará de cuántas * fechas ha escrito en la pantalla y del intervalo al que pertenecían. int main() { // Petición y lectura del nombre del fichero de texto de fechas. cout << "Escriba el nombre del fichero con las fechas: " << flush; char nombrefichero[256]; cin >> nombrefichero; cout << endl; // Apertura del fichero para su lectura y comprobación. ifstream f(nombrefichero); if (f.is_open()) { // Declaración de una tabla para almacenar las fechas leídas. int fechas[max_fechas]; // Intento de lectura de una primera fecha del fichero a la tabla. int cuenta = 0; 5

f >> fechas[cuenta]; while (!f.eof()) { // Intento de lectura de una siguiente fecha. cuenta++; f >> fechas[cuenta]; // Fin de la lectura de datos. Cierre del fichero. f.close(); // Ordenación cronológica de las fechas leídas. ordenar(fechas, cuenta); // Escritura en orden cronológico de las fechas leídas. for (int i = 0; i < cuenta; i++) { escribirfecharomana(fechas[i]); // Escritura del número total de fechas leídas y el intervalo al que // pertenecen. cout << endl; cout << cuenta << " fechas en total, comprendidas en el intervalo [ "; escribirfechadecimal(fechas[0]); cout << " - "; escribirfechadecimal(fechas[cuenta-1]); cout << " ]." << endl; // Finalización correcta del programa. return 0; else { // Finalización errónea del programa (no se pudo leer del fichero cuyo // nombre introdujo el operador). return -1; 6