LENGUAJES DE PROGRAMACIÓN. Solución al examen de Junio 2015, Primera Semana

Documentos relacionados
LENGUAJES DE PROGRAMACIÓN. Solución al examen de Septiembre 2014

LENGUAJES DE PROGRAMACIÓN. Solución al examen de Junio 2014, Primera Semana

LENGUAJES DE PROGRAMACIÓN. Pregunta 1 (3 puntos)

LENGUAJES DE PROGRAMACIÓN. Solución al examen de Junio 2016, Primera Semana

Indique la veracidad o falsedad de cada una de las afirmaciones siguientes, explicando detalladamente en cada caso el motivo de su respuesta.

LENGUAJES DE PROGRAMACIÓN. Solución al examen de Junio 2016, Segunda Semana

LENGUAJES DE PROGRAMACIÓN. Solución al examen de Junio 2017, Primera Semana

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

LENGUAJES DE PROGRAMACIÓN. Solución al examen de Junio 2013, Primera Semana

LENGUAJES DE PROGRAMACIÓN. Solución al examen de Septiembre 2016

LENGUAJES DE PROGRAMACIÓN. Solución al examen de Junio 2012, Segunda Semana

LENGUAJES DE PROGRAMACIÓN. Pregunta 1 (3 puntos)

Indique la veracidad o falsedad de cada una de las afirmaciones siguientes, explicando detalladamente en cada caso el motivo de su respuesta.

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

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

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

LENGUAJES DE PROGRAMACIÓN. Solución al examen de Septiembre 2015

Indique la veracidad o falsedad de cada una de las afirmaciones siguientes, explicando detalladamente en cada caso el motivo de su respuesta.

LENGUAJES DE PROGRAMACIÓN. Solución al examen de Septiembre 2017

LENGUAJES DE PROGRAMACIÓN. Pregunta 1 (3 puntos)

Indique la veracidad o falsedad de cada una de las afirmaciones siguientes, explicando detalladamente en cada caso el motivo de su respuesta.

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

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

Indique la veracidad o falsedad de cada una de las afirmaciones siguientes, explicando detalladamente en cada caso el motivo de su respuesta.

Indique la veracidad o falsedad de cada una de las afirmaciones siguientes, explicando detalladamente en cada caso el motivo de su respuesta.

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

LENGUAJES DE PROGRAMACIÓN. Solución al Ejercicio de Autocomprobación 1

LENGUAJES DE PROGRAMACIÓN. Solución al Ejercicio de Autocomprobación 2

LENGUAJES DE PROGRAMACIÓN. Trabajo Práctico - Junio de 2015

LENGUAJES DE PROGRAMACIÓN. Trabajo Práctico - Junio de 2016

LENGUAJES DE PROGRAMACIÓN. Trabajo Práctico - Septiembre de 2017

Examen escrito de Programación 1

LENGUAJES DE PROGRAMACIÓN. Trabajo Práctico - Septiembre de 2012

Soluciones del Examen de Fundamentos de Computadores y Lenguajes

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

MANEJO DE EXCEPCIONES en C++ Dr. Oldemar Rodríguez R. Escuela de Informática Universidad Nacional

Solucion al Examen de Fundamentos de Computadores y Lenguajes

HOJA DE EJERCICIOS 5 PROGRAMACIÓN CON EXCEPCIONES EN JAVA

LENGUAJES DE PROGRAMACIÓN Ejercicio de autocomprobación 2. Pregunta 1 (1 punto) Pregunta 2 (1 punto)

Soluciones al Examen de Fundamentos de Computadores y Lenguajes

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

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

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

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

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

Solución al Examen de Fundamentos de Computadores y Lenguajes

CONDICIONALES SWITCH CASE DEFAULT BREAK EN C. ELEGIR ENTRE VARIAS OPCIONES. EJEMPLO. (CU00532F)

Hoja de ejercicios del Tema 3

Hoja de ejercicios del Tema 3

Examen de prácticas de Programación 1

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

Introducción a C++ Índice

ALMACENAMIENTO PERSISTENTE DE DATOS

PRUEBA DE FUNDAMENTOS DE INFORMÁTICA. 1.- Qué se mostrará por pantalla tras ejecutar el código correspondiente a la función main?

Variables y tipos básicos 1. Definir una variable de tipo char. Convertirla a una variable de tipo entera e imprimir su valor asociado.

