Partage
  • Partager sur Facebook
  • Partager sur Twitter

Tableau-Fonctions renvoyant la moyenne

Java(Scool) niveau débutant, lycée

    26 avril 2015 à 23:26:35

    Bonsoir :)

    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!

    Bonne soirée.

    -
    Edité par CathC5 27 avril 2015 à 11:53:45

    • Partager sur Facebook
    • Partager sur Twitter
      28 avril 2015 à 0:57:29

      Bonsoir,

      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.

      • Partager sur Facebook
      • Partager sur Twitter
        28 avril 2015 à 10:03:05

        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à ^^


        -
        Edité par para_doxx 28 avril 2015 à 10:05:59

        • Partager sur Facebook
        • Partager sur Twitter
          29 avril 2015 à 17:18:37

          Bonjour brubru777 et para_doxx :)

          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 :

          void main() 
          {
             double [][] notes = {{1,2,3},{4,5,6},{7,8,9}};
             double moyenne1;
             double moyenne2;
             double moyenne3;
           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();
             }
          
            moyenne1=moyLi(notes);
            println(moyenne1);
            moyenne2=moyLi2(notes);
            println(moyenne2);
            moyenne3=moyLi3(notes);
            println(moyenne3);
           }
          
          /// new tableau moy 
          
          double moyLi(double[][]tab)
          {
          	double somme = (tab[0][0]+tab[0][1]+tab[0][2])/3;
          	return somme;
          }
          double moyLi2(double[][]tab)
          {
          	double somme2 = (tab[1][0]+tab[1][1]+tab[1][2])/3;
          	return somme2;
          }double moyLi3(double[][]tab)
          {
          	double somme3 = (tab[2][0]+tab[2][1]+tab[2][2])/3;
          	return somme3; }

          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.
          Bonne journée :)!!



          • Partager sur Facebook
          • Partager sur Twitter
            29 avril 2015 à 21:47:08

            Pour l'erreur, c'est parce que tu n'as pas déclaré ni initialisé le tableau moyLi.

            double[] nomDeVariable = new double[tailleDuTableau];


            Ensuite, il faudrait utiliser des noms de variable plus parlants. Ca aide à comprendre ce qu'on fait.

            Exemple :

            a -> lgn

            b -> col

            moyLi (fonction) -> calculerMoyennesLineaires

            moyLi (tableau) -> moyennes

            • Partager sur Facebook
            • Partager sur Twitter
              1 mai 2015 à 16:33:17

              Bonjour, 

              en initialisant le tableau moyLi voici ce que j'obtiens :

              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 = new double [3];
              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[a][b+1]+tab[a][b+2])/3;
                   	moyLi[a]=somme;
                   }
                   return moyLi;
                 }
              }

              j'ai un message d'erreur :

               Erreur de syntaxe ligne 48 :

                error: missing return statement

              }

              ^


              • Partager sur Facebook
              • Partager sur Twitter
                1 mai 2015 à 18:15:05

                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

                • Partager sur Facebook
                • Partager sur Twitter

                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.
                • Editeur
                • Markdown