Autor Tema: Exámenes resueltos Fundamentos de programación UNED Ingeniería Informática 1ero  (Leído 160071 veces)

satanas777

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 4
    • Ver Perfil
Re:diferencias entre compilación e interpretación
« Respuesta #40 en: 29 de Enero 2013, 12:37 »

No seria la b) ya que necesita el intérprete ha de realizar la transformación en código máquina y la ejecución


nosferacento

  • Moderador Global
  • Avanzado
  • *******
  • Mensajes: 443
    • Ver Perfil
Supongo que te refieres a esta pregunta que aparecía anteriormente:

PREGUNTA: La ejecución de un programa mediante interpretación cumple que...

a)   Es más lenta que mediante compilación y necesita al menos dos etapas de procesado

b)   Es más rápida que mediante compilación y necesita al menos dos etapas de procesado

c)   Es más lenta que mediante compilación y necesita sólo una etapa de procesado

d)   Es más rápida que mediante compilación y necesita sólo una etapa de procesado

RESPUESTA: La opción correcta es la c). El intérprete ha de realizar la transformación en código máquina y la ejecución, lo que lo hace más lento que disponer del código máquina ya compilado y proceder a su ejecución. C/C++ son lenguajes que usan compilación.


La b) te dice que el intérprete sería más rápido que la ejecución de un programa ya compilado y esto no es así. El intérprete tiene que: primero, transformar a código máquina, segundo, ejecutar. En cambio si usas compilación partirás de un programa ya compilado (ya en código máquina) y sólo tienes que ejecutar. De este modo vas más rápido.

satanas777

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 4
    • Ver Perfil
Perdona pero se me fue queria decir la "a" si a lo que se refiere es a 2 etapas de procesado una generar el codigo fuente y despues compilar.

Supongo que te refieres a esta pregunta que aparecía anteriormente:

PREGUNTA: La ejecución de un programa mediante interpretación cumple que...

a)   Es más lenta que mediante compilación y necesita al menos dos etapas de procesado

b)   Es más rápida que mediante compilación y necesita al menos dos etapas de procesado

c)   Es más lenta que mediante compilación y necesita sólo una etapa de procesado

d)   Es más rápida que mediante compilación y necesita sólo una etapa de procesado

RESPUESTA: La opción correcta es la c). El intérprete ha de realizar la transformación en código máquina y la ejecución, lo que lo hace más lento que disponer del código máquina ya compilado y proceder a su ejecución. C/C++ son lenguajes que usan compilación.


La b) te dice que el intérprete sería más rápido que la ejecución de un programa ya compilado y esto no es así. El intérprete tiene que: primero, transformar a código máquina, segundo, ejecutar. En cambio si usas compilación partirás de un programa ya compilado (ya en código máquina) y sólo tienes que ejecutar. De este modo vas más rápido.

nosferacento

  • Moderador Global
  • Avanzado
  • *******
  • Mensajes: 443
    • Ver Perfil
Un intérprete hace que un programa fuente escrito en un lenguaje vaya, sentencia a sentencia, traduciéndose a código objeto y sea ejecutado directamente por la computadora. El intérprete capta una sentencia fuente y la traduce, expandiéndola en una o varias instrucciones máquina, que ejecuta inmediatamente, no creándose, por tanto, un fichero o programa objeto que puede ser almacenado en memoria masiva para posteriores ejecuciones.

Ejecución con Intérprete --> trabaja en un solo paso, y es más lento que la ejecución de un programa compilado.

Ejecución con compilado --> trabaja en dos pasos, y una vez el programa se ha compilado es más rápida, el programa puede utilizarse tantas veces como se desee sin necesidad de volver a compilarlo.

Opción a) --> No es correcta porque el intérprete no necesita dos etapas de procesado

nosferacento

  • Moderador Global
  • Avanzado
  • *******
  • Mensajes: 443
    • Ver Perfil
ejecutar un fragmento de código en C/C++
« Respuesta #44 en: 30 de Enero 2013, 16:45 »
PREGUNTA: Dado el siguiente fragmento de código en C/C++:

n=0;
if (n<2) {
n=n+1;
}


Después de su ejecución n contiene el valor:



a) 3

b) 1

c) 2

d) 0







RESPUESTA: La opción correcta es la b). Consideremos el código. n empieza valiendo 0. Entramos en el condicional, y como n es menor que 2 se ejecuta que n incrementa su valor en una unidad pasando a valer 1. ¡Esta está clarita!
« Última modificación: 20 de Marzo 2014, 10:28 por nosferacento »

