[ Foro de Pascal ]

Elegir la correcta declaración para el siguiente planteamiento

07-Sep-2008 18:26
MyName1 MySurname1
3 Respuestas

Muy buenas, mi duda es la siguiente:

Dado el siguiente enunciado: "En un centro se imparten 7 asignaturas a 100 alumnos en dos convocatorias (ordinaria y extraordinaria). Cada alumno se matricula o no de cada asignatura. En cada convocatoria, se presenta o no a aquéllas asignaturas de las que se ha matriculado, si se presenta obtiene una nota, número real entre 0 y 10. Si se codifica la situación 'No matriculado' como -2 y 'No presentado' como -1".

Se pregunta: "¿qué estructura podría representar correctamente la información de las calificaciones de los alumnos en un curso?":

Tenemos como respuestas a elegir:

a) Type
TConvocatoria=( ordinaria, extraordinaria);
TNota = -2 .. 10;
Tcalificaciones = vector [1..100, 1..7, TConvocatoria] de TNota;

b) Type
TConvocatoria=(ordinaria,extraordinaria);
Tcalificaciones=vector [1..100, 1..7, TConvocatoria] de real;


La respuesta correcta (según el profesor) es la b).
Asumo que sería la mejor opción como diseño del programa. Pero creo que con la opción a) también se podría implementar (sino me equivoco). Por eso no me queda claro y quería saber vuestra opinión. Ya que con la opción a) obtendríamos una matriz tridimensonal compuesto 'de una lista horizontal de 100 elementos, los alumnos en este caso, una lista vertical de las asignaturas, que son 7 elementos. Y para cada celda de esa bidimensión, una asignación, aparte de la nota (comprendida en el enumerado -2..10), de si es ordinaria o extraordinaria'.

Ese es mi argumento, y por ello mi duda. Si sabéis aclarármela lo agradecería.

Muchas gracias de antemano.

07-Sep-2008 18:57
MyName1 MySurname1

Al igual me ocurre con lo siguiente:

Dado este algoritmo:

Variables a,b,c,d:entero
funcion calcular (E/ c,e:entero): entero
variables d:entero
inicio
d <- 1
c <- 1
mientras c<=e hacer
d <- d * a (1)
c <- c+1
fin_mientras
calcular<-d
fin_calcular

inicio
a <-2
b <-3
c <- 4
d <- calcular (c,b) (2)
escribir (a, ', ', b ', ', c, ',' d)
fin


Las respuestas son:

a) El programa no compila y se detiene en (1).
b) El progrma compila pero da error de ejecución en (2).
c) El programa funciona correctamente y la salida es: 2,3,4,8.
d) La sentencia (1) no es correcta pero el programa funciona y la salida es: 2,3,4,8.

---------

Está claro que la salida del programa es 2,3,4,8.

Mi duda viene ahora en lo siguiente. Sabiendo que la salida del programa es 2,3,4,8, podría ser válida la opción c) y la d). Pero aclaro. Si tienes en cuenta que la sentencia (1) no es correcta en cuanto a posibles efectos colaterales de usar variables globales sin parametrizarlas en la función directamente en el cuerpo de la misma, vale, podría ser correcta entonces la d).
Pero ahí solamente dice "no es correcta" pero el programa funciona y la salida es: 2,3,4,8. Puedo interpretar que "no es correcta" se refiere a sintaxis (cosa que sí es correcta, ya que cumple la sintaxis, independientemente del mal uso de la variable "a". Por tanto, la sentencia (1) sería correcta y la respuesta correcta, en consecuencia, sería la c).

Pues este es una bonita pregunta de un bonito test que no superé debido a este tipo de dudas existenciales jejeje. Pero díganme, si os lo hacen a vosotros, qué respuestas escogeríais.

Gracias de nuevo.

08-Sep-2008 22:56
Nacho Cabanes (+83)

Para el primer mensaje: es cierto, la respuesta correcta es la B.

Si lees detenidamente el enunciado: "si se presenta obtiene una nota, número real entre 0 y 10", y tu propuesta es "TNota = -2 .. 10;"

Los tipos definidos como rangos, como ese -2..10, tienen un número finito de elementos, en tu caso: -2, -1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 , 10. No se trata de números reales. Por tanto, aunque tu solución sea "más elegante a la vista", no cumple los requisitos, y, por tanto, es incorrecta.


08-Sep-2008 23:08
Nacho Cabanes (+83)

En la segunda pregunta:

Yo también considero que la respuesta (C) es la correcta.

Vamos una por una:

"a) El programa no compila y se detiene en (1)."

La linea (1) es "d = d * a", que es correcta, no hay motivo para que no compile.

"b) El progrma compila pero da error de ejecución en (2)."

La linea (2) es "d = calcular (c,b)", una llamada a una función, simple, con el número de parámetros correcto y del tipo correcto, así que parece correcta.

"c) El programa funciona correctamente y la salida es: 2,3,4,8."

Parece razonable.

"d) La sentencia (1) no es correcta pero el programa funciona y la salida es: 2,3,4,8."

Si no es correcta, como bien dices, no es por sintaxis. Los posibles problemas son:

- Usa la variable "a", a la que no se ha dado un valor con anterioridad. Pero eso no es problema, porque es una función, y en el cuerpo del programa se le da un valor antes de la llamada.

- Se usan variables locales, y eso es mala política. Mala política, pero tanto como incorrecta... no tiene por qué considerarse así.


Conclusión: yo también voto por la (C)






(No se puede continuar esta discusión porque tiene más de dos meses de antigüedad. Si tienes dudas parecidas, abre un nuevo hilo.)