Tableaux
Résolu
segueda
Messages postés
15
Statut
Membre
-
fiddy Messages postés 11653 Statut Contributeur -
fiddy Messages postés 11653 Statut Contributeur -
bonjour, sil vous plait je suis debutant en c et je voudrais savoir comment créer une fonction qui prend en entrée un tableau de réels et renvoie le tableau inversé... C'est à dire ou tous les éléments du tableau initial sont présents, mais dans l'ordre inverse
merci d'avance.
merci d'avance.
3 réponses
salut !
déclaration de ta fonction :
en contenu ;
naga
PS : non testé mais ca doit être ca =p, redis moi ;)
déclaration de ta fonction :
int* InverserTableauINT(int* tableausource)
en contenu ;
int nbElements = sizeof(tableausource)/sizeof(tableausource);//récupère le nombre d'élément
int* tabRetour=new int[nbElements];
for(int i = 0 , j = nbElements-1 ; i < nbElements; i++,j--)
tabRetour[i] = tableausource[j];
return tabRetour;
naga
PS : non testé mais ca doit être ca =p, redis moi ;)
J'arrive trop tard, mais la réponse est archi-fausse.
Ton code fonctionne peut-être mais risque de planter à un moment ou à un autre.
en contenu ;
int nbElements = sizeof(tableausource)/sizeof(tableausource);//récupère le nombre d'élément
2 erreurs :
1ère : Diviser un nombre non nul par le même nombre (sizeof (tableausource)) fait toujours 1. Donc nbElements fera 1.
En fait c'est : int nbElements=sizeof(tableausource)/sizeof(*tableausource);
on divise la taille du tableau par la taille d'un élément du tableau pour connaître le nombre d'élément.
2ème : Sauf qu'en C, on ne peut pas passer de tableau mais un pointeur. De fait sizeof(tableausource) vaudra le même nombre quelque soit la taille du tableau.
La solution consiste à calculer la taille dans le main() (dans la fonction appelante) et à l'envoyer en argument de la fonction.
int* tabRetour=new int[nbElements];
Ce n'est pas du C ça mais du C++. En C, il faut utiliser malloc().
for(int i = 0 , j = nbElements-1 ; i < nbElements; i++,j--)
En C (sauf en C99), on ne peut pas déclarer une variable dans un for. Il faut le faire avant.
Cdlt,
Ton code fonctionne peut-être mais risque de planter à un moment ou à un autre.
en contenu ;
int nbElements = sizeof(tableausource)/sizeof(tableausource);//récupère le nombre d'élément
2 erreurs :
1ère : Diviser un nombre non nul par le même nombre (sizeof (tableausource)) fait toujours 1. Donc nbElements fera 1.
En fait c'est : int nbElements=sizeof(tableausource)/sizeof(*tableausource);
on divise la taille du tableau par la taille d'un élément du tableau pour connaître le nombre d'élément.
2ème : Sauf qu'en C, on ne peut pas passer de tableau mais un pointeur. De fait sizeof(tableausource) vaudra le même nombre quelque soit la taille du tableau.
La solution consiste à calculer la taille dans le main() (dans la fonction appelante) et à l'envoyer en argument de la fonction.
int* tabRetour=new int[nbElements];
Ce n'est pas du C ça mais du C++. En C, il faut utiliser malloc().
for(int i = 0 , j = nbElements-1 ; i < nbElements; i++,j--)
En C (sauf en C99), on ne peut pas déclarer une variable dans un for. Il faut le faire avant.
Cdlt,
Oui l
Dans la fonction inverserTableauINT :
Et pour l'appeler :
Dans la fonction inverserTableauINT :
int* inverserTableauINT(int* tableausource, int szTab) {
/*nombre d'éléments dans le tableau : szTab*/
}
Et pour l'appeler :
#define TAILLE 50
int main(void) {
int tableausource[TAILLE];
/*ici, tu fais une fonction pour initialiser le tableau*/
inverserTableauINT(tableausource, TAILLE); /*ou inverserTableauINT(tableausource, sizeof tableausource / sizeof (*tableausource));*/
return 0;
}
int nbElements = sizeof(tableausource)/sizeof(tableausource);//récupère le nombre d'élément 2 erreurs : 1ère : Diviser un nombre non nul par le même nombre (sizeof (tableausource)) fait toujours 1. Donc nbElements fera 1.
ah oui là c'est de ma faute, il faut diviser par in sizeof(int) (ce qui revient au même que ta solution à l'exception que toi tu n'as pas besoin du type ... ce qui peu être utile en fait x]).
pour les deux autres points c'est ma faute, l'habitude du c++ =p
bne journée !
Ok les gars merci pour votre aide, voici une autre solution que j'ai trouvé:
void inverserDeuxValeurs(float tab[n], int index1, int index2)
{
int tmp = tab[index1];
tab[index1] = tab[index2];
tab[index2] = tmp;
}
Float inverserTableau(float tab[n], int indexMin, int indexMax)
{
while(indexMin < indexMax)
{
inverserDeuxValeurs(tab, indexMin, indexMax);
++indexMin;
--indexMax;
}
Return tab[n] ;
}
void inverserDeuxValeurs(float tab[n], int index1, int index2)
{
int tmp = tab[index1];
tab[index1] = tab[index2];
tab[index2] = tmp;
}
Float inverserTableau(float tab[n], int indexMin, int indexMax)
{
while(indexMin < indexMax)
{
inverserDeuxValeurs(tab, indexMin, indexMax);
++indexMin;
--indexMax;
}
Return tab[n] ;
}
naga