Programme C et Tableau -- HELPP svp!

Résolu/Fermé
ram dam - 25 nov. 2008 à 17:19
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 - 25 nov. 2008 à 18:35
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..
A voir également:

8 réponses

&lt;yassou&gt; Messages postés 589 Date d'inscription lundi 17 décembre 2007 Statut Membre Dernière intervention 6 juin 2015 75
25 nov. 2008 à 17:23
mets la somme s=s+T[i] dans la boucle for !!!
et il faut initialiser s=0; au début
0
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
&lt;yassou&gt; Messages postés 589 Date d'inscription lundi 17 décembre 2007 Statut Membre Dernière intervention 6 juin 2015 75
25 nov. 2008 à 17:28
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
samar83 Messages postés 67 Date d'inscription vendredi 26 octobre 2007 Statut Membre Dernière intervention 12 novembre 2009 2
25 nov. 2008 à 17:30
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
samar83 Messages postés 67 Date d'inscription vendredi 26 octobre 2007 Statut Membre Dernière intervention 12 novembre 2009 2
25 nov. 2008 à 17:35
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
&lt;yassou&gt; Messages postés 589 Date d'inscription lundi 17 décembre 2007 Statut Membre Dernière intervention 6 juin 2015 75
25 nov. 2008 à 17:38
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
ram dam > &lt;yassou&gt; Messages postés 589 Date d'inscription lundi 17 décembre 2007 Statut Membre Dernière intervention 6 juin 2015
25 nov. 2008 à 17:46
non, il faut absolument utiliser un tableau.. l exam portera sur les tableaux..
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
&lt;yassou&gt; Messages postés 589 Date d'inscription lundi 17 décembre 2007 Statut Membre Dernière intervention 6 juin 2015 75
25 nov. 2008 à 17:35
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
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
ram dam > ram dam
25 nov. 2008 à 17:49
Voila 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
&lt;yassou&gt; Messages postés 589 Date d'inscription lundi 17 décembre 2007 Statut Membre Dernière intervention 6 juin 2015 75
25 nov. 2008 à 17:48
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
et avec le nouveau algo que jai mis??
plus besoin de toucher a la boucle, non?
0
lol
oui, je crois aussi que les prof aiment pas ca.. lol


donc je change ma boucle..
0
&lt;yassou&gt; Messages postés 589 Date d'inscription lundi 17 décembre 2007 Statut Membre Dernière intervention 6 juin 2015 75
25 nov. 2008 à 17:52
ç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
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
&lt;yassou&gt; Messages postés 589 Date d'inscription lundi 17 décembre 2007 Statut Membre Dernière intervention 6 juin 2015 75 > ram dam
25 nov. 2008 à 18:02
très bien
et bon courage pour tes exam ;)
0
ram dam > &lt;yassou&gt; Messages postés 589 Date d'inscription lundi 17 décembre 2007 Statut Membre Dernière intervention 6 juin 2015
25 nov. 2008 à 18:06
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
&lt;yassou&gt; Messages postés 589 Date d'inscription lundi 17 décembre 2007 Statut Membre Dernière intervention 6 juin 2015 75 > ram dam
25 nov. 2008 à 18:12
je 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
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 840 > &lt;yassou&gt; Messages postés 589 Date d'inscription lundi 17 décembre 2007 Statut Membre Dernière intervention 6 juin 2015
25 nov. 2008 à 18:35
Non, le C comme le C++ commence leur tableau à 0.
Donc, il faut utiliser : for(int i=0;i<10;i++)
Cdlt
0
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 840
25 nov. 2008 à 17:58
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
ahhh!
on peut aussi faire T[i-1951]);

ok ok c'est noté! ;)
0