Salut les gars, j'ai terminer les exox sur le chapitres des tableaux, et je rencontre deux problèmes principaux; d'où mon cri de SOS. Vous trouverez a la fin de ce récit mes fichiers sources et headers.
Problème n°1 : J'arrive pas à récupérer et afficher la valeur renvoyée par ma fonction "moyenneTableau". Elle ne s'affiche que si je fais un "printf" à l'intérieur de la fonction et je ne comprend pas pourquoi, ni ce qu'il faut faire.
Problème n°2 : Regardez, après exécution, ce qu'affiche ma variable "copieTableau". Cela est dû à l'exécution de la fonction "ordonnerTableau" lorsqu'elle prend en paramètres cette variable. Et la encore, je me demande ce qu'il se passe.
Voici le contenu de mes fichiers :
/*fichier tableaux.c*/
//Affichage des elements du tableau void affiche( int tableau[], int tailleTableau) { int i; for ( i = 0 ; i < tailleTableau ; i++) { printf( "\n%d\n", tableau[i] ) ;
} }
//Somme des elements du tableau int sommeTableau( int tableau[ ] , int tailleTableau) { int i = 0, somme = 0; while (i < tailleTableau) { somme += tableau[i];
i++; } // printf("La somme des elements du tableau vaut %d\n\n", somme); return somme; }
//Moyenne des éléments du tableau double moyenneTableau( int tableau[], int tailleTableau) { int i = 0; double somme = 0, moyenne = 0; for (i=0 ; i<tailleTableau ; i++) { somme += tableau[i] ; } moyenne = somme / tailleTableau ; printf("\n\nLa moyenne des elements du tableau est de %.2f\n\n", moyenne);
return moyenne; }
//Copie des éléments d'un tableau vers un autre void copie( int tableauOriginal[ ] , int tableauCopie[ ] , int tailleTableau) { int i = 0; for (i=0; i<tailleTableau; i++) { tableauCopie[i]=tableauOriginal[i]; } }
//Fonction fixant une valeur max pour les éléments d'un tableau void maximumTableau( int tableau[ ] , int tailleTableau, int valeurMax) { int i = 0; for (i=0; i<tailleTableau; i++) { if (tableau[i] > valeurMax) tableau[i]=0; } }
//Fonction ordonnant un tableau par ordre croissant void ordonnerTableau( int tableau[] , int tailleTableau) { int i,j = 0, retenue = 0; for (j=0; j<tailleTableau; j++) { for (i=0; i<tailleTableau; i++)
Salut ! Je sais que ce que je vais dire ne va peut-être pas changer grand chose, mais je crois que pour tout ce qui concerne les tailles des tableaux, c'est mieux d'utiliser le type size_t au lieu de int.
Salut les gars, j'ai terminer les exos sur le chapitre des tableaux, et je rencontre deux principaux problèmes ; d'où mon cri de SOS. Vous trouverez à la fin de ce récit mes fichiers sources et headers.
Problème n°1 : J'arrive pas à récupérer et afficher la valeur renvoyée par ma fonction "moyenneTableau". Elle ne s'affiche que si je fais un "printf" à l'intérieur de la fonction et je ne comprend pas pourquoi, ni ce qu'il faut faire.
Problème n°2 : Regardez, après exécution, ce qu'affiche ma variable "copieTableau". Cela est dû à l'exécution de la fonction "ordonnerTableau" lorsqu'elle prend en paramètres cette variable. Et la encore, je me demande ce qu'il se passe.
Voici le contenu de mes fichiers :
/*fichier tableaux.c*/
//Affichage des elements du tableau
void affiche( int tableau[], int tailleTableau)
{
int i;
for ( i = 0 ; i < tailleTableau ; i++)
{
printf( "\n%d\n", tableau[i] ) ;
}
}
//Somme des elements du tableau
int sommeTableau( int tableau[ ] , int tailleTableau)
{
int i = 0, somme = 0;
while (i < tailleTableau)
{
somme += tableau[i];
i++;
}
// printf("La somme des elements du tableau vaut %d\n\n", somme);
return somme;
}
//Moyenne des éléments du tableau
double moyenneTableau( int tableau[], int tailleTableau)
{
int i = 0;
double somme = 0, moyenne = 0;
for (i=0 ; i<tailleTableau ; i++)
{
somme += tableau[i] ;
}
moyenne = somme / tailleTableau ;
printf("\n\nLa moyenne des elements du tableau est de %.2f\n\n", moyenne);
return moyenne;
}
//Copie des éléments d'un tableau vers un autre
void copie( int tableauOriginal[ ] , int tableauCopie[ ] , int tailleTableau)
{
int i = 0;
for (i=0; i<tailleTableau; i++)
{
tableauCopie[i]=tableauOriginal[i];
}
}
//Fonction fixant une valeur max pour les éléments d'un tableau
void maximumTableau( int tableau[ ] , int tailleTableau, int valeurMax)
{
int i = 0;
for (i=0; i<tailleTableau; i++)
{
if (tableau[i] > valeurMax)
tableau[i]=0;
}
}
//Fonction ordonnant un tableau par ordre croissant
void ordonnerTableau( int tableau[] , int tailleTableau)
{
int i,j = 0, retenue = 0;
for (j=0; j<tailleTableau; j++)
{
for (i=0; i<tailleTableau; i++)
{
if (tableau[i] > tableau[i+1])
{
retenue=tableau[i];
tableau[i]=tableau[i+1];
tableau[i+1]=retenue;
}
}
}
}
/*fichier tableaux.h*/
void affiche( int tableau[], int tailleTableau) ;
int sommeTableau( int tableau[ ] , int tailleTableau) ;
double moyenneTableau( int tableau[ ] , int tailleTableau) ;
void copie( int tableauOriginal[ ] , int tableauCopie[ ] , int tailleTableau) ;
void maximumTableau( int tableau[ ] , int tailleTableau, int valeurMax) ;
void ordonnerTableau( int tableau[ ] , int tailleTableau) ;
/*fichier principal main.c */
#include <stdio.h>
#include <stdlib.h>
int main( int argc, char *argv[ ] )
{
//Declaration des variables
int tableau[4] = {95, 15, 61, 79}, copieTableau[4]={0} ;
int somme = sommeTableau(tableau, 4);
copie(tableau, copieTableau, 4);
printf("Voici le contenu de la copie du tableau: \n");
affiche(copieTableau, 4);
printf("\nVoici le contenu du tableau avant qu'il ne soit ordonne:\n ");
affiche(tableau, 4);
ordonnerTableau(tableau, 4);
printf("\nVoici le contenu du tableau apres qu'il soit ordonne:\n ");
affiche(tableau, 4) ;
printf("\nLa somme des elements du tableau vaut %d\n\n", somme);
double moyenne = moyenneTableau(tableau, 4);
printf("\n\nLa moyenne des elements du tableau vaut %.2f\n\n", moyenne);
//On affiche de nouveau le contenu de "copieTableau" apres lui avoir appliqué un max et ordonné
maximumTableau(copieTableau, 4, 80);
ordonnerTableau(copieTableau, 4);
printf("\nVoici le contenu de \"copieTableau\" apres qu'il soit ordonne et maximise:\n ");
affiche(copieTableau, 4);
return 0;
}
Lignes 73, 76 et 77: tu dépasses la taille de ton tableau. En effet, si tu limites bien i à < tailleTableau, que vaut i+1 ? Et donc, que vaut tableau[i+1] (pour mémoire, dans un tableau de N éléments, les éléments vont de 0 à N-1) ? Indéfini, et ça pourrait provoquer un plantage (peu de chance/malchance dans le cas présent, mais autant le signaler).
A+
Edgar;
PS: et si ta fonction de tri est fonctionnelle, elle peut être optimisée (tout en restant un tri bulle)
On écrit "j'ai tort", pas "tord" qui est le verbe "tordre" à la 3ème personne de l'indicatif présent
Dans main.c il manque l'inclusion de tableaux.h. Ca explique des problèmes de corruption de passage de paramètres un peu long à expliquer. Il manque l'inclusion de tableaux.h dans tableaux.c.
× 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.
On écrit "j'ai tort", pas "tord" qui est le verbe "tordre" à la 3ème personne de l'indicatif présent