Soluciones al Examen de Fundamentos de Computadores y Lenguajes

PROGRAMACIÓN ORIENTADA A OBJETOS

Soluciones al Examen de Fundamentos de Computadores y Lenguajes

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

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

Fundamentos de la programación

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

Algorítmica y Lenguajes de Programación. Ficheros

PROGRAMACIÓN ORIENTADA A OBJETOS

Licenciatura de Matemáticas Informática I Notación algorítmica - Descripción BNF

Quick Tutorial de C++ y CLion

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

Especificación IEEE-754, para representar valores decimales en punto flotante de simple precisión.

Impresión por pantalla. 3. Indicar la salida por pantalla (2 puntos-20 minutos)

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

Ejercicio 1. Ejercicio 2

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

Examen escrito de Programación 1

Programación 1 Tema 5. Instrucciones simples y estructuradas

Laboratorio 5 Tema 7. Tipos de Datos Estructurados: Arreglos, Registros y Archivos

Estructura de datos y Programación

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

Examen de prácticas de Programación 1

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

LABORATORIO 10 FICHEROS EN EL LENGUAJE C

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

Tema 2: EL TIPO DE DATOS ENTERO. INSTRUCCIÓN DE ASIGNACIÓN Y DE COMPOSICIÓN SECUENCIAL

Unidad II. Fundamentos de programación en Java. Ing. José Luis Llamas Cárdenas

Funciones: Pasos por Referencia Recursividad

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

AMBITO DE VARIABLES EN C. GLOBALES Y LOCALES. UNDECLARED (FIRST USE IN THIS FUNCTION). EJEMPLOS (CU00548F)

IMPORTAR Y USAR CLASES DEL API DE JAVA. EJEMPLO CLASE MATH Y MÉTODO POW. CONSTRUCTORES PRIVADOS. (CU00647B)

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

Tipos de datos y operadores en C++

Suponer que los NIFs tienen 8 dígitos y, a continuación, una letra (no importa que sea mayúscula o minúscula).

Arreglos Unidimensionales En este tipo de arreglo se hace uso de un índice solamente para hacer referencia a una posición particular del arreglo.

Programación Concurrente y Distribuida Ingeniería Informática Facultad de Ciencias Universidad de Cantabria.

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

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

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

Introducción al Diseño Lógico 2017 Guía de Trabajos Prácticos Nº 00: Repaso

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

Examen escrito de Programación 1

= RETURN =3 7-. ELSE K

Transcripción:

Solución al examen de Junio 2015, Primera Semana PREGUNTA 1 (3 puntos) Indique la veracidad o falsedad de cada una de las afirmaciones siguientes, explicando detalladamente en cada caso el motivo de su respuesta. A. (0.5 puntos) En FORTRAN I una variable cuyo nombre sea NUM es de tipo entero. B. (0.5 puntos) En C++ y Java, el valor que se asigna a las constantes no puede ser el resultado de evaluar una expresión. C. (0.5 puntos) La expresión en notación prefija X + YZ es equivalente a la expresión X +Y Z en notación infija. D. (0.5 puntos) En C++ no se permite emplear expresiones numéricas como expresiones lógicas. E. (0.5 puntos) La excepción de C++ std:bad_alloc se puede producir al emplear el operadornew. F. (0.5 puntos) El algoritmo de la STL remove_copy(pbegin, pend, presultbegin, val) copia la secuencia origen en la secuencia destino, eliminando de la copia los elementos cuyo valor sea menor queval.

Solución a la Pregunta 1 A Verdadera Véase la página 43 del texto base. B Falsa Véase la página 113 del texto base. C Falsa Véase la página 171 del texto base. D Falsa Véase la página 180 del texto base. E Verdadera Véase la página 305 del texto base. F Falsa Véase la página 528 del texto base. 2 Dpto. de Informática y Automática, UNED

SOLUCIÓN AL EXAMEN DE JUNIO 2015, PRIMERA SEMANA PREGUNTA 2 (1 punto) Escriba la salida por consola producida al ejecutar el programa en C++ escrito a continuación. #include <iostream> #include <iomanip> double x, y; int main () { x = 1.06669; y = 4.62468; double *p; double a[2] = {1.233, 5.551; { double x = y; std::cout << std::scientific << std::setprecision(3) << x << std::endl; std::cout << ::x << std::endl; p = &a[0]; p[0] = p[0] + 1.0; std::cout << a[0] << std::endl; p = p + 1; std::cout << p[0] << std::endl; std::cout << *(a+1) << std::endl; return 0; Solución a la Pregunta 2 La salida por consola producida al ejecutar el programa es: 4.625e+000 1.067e+000 2.233e+000 5.551e+000 5.551e+000 Dpto. de Informática y Automática, UNED 3

