Un bureau d'étude a pour objectif de classer des compagnies aériennes en fonction des appréciations des clients (le nombre des clients interrogés est inférieur ou égal à 10000).
L'appréciation peut être "Satisfait" ou "Insatisfait". Pour cela on dispose d'un fichier d'enregistrements nommés Fa où chaque chaque enregistrement est composé des champs suivants :
Comp : le nom de la compagnie
NSat : le nombre de clients qui ont choisi l'appréciation "Satisfait".
NSat : le nombre de clients qui ont choisi l'appréciation "Insatisfait".
Travail demandé :
Ecrire une procédure Tri(Ch1,Ch2) qui permet de créer et de remplir un fichier texte nommé Fc par les données du fichier d'enregistrements Fa, triées selon l'ordre décroissant du champ NSat.
Chaque ligne du fichier texte Fc doit contenir le nom de la compagnie aérienne, suivi d'un espace, puis le nombre de clients ayant l'appréciation "Satisfait", suivi d'un espace, puis le nombre de clients ayant choisi l'appréciation "Insatisfait".
NB:
Le paramètre Ch1 représente le chemin d'accès et le nom physique du fichier Fa et le paramètre Ch2 représente le chemin d'accès et le nom physique du fichier Fc.
La procédure Tri doit prendre en charge la création, l'ouverture et la fermeture des fichiers.
Dans cet algorithme, On va utiliser huit fonctions et deux procédures :
- la fonction saisie_n()
- la procédure remplir_Fa()
- la procédure tri_tableau()
- la procédure tri()
|
1 2 3 4 5 6 7 8 9 |
Algorithme appreciation_clients Debut # Saisie du nombre de compagnies n <- saisie_n() # Création et remplissage du fichier binaire remplir_Fa(n) # Lecture, tri et création du fichier texte trié tri("Fa.dat", "Fc.txt") Fin |
Déclaration des objets
| Objet | Type / Nature |
|---|---|
| n | entier |
Cette fonction permet de saisir et retourner un entier strictement positive et <= 10000 en contrôlant la validité de la saisie.
|
1 2 3 4 5 6 7 8 9 10 |
Fonction saisie_n():entier Ecrire('saisir 0<n<=10000: ') Lire(n) # Tant que la valeur saisie n’est pas valide, on redemande Tant que Non (0<n<=10000) faire Ecrire('saisir 0<n<=10000: ') Lire(n) Fin tant que retourner n Fin |
Déclaration des objets
| Objet | Type / Nature |
|---|---|
| n | entier |
Cette procédure remplir_Fa a pour rôle de créer et remplir le fichier binaire Fa.dat avec les informations de n compagnies aériennes (ou compagnies), saisies par l'utilisateur.
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
Procédure remplir_Fa(n:entier) Ecrire("Remplir le fichier Fa.dat") # Ouverture du fichier en écriture binaire Ouvrir("Fa.dat", f , "wb") # Saisie des informations des compagnies Pour i de 0 à n-1 faire Ecrire('donner le nom de la compagnie: ') Lire(comp) Ecrire('donner le nombre de clients satisfaits: ') Lire(nsat) Ecrire('donner le nombre de clients insatisfaits: ') Lire(ninsat) # Stockage des informations dans le dictionnaire appreciation['Comp'] <- comp appreciation['NSat'] <- nsat appreciation['NInsat'] <- ninsat # Enregistrement du dictionnaire dans le fichier Ecrire(appreciation, f) # Fermeture du fichier Fermer(f) Fin |
Déclaration des objets
| Objet | Type / Nature |
|---|---|
| f | fichier |
| i | entier |
| comp | chaîne des caractères |
| nsat | entier |
| ninsat | entier |
| appreciation | Enregistrement |
La procédure tri_tableau(t, n) permet de trier les n premiers éléments du tableau t par ordre décroissant selon le nombre de clients satisfaits (NSat), en utilisant la méthode du tri par sélection.
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
Procédure tri_tableau(t:tab, n:entier) # Tri par sélection Pour i de 0 à n-2 faire # Recherche de l'indice du maximum max <- i Pour j de i+1 à n-1 faire Si t[max]['NSat'] < t[j]['NSat'] alors max <- j Fin pour # Échange des éléments si nécessaire Si max != i alors # Échange des noms des compagnies temp <- t[i]['Comp'] t[i]['Comp'] <- t[max]['Comp'] t[max]['Comp'] <- temp # Échange du nombre de satisfaits temp <- t[i]['NSat'] t[i]['NSat'] <- t[max]['NSat'] t[max]['NSat'] <- temp # Échange du nombre d'insatisfaits temp <- t[i]['NInsat'] t[i]['NInsat'] <- t[max]['NInsat'] t[max]['NInsat'] <- temp Fin si Fin pour Fin |
Déclaration des objets
| Objet | Type / Nature |
|---|---|
| i | entier |
| j | entier |
| temp | entier / chaîne des caractères |
La procédure tri(Ch1, Ch2) permet de lire les enregistrements du fichier binaire Ch1, de les trier par ordre décroissant selon le nombre de clients satisfaits (NSat), puis de les enregistrer dans le fichier texte Ch2 tout en les affichant à l'écran.
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 |
Procédure tri(Ch1:chaîne, Ch2:chaîne) # Ouverture du fichier binaire en lecture Ouvrir (Ch1, f1, "rb") n <- 0 # Lecture de tous les enregistrements Tant que Vrai faire Essayer # Création d'un dictionnaire vide appreciation = Enregistrement( Comp:chaîne des caractères, NSat:entier, NInsat:entier ) # Lecture d'un enregistrement Lire(f1,appreciation) # Stockage dans le tableau t[n] <- appreciation n <- n + 1 En cas d'erreur: # Fin du fichier atteinte Sortir Fin tant que # Fermeture du fichier Fermer(f1) # Tri du tableau selon le nombre de satisfaits tri_tableau(t, n) # Ouverture du fichier texte en écriture Ouvrir(ch2 , f2 , "w") Ecrire("contenu du fichier Fc.txt") # Écriture des données triées dans le fichier texte Pour i de 0 à n-1 faire ligne <- t[i]['Comp'] + ' ' + t[i]['NSat'] + ' ' + t[i]['NInsat'] Ecrire(f2,ligne + '\n') # Affichage de la ligne à l'écran Ecrire(ligne) Fin pour # Fermeture du fichier texte Fermer(f2) Fin |
Déclaration des objets
| Objet | Type / Nature |
|---|---|
| f1 | fichier |
| f2 | fichier |
| n | entier |
| appreciation | enregistrement |
| i | entier |
| ligne | chaîne |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 |
# ========================================================= # IMPORTATION DES BIBLIOTHÈQUES # ========================================================= # Importation des fonctions load et dump pour lire et écrire # des objets Python dans un fichier binaire from pickle import load, dump # Importation de la fonction array pour créer un tableau from numpy import array # ========================================================= # CRÉATION DU TABLEAU DES ENREGISTREMENTS # ========================================================= # Tableau pouvant contenir jusqu'à 100 dictionnaires t = array([{}] * 100) # Le module Valider permet de vérifier si la chaîne ch est un nombre romain valide # ========================================================= # DÉFINITION DE LA STRUCTURE D'UNE APPRÉCIATION # ========================================================= # Dictionnaire représentant une compagnie et les avis de ses clients appreciation = dict( Comp=str(), # Nom de la compagnie NSat=int(), # Nombre de clients satisfaits NInsat=int() # Nombre de clients insatisfaits ) # ========================================================= # SAISIE DU NOMBRE DE COMPAGNIES # ========================================================= def saisie_n(): # Saisie du nombre de compagnies n = int(input('saisir 0<n<=10000: ')) # Vérification que n est strictement positif while Not(0<n<=10000): n = int(input('saisir 0<n<=10000: ')) return n # ========================================================= # REMPLISSAGE DU FICHIER BINAIRE Fa.dat # ========================================================= def remplir_Fa(n): print("Remplir le fichier Fa.dat") # Ouverture du fichier en écriture binaire f = open("Fa.dat", "wb") # Saisie des informations des compagnies for i in range(n): comp = input('donner le nom de la compagnie: ') nsat = int(input('donner le nombre de clients satisfaits: ')) ninsat = int(input('donner le nombre de clients insatisfaits: ')) # Stockage des informations dans le dictionnaire appreciation['Comp'] = comp appreciation['NSat'] = nsat appreciation['NInsat'] = ninsat # Enregistrement du dictionnaire dans le fichier dump(appreciation, f) # Fermeture du fichier f.close() # ========================================================= # TRI DU TABLEAU PAR NOMBRE DE CLIENTS SATISFAITS # (ordre décroissant) # ========================================================= def tri_tableau(t, n): # Tri par sélection for i in range(n - 1): # Recherche de l'indice du maximum max = i for j in range(i + 1, n): if t[max]['NSat'] < t[j]['NSat']: max = j # Échange des éléments si nécessaire if max != i: # Échange des noms des compagnies temp = t[i]['Comp'] t[i]['Comp'] = t[max]['Comp'] t[max]['Comp'] = temp # Échange du nombre de satisfaits temp = t[i]['NSat'] t[i]['NSat'] = t[max]['NSat'] t[max]['NSat'] = temp # Échange du nombre d'insatisfaits temp = t[i]['NInsat'] t[i]['NInsat'] = t[max]['NInsat'] t[max]['NInsat'] = temp # ========================================================= # LECTURE DU FICHIER BINAIRE ET CRÉATION D'UN FICHIER TEXTE TRIÉ # ========================================================= def tri(Ch1, Ch2): # Ouverture du fichier binaire en lecture f1 = open(Ch1, "rb") n = 0 # Lecture de tous les enregistrements while True: try: # Création d'un dictionnaire vide appreciation = dict( Comp=str(), NSat=int(), NInsat=int() ) # Lecture d'un enregistrement appreciation = load(f1) # Stockage dans le tableau t[n] = appreciation n = n + 1 except EOFError: # Fin du fichier atteinte break # Fermeture du fichier f1.close() # Tri du tableau selon le nombre de satisfaits tri_tableau(t, n) # Ouverture du fichier texte en écriture f2 = open(Ch2, "w") print("contenu du fichier Fc.txt") # Écriture des données triées dans le fichier texte for i in range(n): ligne = t[i]['Comp'] + ' ' + str(t[i]['NSat']) + ' ' + str(t[i]['NInsat']) f2.write(ligne + '\n') # Affichage de la ligne à l'écran print(ligne) # Fermeture du fichier texte f2.close() # ========================================================= # PROGRAMME PRINCIPAL # ========================================================= # Saisie du nombre de compagnies n = saisie_n() # Création et remplissage du fichier binaire remplir_Fa(n) # Lecture, tri et création du fichier texte trié tri("Fa.dat", "Fc.txt") |
Exécution du programme

La robotique éducative joue un rôle important dans l'éducation des enfants et des jeunes en les aidant à acquérir des compétences en science et technologie.
Dans ce cadre notre site web représente une excellente ressource pour les parents, les enseignants et les enfants qui souhaitent découvrir la robotique.
Zaouiet Kontech-Jemmel-Monastir-Tunisie
Site robotique réalisé par Mohamed Ali Haj Salah - Prof Info