Les piles en C

matinot -  
 matinot -
Bonjour,

Je vais savoir implementer la bibliothèque d'entète d'une pile en C.

Merci

2 réponses

[Dal] Messages postés 6205 Date d'inscription   Statut Contributeur Dernière intervention   1 105
 
Bonjour matinot,

Une pile très simple, pourrait implémenter les opérations de base suivantes :

- push() : pour mettre un nouvel élément en haut de la pile
- pop() : pour retirer l'élément en haut de la pile
- is_empty(): pour tester si la pile est vide

Dal
0
matinot Messages postés 8 Date d'inscription   Statut Membre Dernière intervention  
 
Bonjour Dal,

Un grand merci, mais maintenant j'ai un problème avec la création du fichier d’entête de la bibliothèque du pile.
0
[Dal] Messages postés 6205 Date d'inscription   Statut Contributeur Dernière intervention   1 105
 
quel genre de problème ?
0
matinot Messages postés 8 Date d'inscription   Statut Membre Dernière intervention   > [Dal] Messages postés 6205 Date d'inscription   Statut Contributeur Dernière intervention  
 
Pour que la fonction main puisse s’exécuter dès qu'on ajoute la fonction push() pour ajouter un élément et la fonction pop() pour retire l'élément.
0
matinot Messages postés 8 Date d'inscription   Statut Membre Dernière intervention  
 
Cela veux dire la bibliothèque pile.h et pile.c
0
ElementW Messages postés 4814 Date d'inscription   Statut Contributeur Dernière intervention   1 223 > matinot Messages postés 8 Date d'inscription   Statut Membre Dernière intervention  
 
Tu ne réponds toujours pas à la question de [Dal]. Il t'a demandé quel genre de problème il s'agit, pas où il arrive. Qu'est-ce que concrètement, précisément tu n'arrives pas à faire ?
0
[Dal] Messages postés 6205 Date d'inscription   Statut Contributeur Dernière intervention   1 105
 
Bonjour matinot,

Si tu as écrit tes fonctions, et qu'elles sont implémentées ce n'est pas si difficile de les organiser sous forme de module.

En gros :

- tu mets les #define, les déclarations de types et les prototypes des fonctions qui constituent l'interface du module dans le pile.h (avec des gardes empêchant les inclusions multiples) et l'implémentation de ces fonctions dans pile.c (ainsi que les éventuelles fonctions statiques accessibles seulement au module).

- pile.c devrait inclure pile.h

- le main, inclut pile.h et se sert des déclarations de types et fonctions rendues accessibles.

Voilà un exemple, qui illustre ces différents principes, d'un programme fictif stockant des éléments et leur masse atomique dans une simple struct :

main.c
#include <stdio.h>

#include "module.h"

int main(void) {
    struct element Cuivre;

    module_initialize_element(&Cuivre, 19, 63.546);
    module_print_element(Cuivre);

    return 0;
}

module.h
#ifndef MODULE_H
#define MODULE_H

#define MODULE_MAX_NUMBER 118

struct element {
    int number;
    double mass;
};

/* module interface */ 
    
int module_initialize_element(struct element * e,
        int number, double mass);
int module_print_element(struct element e);

#endif

module.c
/* module.c */

#include "module.h"

#include <stdio.h>
#include <stdlib.h>

    
/* private static functions */

static void error(char * st) {
    printf("Error: %s\n", st);
    exit(1);
}

/* module interface functions implementation */

int module_initialize_element(struct element * e,
        int number, double mass) {
    if (number > MODULE_MAX_NUMBER)
        error("Element number is too big");
    e->number = number;
    e->mass = mass;

    return 0;
}

int module_print_element(struct element e) {
    printf("Element number %d has atomic mass of %f\n",
            e.number, e.mass);

    return 0;
}

La conception d'un module est un vaste sujet, mais tu peux voir http://umich.edu/~eecs381/handouts/CHeaderFileGuidelines.pdf pour des explications plus complètes sur ce qui devrait figurer dans un .h et ce qui ne le devrait pas.

Dal
0
matinot
 
Bonjour Dal!

Merci beaucoup pour l'explication.
0