informatique (MP2I/MPI) · Chapitre 1 · Exercice de TD
Problème — Un tableau dynamique, du contrat au coût amorti
Le langage C · niveau 3 (difficile)
Énoncé
On veut une structure de tableau qui grandit toute seule.
- Définir un type
tableauportant les données, la taille utilisée et la capacité. - Écrire
creer,ajouteretdetruire, avec leurs spécifications. - Montrer que appels successifs à
ajoutercoûtent au total, alors qu'un appel isolé peut coûter .
Corrigé de la question 1
1. Le type.
struct tableau_s {
int* donnees;
int taille; /* nombre d'éléments présents */
int capacite; /* nombre de cases allouées, capacite >= taille */
};
typedef struct tableau_s tableau;
L'invariant de la structure est écrit dans le commentaire : , et donnees pointe sur capacite cases valides.
Question 2 : comment l'IA t'aide
2. Écrire creer, ajouter et detruire, avec leurs spécifications.
Élève
Pour ajouter, quand le tableau est plein, je pense augmenter la capacité d'une seule case : on n'alloue que ce dont on a besoin, ça me paraît plus économe.
IA
En mémoire, oui. Mais que coûte chaque agrandissement, sachant qu'il faut recopier tous les éléments dans la nouvelle zone ? Combien coûteraient alors ajouts successifs depuis un tableau vide ?
Élève
Chaque agrandissement recopie toute la taille actuelle, donc ajouts coûtent de l'ordre de : c'est quadratique. Il faudrait agrandir beaucoup moins souvent.
IA
Quelle règle d'agrandissement rendrait les recopies rares ? Et dans creer, si la seconde allocation échoue alors que la première a réussi, que dois-tu faire avant de renvoyer NULL ?
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 inscriptionGratuit, sans inscription. L'IA te guide pas à pas, sans te donner la réponse.