Foros aprenderaprogramar.com

Aprender a programar => C, C++, C#, Java, Visual Basic, HTML, PHP, CSS, Javascript, Ajax, Joomla, MySql y más => Mensaje iniciado por: nosferacento en 06 de Noviembre 2012, 08:19

Título: Exámenes resueltos Fundamentos de programación UNED Ingeniería Informática 1ero
Publicado por: nosferacento en 06 de Noviembre 2012, 08:19
Nota:  He revisado las preguntas con vistas al curso 2024-2025 y en principio está todo "OK". De cualquier manera si encuentras alguna errata puedes escribirme tanto públicamente en el foro como por mensaje privado.

En este post se encuentran exámenes resueltos de la asignatura "Fundamentos de programación" de la UNED (Grado en Ingeniería Informática – Grado en Ingeniería de las Tecnologías de la Información). En general son interesantes pero a veces te parecerán absurdas o rebuscadas. He incluido las preguntas tipo test pero también la parte de problemas (parte de desarrollo del examen). Los exámenes constan de dos partes: una parte de preguntas tipo test y otra con un problema de programación en C/C++.

Algunas preguntas son de exámenes reales y otras son inventadas; por los comentarios tendrás pistas adicionales que te ayudarán a razonar la respuesta.

Otros post de interés para quienes busquen materiales:

Apuntes y recomendaciones para superar la asignatura "Fundamentos de Sistemas Digitales" del primer curso del Grado en Ingeniería Informática – Grado en Ingeniería de las Tecnologías de la Información de la UNED, que viene siendo una asignatura universitaria de introducción a la electrónica. Se pueden encontrar aquí: https://aprenderaprogramar.com/foros/index.php?topic=7066.0

Exámenes resueltos de la Asignatura "Fundamentos de sistemas digitales" del primer curso de Grado en Ingeniería Informática – Grado en Ingeniería de las Tecnologías de la Información de la UNED se puede encontrar aquí: https://www.aprenderaprogramar.com/foros/index.php?topic=6938.0

Exámenes resueltos de la Asignatura "Autómatas, gramáticas y lenguajes" del primer curso de Grado en Ingeniería Informática – Grado en Ingeniería de las Tecnologías de la Información de la UNED se puede encontrar aquí: https://www.aprenderaprogramar.com/foros/index.php?topic=638.0

Exámenes resueltos de la Asignatura "Programación orientada a objetos" del primer curso de Grado en Ingeniería Informática – Grado en Ingeniería de las Tecnologías de la Información de la UNED (lenguaje Java) se puede encontrar aquí: https://www.aprenderaprogramar.com/foros/index.php?topic=49.0

¡Gracias a todos los que envían comentarios y sugerencias!
Título: Re:Preguntas examen Fundamentos de programación UNED Ingeniería Informática
Publicado por: nosferacento en 14 de Noviembre 2012, 08:34
PREGUNTA: En el lenguaje C± ("c más menos"), la sentencia catch:

a) Agrupa las sentencias para el tratamiento de la excepción

b) Agrupa las sentencias para la detección de la excepción

c) Devuelve el resultado de la excepción

d) Devuelve el resultado de la excepción y termina el programa




RESPUESTA: La correcta es la a). Dentro de una sentencia catch escribimos todas las instrucciones que deben ejecutarse cuando se captura una excepción, es decir, nos sirve para agrupar las sentencias para el tratamiento de la excepción.
Título: uso sentencia printf en C mostrar numero con porcentaje
Publicado por: nosferacento en 17 de Noviembre 2012, 10:28
PREGUNTA: ¿Qué imprime la siguiente sentencia escrita en C/C++?:

printf("Descuento: %5.2f%c\n" ,12.5,'%');


a) Descuento: 12.50
b) Descuento: 12.5%
c) Descuento: 12.50%
d) Descuento: 12.5





RESPUESTA: La correcta es la c). Tener en cuenta que la expresión %5.2f y %c\n no son interpretadas como textos a mostrar debido a que están precedidas del carácter especial %. Luego lo que aparece detrás de esta expresión %5.2f tiene el siguiente significado: 5 representa el número de espacios que ocupará la salida por pantalla, .2 representa el número de decimales con que se mostrará el valor numérico; f representa "fixed point" o tipo de valor que se va a mostrar es "número real";

Lo que aparece detrás de %c\n tiene el significado: c, se va a insertar un carácter (que será el símbolo %) y \n salto de línea y retorno de carro.

Esta pregunta es desde luego un poco enrevesada, posiblemente hasta los propios profesores fallaran a la hora de responderla. No hay otra opción que conocer bien el significado de cada cosa para poder responderla.
Título: operadores logicos en C/C++
Publicado por: nosferacento en 18 de Noviembre 2012, 21:50
PREGUNTA:  Si a = true y b = false, la expresión:

!(!(a || b) && !(a))

Toma el mismo resultado que:

a) a && b

b) !(a || !b)

c) b ll (a&&b)

d) !(!a || b) || !b






RESPUESTA: la respuesta correcta es la d). Pregunta con bastante mala idea ya que es bastante liosa mezclando símbolos. Es probable que terminemos con un dolor de cabeza después de haber estado un rato dándole vueltas. Hay que tener en cuenta que el orden de precedencia de los operadores es:

1º) Operadores unarios como ! y -
2º) Operadores multiplicativos *, /, %
3º) Operadores aditivos: +, -
4º) Comparación matemática: >, >=, <, <=
5º) Comparación de igualdad: ==, !=
6º) Conjunción &&
7º) Disyunción ||

Y también que dentro de un mismo nivel, la ejecución es de izquierda a derecha.

Si a= true y b=false y evaluamos la expresión inicial tenemos:

! ( !( true || false) && !(true))

!(true) devuelve false

x && false devuelve false, luego la expresión interior !(a || b) && !(a) devuelve false. Al tener toda la expresión negada, el resultado final es true.

La opción a) plantea true && false, que devuelve false, con lo cual no puede ser solución.

La opción b) plantea !(true || !false), lo interior devuelve true y el resultado global es false con lo cual no puede ser solución.

La opción c) plantea false || ... que devolverá false.

Conclusión: la opción correcta es la d), que nos permite obtener true (aparte del dolor de cabeza)  ???
Título: uso sentencia scanf con texto en c/c++
Publicado por: nosferacento en 19 de Noviembre 2012, 10:29
La sentencia del lenguaje C/C++:

scanf("mes%2d", &mes);


a) Se ejecuta correctamente si se lee el dato: mes3

b) Siempre se ejecuta correctamente

c) Se ejecuta correctamente si se lee el dato: 03

d) No se ejecuta correctamente si se lee el dato: mes1234


RESPUESTA: La respuesta correcta es la a). El procedimiento scanf sirve para pedir datos al usuario y es accesible gracias al módulo de librería stdio. El dato solicitado se almacena en la variable indicada precedida del símbolo &, en este caso la variable es mes y el tipo de la variable no lo sabemos a priori. El término %2d indica que se espera un tipo entero (decimal es entero) con número de caracteres leídos o "tamaño del dato" de 2 caracteres. En este caso "cuidado": al indicar dentro del scanf mes%2d significa que la entrada de usuario esperada es mesXX donde XX representa hasta dos dígitos. scanf se suele utilizar sin texto (el texto se suele poner en un printf anterior) por lo que es fácil confundirse con esta pregunta.

En la opción a) se recibe mes3, es decir, mes y un dígito, lo que coincide con lo esperado.

La opción b) no es cierta porque si lo introducido por el usuario no corresponde a lo esperado la ejecución no es correcta.

La opción c) no es correcta porque no se recibe lo esperado.

La opción d) no es correcta porque la ejecución sí sería correcta, truncándose los dos últimos caracteres.

Pregunta  nada sencilla de responder, y además con cierta ambiguedad (porque la opción d) sería discutible). Paciencia.

Se pueden hacer pruebas con este programita:

#include <stdio.h>
#include <stdlib.h>

int main(){
  int mes;
    printf("Introduzca mes seguido de uno o dos enteros:\n");
    scanf("mes%2d", &mes);
    printf("El valor después de mes es %d", mes);
    return 0;
}


Título: registros con variantes en C/C++ con union y struct
Publicado por: nosferacento en 20 de Noviembre 2012, 09:26
En el lenguaje C/C++, los registros con variantes necesitan:

a) Sólo la definición de un tipo struct

b) Sólo la definición de un tipo union

c) La definición de al menos un tipo struct y un tipo unión

d) La definición de varios tipos struct o bien de un único tipo union






RESPUESTA: la opción correcta es la c).

Hay ocasiones en que nos puede interesar que una variable funcione según las circunstancias como si fuese de un tipo u otro. En estos casos hacemos una declaración typedef union Nombre donde typedef union funciona como palabra clave. Ejemplo:

typedef union Numerico {
        int entero;
        float real;
};

Las llaves se cierran con un ;. Una vez definido el tipo podemos usarlo así por ejemplo:

Numerico numeroaprocesar;
numeroaprocesar.entero = 243;
printf ("El valor de numeroaprocesar es %d", numeroaprocesar);

Solo puede haber en uso en un momento dado una de las alternativas del union.

Un tipo union se puede introducir dentro de un tipo struct y a esto se le denomina "registro con variantes". Por tanto para definir un registro con variantes necesitamos un tipo union y un tipo struct al menos, como indica la opción c).
Título: paso de vectores abiertos por valor o referencia en C/C++
Publicado por: nosferacento en 21 de Noviembre 2012, 13:54
PREGUNTA: En el lenguaje C/C++, un argumento de tipo vector abierto pasado por valor se especifica:

a) const Tipo v[]

b) Tipo v[]

c) const Tipo v[n]

d) Tipo v[n]






RESPUESTA: la opción correcta es la a). En C/C++ no es posible declarar vectores abiertos (sin un número de elementos predefinido), pero sí es posible incluirlos como argumentos de subprogramas siempre que al mismo tiempo se pase como argumento al subprograma un parámetro que represente el número de elementos de que consta el vector que se pasa. Las formas de hacer esto son (ponemos ejemplos):

TratarVector (float v[], int n)  ... el vector se pasa por referencia

TratarVector (const float v[], int n)  ... el vector se pasa por valor

