Don't talk, if you can read; don't read if you can write; don't write if you can think. HANNA ARENDT, Diario filosófico

domingo, 15 de abril de 2012

Implementación del condicional en el calificador de Moodle

No parece éste el sitio más indicado para publicar esto, pero ahí va: 

1. ¿Cómo surgió el problema?

A principios del curso 2011/12, los profesores de Bachillerato, en la modalidad semipresencial, de mi centro llegamos a un acuerdo sobre el sistema de calificación, que consistía en que la nota de cada trimestre se obtendría haciendo una media ponderada de la nota de examen (60%), las de las tareas (30%) y la de tutorización (10%), siempre que en la nota de examen el alumno tuviese al menos un 3,5. En caso contrario, la nota del trimestre sería simplemente la nota de examen.

Y dado que en nuestra labor docente utilizamos Moodle, surgió entonces la pregunta de si se podría conseguir que el calificador de Moodle hiciera estos cálculos.

La forma natural de hacerlo sería que el calificador dispusiera de un condicional para incorporarlo en las fórmulas de cálculo. Pero esto no es así.
Una solución sencilla es exportar las calificaciones a una hoja Excel o Calc, que sí disponen del condicional.
No obstante, si no tenemos otra cosa mejor que hacer, podemos plantearnos si se puede simular el condicional empleando alguna de las funciones que incorpora el calificador.
En esta imagen se ven las funciones disponibles:


 
2. La solución

En términos matemáticos, la nota de trimestre, N, de un alumno viene dada por la siguiente función:


donde E es la nota de examen, y P es la nota media ponderada, calculada así: 
 (TA es la nota de las tareas, TU es la nota de tutorización.)

Vayámonos a un contexto más general: supongamos que deseamos implementar en Moodle la siguiente función:

 (a y b no son necesariamente constantes, pero elijo esta notación por su sencillez.) 

Podemos expresar esta función así:

donde
 
Para implementar g podemos emplear la fórmula:  
=min(round([[x]]/(2*k);0);1) .
Y si k es mayor que 10/3, basta la fórmula más sencilla: =round([[x]]/2*k;0).

Por lo tanto, la fórmula buscada para implementar la función  f, para cualquier valor posible de k, es:

=[[a]]*(1-min(round([[x]]/(2*k);0);1)) + [[b]]* min(round([[x]]/(2*k);0);1)

En nuestro caso particular, teniendo en cuenta que 3,5 > 10/3, tenemos:

=[[E]]*(1-round([[E]]/7;0)) + [[P]]* round([[E]]/7;0)


3. Otra vuelta de tuerca

Pero en el momento de poner las notas del primer trimestre surgió de nuevo el debate entre nosotros acerca del sistema de calificación. Veamos un par de ejemplos que nos llevaron a repensar la cuestión:

Supongamos que un alumno tiene las siguientes notas: un 2 en el examen, un 1 en las tareas, y un 0 en tutorización. Y otro alumno tiene, respectivamente, 2, 6, y 6.
Del acuerdo inicial, se desprende que a ambos teníamos que calificarlos con un 2 (la nota se redondea al entero más próximo), pero parecía más justo ponerle un 3 al segundo, con objeto de valorar su esfuerzo.

Por otro lado, si un alumno tenía un 5 en el examen y 0 en tareas y tutorización, su nota final sería un 3, suspenso, y creíamos que debería aprobársele. Pensemos, por ejemplo, que por sus obligaciones laborales o familiares no puede acudir a clase ni hacer las tareas (no olvidemos que se trata de una enseñanza semipresencial).

Mi propuesta para, manteniendo la idea de acuerdo inicial, dar solución a estos casos, fue la siguiente:

-Si un alumno obtiene menos de un 3,5 en el examen, su nota del trimestre será su media ponderada siempre que ésta no supere el 4. En tal caso, la nota de trimestre sería un 4.
- Si un alumno obtiene en el examen una nota superior o igual a 3,5 y menor que 5, su nota de trimestre será su media ponderada.
-Si un alumno obtiene un 5 o más en el examen, su nota de trimestre será su media ponderada siempre que ésta no sea inferior a 5. En tal caso, su nota será 5.

Así, la nota de trimestre, N, de un alumno vendrá dada por la siguiente función:
donde E es la nota de examen y P es la nota media ponderada.

Igual que hemos hecho antes, vamos a generalizar el problema considerando la función:   
Llamemos:
 

con  k < t.

Entonces podemos expresar  f  así:

Teniendo en cuenta que  g1  y  g2 son implementadas, respectivamente, por:

=min(round([[x]]/(2*k);0);1)    y    =min(round([[x]]/(2*t);0);1),

la fórmula que implementa  f  es:

= min(round([[x]]/(2*t);0);1)* [[c]] + (1-min(round([[x]]/(2*t);0);1))*
*( min(round([[x]]/(2*k);0);1)*[[b]] + (1-min(round([[x]]/(2*k);0);1))*[[a]])


En nuestro caso particular, y teniendo en cuenta que 3,5 y 5 son mayores 10/3, la fórmula queda algo más sencilla (o menos complicada):

= round([[E]]/10;0)* max([[P]];5)+(1-round([[E]]/10;0))*
(round([[E]]/7;0)*[[P]]+(1-round([[E]]/7;0))* min([[P]];4))


11 comentarios:

  1. Vaya, tuve este problema y pense en el round pero no llegué a darle tantas vueltas como tú. Casi es más sencillo implementar la funcion condicional en la "Calculatoor tool" no? :)

    ResponderEliminar
  2. Esto es exactamente lo que andaba buscando. Muchas gracias por vuestra aportación, que es muy valiosa por práctica e inteligente.

    ResponderEliminar
    Respuestas
    1. Muchas gracias.
      Cuando escribí esta entrada, dudaba que pudiera serle útil a alguien, de modo que, si le ha ayudado, me alegro de haberla escrito.

      Eliminar
  3. Me parece una entrada muy últil, ya que moodle a priori no tiene esta posibilidad, que de esta manera se ha conseguido solventar fácilmente.

    Muchas Gracias por compartirlo.

    ResponderEliminar
  4. Muy buen aporte, me ha dado muchas luces para resolver problemas de condicionales en el libro de calificaciones de moodle.
    Muchas gracias.

    ResponderEliminar
  5. Excelente aporte. Lo venía utilizando desde hace un tiempo sin problemas, sin embargo, con la actualización de la versión de Moodle ha dejado de funcionar ¿habéis tenido algún problema?

    ResponderEliminar
  6. ¡Genial! Ni se me había ocurrido. Gracias por haberlo compartido.

    ResponderEliminar
  7. Le he estado dando vueltas a la posibilidad siguiente. Dos temas (o dos exámenes) en los simultáneamente se deba superar la nota de corte. Si no se supera en ambos, la nota final ya no sería su suma (o media ponderada si se quiere), sino un valor establecido previamente (un 3, un 4, la nota del tema suspensos...). ¿Podría ser así?

    E1 es la nota del primer tema, por ejemplo.
    E2 es la nota del segundo tema.
    NC1 es la nota de corte para dar por superado el tema 1 (un 3, un 4, un 5..., lo que se quiera).
    NC2 es la nota de corte para dar por superado el tema 2 (puede ser igual que NC1, simplificando, o diferente).
    NF es la nota final que debe aparecer si no se ha superado alguno de los temas (un 3, un 4, la nota del tema suspenso...).

    Entonces:

    NOTA = min (1, round (E1 / 2 * NC1)) * min (1, round (E2 / 2 * NC2)) * sum (E1;E2) + (1 - min (1, round (E1 / 2 * NC1))) * NF + (1 - min (1, round (E2 / 2 * NC2))) * NF

    Si algún tema no supera la nota de corte, el valor mínimo dará 0 y todo ese término se anulará. Para hacer la suma (o media ponderada), ambos deben superar la nota de corte y así dar el mínimo como resultado un 1. En este caso, el segundo y tercer término se anularían (1-1). Si algún examen es 0, el primer término es 0 pero no el segundo o el tercero, que dará un 1 y, por tanto, NF.

    ¿Cómo lo veis?

    ResponderEliminar
  8. Hola Profeaula2:
    Gracias por tu aportación.
    Lo que propones es correcto excepto para el caso de que que ninguna de las notas de los temas llegue a su respectiva nota de corte (es decir, si E1<NC1 y E2<NC2). En este caso, la fómula que propones no resultaría NF (como debiera) sino NF + NF.
    Una solución es sustituir el sumando segundo y el tercero por
    max(1-min(1,round(E1/(2*NC1))),1-min(1,round(E2/(2*NC2)))*NF

    ¡Espero no haberme equivocado con los paréntesis!

    ResponderEliminar
  9. Para expresarlo mejor, la solución que te propongo es sustituir el conjunto formado por ambos sumandos (2º y 3º de tu fórmula) por la expresión que he escrito.

    ResponderEliminar
  10. Muy buena publicación, muchas gracias. He podido solucionar mi problema!

    ResponderEliminar