Récemment, j’ai eu envie de me mettre au C. J'en suis aux tableaux (les pointeurs m’ont tué à petit feu) et arrivé à la fin du chapitre de ces fameux tableaux, 5 énoncés d’exercices sont proposés dont l’unique but est de nous rendre chauves faire progresser. Malheureusement, aucune correction n’est apportée, juste une petite aide. J’aimerai donc savoir si je peux trouver les corrections à ces énoncés et où. ?_?
Merci d’avance.
Edit: erreur dans le titre, je veux parler du chapitre 3 et non des pointeurs.
Il n'y a pas de solutions, c'est justement pour forcer les lecteurs à travailler et pour qu'ils ne soient pas tenter de regarder les solutions.
Ton addition semble bonne, par contre ta moyenne non. Deux variables résultat ça me semble pas logique, il faut effectuer la division APRES toutes les additions (or là tu additionnes puis tu divises, puis tu réadditionnes et tu redivises).
D'autre part, ta moyenne ne fonctionne que pour un tableau à 4 cases (tu fais une division par 4, mais si c'est un tableau à 5 cases ça ne marchera plus !).
Bon courage, corrige-toi et passe à la suite une fois que c'est assimilé
Deux variables résultat ça me semble pas logique, il faut effectuer la division APRES toutes les additions (or là tu additionnes puis tu divises, puis tu réadditionnes et tu redivises).
D'autre part, ta moyenne ne fonctionne que pour un tableau à 4 cases (tu fais une division par 4, mais si c'est un tableau à 5 cases ça ne marchera plus !).
Corrigé (du moins, je l'espère ) :
double moyenneTableau(long tableau[], long tailleTableau) { long i; double resultat = 0;
Pour le troisième éxercice, on ne va pas dire que je ne trouve pas, juste que je n'arrive pas à la solution. Malgré le fait que je ne comprend pas correctement l'éxercice, j'ai essayé, ca donne ceci :
#include <stdio.h> #include <stdlib.h>
void copie(long tableauOriginal[], long tableauCopie[], long tailleTableau);
Pour la copie, tu as aussi compris (c'était pas difficile).
Si je puis me permettre une remarque : ta fonction n'a aucune raison de faire un printf, tu devrais le supprimer (c'était peut-être pour tes tests). Si tu fais un printf, fais-le dans le main c'est plus logique.
Pourquoi plus logique ?
Parce que si tu appelles ta fonction "copie" tu t'attends à ce qu'elle copie, pas qu'elle affiche des choses à l'écran
Voilà c'est tout, bon courage pour la suite, de mémoire je crois que le dernier exercice est un peu plus corsé
Knarf2 --> On s'écarte du sujet et je tenais simplement à signaler que maintant c'est presque exactement la même chose de mettre des long que des int... Perso j'utilise des int mais après c'est l'habitude de chacun.
Pour la copie, tu as aussi compris (c'était pas difficile).
Si je puis me permettre une remarque : ta fonction n'a aucune raison de faire un printf, tu devrais le supprimer (c'était peut-être pour tes tests). Si tu fais un printf, fais-le dans le main c'est plus logique.
Pourquoi plus logique ?
Parce que si tu appelles ta fonction "copie" tu t'attends à ce qu'elle copie, pas qu'elle affiche des choses à l'écran
Une fois que le grand manitou a validé ton code, oui, c'était facile
Merci pour ces conseils qui font toute la chose, et la font bien.
Hop, pour la fonction maximum :
#include <stdio.h> #include <stdlib.h>
void maximumTableau(long tableau[], long tailleTableau, long valeurMax);
int main(int argc, char *argv[]) { long tableau[4] = {10, 20, 30, 40}, i = 0;
system("PAUSE"); return0; }
void maximumTableau(long tableau[], long tailleTableau, long valeurMax) {
long i; for(i = 0 ; i < tailleTableau ; i++) { long valeurMax = 25; if(tableau[i] > valeurMax) {
tableau[i] = 0; }
} }
Est-ce bon ?
Pour ce qui est de la dernière fonction, la fameuse "ordonnerTableau", la nuit porte conseil hein.
PS : Knarf2 > désolé de faire confiance à l'auteur du tuto.
Ta fonction est bonne je pense.
Mais pourquoi donnes-tu une valeur fixe à valeurMax (que tu initialises en plus !) alors qu'elle est déjà initialisée et déterminée dans l'appel de la fonction ?
Faut bien dire à la fonction "si une des valeurs du tableau est supérieure à x" alors "cette valeur vaut maintenant 0" ? Donc faut bien fixer un plafond (qui, là, est x) ? Non ? Sinon comment sait-on qu'une ou plusieurs valeurs du tableau dépassent la "valeurMax" si on ne s'est pas ce que vaut cette valeur maximale ?
Je peux me tromper, je recherche juste la solution au problème.
La méthode pour la fonction maximum n'est pas bonne. Tu supposes que ton tableau possède des valeurs supérieures à 25, ce qui n'est pas du tout du tout efficace dans tous les cas tu t'en doutes.
Même si tu initialisais la variable à 0, comment ferais-tu si le tableau ne contenait que des valeurs négatives ?
Le mieux est d'initialiser cette variable "valeurmax" en lui donnant la valeur du premier élément du tableau (dès le début de la fonction). Ensuite, tu parcours le tableau et si tu trouves une valeur supérieure, ben tu la remplaces dans valeurmax
Attention aussi, grosse erreur : tu as déclaré ta variable valeurmax dans la boucle, en C on doit déclarer ses variables au début de la fonction.
Euh non, celà ne sert à rien d'initialiser valeurMax dans la fonction. Mais ton probléme c'est que dans ton main, tu n'appelles pas ta fonction, elle ne va pas s'appeler toute seule
Euh non, celà ne sert à rien d'initialiser valeurMax dans la fonction. Mais ton probléme c'est que dans ton main, tu n'appelles pas ta fonction, elle ne va pas s'appeler toute seule
#include <stdio.h> #include <stdlib.h>
void maximumTableau(long tableau[], long tailleTableau, long valeurMax);
int main(int argc, char *argv[]) { long tableau[4] = {10, 20, 30, 40}, i = 0; long valeurMax = 0;
valeurMax = tableau[0]; void maximumTableau();
Je te conseille de relire le cours sur les fonctions, tu ne l'as apparament pas assimilé. Essaie de le relire et si tu as des interrogations, n'hésite pas.
ta fonction n'est pas censé retourner ta valeur maximale ?
dans ce cas, au lieu de mettre
void maximumTableau
met plutôt
long maximumTableau
dans ta définition. Tu renvois la valeur max en faisant un return <ta variable>; dans ta fonction maximumTableau.
Ensuite, dans les arguments de ta fonction maximumTableau, l'un d'entre eux est inutile :
- tu peux trouver la variable "valeurMax" (qui est, si j'ai bien compris, une initialisation avec la première valeur de ton tableau) dans ta fonction. La ligne qui fait celà dans ton main, met là dans ta fonction (n'oublie pas d'instancier "valeurMax" dans ta fonction)
Ensuite, pour appeler ta fonction, tu met dans le main :
ValeurMaximum = maximumTableau(tableau,NbTabElement);
où ValeurMaximum est le résultat de ta fonction, tableau est ton tableau et NbTabElement est le nombre de case de ton tableau
Avec ce que je viens de te mettre, tu pourra un peu épurer ton main.
Bon, ça c'était juste pour la partie appel de fonction.
Ensuite, il y a une erreur dans ton main, dans la boucle for :
printf("%ld\\n", tableau[i]);
Tu met deux "\" à suivre et ton "n" ensuite. Je suppose donc que c'est parce que tu veux faire un retour à la ligne, c'est bien ça ?
Comme tu as mis "\\", printf pensera que tu veux qu'il affiche un "\", et c'est ce qu'il fait. Donc actuellement, ton programme affichera
10\n20\n30\n40\n
Il faut donc que tu en supprime un pour avoir un retour à la ligne.
Si vraiment tu sèches, je peux te mettre la solution.
Pour information, je fais ça en 15 lignes (juste du code, je retire les lignes où je met des accolades et les #include).
Non, je ne crois pas que le but de cette fonction sois de retourner la valeur maximale. Le but est de mettre à 0 tous les nombres du tableau dépassant une certaine valeur. Le type void convient parfaitement.
ah oups oui boulette en fait après avoir lu ce qu'a écrit M@teo21 un peu plus haut, j'avais compris que c'était le but de cette fonction.
bon ben euuuu tu oublies ce que j'ai mis concernant le fait qu'un paramètre ne sert à rien, le type de la fonction et le return. Celà dit le reste (c'est à dire l'erreur avec le printf et la manière d'appeler ta fonction, sauf que tu ne met pas "ValeurMaximum = ") est toujours valable.
Et ta fonction est bonne, ne la touche pas.
Donc il y a juste deux chose à voir :
- la manière d'appeler ta fonction
- le printf
Ensuite ça roule et faut recommencer à se casser la tête pour le cinquième exo (mais pas si compliqué que ça rassure-toi ! )
Pour les anti-slash, je ne sais pas de quoi cela est du mais chez moi il y a toujours un anti-slash pour un "n" ou un "t". Un bug du site quand on c/c ?
Je pense avoir suivit tes conseils Master Thor mais il me met une erreur à la ligne 11. Le code :
#include <stdio.h> #include <stdlib.h>
void maximumTableau(long tableau[], long tailleTableau, long valeurMax);
int main(int argc, char *argv[]) { long tableau[4] = {10, 20, 30, 40}, i = 0; long valeurMaximum = 0, valeurMax = 0;
valeurMax = tableau[0];
valeurMaximum = maximumTableau(tableau, 4);
void maximumTableau(long tableau[], long tailleTableau, long valeurMax) { long i; for(i = 0 ; i < tailleTableau ; i++) { if(tableau[i] > valeurMax) {
tableau[i] = 0; } } }
J'ai créer une nouvelle varaible ; mauvais choix ? On peut réunir valeurMaximum et valeurMax en une seule variable ?
C'est rageant d'être presque au but et de bloquer quand on pense avoir révolutionné la progrmmation.
PS : le message d'erreur est le suivant :
11 too few arguments to function `maximumTableau'
11 void value not ignored as it ought to be
Tu as relu le cours sur les fonctions. Tu essaies de récupérer le retour de ta fonction dans ton main alors qu'elle renvoie un void. Il y a un problème donc.
Bah oui, je t'ai signalé ton erreur. Tu tentes de stoquer dans une variable le retour de la fonction alors que ta fonction est de type void. C'est normal que ça ne veuille pas compiler. Réfléchis, tu vas y arriver.
Solutions pour les exercices du chapitre 2 de la 2ieme partie ?
× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
× Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
If you'd like to join us, read "How do we work at OpenClassrooms"! :)
If you'd like to join us, read "How do we work at OpenClassrooms"! :)
If you'd like to join us, read "How do we work at OpenClassrooms"! :)