Las cadenas de texto (vectores de caracteres) son un caso especial que no se atienen exactamente a lo expuesto.
Título: uso de static en ficheros cpp de implementación
Publicado por: nosferacento en 22 de Noviembre 2012, 10:08
PREGUNTA: ¿Cuál de las siguientes funciones NO puede llamarse desde otro fichero de implementación en C/C++?

a) void mifuncion() { ... }

b) static void mifuncion() { ... }

c) extem void mifuncion() { ... }

d) const void mifuncion() { ... }






RESPUESTA: La opción correcta es la b). Llamamos módulo a un fragmento de un programa desarrollado de forma independiente. Para un programa podemos definir:

a) Un módulo de especificación (interfaz) que dice qué se hace (en C/C++, el fichero .h), es decir, define abstracciones.

b) Un módulo de realización (implementación) que define cómo se hace (en C/C++ fichero .cpp), donde se desarrollan las abstracciones declaradas.

La palabra clave static dentro de un módulo restringe la visibilidad de una variable o función al fichero fuente del módulo, de modo que esas variables o funciones no pueden ser llamadas desde fuera.
Título: valor para selección en sentencia switch C/C++
Publicado por: nosferacento en 23 de Noviembre 2012, 12:11
PREGUNTA: El valor que determina la selección en la sentencia switch en C/C++ no puede ser de tipo:

a) int

b) float

c) Enumerado

d) char






RESPUESTA: la opción correcta es la b). switch puede usarse con valores enteros (int) o que sean asimilables a enteros, como son los enumerados y los char. En cambio, los float son reales, continuos y no discretos, no asimilables a enteros.
Título: Re:Preguntas examen Fundamentos de programación UNED Ingeniería Informática
Publicado por: nosferacento en 24 de Noviembre 2012, 17:32
PREGUNTA:
Supongamos el fragmento de código en C/C++:

int a;
........ ........
void Func_1(int & b) {
a= 3;
b = a*b;
}
..........
a=2;
Func_1(a);

Después de la ejecución de este fragmento:



a) La variable a vale 3

b) La variable a vale 2

c) La variable a vale 6

d) La variable a vale 9







RESPUESTA: La opción correcta es la d). Un poco liosa la pregunta, vamos a verla con calma.

Lo primero a tener en cuenta es que la declaración de la función como void Func_1(int & b) supone que el parámetro b se pasa por referencia (siendo conocido y modificable dentro de la función, cosa que no ocurriría si lo pasáramos por valor).

Recorramos ahora el código. Se declara la variable entera a (queda con valor 0). Se define la función. Se hace la valor a igual a 2 y se invoca la función pasándole por referencia la variable a, con valor inicial 2.

En la función se modifica el valor de a y se establece en 3, y se calcula b como a*b = 3*3 = 9, pero b es un parámetro que apunta por referencia a la variable a, con lo cual al modificarse el parámetro dentro de la función se está modificando la variable que se ha pasado por referencia. En consecuencia, al concluir la ejecución la variable a queda con valor 9.

Pregunta enredada, la clave está en ver que a la función le entra la variable a pasada por referencia, al ocurrir esto a y b dentro de la función apuntan al mismo espacio de memoria, primero se establece a (y b) con valor 3 y luego se establece b (y a) con valor 9. La variable b desaparece una vez concluye la ejecución de la función, quedando la variable a con valor 9.  ::)
Título: sentencia continue en C/C++
Publicado por: nosferacento en 26 de Noviembre 2012, 08:27
PREGUNTA: En el lenguaje C/C++, la sentencia continue:

a) Finaliza la iteración en curso y el bucle

b) No se puede utilizar dentro de un bucle for

c) Finaliza la iteración en curso de un bucle

d) No se puede utilizar dentro de una sentencia condicional






RESPUESTA: La opción correcta es la c).
Título: Problema de examen tarjeta monedero .h .cpp y auxiliares
Publicado por: nosferacento en 26 de Noviembre 2012, 08:50
EJERCICIO DE PROGRAMACIÓN (PARTE PRÁCTICA DEL EXAMEN)

Realizar en C/C++ un TAD para gestionar una tarjeta monedero. La información de la tarjeta es el saldo y las 10 últimas operaciones. La información de cada operación es fecha (día-mes-año), cantidad (float) y tipo de operación (cargar, sacar, consultar). Las operaciones a realizar son:

1.- Cargar una cantidad.
2.- Sacar una cierta cantidad, si hay saldo disponible.
3.- Consultar el saldo y todas las últimas operaciones.




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


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

Archivo tarjetamonedero.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. Los archivos para comprobación son: gestordefechas.h, gestordefechas.cpp y programa_principal_gestiontarjetas.cpp. Con estos archivos podemos hacer la ejecución en nuestro ordenador para comprobar que esté todo ok.
Título: bucle en C/C++
Publicado por: nosferacento en 27 de Noviembre 2012, 09:28
PREGUNTA: Dado el siguiente bucle for en C/C++:

for (int i=-5; i>=-7; i--){
   printf (“Hola”);
}

El número de veces que aparecerá la palabra hola será:


a)   0

b)   3

c)   2

d)   Existe un error de tipos






RESPUESTA: la opción correcta es la b. El bucle avanza de -5 a -7 e imprime hola para los casos -5, -6 y -7, es decir, tres veces. Cuando la variable de control toma valor -8 no se cumple la condición y no se imprime hola.
Título: significado del símbolo & o ampersand en C/C++
Publicado por: nosferacento en 28 de Noviembre 2012, 08:20
En C/C++ el símbolo &:

a)   Es un símbolo que se utiliza para pasar argumentos por referencia.

b)   Es un identificador predefinido que se utiliza para declarar variables.

c)   Es un símbolo que se utiliza para pasar argumentos por valor.

d)   Es un identificador predefinido que se utiliza para pasar argumentos por valor.







RESPUESTA: La opción correcta es la a). Se usa para pasar argumentos a procedimientos o funciones por referencia. En caso de no incluirse & los argumentos se pasarían por valor.
Título: conocer el entero asociado a un carácter C/C++
Publicado por: nosferacento en 29 de Noviembre 2012, 08:35
PREGUNTA: En C/C++ para convertir el carácter 5 en el número entero correspondiente usaría la sentencia:

a) int('5') – int ('0')

b)   int ( int(5))

c)   int ('5')

d)   char(5)






RESPUESTA: la opción correcta es la c. Esto es una cuestión de mera sintaxis, un caracter en C/C++ se escribe entre comillas simples. Cada carácter tiene un número entero asociado, y esta es una forma para conocerlo. No es lo mismo el carácter '5' que el valor numérico 5.
Título: operador mod o resto de división en C/C++
Publicado por: nosferacento en 30 de Noviembre 2012, 08:33
PREGUNTA: En C/C++ ¿qué operación de las siguientes es correcta?:

a)   25 * 3,5

b)   33.7 % 5.0

c)   33 / 5.3

d)   10,5 % -15,4E2





RESPUESTA: La opción correcta es la c). La a) la desechamos por no usar separador decimal el punto. La b) y d) usan el operador módulo o mod, que devuelve el resto de una división entre números enteros. Al intervenir en ambos casos números no enteros, no serían correctas. Nos queda como opción viable la c).
Título: programacion imperativa, funcional, logica y de flujo de datos
Publicado por: nosferacento en 03 de Diciembre 2012, 18:44
PREGUNTA: En C/C++ el modelo de programación que se sigue es:

a) El modelo de programación funcional

b) El modelo de programación imperativa

c) El modelo de programación de flujo de datos

d) El modelo de programación lógica





RESPUESTA: la opción correcta es la b). La programación funcional (p.ej. lenguaje Haskell), de flujo de datos (p.ej. labView) y lógica (p.ej. Prolog) corresponden a otros paradigmas y lenguajes.
Título: paso de variables por referencia en C/C++
Publicado por: nosferacento en 04 de Diciembre 2012, 08:26
PREGUNTA:

Supongamos el fragmento de código en C/C++:

void CuaCubo (int &x, int &x2, int &x3){
x2 = x*x;
x3 = x*x*x;}
……… B = 1; A = 4; CuaCubo (A, A, B);


Después de la ejecución de este fragmento:


a)   A vale 16 y B vale 64

b)   A vale 16 y B vale 4096

c)   A vale 4 y B vale 1

d)   A vale 16 y B vale 1




RESPUESTA: la opción correcta es la b). Recorramos el código. Las variables x, x2 y x3 se pasan por referencia al procedimiento ya que están precedidas del símbolo &. La llamada al procedimiento se realiza con A=4, B=1 e invocación CuaCubo (A, A, B) lo cual supone que x y x2 referencian a la misma posición de memoria. En la primera línea x2, que en nuestra invocación es A, pasa a valer x*x, que en nuestra invocación es A*A, resultando x2 = 4*4 = 16, y A=16. En la segunda línea x3 = A*A*A = 16*16*16 = 4096 y B= 4096. Conclusión: después de la ejecución del fragmento A vale 16 y B vale 4096. Esta pregunta no puede decirse que sea complicada. Lo único que hay que tener claro es el concepto de paso por valor y paso por referencia de variables y sus diferencias.
Título: diferencias entre compilación e interpretación
Publicado por: nosferacento en 05 de Diciembre 2012, 08:21
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.
Título: programar con abstracciones favorece la reutilización
Publicado por: nosferacento en 07 de Diciembre 2012, 08:09
PREGUNTA:   La reutilización se consigue con el desarrollo de programas:

a)   Por refinamiento usando abstracciones

b)   Solo ascendente

c)   Solo descendente

d)   Solo ascendente o solo descendente






RESPUESTA: La opción correcta es la a). Las opciones b), c) y d) podríamos decir que no son una respuesta coherente. De todas formas esta pregunta ejem... ejem..., no tiene digamos que una redacción muy coherente en sí. Lo que sí es verdad es que el uso de abstracciones favorece la reutilización.
Título: paso de vectores abiertos por valor o por referencia en C/C++
Publicado por: nosferacento en 10 de Diciembre 2012, 08:25
PREGUNTA: Los argumentos de tipo vector abierto:

a)   Solo pueden pasarse por referencia

b)   Pueden pasarse por valor y por referencia

c)   Solo pueden pasarse por valor

d)   Solo pueden utilizarse en funciones






