2 votes

moyenne de cinq valeurs en javascript

Je travaille pour une école à charte et j'apprends tout juste à me familiariser avec le javascript. J'ai du code écrit par la personne qui occupait mon poste auparavant et il me semble qu'il devrait fonctionner, mais ce n'est pas le cas.

Voici ce que j'ai dans la page HTML personnalisée de mon SIS :

GED Status: <script language="Javascript">gedCheck('~(ELC_tspp_GED_read_score)','~ (ELC_tspp_GED_wri_score)','~(ELC_tspp_math_GED_score)','~(ELC_science_state_exam_score)','~(soc_sci_state_exam_score)')</script>

Cela semble extraire correctement les valeurs des différents champs de la base de données, puisque la routine javascript évalue chaque valeur pour s'assurer qu'elle est au moins égale à 410. Mais cela ne va pas plus loin...

Voici le code de la routine javascript :

function gedCheck(read,wri,math,sci,soc) {

if( read < 0 && read > 1000 )
    read = 0;
if( wri < 0 && wri > 1000 )
    wri = 0;
if( math < 0 && math > 1000 )
    math = 0;
if( sci < 0 && read > 1000 )
    read = 0;
if( soc < 0 && soc > 1000 )
    soc = 0;        

if ( (read >= 410) && (wri >= 410) && (math >= 410) && (sci >= 410) && (soc >= 410) ) {
    if( read+wri+math+sci+soc >= 2250 )
        document.write( "PASSED" )
}
else
    document.write( "NOT PASSED" )
}

Il est censé vérifier que chaque score obtenu aux tests GED est au moins égal à 410, et que la somme de tous les scores est au moins égale à 2250. Cependant, il ne va pas jusqu'à la dernière partie. Il renvoie la mention "PASSÉ" si tous les scores sont supérieurs à 410.

J'ai essayé ceci, mais cela ne fonctionne pas non plus.

function gedCheck(read,wri,math,sci,soc) {

if( read < 0 && read > 1000 )
    read = 0;
if( wri < 0 && wri > 1000 )
    wri = 0;
if( math < 0 && math > 1000 )
    math = 0;
if( sci < 0 && read > 1000 )
    read = 0;
if( soc < 0 && soc > 1000 )
    soc = 0;        

if ( (read >= 410) && (wri >= 410) && (math >= 410) && (sci >= 410) && (soc >= 410) )   {
    if( read+wri+math+sci+soc/5 >= 450 )
        document.write( "PASSED" )
}
else
    document.write( "NOT PASSED" )
}

Quelqu'un pourrait-il m'aider à résoudre ce problème de manière à ce qu'il calcule la moyenne des 5 nombres et renvoie "PASSÉ" uniquement si la moyenne est de 450, OU qu'il additionne simplement les 5 nombres et renvoie "PASSÉ" uniquement si la somme totale est égale ou supérieure à 2250 ?

0voto

Udo Klein Points 3038

Qu'en est-il de

if ((read >= 410) && 
    (wri  >= 410) && 
    (math >= 410) && 
    (sci  >= 410) && 
    (soc  >= 410) &&
    (read+wri+math+sci+soc >= 2250)) {    

    document.write( "PASSED" )
} else {

    document.write( "NOT PASSED" )
}

0voto

krillgar Points 2791

Pour obtenir la moyenne, vous devez procéder comme suit :

(((read + wri + math + sci + soc) / 5) > 450)

La parenthèse autour de l'addition garantit que vous divisez la somme de tous les scores par 5. De la manière dont vous l'avez fait maintenant, vous ne divisez que le soc score de 5.

Modifier (réécrire l'ensemble de la méthode) :

function gedCheck(read, wri, math, sci, soc) {
// As was said before, these should all be ORs
// If the score is less than 0, OR greater than 1000
if( read < 0 || read > 1000 ) {
    read = 0;
}
if( wri < 0 || wri > 1000 ) { // I prefer to put the braces around all if/else statements just for absolute clarity
    wri = 0;
}
if( math < 0 || math > 1000 ) {
    math = 0;
}
if( sci < 0 || read > 1000 ) {
    read = 0;
}
if( soc < 0 || soc > 1000 ) {
    soc = 0;        
}

if ( read >= 410 && // Doing this will only pass the student
     wri >= 410  && // if ALL of the conditions are met.
     math >= 410 && 
     sci >= 410  && 
     soc >= 410  &&
     (    (read + wri + math + sci + soc) >= 2250 || // Separated more for clarity
          ((read + wri + math + sci + soc) / 5) > 450) ) { 
    // Either all scores total over 2250
    // Or the average of all 5 are over 450 to pass                
        document.write( "PASSED" )
}
else
    document.write( "NOT PASSED" )
}

0voto

Jordan Points 12780
function gedCheck(read, wri, math, sci, soc) {

    if( read < 0 || read > 1000 )
        read = 0;

    if( wri < 0 || wri > 1000 )
        wri = 0;

    if( math < 0 && math > 1000 )
        math = 0;

    if( sci < 0 && read > 1000 )
        read = 0;

    if( soc < 0 && soc > 1000 )
        soc = 0;

    var total = read + wri + math + sci + soc;

    if (read >= 410 && wri >= 410 && math >= 410 && sci >= 410 && soc >= 410 && total >= 2250)   {   
        document.write("PASSED");
    } else {
        document.write("NOT PASSED");
    }
}

Toute cette première section était un code impossible. Elle vérifiait si un nombre était à la fois inférieur à zéro et supérieur à 1000. C'est manifestement impossible, et je l'ai donc modifié pour utiliser OR.

J'ai également créé une variable "total", que vous pouvez contrôler de la même manière que les autres variables.

0voto

Steve Hansell Points 7850

L'utilisation d'un tableau ici vous aidera à réduire la quantité de code dupliqué

function gedCheck(read, wri, math, sci, soc) {
   var subjects, totalScore, averageScore;

   subjects = [read, wri, math, sci, soc];
   totalScore = 0;
   averageScore = 0;

   for (var i = 0; i < subjects.length; i++) {
       if (subjects[i] < 0 || subjects[i] > 1000) {
           subjects[i] = 0;
       }
       totalScore += subjects[i];
   };

   averageScore = totalScore / subjects.length;

   if (averageScore >= 450 || totalScore >= 2250) {
       document.write("PASSED");
   } else {
       document.write("NOT PASSED");
   }
}

La première boucle parcourt chaque sujet et le met à zéro si nécessaire, puis l'ajoute à la variable du score total.

La moyenne du score total est ensuite calculée en fonction du nombre de sujets.

Si la note moyenne est égale ou supérieure à 450, ou égale ou supérieure à 2250, l'examen est réussi.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X