¡Hola! Tengo que corregir un examen tipo test en el que se tienen varias preguntas con cuatro respuestas correctas. Hay que tener en cuenta si se acierta la respuesta, se falla o se deja en blanco, según una de las tres opciones se da una puntuación u otra: dos puntos si se acierta, un punto menos si se falla y medio punto menos si se deja en blanco. Todo tiene que hacerse de forma genérica, de modo que si se quiere modificar el formulario con más preguntas que sólo haya que cambiar el valor de un par de variables, no haya que añadir más código.
He escrito un código anidando fors y ifs, no sé si es la solución más adecuada.
function corregir(){
var numeroPreguntas=4;
var nombreid = new Array();
var correctas=["p12","p24","p33","p41"];
var cont=0, contAcierto=0, contFallo=0, contBlanco=0, contResultado=0;
for (pregun=1;pregun<=numeroPreguntas;pregun++)
{
for (respuesta=1;respuesta<=4;respuesta++)
{
nombreid[cont]="p"+pregun+respuesta; // me creo las ids de los radios a comprobar
var indice=nombreid[cont];
var seleccionada=document.getElementById(indice).check ed;
if(seleccionada){
for(i=0;i<correctas.length;i++)
{
if(indice==correctas[i])
{
alert("correcta"+" indice"+indice+" correctas"+correctas[i]);
contAcierto++;
contResultado=contResultado+2;
}
else{
contFallo++;
contResultado=contResultado-1;
}
}
}
else
{
contBlanco++;
contResultado-0,5;
}
cont++;
}
alert("aciertos "+contAcierto+"resultado "+contResultado+"en blanco "+contBlanco);
}
}
y el HTML es:
<FORM name="Preguntas">
<p>
<!-- Primera pregunta -->
1.- Este es el enunciado de la primera pregunta del test. </p>
<p>
<input type="radio" name="pregunta1" id="p11" value="A" /> Texto de la respuesta A. </p> <p>
<input type="radio" name="pregunta1" id="p12" value="B" /> Texto de la respuesta B. </p> <p>
<input type="radio" name="pregunta1" id="p13" value="C" /> Texto de la respuesta C. </p> <p>
<input type="radio" name="pregunta1" id="p14" value="D" /> Texto de la respuesta D. </p>
<p></p>
<!-- Segunda pregunta -->
2.- Este es el enunciado de la segunda pregunta del test. </p>
<p>
<input type="radio" name="pregunta2" id="p21" value="A" /> Texto de la respuesta A. </p> <p>
<input type="radio" name="pregunta2" id="p22" value="B" /> Texto de la respuesta B. </p> <p>
<input type="radio" name="pregunta2" id="p23" value="C" /> Texto de la respuesta C. </p> <p>
<input type="radio" name="pregunta2" id="p24" value="D" /> Texto de la respuesta D. </p>
<p></p>
<!-- Tercera pregunta -->
3.- Este es el enunciado de la tercera pregunta del test. </p>
<p>
<input type="radio" name="pregunta3" id="p31" value="A" /> Texto de la respuesta A. </p> <p>
<input type="radio" name="pregunta3" id="p32" value="B" /> Texto de la respuesta B. </p> <p>
<input type="radio" name="pregunta3" id="p33" value="C" /> Texto de la respuesta C. </p> <p>
<input type="radio" name="pregunta3" id="p34" value="D" /> Texto de la respuesta D. </p>
<p></p>
</FORM>
<FORM name="boton">
<input type="button" name="boton" value=" CORREGIR " onClick="corregir()"/>
</FORM>
<br><br>
El problema que al hacer las comprobaciones dentro del for, me suma más respuesta falladas y en blanco de las que hay en realidad.
¿Alguien sabe cómo solucionarlo?¿Alguna idea de cómo hacer el código más eficiente?
Muchas gracias, sé que es poco rollo de leer todo lo que he puesto