-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathcalculator.js
69 lines (56 loc) · 2.24 KB
/
calculator.js
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
class CalculCoteR {
constructor (note, moyenne, ecartType, moyenneSecondaire) {
this._note = (typeof note == 'string' ? parseFloat(note.replace(',', '.')) : note);
this._moyenne = (typeof moyenne == 'string' ? parseFloat(moyenne.replace(',', '.')) : moyenne);
this._ecartType = (typeof ecartType == 'string' ? parseFloat(ecartType.replace(',', '.')) : ecartType);
this._moyenneSecondaire = (typeof moyenneSecondaire == 'string' ? parseFloat(moyenneSecondaire.replace(',', '.')) : moyenneSecondaire);
}
// La cote Z d’un élève n’est rien d’autre que l’écart entre sa propre note( ) et la moyenne du groupe ( ), divisé par l’écart-type ( ).
_CoteZ() {
return ( (this._note - this._moyenne) / (this._ecartType ? this._ecartType : 1) );
}
//IFG = (moyenne des notes des cours obligatoires en secondaire IV et V des étudiants du cours-groupe - 75) ÷ 14
_IFG() {
const IFG = (this._moyenneSecondaire - 75) / 14;
if(IFG >= 1.7857) { return 1.7857; }
return IFG;
}
// \displaystyle CRC_{\text{cours}}=(Z+IFG+C)\cdot D
_CRC(coteZ, IFG) {
return (coteZ + IFG + 5) * 5;
}
getCote () {
const CRC = this._CRC(this._CoteZ(), this._IFG());
var coteReturn = Math.round(CRC * 1000) / 1000 ;
return (isNaN(coteReturn) ? '0' : coteReturn) ;
}
}
class CoteRGlobale {
constructor(all) {
this._all = all;
this._globalRScrore = 0;
this._sommeRScore = 0;
this._sommeCotePonderee = 0;
this._sommeUnites = 0;
this._create(this._all);
}
_create(rScores) {
this._all = rScores.map((d,index)=>{
let newRScore = new CalculCoteR(d.note, d.moyenne, d.ecartType, d.moyenneSecondaire);
this._sommeRScore += newRScore.getCote();
this._sommeCotePonderee += newRScore.getCote() * (d.note > 59 ? d.unites : (d.premierSession ? d.unites * 0.25 : d.unites *0.50) );
this._sommeUnites += parseFloat(d.unites);
d.rscore = newRScore.getCote();
d.coule = d.note < 60;
d.ponderation = (d.premiereSession ? 0.25 : 0.50);
return d;
});
}
all() {
return this._all;
}
getCoteGlobale() {
var coteReturn = Math.round((this._sommeCotePonderee / this._sommeUnites) * 1000) / 1000;
return (isNaN(coteReturn) ? '0' : coteReturn) ;
}
}