Moyenne de deux tableaux en c

Bonjour, j'ai un petit soucis avec une portion de code en c ! j'ai 2 tableaux l'un contenant des notes l'autres des coefs et je voudrais calculer la moyenne mais à l'exécution moyenne = 0.0000 lol voici la paortion de code qui cause problème

for(j=0; j<(note[i]=-1) && j<(coef[i]=-1); j++)
{
coefT = coefT+coef[i];
moyenne = moyenne + (note[i]*coef[i]);
moyenne = moyenne/coefT;
}
printf("la moyenne est: %f", moyenne);

à savoir coefT = total des coef[i] initialisé à 0 et moyenne est aussi initialisée à 0

9 réponses

  1. Contributeur
    for(j=0; j<(note[i]=-1) && j<(coef[i]=-1); j++
    Que souhaites-tu faire en comparant j à note[i]=-1 ???

    0
    1. Le problème viens de "j<(note[i]=-1", qui compare j à la note de l'élève (12/20 par exemple) et non à la taille du tableau note.

      Donc soit tu connais la taille des tableaux notes et coeff, soit pour connaitre leur taille tu peux au préalable faire :
      int tailleNote = sizeof (note) / sizeof (note[0]);
      int tailleCoef = sizeof (coef) / sizeof (coef[0]);

      for(j=0; j<tailleNote && j<tailleCoef; j++)

      Ps : pas besoin de retirer 1 car en C un tableau commence à 0 et non à 1.
      0
      1. Contributeur
        Le problème viens de "j<(note[i]=-1", qui compare j à la note de l'élève (12/20 par exemple) et non à la taille du tableau note.
        Non, cela compare j à -1.

        Ps : pas besoin de retirer 1 car en C un tableau commence à 0 et non à 1.
        Tu confonds =-1 avec -=1... Rien à voir.
        0
    2. au fait le problème qui se pose est que la saisie des notes et des coefs dépend de l'utilisateur qui en tapant -1 met fin à la saisie, de plus les 2 tableaux ont pour taille 100 du coup pourrais je avoir comme condition "j<100 && j != (note[i]=-1) && j != (coef[i]=-1)" pour pouvoir exclure le "-1" ou dois faire quelque chose comme

      for(j=0; j<100; j++)
      {
      while(note[i] != -1 && coef[i] != -1)
      {
      coefT = coefT+coef[i];
      moyenne = moyenne + (note[i]*coef[i]);
      moyenne = moyenne/coefT;
      }
      printf("la moyenne est: %f", moyenne);
      }
      0
      1. Contributeur
        Ok, je comprends mieux.
        Autre question. Tu parles de saisie. Comment sont déclarées tes tableaux et variables ? Double ou float ? Et comment utilises-tu scanf ou équivalent ? %lf ou %f ?

        Pour la boucle, utilise plutôt :
        i=0;
        while (i<100 && note[i]!=-1)
        {
             ...;
             i++;
        }
        0
    3. voici pour la déclaration des variables:

      int coef[100]={0},coefT=0, i=0,j;

      float note[100]={0}, moyenne=0;

      et pour l'utilisation du scanf :

      -pour les notes
      while(note[i]!=-1)
      {
      scanf("%f",&note[i]);
      }

      -et pour les coefs
      while(coef[i]!=-1)
      {
      scanf("%d",&coef[i]);
      }
      0
      1. Contributeur
        scanf("%f",¬e[i]);
        C'est un & (peut-être une erreur de copier-coller).

        Pour la saisie des notes et coefs, je te conseille de revoir.
        Tu mets : tant que note[i] vaut -1, saisie de note[i] sans jamais incrémenter i...

        Pour les coefs, il faut poser une condition sur note[i] plutôt. Sinon, tu pourras te retrouver avec une note = -1 et un coeff normal (et réciproquement). Tu n'incrémentes pas i non plus...

        Et enfin pour les deux saisies, n'oublie pas de faire une condition du style : i<100. Sinon plantage assuré (ou presque).
        0
    4. au fait c'est différent " != " et c'est aussi une erreur de copie-coller pour le "&" et je me suis aperçu que quand j'incrémente pour le scanf après avoir taper "-1" le programme ne passe pas à l'instruction suivante
      0
      1. voici mon code

        #include<stdio.h>
        #include<stdlib.h>

        int main(int argc, char *argv[])
        {
        /*déclaration des variables coefT est le total des coefs i et j des compteurs*/
        int coef[100]={0},coefT=0, i=0,j;
        float note[100]={0}, moyenne=0;

        printf("Veuillez saisir vos notes\n\n");
        printf("Notes: \t");
        /*la fin de la saisie des note et des coef dépend de l'utilisateur qui en tapant -1 y met fin */
        while(note[i]!=-1)
        {
        scanf("%f",&note[i]);
        }

        printf("\n\nVeuillez saisir vos coefficients\n\n");
        printf("Coefficients: \t");

        while(coef[i]!=-1)
        {
        scanf("%d",&coef[i]);
        }
        /*le calcul de la moyenne gros problème lol j'ai du changer le "for" par un "do while" mais toujours pas le bon résultats*/
        do
        {
        coefT = coefT+coef[i];
        moyenne = moyenne + (note[i]*coef[i]);
        moyenne = moyenne/coefT;
        i++;
        }
        while(i<100 && note[i]!=-1 && coef[i]!=-1);
        printf("la moyenne est: %f", moyenne);
        getch();
        }
        0
        1. Contributeur
          Tu n'a pas tenu compte de toutes mes remarques.
          while(coef[i]!=-1)
          {
          scanf("%d",&coef[i]);
          }
          Il faut incrémenter i, mettre une condition sur i et sur coef.
          De même pour while(note).
          0
      2. si c'est à ça que tu fais référence

        while(i<100 && note[i]!=-1)
        {
        scanf("%f",&note[i]);
        i++;
        }

        ben quand je tape -1 pour marquer la fin de la saisie des notes et que je tape sur "Enter" pour passer à l'instruction suivante qui consiste à saisir les coefs ben rien ne se passe en quelque sorte il ne passe pas à l'instruction suivante
        0
        1. Contributeur
          Tu as oublié de remettre i à 0 pour la saisie des coef.
          Tu as remis: ¬e[i] au lieu de &note[i]. Est-ce normal ?
          0
      3. j'ai initialisé i à 0 à la déclaration des variables
        0
        1. Contributeur
          Oui, mais j'ai dit : pour la saisie des coef.
          A la saisie des notes, t'incrémentes i (avec la nouvelle version), donc i>0. Et à la fin tu refais while scanf sur les coef. Il faut donc remettre i à 0...
          0
      4. ok je vois ce que tu veux dire voici le nouveau code

        #include<stdio.h>
        #include<stdlib.h>

        int main(int argc, char *argv[])
        {
        /*déclaration des variables coefT est le total des coefs i et j des compteurs*/
        int coef[100]={0},coefT=0, i=0,j;
        float note[100]={0}, moyenne=0;

        printf("Veuillez saisir vos notes\n\n");
        printf("Notes: \t");
        /*la fin de la saisie des note et des coef dépend de l'utilisateur qui en tapant -1 y met fin */
        while(i<100 || note[i]!=-1)
        {
        scanf("%f",¬e[i]);
        i++;
        }

        printf("\n\nVeuillez saisir vos coefficients\n\n");
        printf("Coefficients: \t");

        i=0;
        while(i<100 || coef[i]!=-1)
        {
        scanf("%d",&coef[i]);
        i++;
        }
        /*le calcul de la moyenne gros problème lol j'ai du changer le "for" par un "do while" mais toujours pas le bon résultats*/
        i=0;
        do
        {
        coefT = coefT+coef[i];
        moyenne = moyenne + (note[i]*coef[i]);
        moyenne = moyenne/coefT;
        i++;
        }
        while(i<100 && note[i]!=-1 && coef[i]!=-1);
        printf("la moyenne est: %f", moyenne);
        getch();
        }

        mais il y a toujours problème après la saisie des notes en tapant -1 puis enter la programme ne va pas a l'instruction suivant qui consiste à saisir les coefs
        0
        1. Contributeur
          Salut smomo,

          Sur cette partie :

          while(i<100 || note[i]!=-1)      
          {      
            scanf("%f",&note[i]);      
            i++;      
          } 

          deux problèmes :

          - c'est un && (and) et non || (or) que l'on devrait contrôler
          - ton contrôle se fait sur la mauvaise case du tableau, puisque i++ est incrémenté après la saisie

          Je verrai plutôt un while ne contrôlant que i et un break après un if testant la (bonne) valeur entrée.

          Ton code, pour le reste, fait un peu mal aux yeux :-) entre autres : c'est "getchar();", et non "getch();", et tu dois retourner un int à main, donc un "return 0;" à la fin de main serait le bienvenu, tu ne vérifies pas qu'on a saisi le même nombre de notes et de coefficients, ou qu'on en a saisi au moins un de chaque.

          Dal
          0
        2. Contributeur
          Sur le calcul de ma moyenne.. il ne faudrait pas savoir sur combien les notes sont entrées (sur 20 ?) pour pouvoir faire une règle de 3 après l'application des coefficients ? J'avoue que je comprend pas trop ton calcul. Ah, oui.. il faudrait aussi vérifier que le nombre saisi correspond à quelque chose entre 0 et 20, si c'est sur 20.

          Dal
          0