débutant algorithme simple

débutant algorithme simple - Algo - Programmation

Marsh Posté le 26-12-2009 à 12:18:57    

Bonjour, je suis étudiant en première année d'une école d'ingénieur et j'ai de gros problèmes en algorithmique... J'espère que quelqu'un prendra le temps pur me répondre.
C'est une question simple mais puisque je ne fais qu'une dizaine d'heures de cours d'algo, je ne m'en sors pas.
 
Je dois écrire en pseudo-code, un algorithme de déclaration d'une fonction appelée moyEleve1, de paramètres les listes notesEleve et coeff qui retourne comme résultat la moyenne d'un élève sachant qu'à chaque élève on associe une liste de 5 éléments apelée notesEleve et que chaque matière est affectée d'un coefficient définit par une liste de 5 éléments coeff. (il y a une note par matière).
 
Mathématiquement ce n'est pas bien compliqué , il suffit de faire la somme du produit des notes et des coeff le tout divisé par la somme des coeff. Mon problème est dans la traduction en pseudo-code.
 
moyEleve1(entrée:notesEleve, coeff)
list1{a,b,c,d,e}←notesEleve;
list2{a1,b2,c3,d4,e5←coeff;
Pour i de 1 à 5, et j de 1 à 5 faire res←Somme(list1{i}*list2{j});
                                       fait
Pour j de 1 à 5, faire som←Somme(list2{j});
                      fait
resultat←res/som;
Retourner(resultat); )
 
 
Puisque je n'ai aucun moyen de vérifier l'exactitude de ceci, j'ai essayer de le traduire en MATHEMATICA pour le tester mais cela ne fonctionne pas.
 
J'espère que quelqu'un pourra m'éclairer.
 
Merci d'avance

Reply

Marsh Posté le 26-12-2009 à 12:18:57   

Reply

Marsh Posté le 26-12-2009 à 14:54:30    

normalement une boucle simple suffit.
Voilà l'algo que j'écrirais:
 

Code :
  1. vérifier que la taille de list1 == la taille de list2
  2. res = 0
  3. som = 0
  4. pour i allant de 1 à la taille de list1
  5.    res = res + (list1[i] * list2[i])
  6.    som = som + list2[i]
  7. si som == 0
  8.    retourner 0
  9. sinon
  10.    retourner res/som

Reply

Marsh Posté le 26-12-2009 à 18:45:36    

Merci beaucoup je vais le tester sur mathematica.

Reply

Marsh Posté le 26-12-2009 à 19:50:36    

Je dois faire des erreurs au niveau de la traduction mathématica.... je n'arrive pas faire fonctionner cette fonction moyenne .  
 
moyEleve1[notesEleve_, coeff_] := (
  list1[[i]] = notesEleve;
  list2[[i]] = coeff;
  res = 0;
  som = 0;
  Do[res = res + (list1[[i]]*list2[[i]]);
   som = som + list2[[i]];
   If[som == 0,
    Return[0],
    Return[res/som]],
   {i, 1, Length[list1[[i]]]}])
 
moyEleve1[{10, 13}, {2, 4}]
en le testant avec 2 notes, 10 et 13 de coeff respectif 2 et 4, le resultat n'aboutit pas, il y a des messages d'erreurs....
 
je ne m'en sors pas !

Reply

Marsh Posté le 26-12-2009 à 21:40:24    

Je ne connais pas la syntaxe mathematica mais ça a effectivement l'air incorrect.
 
Essaye plutôt la syntaxe Java non?

Reply

Marsh Posté le 26-12-2009 à 22:27:12    

Je suis qu'en première année et je n'y connais rien. On a juste eu quelques cours d'algo et on travaille uniquement sur mathematica... le choix de l'école. ça doit encore a cause d'un point , une virgule ou une acolade ... ^^

Reply

Marsh Posté le 27-12-2009 à 11:07:34    

poste tes message d'erreurs :o

Reply

Marsh Posté le 28-12-2009 à 01:26:51    

Non tu n'as pas traduit l'algorithme correctement, on dirait que tu as mis le return dans la boucle, or moi je l'ai mis après la boucle (regarde l'indentation).
 
De plus, tu dois simplement utiliser les paramètres notesEleve et coeff qui te sont passés en paramètre. Inutile de les assigner à liste1 et liste2. Tu les initialises également de façon incorrecte puisque tu assignes le tableau à l'indice i au lieu de l'entièreté du tableau, qui plus est alors que i n'a pas encore été déclaré ou initialisé.
 
Je trouve cette syntaxe mathematica très peu lisible avec ce tas de crochets et accolades dans tous les sens. Quelle idée d'enseigner ça en première alors que Java ou du Pascal ou même du C est nettement plus compréhensible! Ou pourquoi pas du Basic, qui se rapproche nettement plus du pseudo-code que n'importe quel autre langage.


Message édité par cbeyls le 28-12-2009 à 01:29:11
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed