Algorithmique:Solutions exercices fichiers
Un article de WikiTuto.
Sommaire |
Détails
Solutions des exercices sur les accès fichiers
Exercice 10.1
Cet algorithme écrit l'intégralité du fichier "Exemple.txt" à l'écran
Exercice 10.2
Variable Truc en Caractère
Variable i en Entier
Debut
Ouvrir "Exemple.txt" sur 5 en Lecture
Tantque Non EOF(5)
LireFichier 5, Truc
Pour i ← 1 à Len(Truc)
Si Mid(Truc, i, 1) = "/" Alors
Ecrire " "
Sinon
Ecrire Mid(Truc, i, 1)
FinSi
i Suivant
FinTantQue
Fermer 5
Exercice 10.3
Variables Nom * 20, Prénom * 17, Tel * 10, Mail * 20, Lig en Caractère Debut Ecrire "Entrez le nom : " Lire Nom Ecrire "Entrez le prénom : " Lire Prénom Ecrire "Entrez le téléphone : " Lire Tel Ecrire "Entrez le nom : " Lire Mail Lig ← Nom & Prénom & Tel & Mail Ouvrir "Adresse.txt" sur 1 pour Ajout EcrireFichier 1, Lig Fermer 1 Fin
Exercice 10.4
Là, comme indiqué dans le cours, on passe par un tableau de strutures en mémoire vive, ce qui est la technique la plus fréquemment employée. Le tri - qui est en fait un simple test - sera effectué sur le premier champ (nom).
Structure Bottin Nom en Caractère * 20 Prénom en Caractère * 15 Tel en Caractère * 10 Mail en Caractère * 20 Fin Structure Tableau Mespotes() en Bottin Variables MonPote, Nouveau en Bottin Variables i, j en Numérique Debut Ecrire "Entrez le nom : " Lire Nouveau.Nom Ecrire "Entrez le prénom : " Lire Nouveau.Prénom Ecrire "Entrez le téléphone : " Lire Nouveau.Tel Ecrire "Entrez le mail : " Lire Nouveau.Mail
On recopie l'intégralité de "Adresses" dans MesPotes(). Et après tout, c'est l'occasion : quand on tombe au bon endroit, on insère subrepticement notre nouveau copain dans le tableau.
Ouvrir "Adresse.txt" sur 1 pour Lecture
i ← -1
inséré ← Faux
Tantque Non EOF(1)
i ← i + 1
Redim MesPotes (i+1)
LireFichier 1, MonPote
Si MonPote.Nom > Nouveau.Nom et Non Inséré Alors
MesPotes(i) ← Nouveau
Inséré ← Vrai
i ← i + 1
Redim MesPotes(i+1)
FinSi
MesPotes(i) ← MonPote
FinTantQue
Fermer 1
Et le tour est quasiment joué. Il ne reste plus qu'à rebalancer tel quel l'intégralité du tableau MesPotes dans le fichier, en écrasant l'ancienne version.
Ouvrir "Adresse.txt" sur 1 pour Ecriture Pour j ← 0 à i EcrireFichier 1, MesPotes(j) j suivant Fermer 1 Fin
Exercice 10.5
C'est un peu du même tonneau que ce qu'on vient de faire, à quelques variantes près. Il y a essentiellement une petite gestion de flag pour faire bonne mesure.
Structure Bottin Nom en Caractère * 20 Prénom en Caractère * 15 Tel en caractère * 10 Mail en Caractère * 20 Fin Structure Tableau Mespotes() en Bottin Variables MonPote en Bottin Variables Ancien, Nouveau en Caractère*20 Variables i, j en Numérique Variable Trouvé en Booléen Debut Ecrire "Entrez le nom à modifier : " Lire Ancien Ecrire "Entrez le nouveau nom : " Lire Nouveau
On recopie l'intégralité de "Adresses" dans Fic, tout en recherchant le clampin. Si on le trouve, on procède à la modification.
Ouvrir “Adresse.txt” sur 1 pour Lecture
i ← -1
Trouvé ← Faux
Tantque Non EOF(1)
i ← i + 1
Redim MesPotes(i+1)
LireFichier 1, MonPote
Si MonPote.Nom = Ancien.Nom Alors
Trouvé ← Vrai
MonPote.Nom ← Nouveau
FinSi
MesPotes(i) ← MonPote
FinTantQue
Fermer 1
On recopie ensuite l'intégralité de Fic dans "Adresse"
Ouvrir "Adresse.txt" sur 1 pour Ecriture Pour j ← 0 à i EcrireFichier 1, MesPotes(j) j Suivant Fermer 1
Et un petit message pour finir !
Si Trouvé Alors Ecrire "Modification effectuée" Sinon Ecrire "Nom inconnu. Aucune modification effectuée" FinSi Fin
Exercice 10.6
Là, c'est un tri sur un tableau de structures, rien de plus facile. Et on est bien content de disposer des structures, autrement dit de ne se coltiner qu'un seul tableau...
Structure Bottin Nom en Caractère * 20 Prénom en Caractère * 15 Tel en caractère * 10 Mail en Caractère * 20 Fin Structure Tableau Mespotes() en Bottin Variables Mini en Bottin Variables i, j en Numérique Debut
On recopie l'intégralité de "Adresses" dans MesPotes...
Ouvrir "Adresse.txt" sur 1 pour Lecture i ← -1 Tantque Non EOF(1) i ← i + 1 Redim MesPotes(i+1) LireFichier 1, MesPotes(i) FinTantQue Fermer 1
On trie le tableau selon l'algorithme de tri par insertion déjà étudié, en utilisant le champ Nom de la structure :
Pour j ← 0 à i - 1
Mini ← MesPotes(j)
posmini ← j
Pour k ← j + 1 à i
Si MesPotes(k).Nom < Mini.Nom Alors
mini ← MesPotes(k)
posmini ← k
Finsi
k suivant
MesPotes(posmini) ← MesPotes(j)
MesPotes(j) ← Mini
j suivant
On recopie ensuite l'intégralité du tableau dans "Adresse"
Ouvrir "Adresse.txt" sur 1 pour Ecriture Pour j ← 0 à i EcrireFichier 1, MesPotes(j) j suivant Fermer 1 Fin
Exercice 10.7
Bon, celui-là est tellement idiot qu'on n'a même pas besoin de passer par des tableaux en mémoire vive.
Variable Lig en Caractère Début Ouvrir "Tutu.txt" sur 1 pour Ajout Ouvrir “Toto.txt” sur 2 pour Lecture Tantque Non EOF(2) LireFichier 2, Lig EcrireFichier 1, Lig FinTantQue Fermer 2 Ouvrir “Tata.txt” sur 3 pour Lecture Tantque Non EOF(3) LireFichier 2, Lig EcrireFichier 1, Lig FinTantQue Fermer 3 Fermer 1 Fin
Exercice 10.8
On va éliminer les mauvaises entrées dès la recopie : si l'enregistrement ne présente pas un mail valide, on l'ignore, sinon on le copie dans le tableau.
Structure Bottin Nom en Caractère * 20 Prénom en Caractère * 15 Tel en caractère * 10 Mail en Caractère * 20 Fin Structure Tableau Mespotes() en Bottin Variable MonPote en Bottin Variables i, j en Numérique Debut
On recopie "Adresses" dans MesPotes en testant le mail...
Ouvrir "Adresse.txt" sur 1 pour Lecture
i ← -1
Tantque Non EOF(1)
LireFichier 1, MonPote
nb ← 0
Pour i ← 1 à Len(MonPote.Mail)
Si Mid(MonPote.Mail, i, 1) = "@" Alors
nb ← nb + 1
FinSi
i suivant
Si nb = 1 Alors
i ← i + 1
Redim MesPotes(i+1)
MesPotes(i) ← MonPote
FinSi
FinTantQue
Fermer 1
On recopie ensuite l'intégralité de Fic dans "Adresse"
Ouvrir "Adresse.txt" sur 1 pour Ecriture Pour j ← 0 à i EcrireFichier 1, MesPotes(j) j Suivant Fermer 1 Fin
Exercice 10.9
Une fois de plus, le passage par un tableau de structures est une stratégie commode. Attention toutefois, comme il s'agit d'un fichier texte, tout est stocké en caractère. Il faudra donc convertir en numérique les caractères représentant les ventes, pour pouvoir effectuer les calculs demandés. Pour le traitement, il y a deux possibilités. Soit on recopie le fichier à l'identique dans un premier tableau, et on traite ensuite ce tableau pour faire la somme par vendeur. Soit on fait le traitement directement, dès la lecture du fichier. C'est cette option qui est choisie dans ce corrigé.
Structure Vendeur Nom en Caractère * 20 Montant en Numérique Fin Structure Tableau MesVendeurs() en Vendeur Variables NomPrec * 20, Lig, Nom en caractère Variables Somme, Vente en Numérique
On balaye le fichier en faisant nos additions. Dès que le nom a changé (on est passé au vendeur suivant), on range le résultat et on remet tout à zéro
Debut
Ouvrir "Ventes.txt” sur 1 pour Lecture
i ← -1
Somme ← 0
NomPréc ← ""
Tantque Non EOF(1)
LireFichier 1, Lig
Nom ← Mid(Lig, 1, 20)
Vente ← CNum(Mid(Lig, 21, 10)
Si Nom = NomPrec Alors
Somme ← Somme + Vente
Sinon
i ← i + 1
Redim MesVendeurs(i+1)
MesVendeurs(i).Nom ← NomPrec
MesVendeurs(i).Montant ← Somme
Somme ← 0
NomPrec ← Nom
FinSi
FinTantQue
Et n'oublions pas un petit tour de plus pour le dernier de ces messieurs…
i ← i + 1 Redim MesVendeurs(i) MesVendeurs(i).Nom ← NomPrec MesVendeurs(i).Montant ← Somme Fermer 1
Pour terminer, on affiche le tableau à l'écran
Pour j ← 0 à i Ecrire MesVendeurs(j) j suivant Fin
Solutions
Voir aussi
- Algorithmes
- Structure générale des fonctions
- Les fonctions de texte
- 3 fonctions numériques classiques
- Les fonctions de conversion
Source : Christophe Darmangeat