RESPUESTA: La opción correcta es la b). En C/C++ los argumentos que se pasan a procedimientos o funciones en general pasan por valor. Los vectores son una excepción y como argumentos pasan por defecto por referencia aunque no se indique explícitamente. Para pasar vectores por valor debe usarse la palabra clave const antecediendo al tipo. Por ejemplo: void OperarVector (const TipoVector v) { ... }

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.
Título: expresiones booleanas en C/C++
Publicado por: nosferacento en 11 de Diciembre 2012, 08:15
PREGUNTA:   Si a = true, b = false, c = false señale la expresión verdadera:

a)   !(! a || c || !b)

b)   !(! c || b && a)

c)   a && ! (a || ! c)

d)   a && ! c || b






RESPUESTA: la opción correcta es la d).

Si analizamos las opciones, para la a) el interior del paréntesis es (falso ó falso ó verdadero), devuelve verdadero, y con la negación exterior resulta falso. Para la b el interior del paréntesis devuelve verdadero ó ... que es verdadero y con la negación exterior resulta falso. La opción c): el paréntesis devuelve verdadero ó ... que resulta verdadero, al negarlo nos queda falso y a && falso es falso. La opción d) es verdadero y verdadero ó falso, lo cual resulta verdadero.
Título: problema examen fundamentos programación heladería
Publicado por: nosferacento en 12 de Diciembre 2012, 08:40
EJERCICIO DE PROGRAMACIÓN (PARTE PRÁCTICA DEL EXAMEN)


ENUNCIADO: Una heladería ofrece cucuruchos con bolas de 25 gramos de tres sabores distintos a escoger entre chocolate, vainilla, fresa, limón, pistacho y menta. Construya un Tipo Abstracto de Datos (TAD) en C+- que almacene la cantidad de helado disponible de cada sabor e implemente las siguientes operaciones:

-IncrementarHelado: añade una cantidad de helado de un determinado sabor.

-EsPosibleCucurucho: recibe como entrada 3 sabores e indica si hay helado suficiente para confeccionar el cucurucho.

-CucuruchosDisponibles: imprime en pantalla qué tipos de cucuruchos pueden confeccionarse con los helados disponibles.





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


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

Archivo helado.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. Los archivos para comprobación son en este caso solo uno: programa_principal_gestion_helados.cpp. Con este archivo podemos hacer la ejecución en nuestro ordenador para comprobar que esté todo ok.

Ejemplo de respuesta del programa: ejemplo de los resultados que se obtendrían al ejecutar el programa. Sirve de referencia para saber si al ejecutar en nuestro ordenador se ejecuta correctamente.
Título: paso de parámetros por valor o referencia C/C++
Publicado por: nosferacento en 13 de Diciembre 2012, 08:32
PREGUNTA:   Dado el siguiente subprograma en C/C++:

int Oper (float x, float & y){
   x = x/2.0 + y*2.0;
   y = y + x;
   return int (y);
}

Si a = 5.0 y b = 3.0, los valores de a y b después de la llamada Oper(a,b) son respectivamente:


a)   8.5 y 11.5

b)   5.0 y 11.0

c)   5.0 y 11.5

d)   8.5 y 11.0







RESPUESTA: La respuesta correcta es la c). a se pasa por valor, b se pasa por referencia. En la primera línea a=2.5 + 6=8.5; en la segunda línea b=3+8.5=11.5; Se devuelve 11.5. Pero ¡atención! Hay que prestar atención a si nos pregunta qué valor devuelve la función o con qué valor se quedan las variables. En este caso la función devuelve 11 (parte entera de 11.5) pero la variable b se había pasado por referencia y la a por valor. a se queda valiendo 5 pues no se modifica mientras que b se queda valiendo 11.5. Un poco lioso, pero si se piensa con calma, sale.
Título: Re:Preguntas examen Fundamentos de programación UNED Ingeniería Informática
Publicado por: nosferacento en 14 de Diciembre 2012, 08:30
PREGUNTA:   ¿Cuál de las siguientes afirmaciones es falsa?:

a) Con los módulos se definen tipos abstractos.

b) Todo dato encapsulado es de tipo abstracto.

c) Todo tipo static es de tipo abstracto.

d) Todo tipo abstracto es dato encapsulado.






RESPUESTA: La respuesta correcta es d). Ojo al error más habitual que podemos cometer con una pregunta de este tipo: no darnos cuenta de que preguntan por la falsa en vez de por la verdadera (que es lo habitual). Si preguntan cuál es falsa se supone que quiere decir que hay tres verdaderas y hay que responder la falsa. En consecuencia: a), b) y d) son verdaderas (o se supone, porque esta pregunta es un poco confusa).

Nota: en algunas ocasiones hay erratas en los enunciados de los exámenes, es decir, preguntas mal formuladas. En ese caso, la pregunta puede ser invalidada una vez hecho el examen cuando se descubre la errata. De cualquier manera recomendación: no te centres en tratar de determinar si hay una errata o no (perder el tiempo), céntrate en estudiar y tratar de responder lo mejor posible. 
Título: tipos enumerados en C/C++
Publicado por: nosferacento en 17 de Diciembre 2012, 08:32
PREGUNTA:   Dada la declaración typedef enum TipoColor {rojo, amarillo, azul, negro); señalar la expresión verdadera:

a) TipoColor(int(rojo)) = amarillo;

b)   TipoColor(int(TipoColor(2)) = 1;

c)   TipoColor(0) = rojo;

d)    int(azul) = 3;






RESPUESTA: La opción correcta es la c)

La declaración que se presenta es la de un tipo enumerado en C/C++. Los tipos enumerados son ordinales, es decir, tienen un orden y equivalente numérico que en este caso son 0 para el rojo, 1 para el amarillo, 2 para el azul y 3 para el negro. La opción a) sería suponer que TipoColor(0) = amarillo, lo cual es falso. La opción b) sería suponer que TipoColor(int(azul)) = 1, lo cual es falso. La opción 3 es verdadera. La opción d) es falsa ya que el azul se corresponde con el 2.
Título: uso de static para declarar variables privadas o locales en C/C++
Publicado por: nosferacento en 18 de Diciembre 2012, 08:38
PREGUNTA: En C/C++ un tipo static se declara sólo en el módulo:

a) De implementación

b) De definición

c) Principal del programa

d) Principal y en el de definición







RESPUESTA: La correcta es la opción a). Llamamos módulos no principales a los módulos de un programa que no contienen la función main() y no permiten generar un ejecutable por sí solos. Su código está destinado a ser usado por el programa principal o por otros módulos. Un módulo no principal consta de dos sub-módulos o ficheros: el .h, interfaz o "parte pública" y el .cpp, implementación o parte "privada". Si son necesarias variables privadas (locales) en el sub-módulo de implementación se declararán usando la palabra clave static, por ejemplo static int miNumero = 33;

Para acordarse de esto, memoria y haber hecho unos cuantos ejercicios porque si no difícil acordarse de algo así.  ???
Título: tres bucles anidados en C/C++
Publicado por: nosferacento en 21 de Diciembre 2012, 08:54
PREGUNTA: ¿Cuánto vale la variable x después de ejecutar el siguiente código?:

x = 0;
for (int i = 1; i <= 10; i++){
   for (int j = 1; j <= 10; j++){
      for (int k = 1; k <= 10; k++){
         x++;
         }
         x--;
      }
      if (x % 2 !=0){
         x--;
      }
}



a) 890

b) 900

c) 895

d) 899







RESPUESTA: La opción correcta es la b). Si recorremos el código tenemos lo siguiente: x comienza valiendo cero. Partimos con i=1, j=1, k=1 y x toma valor 10 con el bucle k y se reduce a 9 al terminar el bucle j. En el siguiente paso i=1, j=2, K=1 y se repite el proceso hasta que x termina valiendo 9+9 = 18 ... se repite el proceso hasta que x termina valiendo 9*10 = 90. A continuación se alcanza la parte final del bucle i y se evalúa si x es impar, como 90 es par el valor de x no se reduce, es decir, no se ejecuta el código asociado al condicional if. La repetición del proceso 10 veces (bucle i) da lugar a que x termine con el valor 900. Nota: es recomendable marcar con fluorescente el alcance de cada for: no hay que dejarse llevar por las tabulaciones (nos las pueden poner mal establecidas). Lo que determina la ejecución son las llaves de apertura y cierre que delimitan el alcance de cada bucle o condicional. En este caso el condicional if está asociado al bucle más exterior.
Título: registro con variantes (struct y union) en C/C++
Publicado por: nosferacento en 14 de Enero 2013, 00:29
PREGUNTA: En C/C++ al usar un registro con variantes en un programa:

a) Puede omitirse el nombre del discriminante
b) Puede omitirse el tipo del discriminante en la declaración
c) Es obligatoria la alternativa final con ELSE
d) El uso de variantes no consistentes con el valor del discriminante es detectado por el compilador



RESPUESTA: La opción correcta es la d).

Hay ocasiones en que nos puede interesar que una varible funcione según las circunstancias como si fuese de un tipo u otro. En estos casos hacemos una declaración typedef union Nombre donde typedef union funciona como palabra clave.

Un tipo union se puede introducir dentro de un tipo struct y a esto se le denomina registro con variantes. Es habitual que exista un campo indicador de qué variante de las previstas en el tipo union es la actual en un momento dado.

La variante actual del union se denomina discriminante y solo puede haber una. Por ejemplo, si el union es:

typedef union Numerico {
   int entero;
   float real;
};

Y luego usamos:

Numerico numeroaprocesar;
numeroaprocesar.entero = 243;

El discriminante ahora es "entero".

Una invocación ahora a numeroaprocesar.real sería errónea y detectada por el compilador porque un tipo union tiene alternativamente un tipo de valor u otro, pero no existen los dos valores simultáneamente.

Pregunta un poco enrevesada...
Título: operador % (mod o resto de división entera) en C/C++
Publicado por: nosferacento en 15 de Enero 2013, 08:22
PREGUNTA: En C/C++ el operador %…

a) Puede dar error para valores de tipo cardinal

b) Nunca da error para valores de tipo int

c) Nunca da error para valores de tipo float

d) Está definido para cualquier tipo de datos





RESPUESTA: la opción correcta es la b). El operador % es el operador módulo o mod, que devuelve el resto de una división sólo permitiéndose el uso de enteros. Si analizamos respuesta a respuesta tenemos lo siguiente: números cardinales son 1, 2, 3, 4 ... por tanto no dan error. Los tipo float (opción c) no son enteros y no se pueden usar con el operador %. Respecto a la opción d) es falsa por lo que hemos expuesto anteriormente.
Título: doble referencia en programación C/C++
Publicado por: nosferacento en 16 de Enero 2013, 08:18
PREGUNTA: La doble referencia se produce cuando:

a) Un mismo elemento se utiliza con dos nombres distintos

b) Dos punteros apuntan al mismo tipo de elemento

c) Se produce una redefinición de elementos

d) Dos índices indexan al mismo elemento de una formación






RESPUESTA: La opción correcta es la a). Esta pregunta alude a una definición y por tanto lo que hay es que sabérsela de memoria, ya que si no lo hacemos así podría pensarse que cualquier respuesta es válida. ¿Qué significa que un mismo elemento se utiliza con dos nombres distintos? Pues una variable por ejemplo referencia a un espacio de memoria. Supongamos que el espacio de memoria denominado @363H3 tiene por contenido "jota". Si las variables A y B referencian al mismo espacio de memoria, ambas son una misma cosa con dos nombres distintos.
Título: concepto de puntero en C/C++
Publicado por: nosferacento en 17 de Enero 2013, 14:01
PREGUNTA: En C/C++ respecto a los punteros podemos decir:

a) No se pueden utilizar
b) Son elementos de programación de muy alto nivel
c) No están tipados
d) Su valor no es representable como un número o texto






RESPUESTA: la opción correcta es la d. Si analizamos las alternativas, la a) es falsa ya que sí se pueden utilizar. La b) es falsa, ya que son elementos de programación de bajo nivel. Nos quedan dos opciones.

La definición de puntero (referencia) es la siguiente: "variable simple específica que apunta a una variable dinámica. Su contenido es una referencia no representable como número o texto". Con esto queda claro que la opción correcta es la d) y que para poder responder esta pregunta necesitamos haberla memorizado porque si no lo hemos hecho... difícil de responder. De la opción c) diríamos que los punteros sí están tipados: su tipo es "puntero".
Título: uso de notación BNF para sintaxis de lenguajes
Publicado por: nosferacento en 18 de Enero 2013, 14:06
PREGUNTA:   La regla sintáctica para la cual es válida el valor E5.0, siendo digito::= 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 es:

a) Real ::= {digito}E{digito}

b) Real ::= digito{digito}.{digito}[E digito {digito} ]

c) Real ::= {digito}[E]{digito}[.]{digito}

d) Real ::= {digito}.digito[E[+|-]digito.{digito}







RESPUESTA: la opción correcta es la c). Para responder a esta pregunta tenemos que recordar la notación BNF (notación basada en metasímbolos que sirve para definir la sintaxis de lenguajes de programación). En este sentido, ::= es el metasímbolo de definición, | es el metasímbolo de alternativa, {} es el metasímbolo de repetición (los elementos dentro del metasímbolo se pueden repetir o no), [] es el metasímbolo de opción y () es el metasímbolo de agrupación. La opción a) no es válida porque nos falta el punto. La opción b) no es válida porque obliga a empezar con un dígito y E5.0 no empieza por un dígito. La opción c) satisface la expresión, ya que el que aparezca un dígito opcional repetido n veces es opcional, y cumple lo establecido. La opción d) obliga a empezar con un punto o con un dígito, aspecto que no se cumple en la expresión propuesta.
Título: problema examen fundamentos programación precio oro 5 monedas
Publicado por: nosferacento en 21 de Enero 2013, 11:36
EJERCICIO DE PROGRAMACIÓN (PARTE PRÁCTICA DEL EXAMEN)

ENUNCIADO

Realizar el tipo abstracto de datos PrecioOro para guardar el precio de la onza de oro en 5 monedas diferentes (Dólar, Euro, Yen, Libra, Yuan). La operación NuevoPrecio guarda el nuevo precio en una determinada moneda. La operación CambioOro entre dos monedas devuelve los cambios unitarios de cada moneda en función de la otra tomando como base el precio del oro. La operación ListarPrecios escribe en pantalla la tabla de precios de la onza de oro en cada moneda.



RESPUESTA


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


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

Archivo precio_oro.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. Los archivos para comprobación son en este caso solo uno: programa_principal_programa_monedas_oro.cpp. Con este archivo podemos hacer la ejecución en nuestro ordenador para comprobar que esté todo ok.
Título: Re:Preguntas examen Fundamentos de programación UNED Ingeniería Informática
Publicado por: nosferacento en 23 de Enero 2013, 08:23
PREGUNTA: ¿Cuál de las siguientes afirmaciones es CORRECTA?


a) El tipo int es exacto y sin límites

b) El tipo int es exacto pero con límites

c) El tipo float es exacto y sin límites

d) El tipo float es exacto pero con límites







RESPUESTA: La opción correcta es la b). int es exacto al carecer de decimales. La a) es falsa porque int sí tiene límites (no puede superarse determinado valor). La c) es falsa porque float también tiene límites y no es exacto al representar valores decimales o fraccionarios. La d) es falsa porque float no es exacto.
Título: instrucción de asignación en C/C++
Publicado por: nosferacento en 25 de Enero 2013, 10:41
PREGUNTA: En la instrucción de asignación en C/C++ definida por A=B:

a) A debe ser variable y B constante

b) Tanto A como B deben ser variables

c) Debe haber compatibilidad de tipos entre A y B

d) A y B deben ser de tipo simple








RESPUESTA: la opción correcta es la c). Si analizamos las posibilidades, la a) no tiene por qué ser así. La B tampoco tiene por qué ser así, uno de los dos puede ser constante. La d) no se sabe muy bien a qué se refiere. La c es cierta: debe haber compatibilidad de tipos para realizar una asignación.
Título: Re:Preguntas examen Fundamentos de programación UNED Ingeniería Informática
Publicado por: elasfaltoesgris en 26 de Enero 2013, 10:25
GRACIAS, GRACIAS, GRACIAS.
Me has ayudado más tú que cualquier libro, tutor o momento de inspiración.
Por favor, continúa.
¿He mencionado que te estoy inmensamente agradecida?
Título: Re:Preguntas examen Fundamentos de programación UNED Ingeniería Informática
Publicado por: nosferacento en 26 de Enero 2013, 13:58
Gracias a tí y a todos los que valoran el esfuerzo, porque esto lleva su trabajito... y se agradecen mensajes de aliento. Continúo claro, pero voy como una hormiguita poquito a poco. Trato de ayudar pero la ayuda principal es que cada uno sea capaz de organizarse por sí mismo, estudiar "sobre el papel" e - importante - practicar delante del ordenador. Suerte a todos los que se estén preparando el examen!
Título: concepto de verificación de programas
Publicado por: nosferacento en 27 de Enero 2013, 10:26
PREGUNTA: En la práctica, la verificación:

a) Garantiza que en el programa no hay ningún error

b) Se hace mediante ensayos del programa

c) Aumenta la complejidad del programa

d) Garantiza la eficiencia del programa






RESPUESTA: la opción correcta es la b). La c) es claramente falsa ya que verificar un programa no hace que tenga mayor ni menor complejidad. La d) también es falsa, ya que con la verificación se trata de comprobar la corrección del programa, es decir, que cumpla con los objetivos de la especificación, no su eficiencia. Tampoco garantiza que en el programa no exista algún error. Esta pregunta se basa en conceptos teóricos que hay que saberse de memoria porque de otra manera no podremos responder porque la terminología es un poco ambigua.
Título: concepto de procedimiento puro y transparencia referencial
Publicado por: nosferacento en 29 de Enero 2013, 08:35
PREGUNTA: Dado el siguiente procedimiento en C/C++:

void proc( int a,int b, int & c)
{
int aux;
aux=a+b+c;
c=aux;
}

Para que fuese puro:


a) Es ya un procedimiento puro

b) bastaría con pasar las variables a y b por referencia

c) la variable c se debería pasar por referencia

d) Todas las variables, incluida aux, deben pasarse por referencia







RESPUESTA: la opción correcta es la a). ¿Por qué? Para poder responder esto tendremos que conocer la definición de "procedimiento puro" porque si no está difícil :) Muchos programadores profesionales no sabrían responder a esto porque es algo bastante teórico, pero veamos la definición. Para ello tenemos que ver algún concepto previo:

Transparencia referencial: existe transparencia referencial si el resultado de una llamada a un subprograma puede predecirse con la información del código de la llamada, es decir, si siempre que se pasan los mismos argumentos se obtienen los mismos resultados. La transparencia referencial se garantiza si el subprograma utiliza solo variables o elementos locales. Si un subprograma modifica una variable externa (global) se dice que está produciendo efectos secundarios o laterales (side effects) y que no existe transparencia referencial.

Procedimiento puro: el que no tiene efectos laterales, es decir, el que es tranparente referencialmente. No se exige el paso de argumentos por valor para considerar un procedimiento puro (en cambio para considerar una función pura sí se exige el paso de argumentos por valor).

En resumen, el procedimiento propuesto es puro porque solo usa elementos o variables locales (independientemente de que reciba dos parámetros por valor y uno por referencia). Si fuera una función, no sería pura.
Título: Re:diferencias entre compilación e interpretación
Publicado por: satanas777 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

Título: Re:Preguntas examen Fundamentos de programación UNED Ingeniería Informática
Publicado por: nosferacento en 29 de Enero 2013, 14:09
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.
Título: Re:Preguntas examen Fundamentos de programación UNED Ingeniería Informática
Publicado por: satanas777 en 29 de Enero 2013, 16:15
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.
Título: Re:Preguntas examen Fundamentos de programación UNED Ingeniería Informática
Publicado por: nosferacento en 29 de Enero 2013, 18:50
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
Título: ejecutar un fragmento de código en C/C++
Publicado por: nosferacento 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!
Título: uso de sentencia switch en C/C++ y tipos de variables admitidos
Publicado por: nosferacento 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.
Título: concepto de complejidad de un algoritmo
Publicado por: nosferacento 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 :)
Título: vectores abiertos en C/C++
Publicado por: nosferacento 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.
Título: Re:Preguntas examen Fundamentos de programación UNED Ingeniería Informática
Publicado por: Daniel1980 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.
Título: Re:Preguntas examen Fundamentos de programación
Publicado por: nosferacento 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!
Título: datos encapsulados en C/C++
Publicado por: nosferacento 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.
Título: sintaxis correcta o incorrecta en C/C++
Publicado por: nosferacento 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.
Título: Re:Preguntas examen Fundamentos de programación UNED Ingeniería Informática
Publicado por: opalo 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!!!
Título: Re:Preguntas examen Fundamentos de programación UNED Ingeniería Informática
Publicado por: satanas777 en 09 de Febrero 2013, 21:03
Referente a ->  en c+- es como * en c
Título: Re:Preguntas examen Fundamentos de programación UNED Ingeniería Informática
Publicado por: nosferacento 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);
}
Título: Re:Preguntas examen Fundamentos de programación UNED Ingeniería Informática
Publicado por: satanas777 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 ;
}
Título: Re:Preguntas examen Fundamentos de programación UNED Ingeniería Informática
Publicado por: nosferacento 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...
Título: Problema de examen tad TiempoCiudad .h .cpp y auxiliares
Publicado por: nosferacento 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.
Título: vectores abiertos en funciones y procedimientos
Publicado por: nosferacento 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.
Título: ejemplo de código en C/C++ y su resultado
Publicado por: nosferacento 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.
Título: técnica de desarrollo refinamientos sucesivos
Publicado por: nosferacento en 19 de Febrero 2013, 11:59
PREGUNTA: La técnica de desarrollo mediante refinamientos sucesivos consiste en:

