JavaScript - problema con funciones

   
Vista:

problema con funciones

Publicado por leoalvis (7 intervenciones) el 18/08/2017 19:51:26
Hola buenas tardes: tengo inconvenientes en mostrar el promedio de una lista de estudiantes que se van registrando uno a uno me arroja el valor NaN. Ademas, extrañamente las funciones de mostrarMayor y mostrarMenor no funcionan correctamente. Si se ejecuta una la otra no me envia resultados. En mi opinion creo que es la variable numerica que se captura en el arreglo estudiante. Pero ya he revisado e intentado muchas cosas pero no se que mas hacerle.. Agradezco la ayuda.. adjunto el html y javascript respectivo...

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8">
    <title></title>
    <script src="js/ejercicio.js"></script>
    <link rel="stylesheet" href="css/ejercicio.css">
  </head>
  <body>
 
    <h1>Registro Estudiante</h1>
    <b>Codigo</b>
    <br>
    <input type="text" id="txtCodigo">
    <br>
    <b>Nombre</b>
    <br>
    <input type="text" id="txtNombre">
    <br>
    <b>Nota:</b>
    <br>
    <input type="text" id="txtNota">
    <br>
    <br>
    <button type="button" id="btnRegistrar">Registrar Estudiante</button>
    <button type="button" id="btnPromedio">Registrar Promedio</button>
    <button type="button" id="btnNotaMayor">Mostrar Nota Mayor</button>
    <button type="button" id="btnNotaMenor">Mostrar Nota Menor</button>
 
  </body>
</html>



1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
window.onload=function(){
  let estudiante=new Array();
  let codigo;
  let nombre;
  let nota;
 
 document.getElementById("btnRegistrar").addEventListener("click",registrar);
  document.getElementById("btnPromedio").addEventListener("click",mostrarPromedio);
  document.getElementById("btnNotaMayor").addEventListener("click",mostrarMayor);
  document.getElementById("btnNotaMenor").addEventListener("click",mostrarMenor);
 
 
  function registrar(){
    codigo=document.getElementById("txtCodigo").value;
    nombre=document.getElementById("txtNombre").value;
    nota=parseFloat(document.getElementById("txtNota").value);
    estudiante.push({'codigo':codigo,'nombre':nombre,'nota':nota});
    document.getElementById("txtCodigo").value="";
    document.getElementById("txtNombre").value="";
    document.getElementById("txtNota").value="";
 
    mostrarTabla();
 
 
 
  }
 
  var tabla=document.createElement("table");
 
  function mostrarTabla(){
 
 
    tabla.setAttribute("border","1");
 
    var fila;
    var celda;
 
    for (var i = 0; i < estudiante.length; i++) {
 
      fila=document.createElement("tr");
      celda=document.createElement("td");
 
      celda.appendChild(document.createTextNode(estudiante[i].codigo));
      celda.appendChild(document.createTextNode(estudiante[i].nombre));
      celda.appendChild(document.createTextNode(estudiante[i].nota));
    }
 
    fila.appendChild(celda);
    tabla.appendChild(fila);
 
    document.body.appendChild(tabla);
 
 
  }
 
  function mostrarPromedio(){
 
    var sum=0;
 
    for(var i=0;i<estudiante.lenght;i++){
      sum+=estudiante[i].nota;
    }
 
    var prom=sum/i;
 
    alert("El promedio de la clase es "+prom);
  }
 
  function mostrarMayor(){
    var salida="";
    var mayor=estudiante[0].nota;
 
    for(var i=0;i<estudiante.length;i++){
        if(mayor<estudiante[i].nota){
          mayor=estudiante[i].nota;
          alert("El estudiante con mayor nota es "+estudiante[i].nombre+" con una nota de "+mayor);
        }
    }
 
 
  }
 
  function mostrarMenor(){
    var salida="";
    var menor=estudiante[0].nota;
 
    for(var i=0;i<estudiante.length;i++){
        if(estudiante[i].nota<menor){
          menor=estudiante[i].nota;
          alert("El estudiante con menor nota es "+estudiante[i].nombre+" con una nota de "+menor);
        }
 
    }
 
  }
 
 
}
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Vainas

problema con funciones

Publicado por Vainas (258 intervenciones) el 19/08/2017 09:15:23
Buenas:

Sin ver mucho el codigo y viendo lo que has dicho empieza por esto:

1
<input type="number" id="...">

Esto fuerza a los navegadores que aceptan html5 que la entrada sea solo de tipo numerico y no texto.

Lo siguiente es:

1
2
codigo = document.getElementById("txtCodigo").value;
codigo = parseInt(codigo);

Obligas en codigo a que el valor sea un entero (int o integer).

y luego puedes usar https://www.w3schools.com/Jsref/jsref_isnan.asp con algun if para comprobar si el valor que tienes es un numero. sino lo es le das un mensaje al usuario de que coloque bien el valor y no ejecutas nada hasta entonces.

Al final es una especie de validacion de campos.

Un saludo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar