[C] permutation des éléments d'une structure
Résolu
isley
Messages postés
20
Statut
Membre
-
isley Messages postés 20 Statut Membre -
isley Messages postés 20 Statut Membre -
Bonjour,
Voici mon problème.
J'ai une structure contenant 4 entiers, et je cherche à permuter 2 à 2 les éléments de cette structure.
Je souhaite faire appel pour cela à la fonction permute, dont voici le code :
void permute (int *a, int *b)
{
int s;
s= *a;
*a=*b;
*b=s;
}
Pouvez-vous m'aider à démarrer, s'il vous plait?
merci d'avance
Voici mon problème.
J'ai une structure contenant 4 entiers, et je cherche à permuter 2 à 2 les éléments de cette structure.
Je souhaite faire appel pour cela à la fonction permute, dont voici le code :
void permute (int *a, int *b)
{
int s;
s= *a;
*a=*b;
*b=s;
}
Pouvez-vous m'aider à démarrer, s'il vous plait?
merci d'avance
A voir également:
- Tri par permutation en c
- Comment trier par ordre alphabétique sur excel - Guide
- Logiciel tri photo - Guide
- Ajoutez à la liste de contacts ana le goff, inscrite le 27 novembre 2015, dans la catégorie i. puis triez les contacts en les classant : par ordre alphabétique de leur nom de famille (critère principal), puis par date du plus récent au plus ancien (critère secondaire). quel mot apparaît à la verticale dans la colonne "catégorie" entre les lignes 200 et 209 (en-tête compris) ? ✓ - Forum Word
- Peut on récupérer un colis au centre de tri chronopost - Forum Mobile
- En cours de traitement sur le site de tri local ✓ - Forum Réseaux sociaux
5 réponses
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.
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;
}
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
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