a) Descomponer acciones en otras más simples en pasos sucesivos

b) Depurar los errores del código en pasos sucesivos

c) Reducir el tiempo de compilación de un programa en pasos sucesivos

d) Reducir el tiempo de ejecución de un programa en pasos sucesivos








RESPUESTA: la opción correcta es la a). La pregunta es quizás más de memorizar que de otra cosa. De todas formas después de haber leído los contenidos de la asignatura b), c) y d) son más o menos fácilmente descartables.
Título: analogías entre tipos de datos y estructuras de programación en C/C++
Publicado por: nosferacento en 26 de Febrero 2013, 13:23
PREGUNTA: El esquema de datos formación se corresponde con el esquema de acción:

a) Secuencia

b) Iteración

c) Selección

d) Tupla






RESPUESTA: la opción correcta es la b). Esta pregunta implica que tenemos que haber memorizado algunas cosas. En primer lugar que "formación" equivale a "array". En segundo lugar lo siguiente: si consideramos que los esquemas de acción son secuencia, selección e iteración la analogía entre esquemas de datos y acciones sería la siguiente:

Secuencia <---> Tupla o registro

Selección <---> Union

Iteración <---> Formación (array)

Tratando de buscarle algo de lógica a esto, podríamos pensar que un registro nos permite definir una secuencia de variables, un union nos permite seleccionar entre tipos alternativos, y un array nos permite iterar una variable valiéndonos de índices.
Título: copiar un vector en otro en C/C++
Publicado por: nosferacento en 28 de Febrero 2013, 08:27
PREGUNTA: Dadas las variables A y B de tipo vector de tres elementos, si queremos copiar todos los elementos de A en B, en C/C++ escribimos:

a) B=A;

b) for(int i=1; i<=3; i++){ B[ i ] = A[ i ]; }

c) A=B;

d) for(int i=0; i<3; i++){ B[ i ] = A[ i ]; }






RESPUESTA: la opción correcta es la d). Según esta opción se asigna a cada elemento de B el contenido correspondiente de cada elemento de A. En algunos lenguajes se puede asignar directamente el contenido de un vector a otro, pero en C/C++ no. En C/C++ hemos de realizar la asignación elemento a elemento recorriendo el vector con un for. Recordar que los índices de vectores en c/c++ comienzan en cero, por lo que la opción b) no es correcta.


Título: paso por argumento o por valor en C/C++
Publicado por: nosferacento en 04 de Marzo 2013, 10:35
PREGUNTA: En C/C++, dentro de un subprograma, un argumento:

a) No puede cambiar de tipo

b) Puede cambiar de tipo si se pasa por referencia

c) Puede cambiar de tipo si se pasa por valor

d) Nunca puede cambiar de valor







RESPUESTA: La opción correcta es la a). Si analizamos las otras opciones, el paso por referencia o valor afecta a que un argumento pueda ser modificado en su valor, pero nunca podrá ser modificado en su tipo. Por tanto las opciones b, c y d no son correctas.

Título: Re:Preguntas examen Fundamentos de programación UNED Ingeniería Informática
Publicado por: nosferacento en 19 de Marzo 2013, 08:04
PREGUNTA: ¿Qué características tienen los elementos locales?


a) Son visibles en su ámbito y fuera

b) Son invisibles en su ámbito y fuera

c) Son invisibles en su ámbito y visibles fuera

d) Son visibles en su ámbito e invisibles fuera







RESPUESTA: La opción correcta es la d). Analicemos una por una. Los elementos locales son visibles en su ámbito y no son visibles fuera de su ámbito luego la a) es incorrecta y la b) y c) también. Un "elemento local" típico es una variable declarada dentro de una función. Puede haber algo de confusión si pensamos en parámetros (que se pueden pasar por valor o por referencia), pero el asunto aquí está en pensar que un parámetro es un parámetro y un elemento local una variable local.

Título: concepto de programación lógica
Publicado por: nosferacento en 21 de Marzo 2013, 08:15
PREGUNTA: El modelo de programación lógica:


a) Imita la arquitectura de Von Newmann

b) Se basa en el uso de funciones

c) Se basa en la declaración de hechos y reglas

d) Es el que utiliza C/C++







RESPUESTA: La opción correcta es la c). La programación lógica es un tipo de programación declarativa: se basa en declarar hechos y reglas que permiten resolver, por inferencia lógica, un problema. Es un tipo de programación bastante peculiar (y con más uso en investigación que en el mercado laboral donde prácticamente no se trabaja con ella).
Título: identificadores de tipo y de variable en C/C++
Publicado por: nosferacento en 22 de Marzo 2013, 13:36
PREGUNTA: En C/C++, cuando se utiliza:

typedef struct Uno{Dos Tres; Cuatro Cinco;};



a) Uno y Cuatro son identificadores de tipo

b) Tres y Cinco son identificadores de tipo

c) Dos y Cinco son identificadores de tipo

d) Uno y Tres son identificadores de tipo







RESPUESTA: la opción correcta es la a). Uno define el tipo registro que consta de dos variables internas, una variable denominada Tres que es de tipo Dos y una variable denominada Cinco que es de tipo Cuatro. La opción b) es incorrecta porque Tres no es un identificador de tipo, sino un nombre o identificador de variable. La opción c) no es correcta porque Cinco no es un identificador de tipo, sino un nombre o identificador de variable. La opción d) no es correcta porque Tres no es un identificador de tipo, sino un nombre o identificador de variable. En resumen, los identificadores de tipo son Uno, Dos y Cuatro. Todas las opciones donde interviene Tres y Cinco son incorrectas. La dificultad de esta pregunta está en los nombres de variables y tipos que se utilizan: parece un trabalenguas.
Título: procedimiento y paso de parámetros por variable en C/C++
Publicado por: nosferacento en 24 de Marzo 2013, 14:23
PREGUNTA: Tras la ejecución del siguiente fragmento de código en C/C++:

int a;

void proc (int &b, int &c){
b = 2;
c = a%2;
b = a+b * c;
}

a = 1;
proc (a,a);
printf ("Variable a = %d , a);



a) La variable a vale 3

b) La variable a vale 2

c) La variable a vale 1

d) La variable a vale 0







RESPUESTA: la opción correcta es la d).

Analicemos el código, empezando por el procedimiento proc. Este procedimiento recibe dos parámetros que se pasan por variable: parámetros b y c. El parámetro b (y la variable asociada) toman valor 2. A continuación el parámetro c (y la variable asociada) toman el valor del resto de dividir el valor que tenga la variable a entre 2, que puede ser 0 si a es par ó 1 si a es impar. En este caso a se declara en la parte inferior del código y vale 1, es decir, es impar, con lo cual c toma valor 1. A continuación se establece que b es igual a -- > a+b*c que será en nuestro caso 1+b*1, es decir, b termina con un valor igual a b+1 mientras que c termina con un valor 1.

El problema o dificultad radica en que el procedimiento se invoca pasándole a como parámetro con lo cual tenemos que atender a lo que pasa a medida que evoluciona el código. Dado que a se pasa por referencia tanto como parámetro b como como parámetro c, a será sobreescrita cada vez que se modifique b o c. En la primera línea b = 2 con lo cual a toma valor 2. En la segunda línea del procedimiento c = 2%2 = 0 con lo cual a toma valor cero; En la tercera línea b toma valor a + b*c = 0 + b * 0 = 0, con lo cual a=0, b=0, c=0. Un poco lioso, pero analizándolo con detenimiento se puede sacar.

Título: ejercicio programación examen febrero 2013 calcular la moda de vector de enteros
Publicado por: nosferacento en 17 de Junio 2013, 00:28
EJERCICIO DE PROGRAMACIÓN (PARTE PRÁCTICA DEL EXAMEN)

Realizar en C/C++ un TAD, con fichero de interfaz y de implementación, capaz de almacenar hasta 50 valores enteros. El TAD dispondrá de un único subprograma: Moda, que devuelve la moda de los números enteros almacenados en el TAD. Por ejemplo, la moda de {1,6,2,5,4,2,1,3,4,2} es 2 porque es el valor que aparece más veces (3 veces). En caso de que haya varias modas, se devolverá una cualquiera de ellas.

Nota: este fue el ejercicio de examen de febrero de 2013 (1ª semana, tipo A)


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


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

Archivo arrayConModa.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_arrayConModa.cpp. Con este archivo podemos hacer la ejecución en nuestro ordenador para comprobar que esté todo ok.

Nota: leer los comentarios adicionales incluidos en el pdf para tener una mejor orientación de cómo afrontar un problema de este tipo en situación de examen "real".

Título: Re:Preguntas examen Fundamentos de programación UNED Ingeniería Informática
Publicado por: elasfaltoesgris en 17 de Junio 2013, 18:15
Gracias por este foro.
No pude presentarme en Febrero este año y estoy preparando la asignatura para Septiembre. No te imaginas cuanto me estás ayudando.
Por favor, continúa.


Una última petición:
¿Podrías subir más ejercicios de programación de la parte práctica del examen, resueltos?
Son dificilísimos de rastrear, de hecho, creo que en tu foro es donde he encontrado el mayor número de ellos y por esa misma razón te estaría inmensamente agradecida si todavía hubiese más. Ya sabes como somos, nos ofrecen la mano y pedimos el brazo.

