Rechercher : dans
Par :

[C] permutation des éléments d'une structure

Dernière réponse le 27 nov 2008 à 23:07:53 isley, le 27 nov 2008 à 11:33:07 
 Signaler ce message aux modérateurs

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

Configuration: Windows XP
Internet Explorer 7.0

Meilleures réponses pour « [C] permutation des éléments d'une structure » dans :
Les structures en langage C Voir Différence entre une structure et un tableau Un tableau permet de regrouper des éléments de même type, c'est-à-dire codés sur le même nombre de bits et de la même façon. Toutefois, il est généralement utile de pouvoir rassembler des éléments de...
Les structures en langage C++ Voir Différence entre une structure et un tableau Un tableau permet de regrouper des éléments de même type, c'est-à-dire codés sur le même nombre de bits et de la même façon. Toutefois, il est généralement utile de pouvoir rassembler des éléments de...
Les piles en langage C VoirLes piles Requis I. INTRODUCTION II. Définition III. La construction du prototype d'un élément de la pile IV. Opérations sur les piles A. Initialisation B. Insertion d'un élément dans la pile C. Ôter un élément de la pile D. Affichage...
La compilation et les modules en C et en C++ VoirCet article a pour vocation d'introduire les notions de bases de la compilation en C et en C++ et de la programmation modulaire. Il permet de mieux comprendre les messages d'erreur du compilateur. Les notions abordées ici sont indépendantes du...
Décaler les éléments d'un tableau (Rotation) -Récursivité- VoirVoici une procédure récursive qui permet de décaler tous les éléments d’un tableau d’une position à droite à partir de la position p Procedure Decaler (Var t : Tab; p, n : integer); Begin If p
Langage C++ - Les structures conditionnelles VoirQu'est-ce qu'une structure conditionnelle ? On appelle structure conditionnelle les instructions qui permettent de tester si une condition est vraie ou non. Ces structures conditionnelles peuvent être associées à des structures qui se répètent...
Langage C - Les tableaux VoirType de données complexes Les variables, telles que nous les avons vues, ne permettent de stocker qu'une seule donnée à la fois. Or, pour de nombreuses données, comme cela est souvent le cas, des variables distinctes seraient beaucoup trop lourdes...

1

crazyghandi, le 27 nov 2008 à 12:00:59

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;
}

Répondre à crazyghandi

2

isley, le 27 nov 2008 à 13:07:51

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

Répondre à isley

3

crazyghandi, le 27 nov 2008 à 13:10:24

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

Répondre à crazyghandi

4

Char Snipeur, le 27 nov 2008 à 15:05:35

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. Salutation !
Char Snipeur

Répondre à Char Snipeur

5

 isley, le 27 nov 2008 à 23:07:53

Merci beaucoup pour la clarté et la rapidité de ta réponse.
J'ai vraiment bien compris, merci encore :D

Répondre à isley