11526 sujets

JavaScript, DOM et API Web HTML5

Bonjour.
Je débute (vraiment) en javascript et je bute sur un point Smiley confus .
Le but: introduire les notes des étudiants et afficher leurs moyennes et leur rang (par ordre de mérite).

Je n'arrive pas à implémenter un code qui fait correspondre le nom des étudiants (étudiant 1: note) et leurs notes respectifs, et puis faire le tri sur les notes en affichant les noms des étudiants correspondants.

Voilà le code que j'ai pu faire (pour le moment ....., et pardonnez le code HTML très minimaliste)
Un peu d'aide serait la bienvenue.
Merci à vous Smiley smile

<!DOCTYPE html>
<html>

<head>
  <title></title>

</head>

<body>
  <script>
    var somme = 0;
    var moyenne = 0;
    var nb_notes = 0;

    nb_notes = parseInt(prompt("Combien de notes: "));
    notes = new Array(nb_notes);

    for (var i = 1; i <= nb_notes; i++) {
      note_i = parseInt(prompt("Note Etudiant " + i));
      notes[i - 1] = note_i;
      somme += notes[i - 1];
    }
    moyenne = (somme / nb_notes);
    alert("La moyenne des notes est : " + moyenne);

    //notes décroissantes
    var ordonnes = notes.sort();
    alert("Classement des notes: " + ordonnes.reverse());
  </script>

  <body>


  </body>

</html>
Salut,

tu as des trucs qui m'ont l'air bizarre dans ton code Smiley ohwell (qui me font penser à du C en fait, mais qui n'ont pas tellement de raison d’être en javascript)

En javascript les tableaux ont une taille dynamique, tu n'as pas forcement besoin de leur attribuer une taille au départ.
Pourquoi est ce que tu commences ta boucle à i=1 puis tu décale ensuite les numéros de -1 ? Cela me semble plus simple de commencer directement à 0 (habitude du C)
Pourquoi est ce que tu crées une variable temporaire dans la boucle ?


for (var i = 0; i < nb_notes; i++) { //on commence à 0 et on stop via un inférieur strict pour avoir le même nombre de tour de boucle
      note_i = parseInt(prompt("Note Etudiant " + i));
      notes[i] = note_i; //plus besoin du moins 1 en commençant à 0
      somme += notes[i]; //idem
//je ferais soit ça pour ne pas avoir la variable temporaire: 
      notes[i] = parseInt(prompt("Note Etudiant " + i));
      somme += notes[i];
//soit ça pour ne pas avoir à parcourir tout le tableau pour lire la case qu'on vient d'écrire (mais pour un tableau cela n'a sans doute pas d’intérêt, cela serait plus le cas pour une liste chainé par exemple) : 
      note_i = parseInt(prompt("Note Etudiant " + i));
      notes[i] = note_i;
      somme += note_i;
    }



Pour ton problème de garder associer les numéros d'étudiants avec les notes, je pense que le plus simple sera de faire des "tuples" et de les stocker dans ton tableau


Edit : mini exemple de tableau de tuple et de comment on le tri : (en me servant de https://www.w3schools.com/js/js_array_sort.asp comme base de tableau et de tri sans tuple)
const points = [[1,40], [2,100], [3,1], [4,5], [5,25], [6,10]];
points.sort(function(a, b){return a[1] - b[1]});

Modifié par Mathieuu (22 Sep 2022 - 11:38)