nosferacento

  • Moderador Global
  • Avanzado
  • *******
  • Mensajes: 443
    • Ver Perfil
uso de sentencia switch en C/C++ y tipos de variables admitidos
« Respuesta #45 en: 31 de Enero 2013, 09:15 »
PREGUNTA: Dado el siguiente fragmento de código:

switch (j) {
case lunes: case martes: case miércoles: case jueves: j = TipoDia(int(j)+1); break;
case viernes: case sabado: case domingo: j = TipoDia(int(j)-1); break;
}



a) Falta una sentencia else

b) La sentencia else no se puede usar dentro de una instrucción

c) La variable j tiene que ser de tipo TipoDia para ser correcto

d) Los rangos establecidos son incorrectos







RESPUESTA: la opción correcta es la c). Analicemos las opciones. En un switch no aparecen elses luego desechamos la opción a). La opción b) es un poco confusa, cosas que aparecen de vez en cuando. Pensemos que un else puede aparecer acompañando a un if que puede estar dentro de otra instrucción, luego desechamos la b). j es el parámetro en que se basa la evaluación del switch. Recordar que un switch solo admite ciertos tipos de parámetros como enteros, enumerados, caracteres (aquello con equivalencia numérica). La expresión TipoDia(int(j)+1); indica que dentro del paréntesis se obtiene el valor numérico equivalente a j más una unidad, suponemos que será el siguiente día de la semana. Luego ese equivalente numérico lo transforma en tipo TipoDia. Por tanto la variable j tiene que ser de tipo TipoDia, en caso contrario no se podría realizar la asignación.
« Última modificación: 20 de Marzo 2014, 10:28 por nosferacento »

nosferacento

  • Moderador Global
  • Avanzado
  • *******
  • Mensajes: 443
    • Ver Perfil
concepto de complejidad de un algoritmo
« Respuesta #46 en: 02 de Febrero 2013, 09:57 »
PREGUNTA: La complejidad de un algoritmo:

a) Depende del programador

b) Depende del anidamiento de bucles

c) Depende del invariante

d) Aumenta con el uso del LOOP






RESPUESTA: La opción correcta es la b). Tener en cuenta lo siguiente: para un tamaño de problema n, la complejidad de un algoritmo en general está en O(n) cuando tenemos un bucle de tratamiento de datos, en O(n2) cuando tenemos un bucle anidado dentro de otro, en O(n3) cuando tenemos un triple anidamiento de bucles y así sucesivamente. La verdad es que esta pregunta es poco correcta porque habría mucho que matizar, pero en fin, así son las cosas y así se las hemos contado :)
« Última modificación: 20 de Marzo 2014, 10:29 por nosferacento »

nosferacento

  • Moderador Global
  • Avanzado
  • *******
  • Mensajes: 443
    • Ver Perfil
vectores abiertos en C/C++
« Respuesta #47 en: 04 de Febrero 2013, 16:32 »
PREGUNTA:  Un tipo vector abierto:

a) Necesita utilizar un centinela

b) Omite el tamaño explícito del vector

c) Se utiliza para declarar variables de tipo ristra

d) Simplifica las condiciones de contorno







RESPUESTA: La opción correcta es la b). Recordar lo siguiente: En C/C++ no es posible declarar vectores abiertos (con un número de elementos indefinidos) pero sí es posible incluirlos como argumentos de subprogramas siempre que al mismo tiempo se pase al subprograma (función o procedimiento) como argumento un parámetro que represente el número de elementos de que consta el vector que se pasa. Ejemplo: TratarVector (int v[], int n) es una llamada donde el vector pasa por referencia.

TratarVector (const float v[], int n) es una llamada donde el vector pasa por valor.

Las cadenas de texto (vectores de caracteres) son un caso especial donde no hace falta especificar el número de elementos de que constan.
« Última modificación: 20 de Marzo 2014, 10:29 por nosferacento »

Daniel1980

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 1
    • Ver Perfil
Re:Preguntas examen Fundamentos de programación UNED Ingeniería Informática
« Respuesta #48 en: 04 de Febrero 2013, 18:12 »
Buenas tardes:

Sólo te escribo para darte las gracias por este foro. ME lo recomendó ayer una persona que lo conocía y llevo todo el día aprendiendo con él. No sé si aprobaré el examen el martes que viene, pero quería agradecerte la molestia que te tomas al compartir todo esto con nosotros.

Un saludo.

nosferacento

  • Moderador Global
  • Avanzado
  • *******
  • Mensajes: 443
    • Ver Perfil
Re:Preguntas examen Fundamentos de programación
« Respuesta #49 en: 05 de Febrero 2013, 11:00 »
Agradezco tu mensaje, ya lo he comentado en ocasiones anteriores, esto lleva su trabajito... y se agradecen mensajes de aliento y comentarios que sirvan de "feedback". Te haría una recomendación: controla bien el tiempo, es muy típico que ante un tipo test complicado se vaya demasiado tiempo en el test y luego te falte para la parte del problema. Hay que distribuirse bien el tiempo. Suerte!

nosferacento

  • Moderador Global
  • Avanzado
  • *******
  • Mensajes: 443
    • Ver Perfil
datos encapsulados en C/C++
« Respuesta #50 en: 06 de Febrero 2013, 08:29 »
PREGUNTA: Del módulo de interfaz:

#pragma once
void uno();
void dos();


Se puede afirmar:


a) Faltan argumentos a los procedimientos

b) Es un tipo abstracto

c) Falta una declaración de tipo

d) Es un dato encapsulado







RESPUESTA: La opción correcta es la d). Recordar que hablábamos de módulo en alusión a un fragmento de un programa desarrollado de forma independiente y que distinguíamos dos tipos de módulos:

- Especificación o interfaz: define qué hace el programa (abstracciones). Fichero .h, parte "pública"

- Realización o implementación: define cómo lo hace el programa. Fichero .cpp. Desarrolla las abstracciones, parte "privada".

Hablamos de dato encapsulado en alusión a que si una abstracción de datos no requiere el uso de distintas variables sino solo una, se puede implementar como dato encapsulado. Un dato encapsulado declara en el .h sólo interfaces de operaciones, mientras que en el cpp irá el typedef struct que define el dato como static TipoDato... , y además el código de implementación de las operaciones.

En el programa principal, para un dato encapsulado no declararemos variables, sino que simplemente haremos llamadas.

En resumen, un dato encapsulado funciona se puede invocar sin declarar la variable en el programa principal; en su lugar, se declara la variable como estática en el .cpp.

Respecto a las otras opciones: la a) no es cierta ya que en un .h podemos tener procedimientos sin argumentos. La b) no es cierta porque si fuera un tipo abstracto tendríamos una declaración de un tipo (typedef...). La c) no es cierta, si no hay declaración de tipo será porque es un dato encapsulado.

Comentarios: los nombres de los procedimientos, uno y dos, podríamos calificarlos de inadecuados o con intención de despistar, pero que los nombres no sean adecuados no cambia nada.
« Última modificación: 20 de Marzo 2014, 10:29 por nosferacento »

nosferacento

  • Moderador Global
  • Avanzado
  • *******
  • Mensajes: 443
    • Ver Perfil
sintaxis correcta o incorrecta en C/C++
« Respuesta #51 en: 08 de Febrero 2013, 11:06 »
PREGUNTA: La sentencia:

P-> = P->siguiente + 1;



a) Es correcta

b) Es correcta cuando siguiente es un puntero

c) Es incorrecta

d) Es correcta cuando siguiente es de tipo int







RESPUESTA: la opción a responder es la c), es decir, la sentencia propuesta es incorrecta. El símbolo -> no es válido en C/C++, con lo cual ninguna de las otras opciones puede ser válida.
« Última modificación: 20 de Marzo 2014, 10:29 por nosferacento »

opalo

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 1
    • Ver Perfil
Re:Preguntas examen Fundamentos de programación UNED Ingeniería Informática
« Respuesta #52 en: 09 de Febrero 2013, 18:11 »
A mi también me están viniendo muy bien estas presuntas antes del examen del martes.
Gracias y un saludo!!!

satanas777

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 4
    • Ver Perfil
Re:Preguntas examen Fundamentos de programación UNED Ingeniería Informática
« Respuesta #53 en: 09 de Febrero 2013, 21:03 »
Referente a ->  en c+- es como * en c

nosferacento

  • Moderador Global
  • Avanzado
  • *******
  • Mensajes: 443
    • Ver Perfil
