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 :

structure globale en début de code


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Deficient visuel
    Inscrit en
    Mai 2019
    Messages
    216
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Deficient visuel

    Informations forums :
    Inscription : Mai 2019
    Messages : 216
    Par défaut structure globale en début de code
    Bonjour ,
    J'ai un peu de mal a suivre le cheminement de ce code avec cette declaration de structure globale en debut de code . A vrai dire , je pige que dalle .. Dans quelle situation , il est intéréssant , peut etre meme indispensable de procéder ainsi ?

    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
    #include <stdio.h>
    #include <stdlib.h>
    #include <time.h>
     
    #define SIZE 5
     
    struct bot {
        int xpos;
        int ypos;
    };
     
    struct bot initialize(struct bot b);
     
    int main()
    {
        struct bot robots[SIZE];
        int x;
     
        srand((unsigned)time(NULL));
     
        for(x=0;x<SIZE;x++)
        {
            robots[x] = initialize(robots[x]);
            printf("Robot %d: Coordinates: %d,%d\n",
                    x+1,robots[x].xpos,robots[x].ypos);
        }
        return(0);
    }
     
    struct bot initialize(struct bot b)
    {
        int x,y;
     
        x = rand();
        y = rand();
        x%=20;
        y%=20;
        b.xpos = x;
        b.ypos = y;
        return(b);
    }
    Je crois que la fonction srand((unsigned)time(NULL)); permet d'obtenir un nombre aleatoire en se basant sur l'horloge et que : %= divise deux valeurs et stocke le reste dans la variable , mais pour le reste..

  2. #2
    Expert confirmé
    Avatar de Kannagi
    Homme Profil pro
    cyber-paléontologue
    Inscrit en
    Mai 2010
    Messages
    3 226
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cyber-paléontologue

    Informations forums :
    Inscription : Mai 2010
    Messages : 3 226
    Par défaut
    Tu es toujours obligé de déclarer tes structures en globale , mais en général en le met dans un .h
    Et aussi ce genre de code ne se fait jamais , 99% des codes en C utiliser le typedef avec les structures.

  3. #3
    Membre confirmé
    Homme Profil pro
    Deficient visuel
    Inscrit en
    Mai 2019
    Messages
    216
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Deficient visuel

    Informations forums :
    Inscription : Mai 2019
    Messages : 216
    Par défaut
    Ok merci . Il n'y a pas une fonction qui renvoie une structure dans ce code a un moment donné ?

  4. #4
    Modérateur

    Avatar de Bktero
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2009
    Messages
    4 493
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2009
    Messages : 4 493
    Billets dans le blog
    1
    Par défaut
    struct bot initialize(struct bot b) { ... } ?

  5. #5
    Membre confirmé
    Homme Profil pro
    Deficient visuel
    Inscrit en
    Mai 2019
    Messages
    216
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Deficient visuel

    Informations forums :
    Inscription : Mai 2019
    Messages : 216
    Par défaut
    Ha bon ?? Il y a le mot clé struct devant pourtant ! C'est une structure ou une fonction ?😯😕

  6. #6
    Expert confirmé
    Avatar de gerald3d
    Homme Profil pro
    Conducteur de train
    Inscrit en
    Février 2008
    Messages
    2 315
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Conducteur de train
    Secteur : Transports

    Informations forums :
    Inscription : Février 2008
    Messages : 2 315
    Billets dans le blog
    5
    Par défaut
    La fonction porte le nom initialize(); et renvoie une donnée de type struct bot.

    L'utilisation de typedef permet de reposer nos petits cerveaux dans ce cas là.

    Si tu déclares ta structure de cette manière :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    typedef struct {
        int xpos;
        int ypos;
    }s_bot;
    Tu peux ensuite écrire le prototype de la fonction comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    s_bot initialize(s_bot b);
    Cette fois-ci tu ne te poses plus là question .

  7. #7
    Modérateur

    Avatar de Bktero
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2009
    Messages
    4 493
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2009
    Messages : 4 493
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par chris7522 Voir le message
    Ha bon ?? Il y a le mot clé struct devant pourtant ! C'est une structure ou une fonction ?😯😕
    Quand je vois ce genre de question, je pense qu'il faudrait ouvrir un cours de C et réviser les bases :
    - qu'est ce qu'une fonction
    - qu'est qu'une structure
    - comment créer et utiliser son propre type
    - à quoi sert typedef


  8. #8
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 838
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 838
    Billets dans le blog
    1
    Par défaut
    Bonjour
    Citation Envoyé par Kannagi Voir le message
    Tu es toujours obligé de déclarer tes structures en globale
    Pas toujours. Certes une structure qui est utilisée dans tout le programme (ce qui est très souvent le cas) sera alors déclarée globalement mais il m'est arrivé, pour un travail local dans une fonction, de déclarer une structure dédiée à ce travail dans la fonction.
    En fait, comme pour les variables, les déclarations de structures et de type permettent aussi de se faire en local...

    Citation Envoyé par chris7522 Voir le message
    Dans quelle situation , il est intéréssant , peut etre meme indispensable de procéder ainsi ?
    Chaque fois que tu devras manipuler des données hétérogènes de façon simultanée. Si par exemple tu dois stocker un nom+prénom, tu auras tout avantage à regrouper le nom et prénom ensemble dans une structure.
    Alors je sais que c'est chiant. On a envie de vite coder pour arriver au résultat et faut d'abord se coltiner l'écriture de la structure. Et je t'assure que même pour moi ça reste tout autant chiant aujourd'hui qu'au premier jour (la seule différence c'est qu'ensuite quand je me suis motivé, l'écriture de la structure va très vite).
    Mais ça offre plusieurs avantages
    • tu veux passer le nom et prénom à une fonction, tu ne passes qu'un truc (la structure) et non deux
    • demain tu veux rajouter un age, tu le rajoutes à un seul endroit (la structure) et tu recompiles => tout ce qui utilise la structure y aura alors instantanément accès

    Bref c'est du travail chiant au début mais qui t'offre ensuite une rapidité de développement et d'évolution.

    Citation Envoyé par chris7522 Voir le message
    Je crois que la fonction srand((unsigned)time(NULL)); permet d'obtenir un nombre aleatoire en se basant sur l'horloge
    Pas exactement. Ca initialise le générateur aléatoire. Et ça l'initialise effectivement sur l'horloge machine. Ainsi, tu es sûr qu'en exécutant ton programme à différent moments, tu auras des nombres aléatoires différents. Et inversement tu peux très bien l'initialiser sur une valeur fixe si tu veux (dans le cadre de tests spécifiques) avoir toujours la même suite de nombres qui sort.
    Accessoirement moi je préconise srand(time(NULL) ^ getpid()). Le pid est ton numéro de processus. Comme la fonction time() est calée à la seconde, si ton code est lancé plusieurs fois en même temps (Unix/Linux est multitaches) l'initialisation basée sur cette unique fonction sera la même. En combinant la valeur du temps machine sur le pid (toujours différent à chaque processus), tu es certain d'avoir toujours une graine différente dans toutes les situations

    Citation Envoyé par chris7522 Voir le message
    et que : %= divise deux valeurs et stocke le reste dans la variable
    Règles des opérateurs avec affectation (niveau basique). x op= y est un raccourci équivalent à x=x op y. Avec "op" pouvant valoir n'importe quel opérateur binaire du C, à savoir "+-*/%&|^".
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  9. #9
    Membre confirmé
    Homme Profil pro
    Deficient visuel
    Inscrit en
    Mai 2019
    Messages
    216
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Deficient visuel

    Informations forums :
    Inscription : Mai 2019
    Messages : 216
    Par défaut
    Merci beaucoup de ton aide .

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. structure global : multiple definition
    Par darkhades dans le forum C
    Réponses: 3
    Dernier message: 12/05/2012, 18h37
  2. Récupérer structure d'entité dans le code
    Par julien_fauquereau dans le forum Entity Framework
    Réponses: 4
    Dernier message: 15/06/2011, 19h24
  3. Besoin d'un début de code pour entrevoir l'avenir.
    Par metadon dans le forum VB.NET
    Réponses: 7
    Dernier message: 08/04/2011, 08h42
  4. Réponses: 4
    Dernier message: 30/09/2010, 22h58
  5. Imprimer la structure d'une base sans code vba
    Par steph141 dans le forum Access
    Réponses: 2
    Dernier message: 06/04/2006, 22h30

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