enunciadoTrabajoLP_jun15

7
LENGUAJES DE PROGRAMACIÓN Trabajo Práctico - Junio de 2015 INSTRUCCIONES – El trabajo práctico debe realizarse de manera individual. No debe realizarse en grupo. Se penalizará cualquier uso compartido de las soluciones pro- puestas y de los códigos programados. – El trabajo debe entregarse a través del curso virtual de la asignatura en la plataforma Alf. – La fecha límite de entrega es el día 16 de abril. – El alumno debe entregar un fichero comprimido, en formato zip o tar, que contenga: Una memoria en la cual explique la solución a los ejercicios, inclu- yendo los listados documentados del código C++ desarrollado. Este documento deberá estar en formato pdf. Los ficheros del código fuente C++ solución a los ejercicios. No deben entregarse ficheros ejecutables. El nombre del fichero comprimido debe ser la concatenación del nombre y apellidos del alumno. Por ejemplo, LuisaGomezMartin.zip

description

k

Transcript of enunciadoTrabajoLP_jun15

  • LENGUAJES DE PROGRAMACIN

    Trabajo Prctico - Junio de 2015

    INSTRUCCIONES

    El trabajo prctico debe realizarse de manera individual. No debe realizarseen grupo. Se penalizar cualquier uso compartido de las soluciones pro-puestas y de los cdigos programados.

    El trabajo debe entregarse a travs del curso virtual de la asignatura en laplataforma Alf.

    La fecha lmite de entrega es el da 16 de abril.

    El alumno debe entregar un fichero comprimido, en formato zip o tar, quecontenga:

    Una memoria en la cual explique la solucin a los ejercicios, inclu-yendo los listados documentados del cdigo C++ desarrollado. Estedocumento deber estar en formato pdf.

    Los ficheros del cdigo fuente C++ solucin a los ejercicios.

    No deben entregarse ficheros ejecutables.

    El nombre del fichero comprimido debe ser la concatenacin del nombre yapellidos del alumno. Por ejemplo, LuisaGomezMartin.zip

  • LENGUAJES DE PROGRAMACIN

    CRITERIOS DE EVALUACIN

    Para que el trabajo pueda ser corregido, es imprescindible que el alumnoentregue dentro del plazo establecido un fichero comprimido que contengala memoria en formato pdf y el cdigo fuente C++ de los ejercicios que hayarealizado.

    El trabajo se compone de 4 ejercicios, cada uno de los cuales se valorarsobre 2.5 puntos.

    Para aprobar el trabajo es necesario que la suma de las puntuaciones obte-nidas en los ejercicios sea mayor o igual que 5.

    Si el cdigo solucin de un ejercicio tiene errores de compilacin o no tienela funcionalidad pedida, dicho ejercicio se valorar con cero puntos.

    Si el cdigo solucin de un ejercicio compila sin errores y tiene la funciona-lidad pedida, la puntuacin en dicho ejercicio ser al menos de 2 puntos.

    Se valorar positivamente la eficiencia y la adecuada documentacin delcdigo, as como la presentacin y calidad de las explicaciones proporcio-nadas en la memoria.

    2 Dpto. de Informtica y Automtica, UNED

  • TRABAJO PRCTICO - JUNIO DE 2015

    EJERCICIO 1

    Uno de los primeros generadores combinados de nmeros pseudoaleatorios fueel propuesto por Wichmann y Hill en 1982. El generador de Wichmann-Hill emplealos siguientes tres generadores lineales congruenciales para obtener tres nmerosenteros {xi, yi, zi}:

    xi = (171 xi1) mod 30269

    yi = (172 yi1) mod 30307

    zi = (170 zi1) mod 30323

    de los cuales se obtiene un nmero pseudoaleatorio ui en el intervalo (0, 1):

    ui =( xi30269

    +yi

    30307+

    zi30323

    )mod 1 donde i = 1, 2, . . .

    La semilla de este generador son tres nmeros enteros, {x0, y0, z0}, que debenestar comprendidos entre 1 y 30000.

    Escriba un programa en C++ que realice las acciones siguientes:

    1. Solicitar al usuario que introduzca por consola la semilla del generador.

    2. Comprobar que estos tres nmeros estn comprendidos entre 1 y 30000.Si no lo estn, el programa vuelve a solicitar por consola los nmeros alusuario.

    3. Empleando el algoritmo de Wichmann-Hill, obtener 100 nmeros pseudo-aleatorios e ir almacenndolos en un array de 100 componentes.

    4. Mostrar en la consola el contenido del array. Los nmeros debern mostrar-se en formato fijo, con 5 dgitos detrs del punto decimal.

    5. Almacenar los nmeros, en el formato anteriormente indicado y formandouna nica columna (es decir, un nmero por fila), en un fichero de textollamado random.txt.

    6. Terminar.

    Dpto. de Informtica y Automtica, UNED 3

  • LENGUAJES DE PROGRAMACIN

    EJERCICIO 2

    Escriba un programa en C++ que, a partir de una secuencia de 2 N nmerospseudoaleatorios, obtenga N = 45 posiciones aleatorias uniformemente distri-buidas sobre una superficie plana rectangular de longitud L = 30 mm y alturaA = 2mm. Para ello, el programa debe realizar las acciones siguientes:

    1. El nmero de posiciones N , as como la longitud (L) y altura (A) de lasuperficie, son constantes del programa: N = 45, L = 30, A = 2.

    2. Abrir para lectura un fichero de texto llamado random.txt, en el cual hayescrita una columna de nmeros pseudoaleatorios. Estos nmeros puedenser los obtenidos de ejecutar el programa del ejercicio anterior o cualquierotra secuencia de nmeros pseudoaleatorios.

    3. Almacenar el contenido completo del fichero en un vector de double llama-do randomNums.

    4. Si el vector contiene menos de 2 N componentes, mostrar un mensaje deerror y terminar.

    5. Operar de la forma siguiente los primeros 2N nmeros del vector. Por cadapareja de nmeros, {u2i, u2i+1}, calcular una posicin aleatoria {xi, yi} de laforma siguiente:

    xi = L u2i

    yi = A u2i+1

    donde i = 0, . . . , N 1.

    6. Almacenar las posiciones en un fichero de texto llamado posiciones.txt. De-bern almacenarse en dos columnas: en la primera las posiciones xi y en lasegunda las correspondientes posiciones yi. Debern expresarse en formatofijo, con 3 dgitos detrs del punto decimal.

    7. Terminar.

    4 Dpto. de Informtica y Automtica, UNED

  • TRABAJO PRCTICO - JUNIO DE 2015

    EJERCICIO 3

    Considrense N = 45 crculos de radio r = 0.5 mm distribuidos aleatoriamentesobre una superficie rectangular deL = 30mmde longitud yA = 2mmde altura.

    Los crculos que se encuentran sobre la superficie se agrupan en conjuntos de lamanera siguiente:

    Cada crculo debe pertenecer a un nico conjunto.

    Dos crculos entre los cuales existe solapamiento deben estar en el mismoconjunto. Se considera que existe solapamiento entre dos crculos si la dis-tancia entre sus centros es menor o igual que 2 r.

    Escriba un programa en C++ que cumpla las especificaciones siguientes:

    El nmero de crculos (N) y su dimetro (2 r) deben ser constantes delprograma.

    El programa debe leer las posiciones de los centros de los N crculos deun fichero de texto llamado posiciones.txt, que contiene dos columnas denmeros reales expresados en formato fijo, con 3 dgitos detrs del puntodecimal. Los nmeros de la primera columna son la coordenada x del centrodel crculo y los de la segunda columna la correspondiente coordenada y.Este fichero podra ser, por ejemplo, el obtenido al ejecutar el programaescrito en el ejercicio anterior.

    Si el fichero posiciones.txt contiene menos de 2 N nmeros, el programadebe mostrar un mensaje de error y terminar.

    El programa debe agrupar los crculos en conjuntos.

    Cada conjunto est compuesto por uno o ms crculos. El programa debeescribir en un fichero de texto llamado nElemConj.txt el nmero de crcu-los de que consta cada conjunto. Los nmeros se escribirn formando unacolumna. El orden de escritura de los nmeros es irrelevante.

    Puede usar en el programa las estructuras de datos que estime convenientes.

    La figura mostrada a continuacin es un ejemplo que pretende ilustrar la clasifi-cacin de los crculos en conjuntos. Por simplicidad en este ejemplo se consideran

    Dpto. de Informtica y Automtica, UNED 5

  • LENGUAJES DE PROGRAMACIN

    C1

    C2

    C3

    C4

    C6

    C7

    C8

    C9

    C10

    C11 C

    12

    C15

    C14

    C13

    C5

    Figura 1.1: Los crculos mostrados en esta figura se clasifican en 5 conjuntos: {C7},{C2, C11, C9, C15}, {C6, C1, C13, C4, C10}, {C3, C12}, {C8, C14, C5}

    slo N = 15 crculos. Los crculos se han etiquetado C1, . . . , C15 con el propsitode facilitar referirse a ellos al indicar los crculos pertenecientes a cada conjunto.

    Dados los conjuntos del ejemplomostrado en la Figura 1.1, la salida del programadebera ser los nmeros siguientes escritos en cualquier orden en una columna:1, 4, 5, 2, 3.

    6 Dpto. de Informtica y Automtica, UNED

  • TRABAJO PRCTICO - JUNIO DE 2015

    EJERCICIO 4

    Escriba un programa en C++ que calcule la frecuencia con la que aparece cadanmero de un determinado conjunto de nmeros naturales.

    Por ejemplo, dado el conjunto {2, 1, 1, 2, 4, 1, 1, 1}, el programa debe obtener quela frecuencia del nmero 1 es 5/8 (cinco de los ocho nmeros tienen valor 1),la frecuencia del nmero 2 es 2/8 (dos de los ocho nmeros tienen valor 2) y lafrecuencia del nmero 4 es 1/8 (uno de los ocho nmeros tiene valor 4).

    El conjunto de nmeros naturales se encuentra almacenado en un fichero de textollamado nElemConj.txt. Los nmeros estn escritos formando una nica columna.El programa debe leer el contenido del fichero, calcular la frecuencia de cadanmero natural, mostrar el resultado en la consola y terminar.

    El resultado debe mostrarse en dos columnas: en la primera los nmeros, ordena-dos crecientemente, y en la segunda su frecuencia, expresada como fraccin. Enel ejemplo anterior, la salida del programa debera ser:

    1 5/82 2/84 1/8

    Dpto. de Informtica y Automtica, UNED 7