Re:Preguntas examen Fundamentos de programación UNED Ingeniería Informática
« Respuesta #54 en: 11 de Febrero 2013, 08:20 »
Hola satanas, yo he intentado compilar para ver equivalencia y obtengo estos resultados:

PROGRAMA QUE SÍ COMPILA

#include <stdio.h>
#include <stdlib.h>
int main(){
typedef int* Tp_Entero;
Tp_Entero pe;
*pe = 33;
printf ("%d", *pe);
}


PROGRAMA QUE NO COMPILA

#include <stdio.h>
#include <stdlib.h>
int main(){
typedef int-> Tp_Entero;
Tp_Entero pe;
->pe = 33;
printf ("%d", ->pe);
}

satanas777

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 4
    • Ver Perfil
Re:Preguntas examen Fundamentos de programación UNED Ingeniería Informática
« Respuesta #55 en: 11 de Febrero 2013, 09:02 »
Perdona la respuesta tan escueta del otro dia. Te pongo lo que dice el libro para ver si salimos de dudas.

Tipo-componente valor;
Tipo-secuencia secuencia, siguiente;
if (secuencia != NULL) {
   (*secuencia).primero = valor;
   siguiente = (*secuencia).resto;
}
La combinación del operador de desreferenciación de puntero (*) y la seleccion
de campo de registro ( . ) es incómoda de escribir, porque requiere paréntesis,
y difícil de leer. Por esta razón C± permite combinar ambos en un operardor único
con una grafía más amigable (->). Las sentencias anteriores se puedes
reescribir de la forma siguiente, mucho más fácil de leer:
if (secuencia != NULL) {
   secuencia->primero = valor;
   siguiente = secuencia->resto ;
}

nosferacento

  • Moderador Global
  • Avanzado
  • *******
  • Mensajes: 443
    • Ver Perfil
Re:Preguntas examen Fundamentos de programación UNED Ingeniería Informática
« Respuesta #56 en: 11 de Febrero 2013, 11:03 »
ok, creo que ahora entiendo algo. Si no interpreto mal, supón que quieres crear un array dinámico (aplicación típica de los punteros, ya que C/C++ no permite crear arrays dinámicos). Definimos el elemento del array:

typedef struct TipoNodo {
int valor;
TipoNodo* siguiente;
};


Ahora para crear un nuevo elemento del array podemos usar:

nuevo = new TipoNodo;

nuevo->valor = 33;


La sintaxis nuevo->valor = 33;  es equivalente a (*nuevo.valor)=33, pero la forma de escribirlo usando -> es más cómoda de escribir.

Entonces lo que creo debe quedar claro es que el operador -> sirve para "hacer dos cosas en uno": por un lado, desreferenciar el puntero, y por otro lado, indicar una asignación o selección de campo de un registro.

Creo que por ahí van los tiros...

nosferacento

  • Moderador Global
  • Avanzado
  • *******
  • Mensajes: 443
    • Ver Perfil
Problema de examen tad TiempoCiudad .h .cpp y auxiliares
« Respuesta #57 en: 12 de Febrero 2013, 14:02 »
EJERCICIO DE PROGRAMACIÓN (PARTE PRÁCTICA DEL EXAMEN)

Enunciado:
Realizar en C+- el tipo abstracto de datos TiempoCiudad para guardar las temperaturas y el estado del tiempo en una ciudad en 4 momentos diferentes. La operación NuevaCiudad guarda el NombreCiudad pasado como argumento e inicializa las temperaturas y los estados. La operación NuevoTiempo con los argumentos NombreCiudad, TipoMomento (enumerado: mañana, tarde, noche, madrugada), Temperatura y Estado (enumerado: sol, nubes, lluvia, nieve) guarda el nuevo tiempo de la ciudad para ese momento. La operación ListaTiempo escribe en pantalla la ciudad y las temperaturas y estado en los distintos momentos para el NombreCiudad pasado como argumento.



RESPUESTA: La solución está disponible en el archivo adjunto a este post (archivo problema_examen_sep_09_resuelto.pdf, pulsar sobre el nombre o icono para descargarlo estando logeado). En la solución tenemos varias partes:


Archivo tiempociudad.h: código del .h, el módulo de especificación o interfaz que define qué se hace.

Archivo tiempociudad.cpp: código del .cpp, el módulo de implementación que define cómo se hace.

