J'ai un projet à faire en ISN au lycée et j'aurais besoin d'aide car je sèche sur la création d'une fonction sur JavaScool.
en faite j'ai créer un tableau à double entrée contenant 3 notes pour chaque élève (3 colonnes pour 1 ligne) et en gros je les ai classer 3 par 3, voici le début du code de mon programme :
void main()
{
double [][] notes = {{1,2,3},{4,5,6},{7,8,9}};
for (int i =0; i < notes.length; i ++)
{
for (int j =0; j < notes.length; j ++)
{
print(notes[i][j]);
print(" ");
}
}
println();
for (int l =0; l<notes.length; l++)
{
for (int c =0; c<notes.length; c++)
{
print(" ");
print(notes[l][c]);
}
println();
}
}
Ensuite j'aimerai créer une fonction en dehors qui puisse : créer un nouveau tableau de moyenne à partir du tableau des notes classer 3 par 3.
En gros j'aimerai rentrer la moyenne des 3 première notes ensuite des 3 prochains dans le même tableau mais pour les notes 4 5 et 6 etc..
Je ne sais pas si je suis assez claires.
Dans tous les cas voici notre suite du programme.. (ou plutôt la suite des idées car nous ne savons pas comment mettre en forme) :
//FONCTION MOYENNE
//1)
//double [] tabmoy ()
//double moy = ((notes[l][c])/3);
//return moy1;
// OU
//2)
// SOMME 3 PREMIERES CASE => MOY => NEW CASE TABLO
/// double moy1;
//double moyenne (double a, double b, double c) {
// double m1=(a+b+c)/3;
// return m1;}
Cette fonction est à rappeler soit à la fin de la création du tableau 3 par 3 OU soit au tout début de notre progrmmae??
Merci beaucoup! J'espère avoir été assez claires lol.. j'attend vos réponses et questions!
Si tu te rappelles mon précédent message, un tableau à 2 dimensions peut se voir comme une grille où le premier indice représente la ligne et le deuxième indice représente la colonne.
Ici, tu as donc une ligne pour chaque élève et sur chaque ligne, tu as 3 notes.
Ce que tu dois faire, c'est créer un tableau qui doit contenir une moyenne pour chaque élève.
Ex: Si ton tableau initial a 5 lignes (c à d les notes de 5 élèves), ton tableau de moyennes doit avoir une taille de 5 pour contenir les 5 moyennes.
Ensuite, dans ce tableau, tu mets dans la case 0 la moyenne de la ligne 0, dans la case 1 la moyenne de la ligne 1, etc.
Une façon de faire ça est de créer 2 fonctions.
La première, prend en paramètre une ligne (c à d un tableau) et retourne sa moyenne. En gros, avec une boucle, tu fais la somme des valeurs du tableau puis tu divises par le nombre d'éléments.
La deuxième méthode prend en paramètre un tableau 2D. Dans la méthode, tu crées un tableau à la bonne taille pour recueillir les moyennes. Avec une boucle, tu utilises la première fonction pour calculer la moyenne de chaque ligne et la stocker au bon endroit dans ton tableau de résultat. Ensuite, tu retourne ce tableau.
Au niveau algorithme je ne vois pas ce que je pourrai ajouter, la réponse de brubru777 me paraît limpide cependant, j'ai des conseils a donner sur la structure du programme ,"l'architecture" utiliser des matrices d'entier à deux dimensions ne me paraît pas être un choix extrêmement judicieux pour représenter et organiser tes données car:
-tu ne pourra mettre que des entiers et pas d'autres informations concernant les élèves, tel que leur nom la classe à laquelle ils appartiennent etc...
-ça va vite devenir le foutoir pour le système de notation.
De plus java est un langage orienté objet, et c'est dommage de ne pas exploiter la "puissance" du paradigme; il existe des structures de données, les classes, un peu particulière car on peut y stocker des données de types différents et on peut en faire autant d’entités indépendantes que l'on veut.
Ce que tu peux faire par exemple c'est une classe élève:
class Eleve{
public String nom;
public String prenom
public String classe;
private List<Integer> notes;
/*constructeur de la classe, cette méthode est apellée lors l'intanciation de l'objet*/
public Eleve(String nom, String prenom, String classe){
this.nom = nom;
this.prenom = prenom
this.classe = classe;
//ne pas oublier d'instancier la liste
this.notes = new ArrayList<Integer>();
}
public void addNote(int note){
this.notes.add(note);
}
public List<Integer> getNotes(){ return this.notes(); }
on manipule les notes d'un élève comme cela:
Eleve kevin = new Eleve("dupont", "kevin", "2D");
//on lui ajoute des notes
kevin.addNote(10);
kevin.addNote(16);
kevin.addNote(12);
//on calcule sa moyenne
int sum;
for(int note : kevin.getNotes()){
sum+=note;
}
//on divise le total par le nombre de note qu'a kevin
double moyenne = (double)sum / (double) kevin.getNotes().size-1;
Voila j'ai tapé le code sans editeur il ne compile peut être pas, mais l'idée est là
Merci d'avoir répondu aussi rapidement, brubru777 je me suis inspiré de ce que tu as écris on a essayé pour une seule ligne ciblée pour l'instant voici ce qu'on a :
On essaye cependant de changer cette fonction de façon à retourner un tableau mais on bloque. On a utilisé une boucle imbriquée comme celle-ci mais on obtient un message d'erreur. On arrive pas à retourner le tableau de moyenne.
Pourrais-t-on avoir de l'aide?? Voici notre code :
void main()
{
double [][] notes = {{1,2,3},{4,5,6},{7,8,9}};
double [] moy2 = new double [3];
for (int i =0; i < notes.length; i ++)
{
for (int j =0; j < notes.length; j ++)
{
// notes[i][j] = (double)(Math.random() *20);
print(notes[i][j]);
print(" ");
}
}
println();
for (int l =0; l<notes.length; l++)
{
for (int c =0; c<notes.length; c++)
{
print(" ");
print(notes[l][c]);
}
println();
}
// PRINT TABLEAU
moy2 = moyLi(notes);
println (moy2);
}
/// FONCTION
double[]moyLi(double[][]tab)
{
for (int a =0; a<tab.length; a++)
{
for (int b =0; b<tab.length; b++)
{
double somme = (tab[a][b]+tab[0][b+1]+tab[0][b+2])/3;
moyLi[a]=somme;
}
return moyLi;
}
}
On essaye de stocker notre somme dans une case du tableau moyLi mais.. on a ce message d'erreur :
Erreur de syntaxe ligne 42 :
error: cannot find symbol
moyLi[a]=somme;
^
Merci en tout cas!
et merci para_doxx mais étant donné on s'est prise en retard on ne peut pas chercher dans de nouvelles options mais ça aurait été un bonus pour notre orale, on va plutôt opter pour une méthode plus simpliste qu'on a déjà vu en cours.
Il faut que tu mette le returnen dehors du for. Par contre vue comme tu as déclaré moyLi tu devrais pouvoir y accéder directement depuis ton main tu n'as à mon avis pas besoin de créer de moy2.
- Edité par zero857 1 mai 2015 à 18:15:35
Ctrl+space
Tableau-Fonctions renvoyant la moyenne
× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
× Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
Ctrl+space