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   -
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.

3 réponses

Utilisateur anonyme
 
salut !

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 ;)
0
segueda Messages postés 14 Date d'inscription   Statut Membre Dernière intervention   3
 
OK C BON
0
segueda Messages postés 14 Date d'inscription   Statut Membre Dernière intervention   3 > segueda Messages postés 14 Date d'inscription   Statut Membre Dernière intervention  
 
Grand merci a toi Nagashima
0
Utilisateur anonyme > segueda Messages postés 14 Date d'inscription   Statut Membre Dernière intervention  
 
pas de problème. Bne aprem.

naga
0
fiddy Messages postés 11069 Date d'inscription   Statut Contributeur Dernière intervention   1 846
 
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,
0
segueda Messages postés 14 Date d'inscription   Statut Membre Dernière intervention   3
 
merci de ton aide... peux tu m'aider à comprendre ce que tu veux dire dans la deuxième erreur, surtout quand tu dis de calculer la taille dans le main() et de l'envoyer en argument de la fonction.
Merci d'avance.
0
fiddy Messages postés 11069 Date d'inscription   Statut Contributeur Dernière intervention   1 846
 
Oui l

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; 
} 
0
segueda Messages postés 14 Date d'inscription   Statut Membre Dernière intervention   3
 
merci
0
Utilisateur anonyme
 
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 !
0
Utilisateur anonyme
 
bon je peux plus éditer x) je voulais juste rajouter que passer en paramètre un * et non un ** (et donc le pointeur de tableau) te permet de récupérer la taille normalement ... (?)
0
segueda Messages postés 14 Date d'inscription   Statut Membre Dernière intervention   3
 
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] ;
}
0
fiddy Messages postés 11069 Date d'inscription   Statut Contributeur Dernière intervention   1 846
 
Return tab [n]; que vaut n ? Comment est-il déclaré ? Et que veux-tu que renvoie ta fonction inverserTableau ?
0