Énoncé
Saisir N avec 1 ≤ N ≤ 100 et remplir un tableau T de N entiers. Copier ses valeurs dans un deuxième tableau U sans doublons, en conservant l’ordre de première apparition. Une procédure Supprimer renvoie U et sa taille utilisée ; Afficher présente le résultat.
Exemples et cas limites
Saisissez ces valeurs dans la console pour vérifier votre résultat :
Saisir N, puis les N entiers t[0] à t[N − 1], un par un. Les données de l’exemple sont un essai : choisissez vos propres valeurs dans le terminal.
Entrée
N = 5 t[0] = 8 t[1] = 3 t[2] = 5 t[3] = 3 t[4] = 1
Sortie attendue
8 3 5 1
Entrée
N = 5 t[0] = 7 t[1] = 7 t[2] = -1 t[3] = 2 t[4] = -1
Sortie attendue
7 -1 2
Entrée
N = 2 t[0] = 4 t[1] = 4
Sortie attendue
4
Complétez les modules marqués par un commentaire dans le code de départ. Les modules déjà écrits permettent de saisir vos données. Exécutez les cas de test et comparez la sortie attendue, ou ouvrez directement l’onglet Correction.
Code algorithmique
| 1 | algorithme supprimer_doublons |
| 2 | debut |
| 3 | saisir(n) |
| 4 | remplir(t, n) |
| 5 | supprimer(t, n, u, taille) |
| 6 | afficher(u, taille) |
| 7 | fin |
| 8 | |
| 9 | procedure saisir(@n : entier) |
| 10 | debut |
| 11 | repeter |
| 12 | ecrire("N = ") |
| 13 | lire(n) |
| 14 | jusqua 1 ≤ n ≤ 100 |
| 15 | fin |
| 16 | |
| 17 | procedure remplir(@t : tab, n : entier) |
| 18 | debut |
| 19 | pour i de 0 à n - 1 faire |
| 20 | ecrire("t[" + convch(i) + "] = ") |
| 21 | lire(t[i]) |
| 22 | fin_pour |
| 23 | fin |
| 24 | |
| 25 | procedure supprimer(t : tab, n : entier, @u : tab, @taille : entier) |
| 26 | debut |
| 27 | // compléter le traitement demandé dans l’énoncé. |
| 28 | fin |
| 29 | |
| 30 | procedure afficher(t : tab, n : entier) |
| 31 | debut |
| 32 | pour i de 0 à n - 1 faire |
| 33 | ecrire(t[i], " ") |
| 34 | fin_pour |
| 35 | ecrire_nl("") |
| 36 | fin |
| 1 | algorithme supprimer_doublons |
| 2 | debut |
| 3 | saisir(n) |
| 4 | remplir(t, n) |
| 5 | supprimer(t, n, u, taille) |
| 6 | afficher(u, taille) |
| 7 | fin |
| 8 | |
| 9 | procedure saisir(@n : entier) |
| 10 | debut |
| 11 | repeter |
| 12 | ecrire("N = ") |
| 13 | lire(n) |
| 14 | jusqua 1 ≤ n ≤ 100 |
| 15 | fin |
| 16 | |
| 17 | procedure remplir(@t : tab, n : entier) |
| 18 | debut |
| 19 | pour i de 0 à n - 1 faire |
| 20 | ecrire("t[" + convch(i) + "] = ") |
| 21 | lire(t[i]) |
| 22 | fin_pour |
| 23 | fin |
| 24 | |
| 25 | procedure supprimer(t : tab, n : entier, @u : tab, @taille : entier) |
| 26 | debut |
| 27 | taille ← 0 |
| 28 | pour i de 0 à n - 1 faire |
| 29 | existe ← faux |
| 30 | j ← 0 |
| 31 | tant_que j < taille et non existe faire |
| 32 | existe ← u[j] = t[i] |
| 33 | j ← j + 1 |
| 34 | fin_tant_que |
| 35 | si non existe alors |
| 36 | u[taille] ← t[i] |
| 37 | taille ← taille + 1 |
| 38 | fin si |
| 39 | fin_pour |
| 40 | |
| 41 | fin |
| 42 | |
| 43 | procedure afficher(t : tab, n : entier) |
| 44 | debut |
| 45 | pour i de 0 à n - 1 faire |
| 46 | ecrire(t[i], " ") |
| 47 | fin_pour |
| 48 | ecrire_nl("") |
| 49 | fin |
Méthode
- Pour chaque valeur, chercher si elle est déjà dans le résultat.
- Ajouter seulement les valeurs nouvelles et augmenter la taille utilisée.
Comprendre la correction
Déroulement sur un exemple
- Pour T = [8, 3, 5, 3, 1], U commence vide et taille = 0. On ajoute 8, puis 3, puis 5.
- Le second 3 est déjà présent dans U : on ne l’ajoute pas. 1 est nouveau et rejoint U.
- La partie utilisée de U est [8, 3, 5, 1] et taille = 4. Chaque ajout conserve l’ordre de première apparition.
Erreurs à éviter
- Cherchez seulement dans les taille cases déjà remplies de U, pas dans sa capacité entière.
- Remettez existe à Faux pour chaque nouvelle valeur de T.