Programme C et Tableau -- HELPP svp!

Résolu
Bonjour,
Voila, jai un exam lundi prochain et j essai de resoudre ce petit probleme mais je bloque!
-le truc, c'est faire un tableau avec en 1er ligne "les année" {1951; 1952; 1953; ...jusqu'a; 1960}
on demande alors a l utilisateur de rentrer des valeurs de temperature pour chaque année pour enfin afficher la moyenne de temperature sur cette periode (de 1951 a 1960).

et ici, ce que jai commecé, mais cela ne marche pas!!


#include <stdio.h>

int main()
{
    int i;    //pour les annee
    float s;     //la somme de temperature
    float T[10];    //le tableau
    
    for (i = 1951; i < 1961; i++)   
    {   
        printf ("temp pour %d \n", i);    // on demande ici a lutilsateur de rentrer la temperature
        scanf("%f", &T[i]);        //la valeur est mise dans le tableau
    }   
        
        s=s+T[i];      //la somme de toutes les temperatures pour le calcul de la moyenne
    
    
    
    printf ("moyene \n", s/10);
        
    

    return 0;
}




Merci a tous!
jai vraiment besoin de vous..
Configuration: Windows XP
Internet Explorer 7.0

8 réponses

  1. Contributeur
    Oui, en effet un si grand tableau pour n'utiliser que très peu de case représente pas beaucoup d'intérêt.
    Tu peux jouer avec l'addition pour faire du décalage d'indice. Par exemple :
    #include <stdio.h> 
    
    int main(void) { 
    
      int i; 
      float s=0, moy=0; 
      float T[10];  
    
      for (i = 1951; i < 1961; i++) 
      { 
        printf ("temp pour %d \n", i); 
        scanf("%f", &T[i-1951]); 
        s=s+T[i-1951];         
    
        } 
    
        moy=s/10; 
        printf ("moyene %f \n", moy); 
        return 0;
    
    }
     

    Et n'oublie pas le return final ;)
    Cdlt
    0
    1. ahhh!
      on peut aussi faire T[i-1951]);

      ok ok c'est noté! ;)
      0
  2. ça marche mais ça n'a aucun sens
    tu alloues trop d'espace inutilement donc c'est faux, à l'exam ça jouera contre toi
    => donc , rectifie ta boucle stp !
    0
    1. yeppp voila

      #include <stdio.h>

      int main()
      {

      int i;
      float s=0, moy=0;
      float T[10];

      for (i=1; i<11; i++)
      {
      printf ("temp pour l'année %d\n", i);
      scanf("%f", &T[i]);
      s=s+T[i];

      }

      moy=s/10;
      printf ("moyene %f \n", moy);

      }

      et tourne!! merci merci!!!
      0
    2. @ram damtrès bien
      et bon courage pour tes exam ;)
      0
    3. @&lt;yassou&gt;mais dit moi yassou, pour la boucle;

      que ce soit avec for (i=1; i<11; i++) ou for (i=0; i<10; i++)

      ca revient bien au méme?? no?
      0
    4. @ram damje me souviens plus très bien, mais je crois que le c permet de commencer les tableaux à partir de 0 ou de 1
      alors qu'en c++, on ne commence qu'avec l'indice 0
      donc normalement c'est la même chose, mais il faut vérifier au cas où je me trompe
      0
    5. Contributeur
      @&lt;yassou&gt;Non, le C comme le C++ commence leur tableau à 0.
      Donc, il faut utiliser : for(int i=0;i<10;i++)
      Cdlt
      0
  3. il reste plus qu'a rectifier ta boucle :
    for (i=0; i<10; i++)

    ça n'a pas de sens de créer un tableau de 1962 cases pour n'utiliser que 10 !!!!!
    gaspillage d'espace mémoire inutile, et à l'exam je ne sais pas ce que ça donnera comme remarque ou note !!!!
    0
    1. et avec le nouveau algo que jai mis??
      plus besoin de toucher a la boucle, non?
      0
    2. lol
      oui, je crois aussi que les prof aiment pas ca.. lol

      donc je change ma boucle..
      0
  4. fais copier/coller mon code pour voir !
    parce que j'ai utilisé une autre variable "moy" et dans printf j'ai mit "%f", j'ai un peu oublié le c mais normalement ça devrait marcher
    tiens nous au courant
    à+
    0
    1. OUIiiiiiiiii, c'est vrai j'avais oublié le %f du printf
      mais toujour ce méme bug

      et si on crée au debut un tableau
      float T[1961] ???


      donc jen suis ici maintenant

      #include <stdio.h> 
      
      int main() 
      { 
      
        int i;                                     //pour les annee 
        float s=0, moy=0;                 //la somme de temperature 
        float T[10];                         //le tableau 
      
        for (i = 1951; i < 1961; i++) 
        { 
          printf ("temp pour %d \n", i);        // on demande ici a lutilsateur de rentrer la temperature 
          scanf("%f", &T[i]);                      //la valeur est mise dans le tableau 
          s=s+T[i];                                  //la somme de toutes les temperatures pour le calcul de la moyenne 
      
          } 
      
          moy=s/10; 
          printf ("moyene %f \n", moy); 
      
      } 
      
      0
    2. @ram damVoila ca marche!!!
      c'etait bien un probleme de tableau trop petit!
      et jai donc ici un float T[1961];

      #include <stdio.h> 
      
      int main() 
      { 
      
        int i; 
        float s=0, moy=0; 
        float T[1961];  
      
        for (i = 1951; i < 1961; i++) 
        { 
          printf ("temp pour %d \n", i); 
          scanf("%f", &T[i]); 
          s=s+T[i];         
      
          } 
      
          moy=s/10; 
          printf ("moyene %f \n", moy); 
      
      } 
      
      
      0
  5. votre tableau est définie jusqu'au 10 et tu demande au programme de stocker une valeur dans T[1956] c normal ke tu vas rencontrer un problème!
    0
    1. oui c'est vrai il a raison, tu as T[10] de 0 à 9
      sinon utilise les enum et pas les tableaux pour faire de 1951 à 1960
      0
    2. @&lt;yassou&gt;non, il faut absolument utiliser un tableau.. l exam portera sur les tableaux..
      0
  6. salut,
    scanf("%f", &T[i]); //la valeur est mise dans le tableau !!! mais t'as mis la valeur dans T[1956] ki n'est pas défini

    je vous conseil d'utiliser unetableau à 2 dimension 2x10 dans la première ligne tu stocke les années ds la 2ème les temperature !
    si c n'est pas essentiel de mémoriser les température essaye c programme:

    #include <stdio.h>

    int main()
    {
    int i;
    float s=0,n;
    int T[10];

    for (i = 1951; i < =1960; i++)
    {
    printf ("temp pour %d \n", i); // on demande ici a lutilsateur de rentrer la temperature
    scanf("%f",n)
    s=s+n; //la somme de toutes les temperatures pour le calcul de la moyenne
    }

    printf ("moyene =", s/10);

    return 0;
    }
    j'ai pris votre programme et je fais qque modifications!
    0
    1. le code devrait ressembler à ça :

      #include <stdio.h>

      void main()
      {
      int i; //pour les annee
      float s=0, moy=0; //la somme de temperature
      float T[10]; //le tableau

      for (i = 0; i < 10; i++)
      {
      printf ("temp pour %d \n", i); // on demande ici a lutilsateur de rentrer la temperature
      scanf("%f", &T[i]); //la valeur est mise dans le tableau
      s=s+T[i]; //la somme de toutes les temperatures pour le calcul de la moyenne

      }

      moy=s/10;
      printf ("moyene %f \n", moy);

      }
      0
      1. mets la somme s=s+T[i] dans la boucle for !!!
        et il faut initialiser s=0; au début
        0
        1. ok, jai fais les modif mais la jai un bug
          je rentre bien la temperature pour la 1er année mais ensuite jai "

          "temp.exe a rencontré un problème et doit fermer. Nous vous prions de nous excuser pour le désagrément encouru."

          normal cette histoire??? et cela vien de chez moi??

          #include <stdio.h>
          
          int main()
          {
              int i;    //pour les annees
              float s=0;     //la somme de temperature
              float T[10];    //le tableau
              
              for (i = 1951; i < 1961; i++)   
              {   
                  printf ("temp pour %d \n", i);  // on demande ici a lutilsateur de rentrer la temperature
                  scanf("%f", &T[i]);        //la valeur est mise dans le tableau
              
                  s=s+T[i];      //la somme de toute les temperatures pour le calcul de la moyenne
              }   
              
              printf ("moyene \n", s/10);
                  
              return 0;
          }
          0