Mostrar Mensajes

Esta sección te permite ver todos los posts escritos por este usuario. Ten en cuenta que sólo puedes ver los posts escritos en zonas a las que tienes acceso en este momento.


Mensajes - nosferacento

Páginas: 1 ... 9 10 11 12 13 [14] 15 16 17 18 19 ... 23
261
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.

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

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

264
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".

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

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

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

268
PREGUNTA: Dada la expresión:   op1 || op2 podemos afirmar que:


a) op2 se evaluará siempre
b) op2 no se evaluará nunca
c) op2 se evaluará a veces
d) El operador no es válido en java



RESPUESTA: la opción correcta es la c). op2 se evaluará en algunos casos, pero no en todos. Con este operador se obtiene true si op1 o op2 son verdaderos; si op1 es verdadero no se evalúa op2 y se devuelve verdadero. Si op1 es falso se evalúa op2 y se devuelve el valor de verdad de op2. Esta forma de operación se denomina evaluación en cortocircuito o evaluación perezosa. No se evalúa op2 excepto cuando resulta necesario. Tener en cuenta que op1 y op2 pueden representar llamadas a funciones complejas o procesos complejos, por tanto no procesar algo que no es necesario supone ganar en eficiencia.

269
PREGUNTA: Un array que es parámetro de un método en Java:

a) Se pasa por valor, de ahí que no sea modificable dentro del método

b) Se pasa por referencia, de ahí que sea modificable dentro del método

c) Se pasa por valor y es modificable dentro del método

d) Se pasa por referencia pero no es modificable dentro del método



RESPUESTA: La opción correcta es la c). Como todos los objetos, los arrays se pasan como argumentos a los métodos por valor. No obstante, el array es modificable dentro de un método debido a que lo que se pasa por valor es la referencia al objeto (referencia que no podemos modificar), pero si manipulamos el objeto en lo que es su contenido o atributos, manipulado queda.

270
PREGUNTA: ¿Los elementos de un array tienen algún contenido si solamente hemos declarado y creado el array con una instrucción new, o se generará un error en tiempo de ejecución si tratamos de usar algún elemento sin haberlo inicializado con un contenido?



RESPUESTA: Los elementos de un array se inicializan al valor por defecto del tipo correspondiente (cero para valores numéricos, el carácter nulo para char, false para boolean, null para Strings y para referencias). Por tanto, un array tiene contenido certero desde el momento en que es creado con la instrucción new.

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

272
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í.  ???

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

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

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

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

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

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

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

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

Páginas: 1 ... 9 10 11 12 13 [14] 15 16 17 18 19 ... 23

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

Abraham Lincoln (1808-1865) Presidente estadounidense.

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

Preguntas y respuestas

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