Gracias otra vez
Título: Re:Preguntas examen Fundamentos de programación UNED Ingeniería Informática
Publicado por: nosferacento en 20 de Junio 2013, 00:24
Sí, sí, claro que continuo... si ves la fecha del primer post sobre la asignatura POO es de « : 04 de Septiembre 2011, 11:14 », es decir, que voy ampliando el catálogo poco a poco. El asunto es que tengo que ir sacando tiempo en ratos libres para hacer esto, de ahí que no pueda ir más rápido  :-\, pero iré subiendo más cosas, entre ellas más ejercicios resueltos de programación de la parte práctica del examen  ;)

Título: pragma once en compiladores C/C++
Publicado por: nosferacento en 22 de Junio 2013, 11:41
Continuamos con otra tanda de 10 preguntas y problema de examen.

PREGUNTA: En C/C++, cuando se utiliza:         #pragma once


a) Se debe indicar un nombre del módulo
b) Tenemos una directiva del programa
c) Es una declaración del módulo
d) Hay una expresión del programa







RESPUESTA:

Un fichero .h (interfaz de un TAD) debe comenzar con las palabras clave #pragma once. ¿Pero qué es pragma once y para qué sirve? En los lenguajes de programación C y C++, #pragma once es una directiva del preprocesador. Está diseñada para asegurar que el código no se cargue múltiples veces, sino solo una vez, aunque sea invocado muchas veces.

La opción a) es falsa. Las opciones b, c y d podríamos decir que son un tanto confusas en el enunciado. La opción d) vamos a considerarla no válida ya que no se trata de una “expresión”, sino en todo caso de una directiva o una declaración. Suponiendo que el término declaración lo reservamos para declarar variables, constantes, etc. responderíamos la opción b). No obstante, ante preguntas que se vean de enunciado “dudoso” recomendamos incluir una hoja de aclaración en el examen dejando constancia de lo que hemos entendido y por qué hemos respondido lo que hemos respondido. Es la única oportunidad para poder reclamar después en caso de que efectivamente se pueda considerar que la redacción de la pregunta era ambigua o confusa. En este caso respondemos la b) ya que formalmente pragma once es una directiva, pero en un examen quizás no tengamos claro si puede haber un error en el enunciado de la pregunta, de ahí el comentario que hemos hecho.
Título: Ejecución de un código de ejemplo en C/C++
Publicado por: nosferacento en 24 de Junio 2013, 00:18
PREGUNTA: ¿Qué se muestra por pantalla después de ejecutar el siguiente código en C/C++?

#include <stdio.h>

int main(){

int i, j;
i = 0;
j = 12;
do {
printf("%d-" ,i*j);
i = i+2;
j = j-2;
} while(i != j);
}

a)  0-16-24-

b) 0-20-32-

c) 0-20-24-

d) Se ejecuta infinitamente







RESPUESTA: la respuesta correcta es la b), se muestra 0-20-32-

Analicemos por qué. Inicialmente i vale cero y j vale 12. Comienza el bucle do y se muestra por pantalla el resultado de la operación 0*12 seguido de un guión, es decir, 0-.

A continuación i vale 2  y j vale 10. Se evalúa la condición del bucle y al ser i distinto de j se produce la repetición. En esta pasada se muestra 2*10 que es 20 junto al guión, ya tenemos 0-20-. Ahora i vale 4 y j vale 8. No se cumple que sean iguales y se repite el bucle. Se muestra el resultado de 4*8 seguido de un guión y ya tenemos 0-20-32-.

Ahora i vale 6 y j vale 6. Al ser iguales no cumplen la condición de repetición y la ejecución termina.

Esta pregunta es básica, quien no la tenga clara es que le falta estudio o práctica!

Título: esquemas de la programación estructurada
Publicado por: nosferacento en 25 de Junio 2013, 12:14
PREGUNTA: La programación estructurada sugiere el uso de tres esquemas generales denominados:

a) Secuencia, selección y objetos
b) Selección, recursividad y objetos
c) Secuencia, selección y recursividad
d) Secuencia, selección e iteración







RESPUESTA: La opción correcta es la d). Esta pregunta es básica, quien no la tenga clara es que le falta estudio o práctica!


Título: función recursiva en C/C++
Publicado por: nosferacento en 26 de Junio 2013, 10:35
PREGUNTA: Dada la siguiente función en C/C++:

int suma (int x) {
if (x == 0) { return 0; }
else { return (x+suma(x-1) - 1); }
}


a) La llamada suma(5) devuelve 0

b) La llamada suma(5) devuelve 5

c) La llamada suma(5) devuelve 10

d) La llamada suma(5) devuelve 15







RESPUESTA: la opción correcta es la c), la llamada devuelve 10.

Esta pregunta es un tanto compleja porque es un caso de recursión (función que se llama a sí misma). No te desesperes si no lo ves a la primera porque la recursión es algo trabajoso incluso para programadores con muchos años de experiencia. En esta función el caso base que da lugar a la terminación de la recursión es que el parámetro pasado valga cero. Para analizar la recursión tenemos:

Primera invocación: no estamos en el caso base ya que x vale 5 y el resultado obtenido es 5 + suma(4) -1

Segunda invocación: el resultado obtenido es 4 + suma(3) -1

Tercera invocación: el resultado obtenido es 3 + suma(2) -1

Cuarta invocación: el resultado obtenido es 2 + suma(1) – 1

Quinta invocación: el resultado obtenido es 1 + suma(0) – 1, en este caso estamos en el caso base y salimos directamente y podemos decir que suma(1) vale 1 + 0 - 1 = 0

Salida de la cuarta invocación: 2 + 0 – 1 = 1

Salida de la tercera invocación: 3 + 1 -1 = 3

Salida de la segunda invocación: 4 + 3 -1 = 6

Salida de la primera invocación: 5 + 6 - 1 = 10

Por tanto el valor devuelto es 10. Si no lo entiendes a la primera, trata de hacerlo paso a paso siguiendo la traza del algoritmo.
Título: definición o concepto de complejidad en computación
Publicado por: nosferacento en 01 de Julio 2013, 13:04
PREGUNTA: La complejidad es una medida:

a) De la eficiencia de un programa

b) De la memoria utilizada en un programa

c) Del coste de desarrollo de un programa

d) De la dificultad de comprensión de un programa








RESPUESTA: la opción correcta es la a), es una medida de la eficiencia de un programa.

En este caso podemos responder por descarte, ya que un programa puede tener muy poca complejidad y consumir gran cantidad de memoria luego la b) es falsa. Tampoco mide el coste de desarrollo, un programa puede ser costoso simplemente por ser extenso o por manejar muchos datos, no por ser complejo. Finalmente la dificultad de comprensión no tiene que ver con la complejidad ya que un programa donde los nombres de variables están deliberadamente puestos para confundir puede ser muy difícil de comprender y sin embargo su complejidad computacional ser baja.

También podemos responder si recordamos la definición de complejidad: la función de complejidad es aquella que nos indica la eficiciencia de un programa (generalmente medida en términos de tiempo de ejecución) en función del tamaño del problema.


Título: registros con variantes en C/C++ con struct y union
Publicado por: nosferacento en 04 de Julio 2013, 13:23
PREGUNTA:  Para declarar un registro con variantes:   

a) Uno de los campos del tipo struct debe ser un tipo union

b) Uno de los campos del tipo union debe ser un tipo struct

c) Todos los campos del tipo struct deben ser un tipo union

d) Todos los campos del tipo union debe ser un tipo struct







RESPUESTA: la opción correcta es la a)

Un tipo union se puede introducir dentro de un tipo struct y a esto se le denomina registro con variantes.

El tipo union permite declarar un tipo donde existe un campo indicador de qué variante de las previstas es la actual en un momento dado. Ejemplo: declaramos un union como:

typedef union Numerico {
   int entero;
   float real;
};

Además declaramos otro tipo: typedef char TipoCadena[40];

Luego declaramos un registro con variantes por ejemplo:

Typedef struct Parametro {
Numerico valorNumerico;
TipoCadena valorCadena;
}

En el registro con variantes, uno de los campos del struct es de tipo union. Un poco de trabalenguas…

(http://www.ajedrezmostoles.com/wp-content/uploads/2011/10/parte-contratante.jpg)
Título: código confuso en C/C++
Publicado por: nosferacento en 05 de Julio 2013, 11:00
PREGUNTA: En C/C++, cuando se utiliza:

void Uno(Dos Tres, Cuatro Cinco)


a) Uno es un identificador de función

b) Tres y Cinco pueden ser el mismo identificador

c) Uno es un identificador de variable

d) Dos y Cuatro pueden ser el mismo identificador







RESPUESTA:

Pregunta bastante enrevesada, hasta difícil de entender. Dado que los nombres son bastante confusos, si le ponemos nombres razonables es más fácil responder a esta pregunta. Por ejemplo: void Calcular (int Preciokg, double Pesokg) sería una posible declaración de procedimiento. Calcular es un identificador de procedimiento, no de función, luego la respuesta a) es falsa. ¿Preciokg y Pesokg pueden ser el mismo identificador? En principio diremos que no porque son parámetros a usar en el procedimiento y habría una colisión de nombres, de hecho si intentas compilar esto:

void Calcular(int Preciokg, double Preciokg) {
printf("Hola");
}

El resultado es error: tipos en conflicto

Calcular es un identificador de función luego la c) es falsa. ¿Dos y Cuatro pueden ser el mismo identificador? Podríamos escribir void Calcular (double Preciokg, double Pesokg) de modo que Dos y Cuatro serían el mismo identificador. Respondemos esta por descarte de las anteriores, porque si quisiéramos darle vueltas nos podríamos aquí pasar un rato discutiendo… para llegar a la conclusión de que este enunciado es un tanto confuso, y por tanto no merece la pena pararse demasiado en él  ::)
Título: operadores lógicos en C/C++ y su precedencia
Publicado por: nosferacento en 06 de Julio 2013, 11:28
PREGUNTA:  Si a = true, b = true, y c = true, ¿cuál de las siguientes expresiones se evalúa como verdadera?

a)   !(!a || c || !b)

b)   a && !c || b

c)   ! (!c || b && a)

d)   a && !(a || !c)







RESPUESTA: La opción correcta es la b). Veamos por qué.

Para la opción a) empezamos evaluando por partes. !a es false, c es true y !b es false. Por tanto dentro del paréntesis tenemos (false OR true OR false) y esto es true. Al aplicar la negación el resultado es que a) resulta false.

Para la opción b) tenemos true AND false OR true. Debemos recordar la prioridad de operadores que es conjunción > disyunción. Por tanto hacemos true AND false resultando false. false OR true es lo que evaluamos a continuación por lo que resulta true.

Para la opción c) tenemos dentro del paréntesis (false OR true AND true) que resulta (true AND true) que resulta true. Con la negación inicial obtenemos false.

Para la opción d) tenemos dentro del paréntesis (true OR false) que resulta true, pero con la negación que precede al paréntesis queda en false. Ahora nos queda true AND false resultando false.
Título: paso de argumentos por referencia en C/C++
Publicado por: nosferacento en 07 de Julio 2013, 12:26
PREGUNTA: Cuando un argumento se pasa por referencia en C/C++:

a) No se podrá usar una expresión como argumento real

b) No se puede modificar el argumento real en el subprograma

c) Es siempre una variable global

d) Sólo puede ser de tipo entero







RESPUESTA: La opción correcta es la a)

El argumento real es el valor o expresión que se pasa a un subprograma cuando se invoca. Cuando se pasa un argumento por valor el subprograma recibe un valor y esto puede hacerse pasándole una variable o una expresión, o un número, un carácter, etc. ya que este argumento no es modificado en el subprograma. Cuando se pasa un argumento por referencia ha de pasarse una variable que podrá ser modificada en el subprograma. No se puede pasar una expresión ya que esto no tendría sentido en un paso por referencia.

La opción b) es falsa, si se pasa por referencia, el argumento real que es la variable sí se puede modificar en el subprograma.
La opción c) no es cierta, no tiene por qué ser una variable global.
La opción d) no es cierta, no tiene por qué ser un tipo entero, puede ser otro tipo.

Título: ejemplo código C/C++ pasando variables por referencia
Publicado por: nosferacento en 08 de Julio 2013, 09:24
PREGUNTA: Tras la ejecución del siguiente fragmento de código en C/C++:

int local;
void Producto (int & x, int & y) {
x = 2;
y = x+1;
local = local*x*y;
}

local = 1;
Producto(local,local);


a) La variable local vale 6

b) La variable local vale 0

c) La variable local vale 27

d) La variable local vale 9







RESPUESTA: La opción correcta es la c).

Local comienza valiendo 1 y en ese momento se invoca el procedimiento producto pasándole por referencia local tanto como parámetro x como parámetro y. En la primera línea se ejecuta local = 2; en la segunda línea se ejecuta local = local + 1 = 2 + 1 = 3. Ahora local vale 3. En la tercera línea se ejecuta local = local * local * local = 3*3*3 = 27

Tener en cuenta que al pasar por referencia en dos parámetros distintos cada vez que se modifica alguno de los parámetros se está modificando la variable en sí. Esto no ocurriría si el paso de argumento fuera por valor.
Título: ejercicio programacion examen febrero 2013 TAD almacenar y operar datos hasta 50
Publicado por: nosferacento en 09 de Julio 2013, 08:41
EJERCICIO DE PROGRAMACIÓN (PARTE PRÁCTICA DEL EXAMEN)

Realizar en C/C++ un TAD, con fichero de interfaz y de implementación, capaz de contener los siguientes datos de 50 personas: Nombre, Primer Apellido, Segundo Apellido, Estado civil (soltero, casado, divorciado) y edad. El TAD dispondrá de los siguientes subprogramas: MayoresDe, que recibe como entrada un número natural e imprime por pantalla los datos de aquellas personas cuya edad sea mayor o igual que la solicitada; ContEstadoCivil, que recibe como entrada un estado civil y devuelve el número de personas que tienen ese estado civil; GuardarNuevo, que recibe los datos de una nueva persona y los almacena en el TAD.

Nota: este fue el ejercicio de examen de febrero de 2013, 2ª semana, tipo B.




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

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

Archivo arrayPersonas.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_arrayPersonas.cpp. Con este archivo podemos hacer la ejecución en nuestro ordenador para comprobar que esté todo ok.


Título: Re:Preguntas examen Fundamentos de programación UNED Ingeniería Informática
Publicado por: siarcrpg en 06 de Agosto 2013, 13:10
Muchisimas gracias por tu esfuerzo; no sabes la ayuda que nos das con tus explicaciones.

GRACIAS!!!!!!!!
Título: Re:Preguntas examen Fundamentos de programación UNED Ingeniería Informática
Publicado por: nosferacento en 07 de Agosto 2013, 09:10
Agradezco todos los mensajes que me haceis llegar, si no hubiera "feedback" creo que habría abandonado; me tomo mis descansos pero continuo. Saludos.
Título: Re:Preguntas examen Fundamentos de programación UNED Ingeniería Informática
Publicado por: elasfaltoesgris en 29 de Agosto 2013, 00:10
Soy consciente de que te mereces tus descansos pero por favor, no los dilates demasiado.
Me asomo todos los dias a este foro para comprobar si has subido algo nuevo.
Un saludo.
Título: Re:Preguntas examen Fundamentos de programación UNED Ingeniería Informática
Publicado por: nosferacento en 30 de Agosto 2013, 01:52
Creo que igual ya eres más experta que yo en C/C++  ;) tratando de retomar el hilo, pasemos a otra pregunta.

PREGUNTA: En el lenguaje C/C++, la sentencia: algo++;

Se puede utilizar:


a) En la parte declarativa pero no en la ejecutiva de un programa
b) En la parte ejecutiva pero no en la declarativa de un programa
c) Tanto en la parte declarativa como en la ejecutiva de un programa
d) Sólo formando parte de un bucle for







RESPUESTA: la opción correcta es la b. La pregunta parece simple, pero no lo es tanto. En primer lugar hay que saber que algo no es una sentencia de C/C++, por tanto debe ser un nombre de variable. Si a una variable le aplicamos nombreVar++; lo que hacemos es incrementar en una unidad su valor. La expresión algo++; equivale a algo = algo +1; En la parte declarativa no tendría sentido usar esta sentencia así, a secas. Sin embargo podríamos preguntarnos si una expresión como int var = algo++; ó var = algo++; sería admisible. El resultado que obtenemos con el compilador es que no se admite esta expresión ni en la parte declarativa ni en la ejecutiva. Lógico, si intentamos la traslación de var = algo++; obtendríamos var = algo = algo+1; y esto no tendría sentido. Una expresión como algo++; debe aparecer individualmente, no puede aparecer dentro de una asignación ni de otra operación excepto en un bucle for. En un for la expresión sería del tipo for (int algo=1; algo<=limite; algo++) { … }


Título: bucle infinito en C/C++ con un for
Publicado por: nosferacento en 31 de Agosto 2013, 00:10
PREGUNTA: El siguiente fragmento de código en C/C++:

typedef int TipoVector[5];
TipoVector vector;
for(int i = 0; i <= i; i++){
printf("%d", vector[ i ]);
}

a) Ejecuta la sentencia de impresión 0 veces
b) Entra en un bucle infinito
c) Ejecuta la sentencia de impresión 1 vez
d) Ejecuta la sentencia de impresión 5 veces








RESPUESTA: la respuesta correcta es la b). Si nos fijamos se declara i = 0 y la condición de ejecución es que i sea menor o igual que i. Como esto siempre va a ocurrir, el bucle intentará ejecutarse infinitas veces.
Título: ordenes de complejidad y eficiencia computacional
Publicado por: nosferacento en 01 de Septiembre 2013, 00:25
PREGUNTA: ¿Cuál de los siguientes órdenes de complejidad de crecimiento asintótico es más eficiente?

a) O(log n)
b) O(n log n)
c) 0(n2 )
d) O(2n)







RESPUESTA: la respuesta correcta es la a). Hay que tener en cuenta que el orden de complejidad indica cómo crece el coste computacional (normalmente medido en términos de tiempo que se requiere para ejecutar un algoritmo a medida que crece el tamaño de datos de entrada). El peor coste posible entre las opciones que se dan es el exponencial de la opción d, seguido por el cuadrático de la opción c y luego por el n-logarítmico de la opción b. El mejor coste entre los indicados es el logarítmico. Este indica que el coste de computación crece logarítmicamente con el tamaño del problema n.

(http://artemisa.unicauca.edu.co/~nediaz/EDDI/img/comparacion.gif)

Título: bucle while con vectores en C/C++
Publicado por: nosferacento en 02 de Septiembre 2013, 00:05
PREGUNTA: Dado el siguiente fragmento de programa en C/C++, con un valor de j positivo:

while (j > 0) { v[j] = v[j-1]; j--;}

Se produce:


a) La inserción de un nuevo elemento en el vector v
b) La búsqueda de un cierto elemento en el vector v
c) Un desplazamiento de los elementos del vector v
d) Un bucle que no finaliza nunca







RESPUESTA: La opción correcta es la c).
Supongamos que j vale 2. Al entrar en el bucle v[2] = v[1] y j pasa a valer 1. Se repite el bucle y v[1]= v[0] y j pasa a valer 0. Como j no es mayor que cero no se repetiría el bucle. La opción a es incorrecta, no se produce la inserción de un nuevo elemento en el vector. La opción b es incorrecta, tampoco se produce una búsqueda de un cierto elemento en el vector v. La opción d es incorrecta, el bucle finalizará (en principio). La opción c) sí es correcta: los elementos se desplazan de modo que el elemento de índice superior toma el valor que tenía el elemento de índice inferior.

Título: Re:Preguntas examen Fundamentos de programación UNED Ingeniería Informática
Publicado por: chasq en 02 de Septiembre 2013, 17:41
Mil gracias por tus aportes!!!
Son una estupenda ayuda para esta asignatura.Espero que te plantees ser profesor...
 :) :) :)
Título: Re:Preguntas examen Fundamentos de programación UNED Ingeniería Informática
Publicado por: nosferacento en 03 de Septiembre 2013, 00:28
Con el tiempo, quién sabe  ::). Aunque ser profesor es algo que bajo mi punto de vista conlleva una gran responsabilidad. Por eso se agradecen tanto los buenos profesores y se sufre tanto con los malos, que de todo hay. Como siempre agradezco los comentarios (sobre todo si son positivos  ;D), en este caso los tuyos en particular.
Título: bucle while de búsqueda de un elemento en vector con C/C++
Publicado por: nosferacento en 04 de Septiembre 2013, 00:16
PREGUNTA: Dada la función posicion en C/C++:

typedef char Vchar[40];
int posicion(Vchar cad, char c){
int pos = -1; int i = 0;
while ( cad [i ] != '\0' ){
if(cad[i ] ==c){ pos = i;}
i++;
}
return(pos);
}

Si la llamamos con posicion("EJEMPLO DE", 'E'):


a) La función posicion devuelve 0
b) La función posicion devuelve 9
c) La función posicion devuelve 2
d) La función posicion devuelve -1








RESPUESTA: La respuesta correcta es la b). Nada trivial, además los nombres de variables empleados pueden confundirnos fácilmente. Analizamos el código. En primer lugar declara un tipo Vchar que es un array de caracteres de 41 caracteres, una cadena de texto. Luego declara una función denominada posicion que devuelve un entero y recibe dos parámetros: una cadena de tipo Vchar, cad,  y un carácter simple que viene en una variable denominada c. Declara dos variables locales, pos y le asigna valor -1 y i con valor cero.

Ahora se ejecuta el bucle: mientras el elemento de índice i, en primer lugar el de índice cero, en la cadena, sea distinto del carácter especial de final de cadena, si ese elemento del array contiene el carácter que viene en la variable c, el valor de posición en el array se almacena en la variable pos. i se incrementa unitariamente y se vuelve a repetir el bucle.   

Nota sobre el significado de \0: El \0 es un carácter especial oculto que señala el final de una cadena en C/C++.

En resumen el bucle lo que hace es buscar el carácter que recibe en la llamada a la función dentro de la cadena que se le pase. Si encuentra el carácter, la función almacena la última posición en que se ha encontrado. Al terminar, devolverá la última posición en que se encuentra el carácter dentro de la cadena. Si no encuentra el carácter, la función devolverá menos 1. En este caso la cadena es “EJEMPLO DE” cuyas posiciones son “0123456789” y el carácter que se busca es la E mayúscula. La E se encuentra en posiciones 0, 2 y 9. Como la posición 9 es la última que se encuentra, es la que devuelve finalmente la función. El razonamiento no es demasiado complejo, pero deshacer este ovillo con la presión de un examen ya es otro cantar. Un matiz que nos puede liar es que no es lo mismo 'c' que c, en el primer caso sería el carácter c y en el segundo una variable de nombre c.
Título: concepto de unidad de compilación en C/C++
Publicado por: nosferacento en 06 de Septiembre 2013, 18:18
PREGUNTA:  En el lenguaje C/C++, las unidades de compilación son:

a) Sólo el programa principal y el fichero de implementación de los módulos

b) Sólo el fichero de implementación de los módulos

c) El programa principal, el fichero de interfaz y el fichero de implementación de los módulos

d) Sólo el programa principal y el fichero de implementación de los módulos








RESPUESTA: La respuesta correcta es la c).

Esta preguntita se las trae en lata porque no hay razonamiento que valga (o casi), con lo cual o la sabemos “de memoria” o no la sabemos. Y si no la sabemos tenemos un 75 % de posibilidades de fallar, con lo cual mejor no responderla. Además cuando repasamos el por qué de la respuesta, no es que sea lo que se dice algo claro y unívoco. Bien, el por qué se escoge la respuesta c) está aquí: “El módulo principal (.ccp), el fichero interfaz (.h) y el fichero de implementación de un módulo (.cpp) pueden considerarse unidades de compilación en el sentido de que es posible invocar la compilación de cada uno de ellos por separado. En realidad a la hora de preparar una aplicación sólo se mandan compilar realmente los cpp, que son los ficheros que generan código objeto, mientras que los .h se cargan dentro de los cpp cuando son llamados. La inclusión de los .h se hace en una fase inicial de la compilación denominada preproceso.”

Hemos omitido algo de texto para no liarla más. Mejor pasar a la siguiente.
Título: vector abierto en C/C++ uso con const
Publicado por: nosferacento en 07 de Septiembre 2013, 14:56
PREGUNTA: Dado el siguiente fragmento de programa en C/C++:     const int v[],

Es una declaración de:


a) Un argumento de tipo vector abierto
b) Una constante de tipo cadena
c) Un argumento de tipo cadena
d) Una constante de tipo vector abierto








RESPUESTA: La opción correcta es la a). Puede resultar un poco confuso porque aparece el argumento aislado de la función, pero veamos por qué elegir la a).
Tenemos que recordar que en C/C++ no se permite la declaración de vectores abiertos, ni como variables ni como constantes. La respuesta b) la descartamos porque ni es una constante ni aparece char para poder pensar que se trate de una cadena. La respuesta c) la descartamos porque no se trata de un vector de char, que sería una cadena, sino un vector de int (enteros). La respuesta d) la descartamos porque no es posible declarar constantes de tipo vector abierto (esto concuerda con la lógica de C/C++, ¡no tendría sentido que se permitiera declarar como constante algo que no tiene una dimensión ni un valor!). Por descarte hemos llegado a que la a) es la respuesta correcta. A modo de recordatorio, diremos que nombreFuncion (int v[], int n) hace que el vector abierto sea argumento de la función y se reciba por referencia. Si se usa nombreFuncion (const int v[], int n) el vector se pasa por valor. El parámetro n debe traer la dimensión del vector que se pasa a la función y es obligatorio excepto en el caso de vectores de char (cadenas), donde el carácter de final de cadena ‘\0’ se usa como indicador de final de vector.
Título: uso de variables globales en programas
Publicado por: nosferacento en 09 de Diciembre 2013, 11:52
PREGUNTA: El uso de variables globales:

a) No tiene por qué evitarse
b) Sólo puede evitarse mediante el paso de argumentos por valor
c) Sólo puede evitarse mediante el paso de argumentos por referencia
d) Puede evitarse mediante el paso de argumentos por valor y por referencia






RESPUESTA:

Variables globales son las reconocidas en todo el ámbito del programa.

Si pasamos argumentos por valor el argumento no se modifica durante la operación de la función, lo que impide "manipulaciones indeseadas" de la variable que se pasa.

Si pasamos argumentos por variable el argumento sí se puede modificar durante la operación de la función, lo que permite que varíe el valor de la variable que se pasa.

La pregunta no es demasiado clara. Vamos a tratar de razonar para responderla:

1) Idealmente el resultado de una función debe ser predecible de antemano en función de los argumentos que se le pasan. A esto se le denomina transparencia referencial y se garantiza si la función utiliza solo elementos locales o mencionados en la lista de argumentos. La función no debería usar variables globales porque pueden modificar el resultado de la función siendo algo ajena a ella. Si un subprograma modifica una variable ajena se dice que está produciendo efectos secundarios o laterales (side effects).

2) Idealmente todos los argumentos de funciones deberían pasarse por valor porque el objetivo de las funciones debería ser devolver el resultado en función de unos argumentos y nada más.

Pasar argumentos por valor no garantiza que no se usen variables globales dentro de una función. Pasar argumentos por referencia idem.

El uso de variables globales no tiene por qué evitarse siempre que se haga de forma controlada y razonada.

Esta pregunta es confusa y por tanto daríamos la respuesta a) al mismo tiempo que incluimos una explicación adicional (hoja adicional) indicando por qué hemos respondido esta opción.

Título: Re:Preguntas examen Fundamentos de programación UNED Ingeniería Informática
Publicado por: galoroca2013 en 20 de Diciembre 2013, 00:57
Hola Gracias por tomarte el tiempo para ayudarnos, son excelentes tus explicaciones y han sido de gran ayuda.
Un saludo
Título: Re:Preguntas examen Fundamentos de programación UNED Ingeniería Informática
Publicado por: nosferacento en 20 de Diciembre 2013, 22:06
Gracias mil, como siempre digo sólo paro para coger carrerilla. Suerte a todos los que están estudiando!
Título: concepto de secuencia enlazada y formación en C/C++ (lenguajec, cplusplus)
Publicado por: nosferacento en 20 de Marzo 2014, 10:44
PREGUNTA: Respecto al número de elementos podemos afirmar que:

a) Las secuencias enlazadas son ilimitadas y las formaciones limitadas

b) Las secuencias enlazadas y las formaciones son limitadas

c) Las secuencias enlazadas y las formaciones son ilimitadas

d) Las secuencias enlazadas son limitadas y las formaciones ilimitadas







RESPUESTA:

Pregunta difícil de entender. ¿Qué están preguntando? Poco claro, y si no sabemos qué se pregunta dar una respuesta es difícil. Voy a dar una respuesta haciendo una suposición.

Si suponemos que con secuencias enlazadas se refieren a una estructura de datos enlazada a través de punteros como una lista enlazada, son ilimitadas ya que podemos añadir o eliminar elementos dinámicamente.

Si suponemos que con formaciones se refieren a arrays (vectores o matrices tradicionales), éstos en C/C++ tienen un tamaño fijo y que no puede cambiar, por tanto diremos que son limitadas.

Respondemos por tanto la opción a).
Título: redes de operadores y modelo abstracto de cómputo
Publicado por: nosferacento en 31 de Marzo 2014, 09:57
PREGUNTA: Las redes de operadores se utilizan en:

a) El modelo abstracto de cómputo funcional

b) El modelo abstracto de cómputo lógico

c) El modelo abstracto de cómputo imperativo

d) El modelo abstracto de cómputo flujo de datos







RESPUESTA: la opción correcta es la d).

Pregunta difícil de responder puesto que para poder responderla hemos hacerlo por pura memorización. Para responderla tenemos que recordar esto: “El modelo de cómputo de flujo de datos hace que los programas se basen en un conjunto de operadores (por ejemplo +, - , *, /, etc.) que forman una red. Cada operador se representa como un cuadrado con entradas numéricas y salidas (el resultado de aplicar el operador a las entradas)."
Título: Re: Exámenes resueltos Fundamentos de programación UNED Ingeniería Informática 1ero
Publicado por: Georgepiell en 19 de Abril 2025, 00:04
Hey everyone, Ive been using KickStart Keto for a while now and honestly, its been a game changer.
 
I feel like my fat loss finally started moving again, and its easy to take.
Thought it might be hype, but so far, Im happy with it.
 
If you're into keto, it might be worth checking out:
Check this: https://kickstartketos.com/
 
Hope this helps.