PREGUNTA 3 (1 punto) Escriba la salida por consola producida al ejecutar el programa en C++ escrito a continuación. #include <iostream> #include <stack> #include <list> int main(){ std::stack <int> p; std::list <int> l; for (int i= 0; i<3; i++) { p.push(i); l.push_front(i); std::list<int>::iterator it = l.begin(); std::cout << p.size() << std::endl; std::cout << l.size() << std::endl; for (int i= 0; i<3; i++){ std::cout << p.top() << std::endl; std::cout << *it it++; l.pop_front(); << std::endl; std::cout << p.size() << std::endl; std::cout << l.size() << std::endl; Solución a la Pregunta 3 La salida por consola producida al ejecutar el programa es: 3 3 2 2 2 1 2 0 3 0 4 Dpto. de Informática y Automática, UNED

SOLUCIÓN AL EXAMEN DE JUNIO 2015, PRIMERA SEMANA PREGUNTA 4 (2.5 puntos) Un haz de luz de intensidad I, que es reflejado entre dos superficies reflectantes iguales, tiene después denreflexiones una intensidadi : I = I R n (1.1) R = R 0 +(1 R 0 )(1 cosθ) 5 (1.2) donde R 0 es la relación de reflexión y θ es el ángulo de incidencia del rayo, tal y como se muestra en la figura siguiente. Escriba un programa en C++ que realice las acciones siguientes: 1. La intensidad del haz de entrada y la relación de reflexión deben ser constantes del programa con valor: I = 100,R 0 = 0.7. 2. Solicitar al usuario que éste introduzca por consola los valores de D y L. Comprobar que ambos son números mayores que cero y, en caso de que no lo sean, mostrar un mensaje de error y terminar. 3. Mostrar en la consola el número total de reflexiones y la intensidad de salida (I ) para cada uno de los tres ángulos de incidencia siguientes θ = 60, θ = 70 yθ = 80. Obsérvese que el número de reflexiones va a depender de D, L y θ (véase nuevamente la figura). Una vez calculado dicho número, la intensidad de salida se calcula de las Ecs. (1.1) y (1.2). 4. Terminar. Dpto. de Informática y Automática, UNED 5

Solución a la Pregunta 4 #include <iostream> #include <cmath> const doublepi =3.14159265359; const doubler0 =0.7; const doublei =100; // Relación de reflexión // Intensidad incidente intmain () { // Entrada de datos doubled,l; std::cout <<"Valor de D: "; std::cin >>D; std::cout <<"Valor de L: "; std::cin >>L; if (D <=0 L <=0 ) { std::cout <<"Error: valor no valido"<<std::endl; return0; // Cálculo y salida de resultados for ( inttheta =60;theta <=80;theta +=10) { // Ángulo expresado en radianes doubletheta_rad =theta*pi/180; // Avance del rayo entre dos reflexiones doubleu =D*tan(theta_rad); // Número de reflexiones intn = (int) (L/u); // Cálculo de R doubler =R0 + (1-R0)*pow(1-cos(theta_rad),5); // Salida std::cout <<"theta = "<<theta <<" grados\t"<< "n = "<< n <<"\t"<<"i = "<< I*pow(R,n) << std::endl; return0; 6 Dpto. de Informática y Automática, UNED

