Adloun

informatique (MP2I/MPI) · Chapitre 1 · Application directe du cours

Problème — Compilation séparée : une pile en module

Le langage C · niveau 3 (difficile)

Énoncé

On veut offrir une pile d'entiers dont l'utilisateur ignore la réalisation.

  • Écrire l'en-tête pile.h, avec un type opaque et des gardes d'inclusion.
  • Écrire pile.c, réalisation par tableau dynamique.
  • Expliquer ce que le type opaque interdit, et ce qu'il permet.
  • Donner les commandes de compilation séparée.

Corrigé de la question 1

1. L'interface.


/* pile.h */
#ifndef PILE_H
#define PILE_H
#include <stdbool.h>

typedef struct pile_s pile;      /* type OPAQUE : la structure reste cachée */

pile* pile_creer(void);          /* pile vide, ou NULL si échec */
bool  pile_est_vide(const pile* p);
bool  pile_empiler(pile* p, int x);   /* false si l'allocation échoue */
int   pile_depiler(pile* p);          /* précondition : p non vide */
void  pile_detruire(pile* p);

#endif

Les trois lignes #ifndef / #define / #endif rendent l'inclusion idempotente : inclure deux fois le fichier ne déclare qu'une fois.

Question 2 : comment l'IA t'aide

2. Écrire pile.c, réalisation par tableau dynamique.

Élève

Pour pile_empiler, quand le tableau est plein, j'alloue un tableau d'une case de plus, je recopie et je libère l'ancien. Ça marche, mais j'ai un doute sur le coût.

IA

Ton doute est justifié. Combien d'éléments recopies-tu au total pour empilements successifs à partir d'une pile vide, avec cette règle ?

Élève

De l'ordre de , donc quadratique. Il faudrait agrandir beaucoup plus à chaque fois, pour que les recopies deviennent rares.

IA

Oui : quelle règle d'agrandissement choisis-tu, et quel coût total obtiens-tu alors pour empilements ? Et si l'allocation du nouveau tableau échoue, dans quel état doit rester la pile, et que doit renvoyer la fonction d'après l'interface ?

L'IA ne donne pas la réponse : elle pose la question qui fait avancer. À toi de continuer.

Continue cet exercice avec l'IA

Reprends la question 2 là où le dialogue s'arrête, puis la suite de l'exercice.

Continuer avec l'IA — gratuit, sans inscription

Gratuit, sans inscription. L'IA te guide pas à pas, sans te donner la réponse.

Le cours du chapitre · Tous les exercices du chapitre

Continuer avec l'IA, gratuit →