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 :

Tableau de structure [Débutant(e)]


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Étudiant
    Inscrit en
    Mai 2007
    Messages
    32
    Détails du profil
    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2007
    Messages : 32
    Par défaut Tableau de structure
    Bonjour,
    je souhaite stocker créer une fonction qui calcule la profondeur de N objets, N étant calculé précédemment dans mon programme, et stocke cette profondeur pour chaque objet dans une structure (qui comporte la profondeur et la longueur de l'objet).

    Je pense donc faire un truc genre

    définition :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    /*Définition de la structure*/
    struct layer
    {
    float depth;
    float length;
    }
     
    /*définition du tableau*/
     
    struct layer layertable [N];/*1er problème : N est calculé dans le main donc encore inconnu lors de la déclaration*/
    Puis définition de la fonction :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    layertable REINFORCEMENTDEPTH (float def.H,int N) /*la fonction doit me retourner un tableau de N structures layer, et prend comme arguments le nombre d'objet N et un parametre H defini avant*/
    {
    for (i=0;i<N,i++)
    {if (i!=0)
    tableau[i]=def.H*sqrt((i-1)/N);/*2eme problème : la je crée un tableau avec les profondeurs mais je veux que ces profondeurs soient affectées a chaque objet layer1,layer2 (dont le nombre est variable selon la valeur de N)*/
    else if (i=0)
    tableau [i]=0,5*layer2.depth;
    }
    Bon j'ai essayé d'être la plus claire possible mais je sais pas si c'est clair ....
    de votre aide

  2. #2
    Membre confirmé
    Inscrit en
    Août 2006
    Messages
    36
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 36
    Par défaut
    Salut,
    Pour assigner les valeurs à ton tableau de structures je vois pas pourquoi tu les assignes pas directement ;

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    layertable REINFORCEMENTDEPTH (float def.H,int N,struct layertable *mytable) /*la fonction doit me retourner un tableau de N structures layer, et prend comme arguments le nombre d'objet N et un parametre H defini avant*/
    {
    mytable = malloc(sizeof(N * struct layertable));
    for (i=0;i<N,i++)
    {if (i!=0)
    mytable[i]->depth =def.H*sqrt((i-1)/N);/*2eme problème : la je crée un tableau avec les profondeurs mais je veux que ces profondeurs soient affectées a chaque objet layer1,layer2 (dont le nombre est variable selon la valeur de N)*/
    else if (i=0)
    mytable[i]->depth]=0,5*layer2.depth;
    }
    Dans ton main.c avant d'appeler ta fonction;
    struct layertable *my_table ; //par ex

    Enfin ça ce serait une solution avec un N fixe je crois..
    Oriente toi vers les listes chaînées pour un tableau dynamique de quoi que ce soit.. si tu veux un exemple hésite pas.

  3. #3
    Membre averti
    Étudiant
    Inscrit en
    Mai 2007
    Messages
    32
    Détails du profil
    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2007
    Messages : 32
    Par défaut
    Aiiiiiie

    Je pensais pouvoir m'en sortir sans pointeurs (je ne maitrise pas du tout)
    Et en plus tu me parles de listes chainées et de tables dynamiques !!!!
    Je connais pas tout ça moi ...
    Je cherche une solution, meme si elle est lourde en calculs et moche , qui soit pas trop compliquée pour ma petite tete ...

  4. #4
    Membre Expert Avatar de zooro
    Homme Profil pro
    Développeur Java
    Inscrit en
    Avril 2006
    Messages
    921
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Avril 2006
    Messages : 921
    Par défaut
    Citation Envoyé par SofC++
    Aiiiiiie

    Je pensais pouvoir m'en sortir sans pointeurs (je ne maitrise pas du tout)
    Et en plus tu me parles de listes chainées et de tables dynamiques !!!!
    Je connais pas tout ça moi ...
    Je cherche une solution, meme si elle est lourde en calculs et moche , qui soit pas trop compliquée pour ma petite tete ...
    Dans ce cas, une solution serait de sur-dimensionner ton tableau (par exemple, tu décides que N vaudra au plus 1000, et donc tu fais un tableau de 1000).
    Si tu fais comme ça, quand tu calcules la valeur de N, n'oublies pas de vérifier qu'elle ne dépasse pas 1000.

    C'est quand même moins propre que l'allocation dynamique à mon avis.

  5. #5
    Membre averti
    Étudiant
    Inscrit en
    Mai 2007
    Messages
    32
    Détails du profil
    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2007
    Messages : 32
    Par défaut
    Question subsidiaires :

    mytable[i]->depth =def.H*sqrt((i-1)/N);
    cette ligne veut dire que je mets def.H*sqrt((i-1)/N) dans layer.depth de la ieme ligne de mon tableau ?

    Comment l'ordi sait-il que je veux créer N structures de type layers avec chacune leur depth et leur length ?

    Comment ensuite afficher la liste de mes layers avec leur depth et leur structure ?

    J'ai pas l'impression de bien expliquer mon probleme alors si vous comprenez pas je peux tout reprendre du début .....
    Parce que la je vois vraiment pas comment m'en sortir avec cette fonction ce tableau cette structure ....

  6. #6
    Membre Expert Avatar de zooro
    Homme Profil pro
    Développeur Java
    Inscrit en
    Avril 2006
    Messages
    921
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Avril 2006
    Messages : 921
    Par défaut
    Citation Envoyé par SofC++
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    mytable[i]->depth =def.H*sqrt((i-1)/N);
    cette ligne veut dire que je mets def.H*sqrt((i-1)/N) dans layer.depth de la ieme ligne de mon tableau ?
    Cette ligne veut dire que tu calcules def.H (donc l'élément H de la structure def) multiplié par la racine carrée de ((i-1) divisé par N), et que tu mets le résultat dans l'élément depth de la ligne i du tableau de structures mytable.

    Pour afficher tout ton tableau, tu peux utiliser une boucle :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    int i = 0;
    for (i=0; i<N; i++) {
      printf("element %i: depth=%.2f; length=%.2f\n", i, mytable[i].depth, mytable[i].length);
    }

  7. #7
    Expert confirmé

    Inscrit en
    Août 2006
    Messages
    3 967
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 3 967
    Par défaut
    Jio,
    Citation Envoyé par SofC++
    Aiiiiiie

    Je pensais pouvoir m'en sortir sans pointeurs (je ne maitrise pas du tout)
    Et en plus tu me parles de listes chainées et de tables dynamiques !!!!
    Je connais pas tout ça moi ...
    Je cherche une solution, meme si elle est lourde en calculs et moche , qui soit pas trop compliquée pour ma petite tete ...
    Dans ce cas, il faut probablement commencer par apprendre cela, sinon tu seras très rapidement bloquée dans tes programmes.

    Le côté "meme si elle est lourde en calculs et moche" n'est pas une solution viable.

  8. #8
    Membre Expert
    Avatar de muad'dib
    Homme Profil pro
    Développeur Java
    Inscrit en
    Janvier 2003
    Messages
    1 013
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2003
    Messages : 1 013
    Par défaut
    struct layer layertable [N];/*1er problème : N est calculé dans le main donc encore inconnu lors de la déclaration*/
    Pour cela il faut que tu fasses une allocation dynamique ! On ne peut donner la dimension des tableaux lors de leur déclaration qu'avec des valeurs fixes!
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    struct layer *layertable = malloc(sizeof(struct layer) * N)
    // ... 
    free(layertable);
    Ne pas oublier le free ensuite !

Discussions similaires

  1. Réponses: 1
    Dernier message: 11/05/2006, 11h46
  2. Tableau de structures en parametre d'une fonction
    Par -No Comment- dans le forum C
    Réponses: 19
    Dernier message: 29/03/2006, 15h00
  3. [VB6]Tri multi-colonnes sur tableau de structure
    Par ELGUEVEL dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 17/02/2006, 08h02
  4. Réponses: 9
    Dernier message: 13/02/2006, 08h39
  5. Trier un tableau de structures
    Par Yux dans le forum C
    Réponses: 7
    Dernier message: 05/11/2005, 17h28

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