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

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

LENGUAJES DE PROGRAMACIÓN. Solución al examen de Junio 2016, Segunda 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 2017, Primera Semana

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

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

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

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. Pregunta 1 (3 puntos)

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

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

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

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 2015

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

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 2013, 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 Trabajo Práctico - Septiembre de 2015

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

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

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

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

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

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

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

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 2012

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

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

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

Tema 4: Corrección y Robustez en C++ Programación Orientada a Objetos Curso 2008/2009 Begoña Moros Valle

Elementos de un programa en C

Introducción a la Programación

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

Tema 3. Estructuras de control

Introducción 1. Fundamentos C++ //programa para imprimir texto #include <iostream>

Introducción al lenguaje C

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

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

Tema 1 INTRODUCCIÓN A LOS LENGUAJES DE PROGRAMACIÓN

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

Todo programa en 'C' consta de una o más funciones, una de las cuales se llama main.

DESCRIPCIÓN DEL LENGUAJE DE PROGRAMACIÓN P-0

Tema 9. Algoritmos sobre listas. Programación Programación - Tema 9: Algoritmos sobre listas

Repaso Lenguaje C Área de Servicios Programación (Ing. Elect. y Prof. Tec.), Programación I (TUG y TUR) y Electrónica programable (TUE)

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

LISTAS ENLAZADAS FUNDAMENTOS TEORICOS

Examen de prácticas de Programación 1

Algoritmo, Estructuras y Programación I Ing. Marglorie Colina

Introducción general al Lenguaje C (2010/2011)

Estructuras de Datos Declaraciones Tipos de Datos

Funciones: Pasos por Referencia Recursividad

