IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

 C Discussion :

accès aux éléments d'une structure


Sujet :

C

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 12
    Points : 5
    Points
    5
    Par défaut accès aux éléments d'une structure
    Bonsoir,
    J'ai réalisé le programme (ci-dessous) qui utilise des tableaux de structures qui sont ici définis par : objet.
    J'affecte aux données d'un tableau d'objet (ici conjugué[]) les données d'un second tableau d'objet (tableau[]).
    Or lorsque je réalise un printf pour afficher le contenu du tableau conjugue[], il n'y a que des valeurs nulles.
    Mon prolème est peut-être bête mais je n'y arrive pas...
    Merci de votre aide.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    #include<stdio.h>
    #include<string.h>
    #include<stdlib.h>
    #include<math.h>
     
    typedef enum {
    	ps ,  
    	pp ,  
    	pz ,   
    	zs , 
    	zz ,  
    	zp   
    }nature;
     
    typedef struct{
        float _re;  // partie reelle
    	float _im;  // partie imaginaire
    	float _ordre; // ordre, 0 par defaut
    nature _nat;
    }objet;
     
    objet tableau[20];
    objet conjugue[20];
     
    void conjuguee(){
    int i;
    for(i=0;i<20;i++){	
    conjugue[i]._re=tableau[i]._re;
    conjugue[i]._im=-tableau[i]._im;
    conjugue[i]._ordre=-tableau[i]._ordre;
    conjugue[i]._nat=-tableau[i]._nat;
    }
    }
     
    int main(void)
    {
          objet p1 ={0.5,0,1,ps};
          objet p2 ={0.75,0.5,1,ps};
          objet p3 ={0.75,-0.5,1,ps};
          objet p4 ={2/3,0.25,1,ps};
          objet p5 ={2/3,-0.25,1,ps};
          objet z1 ={-1,0,1,zs};
          objet z2 ={0,1,1,zs};
          objet z3 ={0,1,1,zs};
          objet z4 ={cos(3*3.14/4),sin(3*3.14/4),1,zs};
          objet z5 ={cos(-3*3.14/4),sin(-3*3.14/4),1,zs};
     
    objet tableau[]={p1,p2,p3,p4,p5,z1,z2,z3,z4,z5};
     
    conjuguee();
     int j=0;
    for(j=0; j<15; j++){
      printf("%f", conjugue[j]._re);
       printf("\n");
    }}

  2. #2
    Membre éclairé
    Inscrit en
    Avril 2007
    Messages
    667
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Avril 2007
    Messages : 667
    Points : 870
    Points
    870
    Par défaut
    Salut,
    Tu definis 2 variables tableau[], une locale dans main() qui contient les valeurs que tu veux et une globale initialisee a 0 que tu utilises dans conjugue() pour remplir conjugue[]

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 12
    Points : 5
    Points
    5
    Par défaut
    Je ne suis pas sure d'avoir compris ce que vous m'avez dit. J'ai changé le code de la manière suivante sans succès..

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
     
    #include<stdio.h>
    #include<string.h>
    #include<stdlib.h>
    #include<math.h>
     
    typedef enum {
    	ps ,  
    	pp ,  
    	pz ,   
    	zs , 
    	zz ,  
    	zp   
    }nature;
     
    typedef struct{
        float _re;  // partie reelle
    	float _im;  // partie imaginaire
    	float _ordre; // ordre, 0 par defaut
    nature _nat;
    }objet;
     
     
    objet conjugue[20];
    objet tableau[20];
     
     
    void conjuguee(){   
    float re_int,int_im;     
    int i;
    for(i=0;i<20;i++){	
     
    re_int=tableau[i]._re;
    conjugue[i]._re=re_int;
     
    int_im=-1*tableau[i]._im;
    conjugue[i]._im=int_im;
     
    conjugue[i]._ordre=-tableau[i]._ordre;
    conjugue[i]._nat=-tableau[i]._nat;
    }
    }
     
    int main(void)
    {
          objet p1 ={0.5,0,1,ps};
          objet p2 ={0.75,0.5,1,ps};
          objet p3 ={0.75,-0.5,1,ps};
          objet p4 ={2/3,0.25,1,ps};
          objet p5 ={2/3,-0.25,1,ps};
          objet z1 ={-1,0,1,zs};
          objet z2 ={0,1,1,zs};
          objet z3 ={0,1,1,zs};
          objet z4 ={cos(3*3.14/4),sin(3*3.14/4),1,zs};
          objet z5 ={cos(-3*3.14/4),sin(-3*3.14/4),1,zs};
     
    objet tableau[]={p1,p2,p3,p4,p5,z1,z2,z3,z4,z5};
     
    conjuguee();
     int j=0;
    for(j=0; j<20; j++){
      printf("%f", conjugue[j]._re);
       printf("\n");
    }}

  4. #4
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par titou35 Voir le message
    Bonsoir,
    J'ai réalisé le programme (ci-dessous) qui utilise des tableaux de structures qui sont ici définis par : objet.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    <...>
    objet tableau[20];
    objet conjugue[20];
    <...>
    Quand je vois des globales, je m'en vais en courant...
    Pas de Wi-Fi à la maison : CPL

  5. #5
    Membre éclairé
    Inscrit en
    Avril 2007
    Messages
    667
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Avril 2007
    Messages : 667
    Points : 870
    Points
    870
    Par défaut
    Citation Envoyé par titou35 Voir le message
    Je ne suis pas sure d'avoir compris ce que vous m'avez dit. J'ai changé le code de la manière suivante sans succès..
    Tu definis 2 fois la meme variable avec 2 portee differentes. Voila ton premier programme legerement modifie pour que tu comprennes mieux:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    #include<stdio.h>
    #include<string.h>
    #include<stdlib.h>
    #include<math.h>
     
    typedef enum {
    	ps ,  
    	pp ,  
    	pz ,   
    	zs , 
    	zz ,  
    	zp   
    }nature;
     
    typedef struct{
        float _re;  // partie reelle
    	float _im;  // partie imaginaire
    	float _ordre; // ordre, 0 par defaut
    nature _nat;
    }objet;
     
    objet tableau_global[20];
    objet conjugue[20];
     
    void conjuguee(){
    int i;
    for(i=0;i<20;i++){	
        conjugue[i]._re=tableau_global[i]._re;
        conjugue[i]._im=-tableau_global[i]._im;
        conjugue[i]._ordre=-tableau_global[i]._ordre;
        conjugue[i]._nat=-tableau_global[i]._nat;
    }
    }
     
    int main(void)
    {
          objet p1 ={0.5,0,1,ps};
          objet p2 ={0.75,0.5,1,ps};
          objet p3 ={0.75,-0.5,1,ps};
          objet p4 ={2/3,0.25,1,ps};
          objet p5 ={2/3,-0.25,1,ps};
          objet z1 ={-1,0,1,zs};
          objet z2 ={0,1,1,zs};
          objet z3 ={0,1,1,zs};
          objet z4 ={cos(3*3.14/4),sin(3*3.14/4),1,zs};
          objet z5 ={cos(-3*3.14/4),sin(-3*3.14/4),1,zs};
     
    objet tableau_local[]={p1,p2,p3,p4,p5,z1,z2,z3,z4,z5};
     
    conjuguee();
     int j=0;
    for(j=0; j<15; j++){
      printf("%f", conjugue[j]._re); //conjugue[] a ete initialise par tableau_global
       printf("\n");
    }}
    Pour corriger, suis le conseil d'Emmanuel et vire les globales (tableau et conjugue). Pour cela le plus simple est de passer l'adresse des tableaux en parametre a conjuguee:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    #include<stdio.h>
    #include<string.h>
    #include<stdlib.h>
    #include<math.h>
     
    typedef enum {
    	ps ,  
    	pp ,  
    	pz ,   
    	zs , 
    	zz ,  
    	zp   
    }nature;
     
    typedef struct{
        float _re;  // partie reelle
        float _im;  // partie imaginaire
        float _ordre; // ordre, 0 par defaut
        nature _nat;
    }objet;
     
    void conjuguee(objet *tab, objet *conj){
    int i;
    for(i=0;i<20;i++){	
        conj[i]->_re=tab[i]->_re;
        conj[i]->_im=-tab[i]->_im;
        conj[i]->_ordre=-tab[i]->_ordre;
        conj[i]->_nat=-tab[i]->_nat;
    }
    }
     
    int main(void)
    {
          objet p1 ={0.5,0,1,ps};
          objet p2 ={0.75,0.5,1,ps};
          objet p3 ={0.75,-0.5,1,ps};
          objet p4 ={2/3,0.25,1,ps};
          objet p5 ={2/3,-0.25,1,ps};
          objet z1 ={-1,0,1,zs};
          objet z2 ={0,1,1,zs};
          objet z3 ={0,1,1,zs};
          objet z4 ={cos(3*3.14/4),sin(3*3.14/4),1,zs};
          objet z5 ={cos(-3*3.14/4),sin(-3*3.14/4),1,zs};
          objet conjugue[20];
          objet tableau[]={p1,p2,p3,p4,p5,z1,z2,z3,z4,z5};
     
    conjuguee(tableau, conjugue);
    int j=0;
    for(j=0; j<15; j++){
      printf("%f", conjugue[j]._re);
      printf("\n");
    }}

Discussions similaires

  1. L'accès aux éléments d'une structure de données
    Par Imene MI dans le forum Débuter
    Réponses: 3
    Dernier message: 06/03/2015, 17h17
  2. Accès aux membres d'une structure C
    Par Gulish dans le forum C++
    Réponses: 4
    Dernier message: 22/03/2008, 16h09
  3. Réponses: 0
    Dernier message: 31/08/2007, 20h38
  4. Accès aux éléments d'une structure
    Par licorne dans le forum Pascal
    Réponses: 1
    Dernier message: 15/02/2007, 17h44
  5. accès aux éléments d'une enum
    Par aymeric__ dans le forum C++
    Réponses: 6
    Dernier message: 17/08/2006, 21h17

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo