Chapitres traités   

Choix du chapitre Tableau dynamique de notes avec la taille fixée par l'opérateur

Vous allez faire un petit programme qui permet de calculer la moyenne d'un ensemble de notes. Pour cela, l'opérateur fixe le nombre de note à saisir et introduit ensuite l'ensemble des notes. Une fois que toutes les notes sont saisies, la moyenne est calculée et s'affiche directement à l'écran.

Nombre de notes ?
4
Note n°1
18
Note n°2
15
Note n°3
5
Note n°4
8
moyenne : 11.5

Il faut mettre en oeuvre ici un tableau de réel. Toutefois, à priori, nous ne savons pas la dimension du tableau. Du coup, vous devez mettre en oeuvre un tableau dynamique dont la taille est spécifiée par l'opérateur.

Attention : pensez à libérer la variable dynamique une fois que le calcul est effectué.
.

Corrections : Visualisation du résultat
.

 

Choix du chapitre Tableau dynamique de chaînes de caractères dynamiques (en option)

Nous allons reprendre le même type de programme que précédemment. Cette fois-ci, il s'agit de stocker des mots dans un tableau dynamique. Au lieu d'avoir un tableau de chaînes de caractères dont la taille est fixée une fois pour toute pour l'ensemble des mots, nous allons adapter dynamiquement, la taille de chacune des chaînes de caractères correspondant au mot saisie. Une fois que l'ensemble des mots a été saisie, le programme les affiche ensuite tout simplement dans l'ordre où ils ont été introduits.

Nombre de mots ?
3
Mot n°1
Bonjour
Mot n°2
Salut
Mot n°3
Bienvenue
Mots n°1 : Bonjour
Mots n°2 : Salut
Mots n°3 : Bienvenue

Ce TP est plus délicat à traiter puisque plusieurs éléments sont dynamiques. Je vous invite donc, pour vous aider, à suivre la pocédure suivante :

  1. Saisie du nombre de mot à introduire dans le tableau dynamique. Déclaration au préalable de la variable nombreDeMots sous forme d'entier non signé.
  2. Création du tableau dynamique de chaînes de caractères pointé par mots à partir du nombre de mots saisie par l'opérateur.
  3. Saisie de chacun des mots, création et copie vers une chaîne dynamique. L'opérateur doit saisir le mot à stocker dans le tableau dynamique. La saisie elle-même se fera au travers d'une variable saisie qui est une chaîne de 25 caractères au maximum. A partir de là, vous devez déterminer la longueur du mot saisie et créer en conséqence une chaine de caractères dynamique dont la dimension correspond à la longueur calculée + 1 (Attention au caractère terminal nul). Bien entendu, cette chaîne doit pouvoir être accessible à partir du tableau dynamique. Ensuite vous devez copier le mot qui se trouve dans la variable saisie vers cette nouvelle chaîne dynamique. Cette suite d'opération est à réaliser pour chacun des mots saisies.
  4. Affichage de l'ensemble du tableau de chaînes de caractères.
  5. Libération de la mémoire occupée par chacune des chaînes dynamiques.
  6. Libération du tableau dynamique.

A chacun des new doit correspondre un delete.
.

Corrections : Visualisation du résultat
.

 

Utilisation d'un tableau de char ou d'un pointeur de char

Tapez ces lignes de code. Vous testerez chacune de ces lignes en utilisant le debugger en mode pas à pas F8. Pour chacune de variables utilisées, établissez systématiquement l'adresse de la variable ainsi que son contenu complet (Utilisez le mode Inspection). Si vous avez à faire à des pointeurs, donnez l'adresse de la variable, l'adresse de la variable pointée et le contenu complet de la variable pointée. Faites systématiquement une représentation schématique.

Expliquez ce qui se passe pour la ligne :

  1. Donnez l'adresse de la variable bonjour. Donnez son contenu complet. Donnez la taille de la variable. Y a t'il des cases non utilisées ? Peut-on lui affecter plus tard une autre adresse ?
  2. Donnez l'adresse de la variable salut. A quoi correspond son contenu ? Evaluer son contenu ? Son contenu peut-il varier ? Où se situe la chaîne « salut ». Déterminez son adresse. Quelle est sa taille ?
  3. Donnez l'adresse de la variable message. Quelle est la valeur de son contenu ? Est-ce que cette valeur est cohérente ? A quoi correspond normalement ce type de valeur ?
  4. Donnez l'adresse de la variable bienvenue. A quoi correspond son contenu ? Evaluer son contenu ? Son contenu peut-il varier ? Ou se situe la chaîne représentée par char[10]. Déterminez son adresse. Quelle est sa taille ? Quelle est sa valeur ? Sa valeur est-elle cohérente ?
  5. Que se passe t-il sur cette ligne ? Evaluer son contenu ? A quoi correspond son contenu ? Que devient la chaîne représentée par char[10]. Est-elle toujours accessible ? Est-ce que l'instruction new char[10] a un sens ? Qu'est-ce qu'il aurait fallu faire pour que cette expression ait un sens ? Avec l'écriture proposée, y a t-il perte de mémoire ?
  6. Que se passe t-il sur cette ligne ? Evaluer son contenu ? A quoi correspond son contenu ?
  7. Que se passe t-il sur cette ligne ? Evaluer son contenu ? A quoi correspond son contenu ? Que devient la chaîne « salut ». Est-elle toujours accessible ?
  8. Quelle est la chaîne de caractères modifiée ?
  9. Quelle est la chaîne de caractères modifiée ?
  10. Quelle est la chaîne qui est libérée ? Est-ce que la chaîne représentée par new char[10] a été libérée ?
Corrections : Visualisation du résultat
.

Choix du chapitre Structure élève

Vous allez reprendre la structure Eleve développée dans l'avant dernier TP. Je rappelle la composition de cette structure :

  1. nom  : chaîne de 15 caractères.
  2. prenom  : chaîne de 15 caractères.
  3. notes  : tableau de 10 réels.
  4. moyenne  : calcul de la moyenne par rapport aux notes introduites dans le tableau ci-dessus. Le résultat doit être un réel.
  5. nombreNotes  : Indique le nombre de notes que l'élève possède afin d'effectuer un calcul juste de la moyenne. Ce doit être un entier court non signé.

Cette structure doit être déclarée en dehors de la fonction main. Par contre, à l'intérieur de main vous allez déclarer la variable dynamique eleve issue de cette structure. Profitez-en pour l'initialiser correctement. Ensuite, proposez un menu tel qu'il vous ait montré sur la droite. Systématiquement, avant chaque menu, vous devez afficher l'intitulé complet de l'élève.

En fait, on désire exactement le même fonctionnement que pour l'avant dernier TP. La seule différence, c'est que eleve est une variable dynamique. Proposez donc les bonnes écritures en conséquence.

Corrections : Visualisation du résultat -- récupération du fichier source
.

Choix du chapitre Classe d'élèves (en option)

Dans cet exercice, vous allez mettre en œuvre un tableau dynamique classe qui doit représenter l'ensemble d'une classe avec un nombre quelconque d'élèves. Le choix s'est porté sur un tableau dynamique puisque, a priori, nous ne connaissons pas le nombre d'élèves d'une classe. Vous conserverez la même structure Eleve proposée dans l'exercice précédent.

La taille du tableau dynamique doit toujours correspondre au nombre d'élèves qui existent à un instant donné. Ce qui veut dire que lorsque nous rajoutons un élève, nous devons, créer un nouveau tableau dynamique, copier les élèves de l'ancien tableau vers le nouveau, détruire l'ancien tableau et, pour terminer, rajouter à ce nouveau tableau le dernier élève demandé.

Au tout départ, le tableau ne doit pas exister (classe ne pointe sur rien). Lorsque vous introduisez le premier élève, il suffit de créer une variable dynamique de type Eleve sans créer spécialement un tableau. Il est quand même possible de référencer la classe comme si c'était un tableau d'un élève à l'aide de la syntaxe classe[0] même si, a priori, nous ne sommes pas en présence d'un tableau. En effet, souvenez-vous, que pour le compilateur C++, les tableaux n'existent pas, pour lui :

classe[0] <=> *(classe+0) <=> *classe

Lorsque vous rajouter un deuxième élève, il faut bien, cette fois-ci, effectivement créer un tableau de deux cases, chacune de ces cases correspondant à la structure Eleve.

Lorsque vous enlever un élève, il faut utiliser la même philosophie, c'est-à-dire créer un nouveau tableau dynamique avec un élève de moins, en copiant vers le nouveau tableau les élèves qui restent. Une fois que cette copie est réalisée, nous devons également détruire l'ancien tableau.

Dans les vues d'écran ci-dessous, vous avez l'ensemble des scénarii proposés

Corrections : Visualisation du résultat -- récupération du fichier source
.