Estructura de un programa en Java. Tipos de datos básicos. class miprimerprograma{ // comentario, no es parte del programa

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

Fundamentos de Computadores y Lenguajes

Introducción rápida a la programación (estructurada ) con C++

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 + +.

Fundamentos de la programación

Informática Aplicada I

Prefacio 25 Organización de la Unidad Didáctica Cómo utilizar el libro Objetivos docentes... 27

Centro Asociado Palma de Mallorca. Antonio Rivero Cuesta

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

Instituto Tecnológico de Celaya

Pilas, Colas. Andrea Rueda. Estructuras de Datos. Pontificia Universidad Javeriana Departamento de Ingeniería de Sistemas

Estructuras de Datos y de la Información Ingeniería Técnica en Informática de Gestión. Curso 2007/2008 Ejercicios del Tema 2

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

Java para programadores

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

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

Sintaxis de los aspectos generales de un lenguaje de programación

Estructura de datos y Programación

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

Ejercicios del Tema 3. Fundamentos de la programación en ensamblador

Abstracción del Control de Flujo de Ejecución

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

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

Paradigmas de lenguajes de programación. Introducción a la programación imperativa. Lenguaje C. Programación imperativa

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

Tipos de datos y operadores en C++

Introducción al lenguaje C

UNIVERSIDAD NACIONAL DE SALTA Sede Regional Orán AÑO: 2013 Carreras: TIG - TUP

1. Presentación del lenguaje C Creado en 1972 por D. Ritchie Lenguaje de propósito general Portátil o transportable (generalmente) Inicialmente de niv

Carlos Montenegro. Programación Orientada a Objetos Proyecto Curricular de Ingeniería de Sistemas

Práctica : Creación y uso de métodos

Centro Asociado Palma de Mallorca. Antonio Rivero Cuesta

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

PRÁCTICA. Examen de Traductores, Intérpretes y Compiladores. Convocatoria ordinaria de Junio de er Curso de I.T. Informática de Sistemas.

UNIDAD ACADÉMICA PROFESIONAL TIANGUISTENCO

SESIÓN DE EJERCICIOS E1

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

Estructuras de Control

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

Tema 2: Análisis léxico

Introducción a Funciones

Informática Ingeniería en Electrónica y Automática Industrial

goto goto Código Spague-

Lenguaje C Elementos de un Programa. Ing. Hugo Fdo. Velasco Peña Universidad Nacional 2006

Transcripción:

Solución al examen de Septiembre 2016 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) Las instrucciones de la máquina de Von Neumann soportan sólo los dos siguientes tipos de operaciones: operaciones aritméticas y operaciones de movimiento de datos. B. (0.5 puntos) En Pascal los bloques de código se delimitan por las palabras reservadas begin y end. C. (0.5 puntos) En Java y Fortran 90 el programador puede especificar completamente el rango de índices del array. D. (0.5 puntos) La variable paco declarada en la sentencia std::list<int>::iterator paco; es una lista doblemente enlazada. E. (0.5 puntos) El algoritmo transform aplica una función especificada a cada uno de los elementos de la secuencia origen, almacenando el resultado en la misma secuencia origen. F. (0.5 puntos) La función f, definida a continuación, tiene recursividad de cola. int f (int n) { if (n > 1) { return n*f(n-1); else { return 1;

Solución a la Pregunta 1 A Falso Véanse las páginas 37 y 38 del texto base. B Verdadero Véase la página 114 del texto base. C Falso Véase la página 121 del texto base. D Falso Véase la página 458 del texto base. E Falso Véase la página 534 del texto base. F Falso Véase la página 355 del texto base. PREGUNTA 2 (1 punto) Escriba la salida por consola producida al ejecutar el programa en C++ escrito a continuación. #include <iostream> enum color {blanco, azul, rojo, amarillo=8; void f(int x) { if (x == 1) throw x; else std::cout << amarillo << std::endl; int main() { try { f(2); f(1); std::cout << blanco << "B" << rojo << std::endl; catch (int ex) { std::cout << azul << "A" << rojo << std::endl; std::cout << "C" << blanco << std::endl; return 0; Solución a la Pregunta 2 8 1A2 C0 2 Dpto. de Informática y Automática, UNED

SOLUCIÓN AL EXAMEN DE SEPTIEMBRE 2016 PREGUNTA 3 (1 punto) Escriba la salida por consola producida al ejecutar el programa en C++ escrito a continuación. #include <iostream> void suma10 (int a, int *p) { *p = a + 10; int main () { int i, j, *p, *q; int x = 2, y = 6; p = &i; q = &j; *p = 5; *q = *p + i; std::cout << i << " " << j << std::endl; std::cout << *p << " " << *q << std::endl; suma10 (x, &x); std::cout << x << " " << y << std::endl; suma10 (x, &y); std::cout << x << " " << y << std::endl; i = 23; j = 72; *p = *q; std::cout << i << " " << j << std::endl; return 0; Solución a la Pregunta 3 5 10 5 10 12 6 12 22 72 72 Dpto. de Informática y Automática, UNED 3

PREGUNTA 4 (5 puntos) La constante de Kaprekar es el número 6174. Este número es el resultado de la aplicación del Algoritmo de Kaprekar, que consiste en: Paso 1. Paso 2. Paso 3. Escoger 4 dígitos que no sean todos iguales. Obtener el número entero mayor y el número entero menor que se puedan construir con los cuatro dígitos. Restar estos dos números enteros (el mayor menos el menor). a) Si el resultado de la resta es distinto de 6174, ir al Paso2. Los cuatro nuevos dígitos a emplear son los del número entero resultado de la resta, añadiendo a la izquierda ceros si fuera necesario. b) Si el resultado de la resta es 6174, terminar. Este algoritmo converge a la constante de Kaprekar después de menos de 8 iteraciones. A continuación se muestra un ejemplo: (Paso 1) - Elección inicial: 7467 (Paso 2) - Valor superior 7764, Valor inferior 4677 (Paso 3) - Resta 3087 (Paso 2) - Valor superior 8730, Valor inferior 0378 (Paso 3) - Resta 8352 (Paso 2) - Valor superior 8532, Valor inferior 2358 (Paso 3) - Resta 6174 FIN Escriba el código C++ indicado a continuación. 4.1 (1.5 puntos) Escriba una función cuya declaración sea: void ordenacreciente (std::list<int> &nums); que, aplicando el método de la burbuja, ordene crecientemente los componentes de la lista pasada por referencia. 4.2 (1 punto) Escriba una función cuya declaración sea std::list<int> int2list(unsigned int num); que devuelva una lista cuyos componentes sean los dígitos del número entero pasado como argumento. 4 Dpto. de Informática y Automática, UNED

SOLUCIÓN AL EXAMEN DE SEPTIEMBRE 2016 4.3 (1.5 puntos) Escriba una función cuya declaración sea: std::vector<int> fkaprekar (int valorinicial) throw (std::invalid_argument); y que realice las acciones siguientes: 1. Comprobar que el argumento es un valor inicial válido para el Algoritmo de Kaprekar. Si no lo es, lanzar una excepción. 2. Declarar un vector de int llamado restas y añadir al mismo el valor inicial. 3. Aplicar el Algoritmo de Kaprekar, empleando las funciones definidas al contestar a las Preguntas 4.1 y 4.2. En cada iteración del algoritmo, debe añadirse al final del vector el número obtenido como resultado de la resta en el Paso 3 del algoritmo. 4. Devolver el vector. 4.4 (1 punto) Escriba un programa principal que invoque repetidamente la función fkaprekar de la Pregunta 4.3, pasando sucesivamente como valor inicial para el algoritmo los valores 1,..., 9998. Si la llamada a la función genera una excepción, no se realiza ninguna acción más para ese valor inicial y se continúa con el siguiente. Si la llamada a la función no genera una excepción, el programa debe escribir en un fichero de texto llamado Kaprekar.txt los componentes del vector, separados por un espacio en blanco, finalizando con un salto de línea. Dpto. de Informática y Automática, UNED 5

Solución a la Pregunta 4 #include<iostream> #include<string> #include<list> #include<vector> #include<stdexcept> #include<sstream> #include<fstream> void ordenacreciente (std::list<int> &nums) { if (nums.size() < 2) return; std::list<int>::iterator pi = nums.begin(); while ( pi!= nums.end() ) { std::list<int>::iterator pj pj--; std::list<int>::iterator pj_m1 = pj; while (pj!= pi) { pj_m1--; if ( *pj < *pj_m1 ) { int aux = *pj_m1; *pj_m1 = *pj; *pj = aux; pj--; pi++; return; std::list<int> int2list(unsigned int num) { std::stringstream ss; ss << num; std::string snum = ss.str(); std::list<int> lnum; for (unsigned int i=0; i<snum.size(); i++) lnum.push_back(snum[i] - '0'); return lnum; = nums.end(); 6 Dpto. de Informática y Automática, UNED

SOLUCIÓN AL EXAMEN DE SEPTIEMBRE 2016 std::vector<int> fkaprekar (int valorinicial ) throw (std::invalid_argument) { const int NUM_KAPREKAR = 6174; // Comprueba que el argumento sea un valor inicial válido if ( valorinicial < 1 valorinicial > 9998 valorinicial % 1111 == 0 ) { std::stringstream ss; ss << "Valor inicial no valido: " << valorinicial; throw std::invalid_argument (ss.str()); std::vector<int> restas; restas.push_back(valorinicial); // Algoritmo unsigned int num = valorinicial; while ( num!= NUM_KAPREKAR ) { std::list<int> digitos = int2list(num); while ( digitos.size()< 4 ) { digitos.push_back(0); ordenacreciente (digitos); std::list<int>::iterator p = digitos.begin(); int menor = (*p)*1000 + *(++p)*100 + *(++p)*10 + *(++p); p = digitos.begin(); int mayor = (*p) + *(++p)*10 + *(++p)*100 + *(++p)*1000; num = mayor - menor; restas.push_back(num); return restas; int main() { const char nombrefich[] = "Kaprekar.txt"; std::ofstream fileout(nombrefich, std::ios::out std::ios::trunc); if (!fileout ) { std::cout << "Error al abrir fichero" << std::endl; return 1; for (unsigned int valinicial = 1; valinicial < 9999; valinicial++) { try { std::vector<int> li = fkaprekar (valinicial); for (unsigned int i=0; i < li.size(); i++) fileout << li[i] << " "; fileout << std::endl; catch ( std::exception exc) { fileout.close(); return 0; Dpto. de Informática y Automática, UNED 7