SOLUCIÓN AL EXAMEN DE JUNIO 2015, PRIMERA SEMANA PREGUNTA 5 (2.5 puntos) Se desea estudiar cómo evoluciona en el tiempo el número N t de bacterias presentes en un cultivo cuyo medio tiene una concentración de nutrientes C t. El subíndice t representa el número de unidades de tiempo transcurridas desde que se inició la observación. Se va a emplear para ello el modelo siguiente: La velocidad de crecimiento per cápita de la colonia de bacterias en una unidad de tiempo, (N t+1 N t )/N t, es proporcional a la concentración C t de nutrientes en el medio en el instante t. Es decir: N t+1 N t N t = m C t (1.3) Para producir un incremento de una unidad en la población, se consumen γ unidades de nutriente. Es decir: C t+1 C t N t+1 N t = γ (1.4) Combinando las Ecs. (1.3) y (1.4), se obtiene el siguiente sistema de ecuaciones en diferencias: N t+1 = (1+m C t ) N t (1.5) C t+1 = (1 γ m N t ) C t (1.6) donde t = 0,1,2,3,... Se propone realizar un programa en C++ que evalúe las Ecs. (1.5) y (1.6), para t = 0,1,...,T fin, siendo conocidos: T fin, los parámetros m y γ, y las condiciones inicialesn 0 yc 0. Escriba el código C++ indicado a continuación. 5.a (0.5 puntos) Escriba una función que evalúe las Ecs. (1.5) y (1.6), y cuyo prototipo sea: void logis( double m, double gamma, double &N, double &C ); Dpto. de Informática y Automática, UNED 7

Los parámetros m y gamma son pasados por valor, mientras que N y C son pasados por referencia: los valores N t y C t son reemplazados en el cuerpo de la función porn t+1 yc t+1, respectivamente. 5.b (1 punto) Escriba una función cuyo prototipo sea: void escribefich( std::string nombrefich, std::vector<double> &vn ) throw (std::invalid_argument); y que realice las acciones siguientes: 1. Abrir para escritura el fichero de texto cuyo nombre está almacenado en la variablenombrefich. Si no es posible abrir el fichero, la función debe lanzar una excepción. 2. Escribir en el fichero una columna de números: el contenido del vector vn. Los números deben escribirse en formato fijo, con 4 dígitos decimales. 3. Cerrar el fichero. 4. Devolver el control. 5.c (1 punto) Escriba el programa principal, que debe realizar las acciones siguientes: 1. Declarar las constantes siguientes: Tfin=100, de tipo int. m=0.1, gamma=0.02, N0=1.0 y C0=1.0, de tipo double. 2. Declarar un vector de tipo double llamado vn y almacenar en él los valores N 0, N 1,..., N Tfin obtenidos de evaluar las Ecs. (1.5) y (1.6). Los valores de N t+1 y C t+1 deben obtenerse invocando la función definida en el Apartado 5.a. 3. Escribir en la consola los valores t, N t yc t, para t = 0,1,...,T fin. 4. Escribir el contenido del vector en un fichero de texto llamado poblacion.txt, invocando para ello la función definida en el Apartado 5.b. Si la función lanza una excepción, debe capturarse la excepción mostrándose un mensaje de aviso en la consola en el que se indique que no ha sido posible abrir el fichero. 5. Terminar. 8 Dpto. de Informática y Automática, UNED

SOLUCIÓN AL EXAMEN DE JUNIO 2015, PRIMERA SEMANA Solución a la Pregunta 5 #include <iostream> #include <iomanip> #include <fstream> #include <string> #include <stdexcept> #include <vector> conststd::string nombrefich ="poblacion.txt"; const int Tfin =100; const doublem =0.1; const doublegamma =0.02; const doublen0 =1.0; const doublec0 =1.0; voidlogis(doublem, doublegamma, double &N, double &C) { doublent1 = (1 +m *C ) *N; C = (1 -gamma *m *N ) *C; N =Nt1; return; voidescribefich(std::string nombrefich, std::vector<double> &vn ) throw (std::invalid_argument) { // Apertura del fichero para escritura std::ofstream outfich(nombrefich.c_str(), std::ios::out std::ios::trunc); if (!outfich) throwstd::invalid_argument("error abriendo fichero"); // Escritura de datos for (inti=0;i<vn.size();i++) outfich << std::fixed << std::setprecision(4) << vn[i] << std::endl; // Cierra fichero outfich.close(); return; Dpto. de Informática y Automática, UNED 9

intmain() { std::vector<double> vn; // Evaluar ecuaciones vn.push_back(n0); doublec =C0; std::cout << 0 <<"\t"<< vn[0] <<"\t"<< C << std::endl; for (inti=0;i<tfin;i++) { vn.push_back(vn[i]); logis(m, gamma, vn[i+1], C); std::cout << i+1 <<"\t"<< vn[i+1] <<"\t"<< C << std::endl; // Escritura en fichero try { escribefich(nombrefich, vn); catch (std::invalid_argument exc) { std::cout << exc.what() << std::endl; return0; 10 Dpto. de Informática y Automática, UNED