Tableaux
Résolu
segueda
Messages postés
14
Date d'inscription
Statut
Membre
Dernière intervention
-
fiddy Messages postés 11069 Date d'inscription Statut Contributeur Dernière intervention -
fiddy Messages postés 11069 Date d'inscription Statut Contributeur Dernière intervention -
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