Algorithmique:Solutions exercices fichiers

Un article de WikiTuto.

Jump to: navigation, search

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


Source : Christophe Darmangeat

Boîte à outils
Annuaire gratuitCe site est listé dans la catégorie Informatique : Aide et astuces en informatique Annuaire