Énoncé
Saisir N avec 1 ≤ N ≤ 100. Chaque enregistrement Eleve contient un nom non vide composé uniquement de lettres A à Z (majuscules ou minuscules), de type Chaîne et une moyenne réelle entre 0 et 20. Saisir et écrire les N élèves dans eleves.dat, puis relire ce fichier typé et afficher les noms des élèves dont la moyenne est au moins 10.
Exemples et cas limites
Saisissez ces valeurs dans la console pour vérifier votre résultat :
Saisir N, puis le nom et la moyenne de chaque élève. Un nom vide ou contenant autre chose que des lettres A à Z est redemandé. Le fichier est créé avec vos saisies ; vous complétez ensuite sa lecture dans Afficher.
Pour une chaîne, ne tapez pas les guillemets. Pour "", validez une saisie vide.
N = 2 eleve[0].nom = "Amel" eleve[0].moyenne = 15 eleve[1].nom = "Youssef" eleve[1].moyenne = 9
Amel
[
{
"nom": "Amel",
"moyenne": 15
},
{
"nom": "Youssef",
"moyenne": 9
}
]N = 1 eleve[0].nom = "Sami" eleve[0].moyenne = 10
Sami
[
{
"nom": "Sami",
"moyenne": 10
}
]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 fichier_type_enregistrements |
| 2 | debut |
| 3 | saisir(n) |
| 4 | creer(n) |
| 5 | afficher() |
| 6 | fin |
| 7 | |
| 8 | procedure saisir(@n : entier) |
| 9 | debut |
| 10 | repeter |
| 11 | ecrire("N = ") |
| 12 | lire(n) |
| 13 | jusqua 1 ≤ n ≤ 100 |
| 14 | fin |
| 15 | |
| 16 | fonction alphabetique(ch : chaine) : booleen |
| 17 | debut |
| 18 | si long(ch) = 0 alors |
| 19 | retourner faux |
| 20 | fin si |
| 21 | pour i de 0 à long(ch) - 1 faire |
| 22 | si non (majus(ch[i]) ∈ ["A".."Z"]) alors |
| 23 | retourner faux |
| 24 | fin si |
| 25 | fin_pour |
| 26 | retourner vrai |
| 27 | fin |
| 28 | |
| 29 | procedure creer(n : entier) |
| 30 | debut |
| 31 | ouvrir("eleves.dat", f, "wb") |
| 32 | pour i de 0 à n - 1 faire |
| 33 | repeter |
| 34 | ecrire("eleve[" + convch(i) + "].nom = ") |
| 35 | lire(e.nom) |
| 36 | jusqua alphabetique(e.nom) |
| 37 | repeter |
| 38 | ecrire("eleve[" + convch(i) + "].moyenne = ") |
| 39 | lire(e.moyenne) |
| 40 | jusqua 0 ≤ e.moyenne ≤ 20 |
| 41 | ecrire(f, e) |
| 42 | fin_pour |
| 43 | fermer(f) |
| 44 | fin |
| 45 | |
| 46 | procedure afficher() |
| 47 | debut |
| 48 | // compléter le traitement demandé dans l’énoncé. |
| 49 | fin |
| 1 | algorithme fichier_type_enregistrements |
| 2 | debut |
| 3 | saisir(n) |
| 4 | creer(n) |
| 5 | afficher() |
| 6 | fin |
| 7 | |
| 8 | procedure saisir(@n : entier) |
| 9 | debut |
| 10 | repeter |
| 11 | ecrire("N = ") |
| 12 | lire(n) |
| 13 | jusqua 1 ≤ n ≤ 100 |
| 14 | fin |
| 15 | |
| 16 | fonction alphabetique(ch : chaine) : booleen |
| 17 | debut |
| 18 | si long(ch) = 0 alors |
| 19 | retourner faux |
| 20 | fin si |
| 21 | pour i de 0 à long(ch) - 1 faire |
| 22 | si non (majus(ch[i]) ∈ ["A".."Z"]) alors |
| 23 | retourner faux |
| 24 | fin si |
| 25 | fin_pour |
| 26 | retourner vrai |
| 27 | fin |
| 28 | |
| 29 | procedure creer(n : entier) |
| 30 | debut |
| 31 | ouvrir("eleves.dat", f, "wb") |
| 32 | pour i de 0 à n - 1 faire |
| 33 | repeter |
| 34 | ecrire("eleve[" + convch(i) + "].nom = ") |
| 35 | lire(e.nom) |
| 36 | jusqua alphabetique(e.nom) |
| 37 | repeter |
| 38 | ecrire("eleve[" + convch(i) + "].moyenne = ") |
| 39 | lire(e.moyenne) |
| 40 | jusqua 0 ≤ e.moyenne ≤ 20 |
| 41 | ecrire(f, e) |
| 42 | fin_pour |
| 43 | fermer(f) |
| 44 | fin |
| 45 | |
| 46 | procedure afficher() |
| 47 | debut |
| 48 | ouvrir("eleves.dat", f, "rb") |
| 49 | tant_que non fin_fichier(f) faire |
| 50 | lire(f, e) |
| 51 | si e.moyenne ≥ 10 alors |
| 52 | ecrire_nl(e.nom) |
| 53 | fin si |
| 54 | fin_tant_que |
| 55 | fermer(f) |
| 56 | fin |
Méthode
- Déclarer un type Fichier de Eleve et écrire avec le mode "wb".
- Fermer, rouvrir en "rb", puis lire un enregistrement à la fois jusqu’à la fin.