Archivos para comprobación: código de lo que serían archivos que contienen código que no es necesario escribir en el examen, pero que son necesarios para poder ejecutar el programa. Cuando estemos estudiando o trabajando con nuestro ordenador es adecuado que después de escribir el código del .h y del .cpp escribamos el código necesario para poder ejecutar y comprobar que lo que hayamos preparado está bien. El archivo para comprobación es: programa gestion_tiempociudad.cpp. Con este archivo podemos hacer la ejecución en nuestro ordenador para comprobar que esté todo ok.

Ejemplo de respuesta del programa: un ejemplo de lo que debemos obtener al ejecutar el programa de comprobación.

nosferacento

  • Moderador Global
  • Avanzado
  • *******
  • Mensajes: 443
    • Ver Perfil
vectores abiertos en funciones y procedimientos
« Respuesta #58 en: 13 de Febrero 2013, 12:47 »
PREGUNTA: En C/C++, los vectores abiertos:

a) Sólo pueden utilizarse en la definición de funciones

b) Sólo pueden utilizarse en la definición de procedimientos

c) Pueden utilizarse en la definición de funciones y en la definición de procedimientos

d) No pueden utilizarse ni en la definición de procedimientos ni en la definición de funciones







RESPUESTA: La opción correcta es la c).  Recordar lo siguiente: En C/C++ no es posible declarar vectores abiertos (con un número de elementos indefinidos) pero sí es posible incluirlos como argumentos de subprogramas siempre que al mismo tiempo se pase al subprograma (función o procedimiento) como argumento un parámetro que represente el número de elementos de que consta el vector que se pasa. Ejemplo: TratarVector (int v[], int n) es una llamada donde el vector pasa por referencia.

TratarVector (const float v[], int n) es una llamada donde el vector pasa por valor.

Las cadenas de texto (vectores de caracteres) son un caso especial donde no hace falta especificar el número de elementos de que constan.
« Última modificación: 20 de Marzo 2014, 10:30 por nosferacento »

nosferacento

  • Moderador Global
  • Avanzado
  • *******
  • Mensajes: 443
    • Ver Perfil
ejemplo de código en C/C++ y su resultado
« Respuesta #59 en: 15 de Febrero 2013, 10:02 »
PREGUNTA: El siguiente fragmento de código en C/C++:

x = 2;
do{
printf("%d ", x);
x = x+1*2/3-1;
}while(x > 0);



a) Imprime: 2

b) Imprime: 2 1

c) Imprime: %d

d) Entra en un bucle infinito







RESPUESTA: La opción correcta es la b), se imprimirá 2 1. Analicemos lo que hace el programa: x comienza valiendo 2, entramos en el bucle, se muestra 2 por pantalla. Se ejecuta la operación que resulta ser x = 2 + 0,6667 - 1 = 1,6667 pero como x está declarada de tipo entero se trunca y queda valiendo 1 (hemos dicho se trunca, que no es redondear sino truncar). Ahora x entra valiendo 1, se imprime 1 y la operación es 1 + 0,6667 - 1 = 0,6667. Se trunca y ahora x vale cero. Se analiza la condición del while, y como x no es mayor que cero, se sale del bucle.


Fíjate si preguntáramos: ¿Qué ocurre al ejecutar esto?

int main(){
int x;
x = 2.85;
do{
printf("%d ", x);
x = x+1*2/3-1;
}while(x > 0);
    return 0;
}


Pues que se imprime también 2 y 1. Como hemos dicho, aunque a x se le asigne 2.85 al estar declarada como tipo entero se trunca a la parte entera y x comienza valiendo 2. Resultado, se imprime 2 1.

¿Qué ocurre si truncamos un negativo como -2.85? Que nos trunca siempre a la parte entera, en este caso a -2.
« Última modificación: 20 de Marzo 2014, 10:30 por nosferacento »

 

Sobre la educación, sólo puedo decir que es el tema más importante en el que nosotros, como pueblo, debemos involucrarnos.

Abraham Lincoln (1808-1865) Presidente estadounidense.

aprenderaprogramar.com: Desde 2006 comprometidos con la didáctica y divulgación de la programación

Preguntas y respuestas

¿Cómo establecer o cambiar la imagen asociada (avatar) de usuario?
  1. Inicia sesión con tu nombre de usuario y contraseña.
  2. Pulsa en perfil --> perfil del foro
  3. Elige la imagen personalizada que quieras usar. Puedes escogerla de una galería de imágenes o subirla desde tu ordenador.
  4. En la parte final de la página pulsa el botón "cambiar perfil".