Petite erreur à trouver
Résolu/Fermé
Maxcocatrix
Messages postés
88
Date d'inscription
dimanche 24 juin 2012
Statut
Membre
Dernière intervention
30 octobre 2014
-
Modifié par Maxcocatrix le 26/06/2014 à 13:45
Maxcocatrix Messages postés 88 Date d'inscription dimanche 24 juin 2012 Statut Membre Dernière intervention 30 octobre 2014 - 14 oct. 2014 à 16:02
Maxcocatrix Messages postés 88 Date d'inscription dimanche 24 juin 2012 Statut Membre Dernière intervention 30 octobre 2014 - 14 oct. 2014 à 16:02
A voir également:
- Petite erreur à trouver
- Erreur 0x80070643 - Accueil - Windows
- Trouver adresse mac - Guide
- Erreur 0x80070643 Windows 10 : comment résoudre le problème de la mise à jour KB5001716 - Accueil - Windows
- Comment trouver le mot de passe wifi sur son téléphone - Guide
- Erreur 1001 outlook - Accueil - Bureautique
6 réponses
Dosman
Messages postés
1444
Date d'inscription
mardi 1 mai 2012
Statut
Contributeur
Dernière intervention
26 septembre 2017
213
Modifié par Dosman le 26/06/2014 à 13:15
Modifié par Dosman le 26/06/2014 à 13:15
Bonjour,
J'ai testé votre code, je n'ai pas de problèmes :
https://www.cjoint.com/?DFAniBpTiiH
Cela vient peut-être du fait que vous avez mis le printf sur la même ligne que l'appel de fonction.
Sinon pour tailleTab, il suffit que vous mettiez :
double moyenne = (somme/(double)tailleTab)
A ce moment-là, tailleTab sera considéré comme un double.
"Moi je dis que le plus fort entre l'hippopotame et l'éléphant, c'est encore le rhinocéros !"
J'ai testé votre code, je n'ai pas de problèmes :
https://www.cjoint.com/?DFAniBpTiiH
Cela vient peut-être du fait que vous avez mis le printf sur la même ligne que l'appel de fonction.
Sinon pour tailleTab, il suffit que vous mettiez :
double moyenne = (somme/(double)tailleTab)
A ce moment-là, tailleTab sera considéré comme un double.
"Moi je dis que le plus fort entre l'hippopotame et l'éléphant, c'est encore le rhinocéros !"
Maxcocatrix
Messages postés
88
Date d'inscription
dimanche 24 juin 2012
Statut
Membre
Dernière intervention
30 octobre 2014
26 juin 2014 à 14:10
26 juin 2014 à 14:10
Cela pourrait-il venir d'un CodeBlocks défectueux.. ? même si j'en doute.
Je ne mets pas le sujet en résolu pour l'instant ; mais comme je l'ai dit, ma priorité n'est pas que ça fonctionne, mais que j'apprenne .. cependant si quelqu'un trouve, merci.
Je ne mets pas le sujet en résolu pour l'instant ; mais comme je l'ai dit, ma priorité n'est pas que ça fonctionne, mais que j'apprenne .. cependant si quelqu'un trouve, merci.
fiddy
Messages postés
11069
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
23 avril 2022
1 844
26 juin 2014 à 14:11
26 juin 2014 à 14:11
Je ne vois pas ce qui te fait penser qu'il y a une erreur ?
tab1[7]={4,5,1,3,7,1};
Cela veut dire que ton tableau contient 7 éléments dont les 1er sont 4,5,1,3,7,1 ; les autres sont mis à 0. Autrement dit, tab1[0]=4, tab1[1]=5, ..., tab1[5]=1, tab1[6]=0.
Ensuite, tu fais une boucle sur 7.
Donc, 4, 9, 10, 13, 20, 21, 21 (21+0).
21/7 te donne 3. A quoi t'attendais-tu ?
Pourquoi indiquer la taille du tableau ? Autant faire :
Ton tableau sera automatiquement alloué en 6 int (c'est la bonne taille).
Ensuite pour appeler ta fonction :
sizeof tab1/ sizeof *tab1; te renverra le nombre d'éléments dans ton tableau (ici 6).
Et enfin, n'oublie pas de mettre un '\n' à la fin de ton printf() pour forcer l'affichage avant le return 0; final.
Cdlt,
tab1[7]={4,5,1,3,7,1};
Cela veut dire que ton tableau contient 7 éléments dont les 1er sont 4,5,1,3,7,1 ; les autres sont mis à 0. Autrement dit, tab1[0]=4, tab1[1]=5, ..., tab1[5]=1, tab1[6]=0.
Ensuite, tu fais une boucle sur 7.
Donc, 4, 9, 10, 13, 20, 21, 21 (21+0).
21/7 te donne 3. A quoi t'attendais-tu ?
Pourquoi indiquer la taille du tableau ? Autant faire :
int tab1[] = {4, 5, 1, 3, 7, 1};
Ton tableau sera automatiquement alloué en 6 int (c'est la bonne taille).
Ensuite pour appeler ta fonction :
moy1=moyenneTableau( tab1, sizeof tab1 / sizeof *tab1 );
sizeof tab1/ sizeof *tab1; te renverra le nombre d'éléments dans ton tableau (ici 6).
Et enfin, n'oublie pas de mettre un '\n' à la fin de ton printf() pour forcer l'affichage avant le return 0; final.
Cdlt,
Maxcocatrix
Messages postés
88
Date d'inscription
dimanche 24 juin 2012
Statut
Membre
Dernière intervention
30 octobre 2014
Modifié par Maxcocatrix le 26/06/2014 à 14:20
Modifié par Maxcocatrix le 26/06/2014 à 14:20
Bien que je pense avoir compris la majorité, merci pour tes explications.
Mon problème est visible sur la 3e image que j'ai postée au départ.
Quand je compile, j'ai mis un printf dans ma fonction moyenneTableau, qui affiche 3 comme voulu.
Mais quand elle appelée par main, et que je réaffiche la valeur dans main, il affiche 0 (on le voit sur l'image), ce qui laisse présager que moy1 contient la valeur 0.0 dans la fonction main..
Merci pour size of
Mon problème est visible sur la 3e image que j'ai postée au départ.
Quand je compile, j'ai mis un printf dans ma fonction moyenneTableau, qui affiche 3 comme voulu.
Mais quand elle appelée par main, et que je réaffiche la valeur dans main, il affiche 0 (on le voit sur l'image), ce qui laisse présager que moy1 contient la valeur 0.0 dans la fonction main..
Merci pour size of
Dosman
Messages postés
1444
Date d'inscription
mardi 1 mai 2012
Statut
Contributeur
Dernière intervention
26 septembre 2017
213
26 juin 2014 à 14:47
26 juin 2014 à 14:47
Cela fait longtemps que je n'ai pas utilisé code::blocks, mais il me semble qu'il y a un mode pas à pas où l'on peut visionner le contenu des variables.
Il serait intéressant d'essayer.
Il serait intéressant d'essayer.
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
fiddy
Messages postés
11069
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
23 avril 2022
1 844
26 juin 2014 à 17:52
26 juin 2014 à 17:52
Ben, pour moi il n'y a pas d'autres erreurs.
Un autre truc qui n'est pas ISO C89/90 est le mélange déclaration / code.
Mets : double moyenne; juste après double somme = 0;
Et du coup, tu mets simplement : moyenne=somme/tailleTab;
Sinon, recolle ton code dans un autre fichier, puis recompile.
Etrange...
Un autre truc qui n'est pas ISO C89/90 est le mélange déclaration / code.
Mets : double moyenne; juste après double somme = 0;
Et du coup, tu mets simplement : moyenne=somme/tailleTab;
Sinon, recolle ton code dans un autre fichier, puis recompile.
Etrange...
sambia39
Messages postés
610
Date d'inscription
vendredi 31 juillet 2009
Statut
Membre
Dernière intervention
9 février 2023
49
Modifié par sambia39 le 27/06/2014 à 10:50
Modifié par sambia39 le 27/06/2014 à 10:50
Bonjour
Je suis d'accord avec @fiddy ce pendant au lieu de faire
il est préférable d'utiliser les pointeurs donc
à bientôt
Toute connaissance est une réponse à une question.
Je suis d'accord avec @fiddy ce pendant au lieu de faire
double moyenneTab(int tab[], int tailletabbleau);
il est préférable d'utiliser les pointeurs donc
double moyenne(int *tab, int tailletableau);et ce qui donnerait comme code en général ceci
#include <stdio.h> #include <stdlib.h> #define Size_Tab(arg)(sizeof(arg)/sizeof(*arg)) int f_MoyenTab(int *ptrTab,int const size){ int i = 0; int ret = 0; /* Vérification * de la taille du tableau */ if(size <=0) return (0); while(i++ < size) ret += (*ptrTab++); return ( (ret/size) ); } int main(void){ int Tab[] = {1,2,3,4,5,6,7,8,9}; printf("Moyene\t= %d\n",f_MoyenTab(Tab,Size_Tab(Tab))); return (0); }
à bientôt
Toute connaissance est une réponse à une question.
fiddy
Messages postés
11069
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
23 avril 2022
1 844
27 juin 2014 à 11:05
27 juin 2014 à 11:05
il est préférable d'utiliser les pointeurs donc
C'est exactement pareil. int tab[] c'est kif kif avec int *tab dans ce contexte.
Donc c'est selon ses préférences :-).
return (0);
Pourquoi mettre des parenthèses autour de 0 dans le return ? Ce n'est pas une fonction ;-).
C'est exactement pareil. int tab[] c'est kif kif avec int *tab dans ce contexte.
Donc c'est selon ses préférences :-).
return (0);
Pourquoi mettre des parenthèses autour de 0 dans le return ? Ce n'est pas une fonction ;-).
sambia39
Messages postés
610
Date d'inscription
vendredi 31 juillet 2009
Statut
Membre
Dernière intervention
9 février 2023
49
27 juin 2014 à 11:36
27 juin 2014 à 11:36
oui trouve que ça marque une pertinence d'observation un peut comme
return (EXIT_SUCCESS);
[Dal]
Messages postés
6198
Date d'inscription
mercredi 15 septembre 2004
Statut
Contributeur
Dernière intervention
13 décembre 2024
1 096
Modifié par [Dal] le 27/06/2014 à 13:53
Modifié par [Dal] le 27/06/2014 à 13:53
Salut sambia39,
cette partie :
c'est bien vu, car cela permet de rejeter les entrées illégales, dont une qui ferait une division par zéro. Cela dit, je ne sais pas s'il faudrait retourner 0, car cela ne permettrait pas de distinguer une moyenne de 0 d'un code d'erreur. Si les notes négatives ne peuvent exister, retourner -1 pour signifier une erreur serait peut-être mieux.
et puisqu'on en est à parler de préférences de style, moi j'aime bien mettre un espace entre le if et la parenthèse qui contient l'expression testée (et des espaces entre les opérateurs), alors que je ne mets pas d'espaces entre l'identifiant de la fonction et la parenthèse qui contient ses paramètres éventuels.
Dal
cette partie :
/* Vérification * de la taille du tableau */ if (size <= 0) return (0);
c'est bien vu, car cela permet de rejeter les entrées illégales, dont une qui ferait une division par zéro. Cela dit, je ne sais pas s'il faudrait retourner 0, car cela ne permettrait pas de distinguer une moyenne de 0 d'un code d'erreur. Si les notes négatives ne peuvent exister, retourner -1 pour signifier une erreur serait peut-être mieux.
et puisqu'on en est à parler de préférences de style, moi j'aime bien mettre un espace entre le if et la parenthèse qui contient l'expression testée (et des espaces entre les opérateurs), alors que je ne mets pas d'espaces entre l'identifiant de la fonction et la parenthèse qui contient ses paramètres éventuels.
Dal
sambia39
Messages postés
610
Date d'inscription
vendredi 31 juillet 2009
Statut
Membre
Dernière intervention
9 février 2023
49
Modifié par sambia39 le 27/06/2014 à 15:42
Modifié par sambia39 le 27/06/2014 à 15:42
@Dal En réalité la fonction ne fait que rendre le résultat de la moyenne qui a été calculé c'est donc normal de renvoyer zéro qu'un code erreur car tout ce qui est zéro divisible par 1 ou 100 ben c'est zéro :)
Ceci dit je pourrais juste dans le cas où le renvoi de zéro gêne , évaluer le tableau avant de faire appel à la fonction mais bon c'est un choix.
Ceci dit je pourrais juste dans le cas où le renvoi de zéro gêne , évaluer le tableau avant de faire appel à la fonction mais bon c'est un choix.
[Dal]
Messages postés
6198
Date d'inscription
mercredi 15 septembre 2004
Statut
Contributeur
Dernière intervention
13 décembre 2024
1 096
27 juin 2014 à 15:22
27 juin 2014 à 15:22
heu... un petit break s'impose :-)
26 juin 2014 à 13:44
Effectivement il marche pour vous ; j'ai remis le printf à la ligne, sans succès.
J'ai vérifié ligne par ligne, on a la même chose.
Heureusement que je n'en ai pas vraiment besoin et que j'apprends..
Ce qui est rassurant pour moi est que je n'ai pas fait de grosses fautes de code.
Bonne journée
(j'ai aussi appris le (double)taille, merci)
26 juin 2014 à 14:03
Inutile. somme est de type double. Donc tailleTab sera automatiquement convertit en double. somme/tailleTab; est donc correct.
26 juin 2014 à 14:05
Merci