[C] permutation des éléments d'une structure
Résolu/Fermé
isley
Messages postés
20
Date d'inscription
jeudi 21 août 2008
Statut
Membre
Dernière intervention
14 novembre 2009
-
27 nov. 2008 à 11:33
isley Messages postés 20 Date d'inscription jeudi 21 août 2008 Statut Membre Dernière intervention 14 novembre 2009 - 27 nov. 2008 à 23:07
isley Messages postés 20 Date d'inscription jeudi 21 août 2008 Statut Membre Dernière intervention 14 novembre 2009 - 27 nov. 2008 à 23:07
A voir également:
- Tri par permutation en c
- Excel trier par ordre croissant chiffre - Guide
- Logiciel tri photo gratuit - Guide
- Triez la liste comme sur cette illustration (attention, on ne voit que le début …). quel est le mot formé par les 6 dernières lettres de la colonne code ? - Forum Excel
- Excel trier par date ne fonctionne pas ✓ - Forum Excel
- Tri automatique excel sans macro ✓ - Forum Excel
5 réponses
Char Snipeur
Messages postés
9813
Date d'inscription
vendredi 23 avril 2004
Statut
Contributeur
Dernière intervention
3 octobre 2023
1 298
27 nov. 2008 à 15:05
27 nov. 2008 à 15:05
Salut.
Crazyghandi, tu dit beaucoup de bétisses. '->' ne sert pas que pour les listes chaîné, il sert à accéder au membre d'une structure à partir de son pointeur. Exemple :
struct A a,*b;
Pour accéder au membre i de a et b, il faut faire : a.i=3;b->i=0;
Ensuite, la fonction permute de Isley est bonne, la tienne fausse : elle ne permute rien du tout. En C le standard est le passage par copie. Si tu as int f(int a); lorsque tu appel cette fonction f(b), tu met la valeur de b dans le a de la fonction, et si tu modifie le a tu ne modifie pas b.
Avec les pointeurs, c'est pareil. Considère le code suivant :
int a,*b,*c;
*b=a; b est un pointeur pointant vers un entier contenue dans a.
Tu as une fonction void permute((int*) n1,(int*) n2)
Lorsque tu l'appel :
permute(b,c) tu copie b dans n1, c'est à dire l'adresse de a.
Si tu fait n1=n2, tu met l'adresse pointé par c dans n1, mais tu ne modifie pas a.
Si tu fait *n1=*n2; Tu mets la valeur pointé par c dans celle pointé par n1, donc par b (car c'est la même). Donc, tu modifie a.
Avec les pointeurs, il faut bien faire attention à ce que l'on manipule. Bon, je passe la fonction main, qui contient un nombre important de conneries. Un bon exemple de ce qu'il ne faut pas faire.
Crazyghandi, tu dit beaucoup de bétisses. '->' ne sert pas que pour les listes chaîné, il sert à accéder au membre d'une structure à partir de son pointeur. Exemple :
struct A a,*b;
Pour accéder au membre i de a et b, il faut faire : a.i=3;b->i=0;
Ensuite, la fonction permute de Isley est bonne, la tienne fausse : elle ne permute rien du tout. En C le standard est le passage par copie. Si tu as int f(int a); lorsque tu appel cette fonction f(b), tu met la valeur de b dans le a de la fonction, et si tu modifie le a tu ne modifie pas b.
Avec les pointeurs, c'est pareil. Considère le code suivant :
int a,*b,*c;
*b=a; b est un pointeur pointant vers un entier contenue dans a.
Tu as une fonction void permute((int*) n1,(int*) n2)
Lorsque tu l'appel :
permute(b,c) tu copie b dans n1, c'est à dire l'adresse de a.
Si tu fait n1=n2, tu met l'adresse pointé par c dans n1, mais tu ne modifie pas a.
Si tu fait *n1=*n2; Tu mets la valeur pointé par c dans celle pointé par n1, donc par b (car c'est la même). Donc, tu modifie a.
Avec les pointeurs, il faut bien faire attention à ce que l'on manipule. Bon, je passe la fonction main, qui contient un nombre important de conneries. Un bon exemple de ce qu'il ne faut pas faire.
crazyghandi
Messages postés
312
Date d'inscription
vendredi 9 novembre 2007
Statut
Membre
Dernière intervention
4 octobre 2011
19
27 nov. 2008 à 12:00
27 nov. 2008 à 12:00
struct entiers {
int *n1;
int *n2;
int *n3;
int *n4;
};
struct entiers liste;
void permute(int *a, int *b) {
int *tmp;
tmp = a;
a = b;
b = tmp;
return 0;
}
void main (void) {
printf ("\n rentrez un entier :");
scanf("%d",n1);
printf ("\n rentrez un entier :");
scanf("%d",n2);
printf ("\n rentrez un entier :");
scanf("%d",n3);
printf ("\n rentrez un entier :");
scanf("%d",n4);
permute (liste.n1,liste. n2);
permute (liste.n3,liste.n4);
printf(`\n nouvel ordre : %d %d %d %d",liste.n1,liste.n2,liste.n3,liste.n4);
return 0;
}
int *n1;
int *n2;
int *n3;
int *n4;
};
struct entiers liste;
void permute(int *a, int *b) {
int *tmp;
tmp = a;
a = b;
b = tmp;
return 0;
}
void main (void) {
printf ("\n rentrez un entier :");
scanf("%d",n1);
printf ("\n rentrez un entier :");
scanf("%d",n2);
printf ("\n rentrez un entier :");
scanf("%d",n3);
printf ("\n rentrez un entier :");
scanf("%d",n4);
permute (liste.n1,liste. n2);
permute (liste.n3,liste.n4);
printf(`\n nouvel ordre : %d %d %d %d",liste.n1,liste.n2,liste.n3,liste.n4);
return 0;
}
isley
Messages postés
20
Date d'inscription
jeudi 21 août 2008
Statut
Membre
Dernière intervention
14 novembre 2009
27 nov. 2008 à 13:07
27 nov. 2008 à 13:07
Merci pour ta réponse rapide crazyghandi
Cependant, j'ai quelques questions au sujet des pointeurs :
- dans la fonction permute, pourquoi ne réutilise t-on pas les pointeurs (comme dans la fonction que j'ai mise dans mon post)?
- pourquoi est-ce qu'on ne fait pas appel à l'opérateur ->, que l'on rencontre si souvent dans les structures?
Merci d'avance pour ton aide
Cependant, j'ai quelques questions au sujet des pointeurs :
- dans la fonction permute, pourquoi ne réutilise t-on pas les pointeurs (comme dans la fonction que j'ai mise dans mon post)?
- pourquoi est-ce qu'on ne fait pas appel à l'opérateur ->, que l'on rencontre si souvent dans les structures?
Merci d'avance pour ton aide
crazyghandi
Messages postés
312
Date d'inscription
vendredi 9 novembre 2007
Statut
Membre
Dernière intervention
4 octobre 2011
19
27 nov. 2008 à 13:10
27 nov. 2008 à 13:10
alors dans la fonction on appelle deja les deux variable en tant que pointeurs sur l'addresse de la variable envoyee (les liste.b) donc pas besoin de les repointer
ensuite on uilise l'operateur . pour le champ d'une structure , loperateur -> etant reserve aux liste chainees
qui sont un systeme de liste avec allocation memoire
ensuite on uilise l'operateur . pour le champ d'une structure , loperateur -> etant reserve aux liste chainees
qui sont un systeme de liste avec allocation memoire
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
isley
Messages postés
20
Date d'inscription
jeudi 21 août 2008
Statut
Membre
Dernière intervention
14 novembre 2009
27 nov. 2008 à 23:07
27 nov. 2008 à 23:07
Merci beaucoup pour la clarté et la rapidité de ta réponse.
J'ai vraiment bien compris, merci encore :D
J'ai vraiment bien compris, merci encore :D