{"id":3113,"date":"2025-03-04T15:16:32","date_gmt":"2025-03-04T20:16:32","guid":{"rendered":"https:\/\/ve2cuy.com\/420-1c4\/?page_id=3113"},"modified":"2025-03-17T11:48:11","modified_gmt":"2025-03-17T16:48:11","slug":"structures-et-enumeration","status":"publish","type":"page","link":"https:\/\/ve2cuy.com\/420-1c4\/index.php\/structures-et-enumeration\/","title":{"rendered":"Structures et \u00e9num\u00e9ration sous C"},"content":{"rendered":"<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full is-resized\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"1024\" src=\"https:\/\/ve2cuy.com\/420-1c4\/wp-content\/uploads\/2025\/03\/649cd53b-1c3c-473c-a55f-d1b44bafb9d3.webp\" alt=\"\" class=\"wp-image-3115\" style=\"width:445px;height:auto\" srcset=\"https:\/\/ve2cuy.com\/420-1c4\/wp-content\/uploads\/2025\/03\/649cd53b-1c3c-473c-a55f-d1b44bafb9d3.webp 1024w, https:\/\/ve2cuy.com\/420-1c4\/wp-content\/uploads\/2025\/03\/649cd53b-1c3c-473c-a55f-d1b44bafb9d3-300x300.webp 300w, https:\/\/ve2cuy.com\/420-1c4\/wp-content\/uploads\/2025\/03\/649cd53b-1c3c-473c-a55f-d1b44bafb9d3-150x150.webp 150w, https:\/\/ve2cuy.com\/420-1c4\/wp-content\/uploads\/2025\/03\/649cd53b-1c3c-473c-a55f-d1b44bafb9d3-768x768.webp 768w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n<\/div>\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<p>En C, une&nbsp;<strong>struct<\/strong>&nbsp;(ou structure) est un type de donn\u00e9es qui permet de regrouper plusieurs variables sous un m\u00eame nom, m\u00eame si elles sont de types diff\u00e9rents. C&rsquo;est une sorte de conteneur qui permet d&rsquo;organiser et de structurer des donn\u00e9es de mani\u00e8re logique.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Qu&rsquo;est-ce qu&rsquo;une struct ?<\/h3>\n\n\n\n<p>Imaginons qu&rsquo;il soit n\u00e9cessaire de cr\u00e9er un personnage dans un jeu vid\u00e9o. Ce personnage pourrait avoir plusieurs attributs : un <strong><mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-luminous-vivid-orange-color\">nom<\/mark><\/strong>, une <strong><mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-luminous-vivid-orange-color\">position<\/mark><\/strong> dans le jeu (x et y), une <strong><mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-luminous-vivid-orange-color\">sant\u00e9<\/mark><\/strong>, et une <strong><mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-luminous-vivid-orange-color\">arme<\/mark><\/strong>. <\/p>\n\n\n\n<p>Chaque attribut peut \u00eatre d&rsquo;un type diff\u00e9rent : le nom sera une cha\u00eene de caract\u00e8res, la position sera compos\u00e9e de deux nombres (x et y), la sant\u00e9 sera un nombre entier et l&rsquo;arme, une cha\u00eene de caract\u00e8res.<\/p>\n\n\n\n<p>En utilisant une&nbsp;<code>struct<\/code>, il est possible de regrouper toutes ces informations dans un seul bloc de donn\u00e9es.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-vivid-cyan-blue-color\">EXEMPLE<\/mark>  &#8211; D\u00e9finition d&rsquo;une struct<\/h3>\n\n\n\n<p>La syntaxe pour d\u00e9finir une&nbsp;<code>struct<\/code>&nbsp;en C est la suivante :<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\"><code>struct Personnage {<br>    char nom[50];     \/\/ nom du personnage, jusqu'\u00e0 49 caract\u00e8res<br>    int x, y;         \/\/ position du personnage dans le jeu (coordonn\u00e9es)<br>    int sante;        \/\/ sant\u00e9 du personnage<br>    char arme[30];    \/\/ nom de l'arme<br>};<br><\/code><\/pre>\n\n\n\n<p>Ici, une struct nomm\u00e9e&nbsp;<code>Personnage<\/code>&nbsp;est d\u00e9finie, regroupant quatre attributs :&nbsp;<code>nom<\/code>,&nbsp;<code>x<\/code>,&nbsp;<code>y<\/code>,&nbsp;<code>sante<\/code>&nbsp;et&nbsp;<code>arme<\/code>. <\/p>\n\n\n\n<p>Chaque attribut peut \u00eatre d&rsquo;un type diff\u00e9rent.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\">D\u00e9claration et utilisation d&rsquo;une struct<\/h3>\n\n\n\n<p>Pour d\u00e9clarer une variable de type&nbsp;<code><strong>Personnage<\/strong><\/code>&nbsp;et lui attribuer des valeurs, voici un exemple de code<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ D\u00e9finition de la struct Personnage\nstruct Personnage {\n    char nom[50];     \/\/ nom du personnage, jusqu'\u00e0 49 caract\u00e8res\n    int x, y;         \/\/ position du personnage dans le jeu (coordonn\u00e9es)\n    int sante;        \/\/ sant\u00e9 du personnage\n    char arme[30];    \/\/ nom de l'arme\n};\n\nvoid setup() {\n    \/\/ Initialisation du moniteur s\u00e9rie\n    Serial.begin(9600);\n    \n    \/\/ Cr\u00e9ation et initialisation d'un personnage\n    struct Personnage p1;\n\n    \/\/ Assignation de valeurs aux attributs\n    \/\/ Utilisation de m\u00e9thodes simples pour la gestion de cha\u00eenes de caract\u00e8res en Arduino\n    strcpy(p1.nom, \"Heros\");  \/\/ Copie d'une cha\u00eene dans le tableau 'nom'\n    p1.x = 10;   \/\/ Position en X\n    p1.y = 20;   \/\/ Position en Y\n    p1.sante = 100;  \/\/ Sant\u00e9 maximale\n    strcpy(p1.arme, \"Epee\");  \/\/ Nom de l'arme\n\n    \/\/ Affichage des informations du personnage\n    Serial.println(\"Informations du personnage :\");\n    Serial.print(\"Nom : \");\n    Serial.println(p1.nom);\n    Serial.print(\"Position : (\");\n    Serial.print(p1.x);\n    Serial.print(\", \");\n    Serial.print(p1.y);\n    Serial.println(\")\");\n    Serial.print(\"Sant\u00e9 : \");\n    Serial.println(p1.sante);\n    Serial.print(\"Arme : \");\n    Serial.println(p1.arme);\n}\n\nvoid loop() {\n    \/\/ Pas de boucle continue n\u00e9cessaire ici\n}<\/pre>\n\n\n\n<p><strong><mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-vivid-red-color\">R\u00c9SULTAT<\/mark><\/strong>:<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">Informations du personnage :\nNom : Heros\nPosition : (10, 20)\nSant\u00e9 : 100\nArme : Epee<\/pre>\n\n\n\n<p>Dans cet exemple :<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Une variable&nbsp;<code>p1<\/code>&nbsp;de type&nbsp;<code>Personnage<\/code>&nbsp;est d\u00e9clar\u00e9e.<\/li>\n\n\n\n<li>Les diff\u00e9rents attributs de&nbsp;<code>p1<\/code>&nbsp;sont initialis\u00e9s : le <strong>nom<\/strong>, la <strong>position<\/strong>, la <strong>sant\u00e9<\/strong>, et <strong>l&rsquo;arme<\/strong>.<\/li>\n\n\n\n<li>Ensuite, ces informations sont affich\u00e9es \u00e0 l&rsquo;\u00e9cran.<\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\">Utilit\u00e9 des structures (struct) en C.<\/h3>\n\n\n\n<p>PAR EXEMPLE, dans un contexte des jeux vid\u00e9o, les&nbsp;<code>struct<\/code>&nbsp;sont utiles pour organiser les informations li\u00e9es aux diff\u00e9rents objets et entit\u00e9s du jeu. <\/p>\n\n\n\n<p>Par exemple :<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>Personnages<\/strong>&nbsp;: Chaque personnage du jeu peut \u00eatre repr\u00e9sent\u00e9 par une&nbsp;<code>struct<\/code>&nbsp;contenant ses attributs (nom, position, sant\u00e9, etc.).<\/li>\n\n\n\n<li><strong>Ennemis<\/strong>&nbsp;: De m\u00eame, les ennemis peuvent \u00eatre repr\u00e9sent\u00e9s par des&nbsp;<code>struct<\/code>&nbsp;ayant des attributs comme la position, le type d&rsquo;ennemi, les points de vie, etc.<\/li>\n\n\n\n<li><strong>Objets du jeu<\/strong>&nbsp;: Les objets comme des potions, des armes ou des tr\u00e9sors peuvent aussi \u00eatre mod\u00e9lis\u00e9s \u00e0 l&rsquo;aide de&nbsp;<code>struct<\/code>&nbsp;pour contenir leurs caract\u00e9ristiques (type, valeur, quantit\u00e9, etc.).<\/li>\n<\/ol>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">Structure pour un ennemi avec utilisation de enum pour le type<\/h2>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ D\u00e9finition de l'\u00e9num\u00e9ration pour les types d'ennemis\nenum TypeEnnemi {\n    GOBELIN,   \/\/ Le type d'ennemi est un gobelin\n    DRAGON,    \/\/ Le type d'ennemi est un dragon\n    SORCIER,   \/\/ Le type d'ennemi est un sorcier\n    TROLL      \/\/ Le type d'ennemi est un troll\n};\n\n\/\/ D\u00e9finition de la struct Ennemi\nstruct Ennemi {\n    enum TypeEnnemi type;  \/\/ Type de l'ennemi, repr\u00e9sent\u00e9 par une \u00e9num\u00e9ration\n    int x, y;              \/\/ Position dans le jeu\n    int pointsDeVie;       \/\/ Points de vie de l'ennemi\n};\n\nvoid setup() {\n    \/\/ Initialisation du moniteur s\u00e9rie\n    Serial.begin(9600);\n\n    \/\/ Cr\u00e9ation et initialisation d'un ennemi\n    struct Ennemi e1;\n\n    \/\/ Assignation de valeurs aux attributs\n    e1.type = GOBELIN;    \/\/ Le type de l'ennemi est un Gobelin\n    e1.x = 50;            \/\/ Position X de l'ennemi\n    e1.y = 60;            \/\/ Position Y de l'ennemi\n    e1.pointsDeVie = 30;  \/\/ Points de vie de l'ennemi\n\n    \/\/ Affichage des informations de l'ennemi\n    Serial.println(\"Informations de l'ennemi :\");\n    Serial.print(\"Type : \");\n    \n    \/\/ Affichage du type d'ennemi en fonction de la valeur de l'\u00e9num\u00e9ration\n    switch (e1.type) {\n        case GOBELIN:\n            Serial.println(\"Gobelin\");\n            break;\n        case DRAGON:\n            Serial.println(\"Dragon\");\n            break;\n        case SORCIER:\n            Serial.println(\"Sorcier\");\n            break;\n        case TROLL:\n            Serial.println(\"Troll\");\n            break;\n        default:\n            Serial.println(\"Inconnu\");\n            break;\n    }\n\n    Serial.print(\"Position : (\");\n    Serial.print(e1.x);\n    Serial.print(\", \");\n    Serial.print(e1.y);\n    Serial.println(\")\");\n    Serial.print(\"Points de vie : \");\n    Serial.println(e1.pointsDeVie);\n}\n\nvoid loop() {\n    \/\/ Pas de boucle continue n\u00e9cessaire ici\n}<\/pre>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">Informations de l'ennemi :\nType : Gobelin\nPosition : (50, 60)\nPoints de vie : 30<\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">Utilisation d&rsquo;un tableau de structures<\/h2>\n\n\n\n<p>Voici un exemple qui utilise un tableau de <strong>personnages<\/strong> ainsi qu&rsquo;une fonction pour ajouter de nouveaux personnages. <\/p>\n\n\n\n<p>De plus, nous utiliserons un type <strong><em>enum<\/em><\/strong> pour renseigner l&rsquo;arme du personnage.<\/p>\n\n\n\n<p>De plus, la compilation conditionnelle est utilis\u00e9e pour d\u00e9terminer la langue des armes.<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">#include &lt;Arduino.h>\n\n#define FRANCAIS  1\n#define ANGLAIS   2\n#define ESPAGNOL  3\n\n#define LANGUE ESPAGNOL\n\n#if (LANGUE == FRANCAIS)\n#define TEXTE_EPEE          \"\u00c9p\u00e9e\"           \/\/ Description pour EPEE\n#define TEXTE_BATON_MAGIQUE \"B\u00e2ton magique\"  \/\/ Description pour BATON_MAGIQUE\n#define TEXTE_ARC           \"Arc\"            \/\/ Description pour ARC\n#define TEXTE_HACHE         \"Hache\"          \/\/ Description pour HACHE\n#endif\n\n#if (LANGUE == ANGLAIS)\n#define TEXTE_EPEE          \"Sword\"          \/\/ Description pour EPEE\n#define TEXTE_BATON_MAGIQUE \"Magic staff\"    \/\/ Description pour BATON_MAGIQUE\n#define TEXTE_ARC           \"Bow\"            \/\/ Description pour ARC\n#define TEXTE_HACHE         \"Axe\"            \/\/ Description pour HACHE\n#endif\n\n#if (LANGUE == ESPAGNOL)\n#define TEXTE_EPEE          \"Espada\"          \/\/ Description pour EPEE\n#define TEXTE_BATON_MAGIQUE \"Bast\u00f3n m\u00e1gico\"   \/\/ Description pour BATON_MAGIQUE\n#define TEXTE_ARC           \"Arco\"            \/\/ Description pour ARC\n#define TEXTE_HACHE         \"Hacha\"           \/\/ Description pour HACHE\n#endif\n\n\/\/ D\u00e9finition de l'\u00e9num\u00e9ration pour les armes\nenum Arme {\n    EPEE,          \/\/ \u00c9p\u00e9e\n    BATON_MAGIQUE, \/\/ B\u00e2ton magique\n    ARC,           \/\/ Arc\n    HACHE          \/\/ Hache\n};\n\n\/\/ D\u00e9finition de la struct Personnage\nstruct Personnage {\n    char nom[50];     \/\/ Nom du personnage\n    int x, y;         \/\/ Position dans le jeu\n    int sante;        \/\/ Sant\u00e9 du personnage\n    enum Arme arme;   \/\/ Arme du personnage (utilisation de l'\u00e9num\u00e9ration)\n};\n\n\/\/ Taille maximale du tableau de personnages\n#define MAX_PERSONNAGES 10  \n\n\/\/ Table de cha\u00eenes de caract\u00e8res pour d\u00e9crire les armes\nconst char* descriptionsArmes[] = {\n    TEXTE_EPEE,\n    TEXTE_BATON_MAGIQUE,\n    TEXTE_ARC,\n    TEXTE_HACHE\n};\n\n\/\/ Fonction pour ajouter un nouveau personnage\nint ajouterPersonnage(Personnage personnages[], int nbPersonnages, const char* nom, int x, int y, int sante, enum Arme arme) {\n    if (nbPersonnages &lt; MAX_PERSONNAGES) {\n        \/\/ Ajouter un nouveau personnage dans le tableau\n        strcpy(personnages[nbPersonnages].nom, nom);\n        personnages[nbPersonnages].x = x;\n        personnages[nbPersonnages].y = y;\n        personnages[nbPersonnages].sante = sante;\n        personnages[nbPersonnages].arme = arme; \/\/ Assignation de l'arme\n        nbPersonnages++;  \/\/ Incr\u00e9menter le nombre de personnages\n    } else {\n        Serial.println(\"Erreur : Tableau de personnages plein !\");\n    }\n\n    return nbPersonnages; \/\/ Retourner le nouveau nombre de personnages\n}\n\n\/\/ Fonction pour afficher les informations des personnages\nvoid afficherPersonnages(Personnage personnages[], int nbPersonnages) {\n    for (int i = 0; i &lt; nbPersonnages; i++) {\n        Serial.print(\"Nom \\t\\t: \");\n        Serial.println(personnages[i].nom);\n        Serial.print(\"Position \\t: (\");\n        Serial.print(personnages[i].x);\n        Serial.print(\", \");\n        Serial.print(personnages[i].y);\n        Serial.println(\")\");\n        Serial.print(\"Sant\u00e9 \\t\\t: \");\n        Serial.println(personnages[i].sante);\n        \n        \/\/ Utiliser la table de cha\u00eenes pour afficher la description de l'arme\n        Serial.print(\"Arme \\t\\t: \");\n        Serial.println(descriptionsArmes[personnages[i].arme]);\n\n        Serial.println();\n    }\n}\n\nvoid setup() {\n    \/\/ Initialisation du moniteur s\u00e9rie\n    Serial.begin(9600);\n    \n    \/\/ D\u00e9claration d'un tableau de personnages\n    struct Personnage personnages[MAX_PERSONNAGES]; \n    int nbPersonnages = 0; \/\/ Initialisation du nombre de personnages\n\n    \/\/ Ajouter quelques personnages\n    nbPersonnages = ajouterPersonnage(personnages, nbPersonnages, \"H\u00e9ros\", 10, 20, 100, EPEE);\n    nbPersonnages = ajouterPersonnage(personnages, nbPersonnages, \"Mage\", 15, 25, 80, BATON_MAGIQUE);\n    nbPersonnages = ajouterPersonnage(personnages, nbPersonnages, \"Archer\", 30, 40, 90, ARC);\n\n    \/\/ Afficher les informations de tous les personnages\n    afficherPersonnages(personnages, nbPersonnages);\n}\n\nvoid loop() {\n    \/\/ Pas de boucle continue n\u00e9cessaire ici\n}\n<\/pre>\n\n\n\n<p>R\u00c9SULTAT:<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">Nom             : H\u00e9ros\nPosition        : (10, 20)\nSant\u00e9           : 100\nArme            : Espada\n\nNom             : Mage\nPosition        : (15, 25)\nSant\u00e9           : 80\nArme            : Bast\u00f3n m\u00e1gico\n\nNom             : Archer\nPosition        : (30, 40)\nSant\u00e9           : 90\nArme            : Arco<\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading has-vivid-red-color has-text-color has-link-color wp-elements-e67296db109a8b5e2c52920d70e7d7c5\">Laboratoire &#8211; \u00c0 suivre &#8230;<\/h2>\n","protected":false},"excerpt":{"rendered":"<p>En C, une&nbsp;struct&nbsp;(ou structure) est un type de donn\u00e9es qui permet de regrouper plusieurs variables sous un m\u00eame nom, m\u00eame si elles sont de types diff\u00e9rents. C&rsquo;est une sorte de conteneur qui permet d&rsquo;organiser et de structurer des donn\u00e9es de mani\u00e8re logique. Qu&rsquo;est-ce qu&rsquo;une struct ? Imaginons qu&rsquo;il soit n\u00e9cessaire de cr\u00e9er un personnage dans [&hellip;]<\/p>\n","protected":false},"author":2,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"ub_ctt_via":"","footnotes":""},"class_list":["post-3113","page","type-page","status-publish","hentry"],"featured_image_src":null,"_links":{"self":[{"href":"https:\/\/ve2cuy.com\/420-1c4\/index.php\/wp-json\/wp\/v2\/pages\/3113","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/ve2cuy.com\/420-1c4\/index.php\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/ve2cuy.com\/420-1c4\/index.php\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/ve2cuy.com\/420-1c4\/index.php\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/ve2cuy.com\/420-1c4\/index.php\/wp-json\/wp\/v2\/comments?post=3113"}],"version-history":[{"count":8,"href":"https:\/\/ve2cuy.com\/420-1c4\/index.php\/wp-json\/wp\/v2\/pages\/3113\/revisions"}],"predecessor-version":[{"id":3326,"href":"https:\/\/ve2cuy.com\/420-1c4\/index.php\/wp-json\/wp\/v2\/pages\/3113\/revisions\/3326"}],"wp:attachment":[{"href":"https:\/\/ve2cuy.com\/420-1c4\/index.php\/wp-json\/wp\/v2\/media?parent=3113"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}