Tableaux

Résolu/Fermé
segueda Messages postés 14 Date d'inscription vendredi 12 avril 2013 Statut Membre Dernière intervention 29 avril 2013 - 12 avril 2013 à 11:59
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 - 29 avril 2013 à 19:20
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
12 avril 2013 à 12:55
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 vendredi 12 avril 2013 Statut Membre Dernière intervention 29 avril 2013 3
12 avril 2013 à 13:30
OK C BON
0
segueda Messages postés 14 Date d'inscription vendredi 12 avril 2013 Statut Membre Dernière intervention 29 avril 2013 3 > segueda Messages postés 14 Date d'inscription vendredi 12 avril 2013 Statut Membre Dernière intervention 29 avril 2013
12 avril 2013 à 13:31
Grand merci a toi Nagashima
0
Utilisateur anonyme > segueda Messages postés 14 Date d'inscription vendredi 12 avril 2013 Statut Membre Dernière intervention 29 avril 2013
12 avril 2013 à 13:31
pas de problème. Bne aprem.

naga
0
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 841
13 avril 2013 à 14:21
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 vendredi 12 avril 2013 Statut Membre Dernière intervention 29 avril 2013 3
14 avril 2013 à 04:58
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 samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 841
Modifié par fiddy le 14/04/2013 à 10:31
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 vendredi 12 avril 2013 Statut Membre Dernière intervention 29 avril 2013 3
14 avril 2013 à 20:30
merci
0
Utilisateur anonyme
15 avril 2013 à 08:01
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
15 avril 2013 à 08:05
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 vendredi 12 avril 2013 Statut Membre Dernière intervention 29 avril 2013 3
29 avril 2013 à 11:43
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 samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 841
29 avril 2013 à 19:20
Return tab [n]; que vaut n ? Comment est-il déclaré ? Et que veux-tu que renvoie ta fonction inverserTableau ?
0