Moyenne de deux tableaux en c

smomo -  
[Dal] Messages postés 6122 Date d'inscription   Statut Contributeur Dernière intervention   -
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. fiddy Messages postés 441 Date d'inscription   Statut Contributeur Dernière intervention   1 847
     
    for(j=0; j<(note[i]=-1) && j<(coef[i]=-1); j++
    Que souhaites-tu faire en comparant j à note[i]=-1 ???

    0
  2. Flog78
     
    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. fiddy Messages postés 441 Date d'inscription   Statut Contributeur Dernière intervention   1 847
       
      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
  3. smomo
     
    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. fiddy Messages postés 441 Date d'inscription   Statut Contributeur Dernière intervention   1 847
       
      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
  4. smomo
     
    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. fiddy Messages postés 441 Date d'inscription   Statut Contributeur Dernière intervention   1 847
       
      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
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. smomo
     
    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
  7. smomo
     
    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. fiddy Messages postés 441 Date d'inscription   Statut Contributeur Dernière intervention   1 847
       
      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
  8. smomo
     
    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. fiddy Messages postés 441 Date d'inscription   Statut Contributeur Dernière intervention   1 847
       
      Tu as oublié de remettre i à 0 pour la saisie des coef.
      Tu as remis: ¬e[i] au lieu de ¬e[i]. Est-ce normal ?
      0
  9. smomo
     
    j'ai initialisé i à 0 à la déclaration des variables
    0
    1. fiddy Messages postés 441 Date d'inscription   Statut Contributeur Dernière intervention   1 847
       
      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
  10. smomo
     
    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. [Dal] Messages postés 6122 Date d'inscription   Statut Contributeur Dernière intervention   1 108
       
      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. [Dal] Messages postés 6122 Date d'inscription   Statut Contributeur Dernière intervention   1 108
       
      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