Foros del Web » Programando para Internet » Javascript »

corregir formulario con arrays

Estas en el tema de corregir formulario con arrays en el foro de Javascript en Foros del Web. Hola! Necesito ayuda! Tengo que corregir un examen tipo test, en el que se cuentan las preguntas que estan bien, las que estan mal y ...
  #1 (permalink)  
Antiguo 11/01/2012, 16:21
 
Fecha de Ingreso: diciembre-2011
Mensajes: 7
Antigüedad: 12 años, 11 meses
Puntos: 0
corregir formulario con arrays

Hola! Necesito ayuda! Tengo que corregir un examen tipo test, en el que se cuentan las preguntas que estan bien, las que estan mal y las que estan en blanco. La cosa es que debe ser codigo generico para que sirva con cualquier tipo test, solo cambiando el valor de algunas variables.

He hecho este codigo:

Código Javascript:
Ver original
  1. <html>
  2. <head>
  3. <title>Corrección de un test</title>
  4. <script type="text/javascript">
  5.  
  6. function corregir(){
  7. var numeroPreguntas=3;
  8. var numeroRespuestas=4;
  9. var nombreid = new Array();
  10. var correctas=["p12","p24","p33","p41"];
  11. var cont=0, contAcierto=0, contFallo=0, contBlanco=0, contResultado=0, indice, seleccionada, fallos=0;
  12. var controlador=1;var indice2;
  13. for (pregun=1;pregun<=numeroPreguntas;pregun++)
  14.     {
  15.     for (respuesta=1;respuesta<=numeroRespuestas;respuesta++)
  16.         {
  17.         nombreid[cont]="p"+pregun+respuesta; // me creo las ids de los radios a comprobar
  18.         //var indice=nombreid[cont];
  19.         cont++;
  20.         }
  21.     }
  22.    
  23.  
  24.  
  25. for (i=0;i<nombreid.length;i++){
  26.     indice=nombreid[i];
  27.     seleccionada=document.getElementById(indice).checked;
  28.    
  29.     if(seleccionada){
  30.         for(j=0;j<correctas.length;j++){
  31.             if(seleccionada && indice==correctas[j]){
  32.                 contAcierto++;
  33.             }
  34.             else if(seleccionada && indice!=correctas[j]{
  35.                 contFallo++;
  36.             }
  37.         }
  38.     }
  39.     else{  
  40.             contBlanco++;
  41.         }
  42.  
  43.  
  44.     }
  45.  
  46. }
  47.  
  48. alert("aciertos"+contAcierto+"fallos"+contFallo+"blancos"+contBlanco);
  49. }
  50. </script>
  51. </head>

El problema es que como hago la comprobacion de las preguntas dentro del for, me cuenta veces de mas los fallos y los blancos.


Este es el codigo HTML:

Código HTML:
Ver original
  1. <FORM name="Preguntas">
  2.  
  3.   <p>
  4. <!-- Primera pregunta -->
  5.     1.- Este es el enunciado de la primera pregunta del test.  </p>
  6.  
  7.   <p>
  8.     <input type="radio" name="pregunta1" id="p11" value="A" /> Texto de la respuesta A.  </p>  <p>
  9.     <input type="radio" name="pregunta1" id="p12" value="B" /> Texto de la respuesta B.  </p>  <p>
  10.     <input type="radio" name="pregunta1" id="p13" value="C" /> Texto de la respuesta C.  </p>  <p>
  11.     <input type="radio" name="pregunta1" id="p14" value="D" /> Texto de la respuesta D.  </p>
  12.   <p></p>
  13.  
  14.    
  15. <!-- Segunda pregunta -->  
  16.     2.- Este es el enunciado de la segunda pregunta del test.  </p>
  17.  
  18.   <p>
  19.     <input type="radio" name="pregunta2"  id="p21" value="A" /> Texto de la respuesta A.  </p>  <p>
  20.     <input type="radio" name="pregunta2"  id="p22" value="B" /> Texto de la respuesta B.  </p>  <p>
  21.     <input type="radio" name="pregunta2"  id="p23" value="C" /> Texto de la respuesta C.  </p>  <p>
  22.     <input type="radio" name="pregunta2"  id="p24" value="D" /> Texto de la respuesta D.  </p>
  23.    <p></p>
  24.  
  25.    
  26. <!-- Tercera pregunta -->
  27. 3.- Este es el enunciado de la tercera pregunta del test.   </p>
  28.  
  29.   <p>
  30.     <input type="radio" name="pregunta3"  id="p31" value="A" /> Texto de la respuesta A.  </p>  <p>
  31.     <input type="radio" name="pregunta3"  id="p32" value="B" /> Texto de la respuesta B.  </p>  <p>
  32.     <input type="radio" name="pregunta3"  id="p33" value="C" /> Texto de la respuesta C.  </p>  <p>
  33.     <input type="radio" name="pregunta3"  id="p34" value="D" /> Texto de la respuesta D.  </p>
  34.    <p></p>
  35.  
  36.  
  37. </FORM>
  38.  
  39.  
  40. <FORM name="boton">
  41.     <input type="button"  name="boton" value=" CORREGIR " onClick="corregir()"/>
  42. </FORM>
  43.  
  44.  
  45. <br><br>
  46.  
  47. <b>RESULTADO DEL TEST</b> <P>
  48. <form name="resultado" action="">
  49.    
  50. Has acertado <input type="text" size="3" name="aciertos" id="aciertos" value=""/> preguntas <br>
  51. Has fallado en <input type="text" size="3" name="fallos" value=""/> preguntas <br>
  52. Has dejado de responder <input size="3" name="blancos" type="text"  value=""/> preguntas <P>
  53. PUNTUACIÓN: <input type="text" size="5" name="puntuacion" value=""/> puntos
  54.  
  55. </form>
  56.  
  57.  
  58. </body>
  59. </html>

¿Alguna idea sobre como hacer la correccion impidiendo este problema?

Muchas gracias
  #2 (permalink)  
Antiguo 11/01/2012, 23:56
 
Fecha de Ingreso: enero-2011
Mensajes: 13
Antigüedad: 13 años, 10 meses
Puntos: 0
Respuesta: corregir formulario con arrays

Hola,
mira varias cosas:
- donde tienes un if seguido de un else if, la condición 'seleccionada' está demás porque ya estás dentro de un if que necesitaba estar seleccionada como true.
- En el else if te falta un paréntesis.
- En sí, la secuencia lógica que cuenta las preguntas está mala (bueno por eso es por lo que preguntabas). Por ejemplo, cuentas todas las alternativas dejadas en blanco, y no las preguntas no contestadas. A mi se me ocurre arreglarlo así:

Código Javascript:
Ver original
  1. function corregir(){
  2. var numeroPreguntas=3;
  3. var numeroRespuestas=4;
  4. var nombreid = new Array();
  5. var correctas=["p12","p24","p33","p41"];
  6. var cont=0, contAcierto=0, contFallo=0, contBlanco=0, contResultado=0, indice, seleccionada, fallos=0;
  7. var controlador=1;var indice2;
  8. for (pregun=1;pregun<=numeroPreguntas;pregun++)
  9.     {
  10.     for (respuesta=1;respuesta<=numeroRespuestas;respuesta++)
  11.         {
  12.         nombreid[cont]="p"+pregun+respuesta; // me creo las ids de los radios a comprobar
  13.         //var indice=nombreid[cont];
  14.         cont++;
  15.         }
  16.     }
  17.    
  18. //Desde aquí he cambiado yo...
  19.  
  20. var pregSeleccionadas = 0; //Para contar cuantas alternativas estan checked
  21. for (i=0;i<nombreid.length;i++){
  22.     indice=nombreid[i];
  23.     seleccionada=document.getElementById(indice).checked;
  24.    
  25.     if(seleccionada){
  26.         pregSeleccionadas++;
  27.         for(j=0;j<correctas.length;j++){
  28.             if(indice==correctas[j]){
  29.                 contAcierto++;
  30.             }
  31.         }
  32.     }
  33. }
  34. //Naturalmente las blancas seran:
  35. contBlanco = numeroPreguntas - pregSeleccionadas;
  36. //y finalmente sabemos que Total de preguntas = buenas + malas + blancas, por lo que:
  37. contFallo = numeroPreguntas - contBlanco - contAcierto;
  38.  
  39.  
  40. }
  41.  
  42. alert("aciertos"+contAcierto+"fallos"+contFallo+"blancos"+contBlanco);
  43. }

Creo que eso debería bastar para que te funcione bien.
Ojalá te sirva

Saludos!

Última edición por dubafek; 12/01/2012 a las 00:54
  #3 (permalink)  
Antiguo 12/01/2012, 16:03
 
Fecha de Ingreso: diciembre-2011
Mensajes: 7
Antigüedad: 12 años, 11 meses
Puntos: 0
Respuesta: corregir formulario con arrays

claro!! que sencillo lo has hecho! voy a probar y te comento
  #4 (permalink)  
Antiguo 12/01/2012, 16:08
 
Fecha de Ingreso: diciembre-2011
Mensajes: 7
Antigüedad: 12 años, 11 meses
Puntos: 0
Respuesta: corregir formulario con arrays

ya he probado, va perfecto! muchisimas gracias. me estaba complicando muchisimo, nunca se me habria ocurrido hacerlo asi de sencillo! :)
  #5 (permalink)  
Antiguo 12/01/2012, 18:23
 
Fecha de Ingreso: enero-2011
Mensajes: 13
Antigüedad: 13 años, 10 meses
Puntos: 0
Respuesta: corregir formulario con arrays

Que bueno que te haya servido, saludos!

Etiquetas: arrays, corregir, formulario, html, input, variables, botones
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 14:44.