Dhifallah Fethi Admin
Messages : 74 Date d'inscription : 02/03/2011
| Sujet: Exercice 2 (Enregistrement et fichiers) Dim 27 Mar - 1:31 | |
| Exercice 2 (Enregistrement et fichiers) "Exemple.TXT" est un fichier texte enregistré dans d:\statistique. Ecrire un programme pascal permettant de calculer et afficher la fréquence de chaque mot dans le texte sans redondance. L’affichage se fait par ordre alphabétique. Par besoin de simplicité, on suppose que le texte ne contient pas des signes de ponctuation. Exemple : Si le texte : « On peut déranger certains gens tous le temps et tous les gens de temps en temps mais pas tous les gens tous le temps » produit le résultat suivant : [Vous devez être inscrit et connecté pour voir cette image]Correction de l'exercice - Code:
-
program frequence;
uses WinCrt;
type e_freq = record mot : string[20]; freq : integer; end; tab_freq = array [1..50] of e_freq;
function Miniscule(var ch : string):string; var i : integer; begin for i:=1 to Length(ch) do if (ch[i] in ['A'..'Z']) then ch[i] := Chr(Ord(ch[i]) + 32); Miniscule := ch; end;
function Position_Mot(mot : string ; var n : integer ; var t : tab_freq):integer; var p, i : integer; begin p := 0; i := 1;
while (i <= n) and (p = 0) do begin if (mot = t[i].mot) then p := i else i:=i+1; end;
Position_Mot := p; end;
procedure Inserer_Mot(mot : string ; var n : integer ; var t : tab_freq); var ne : e_freq; p : integer; begin ne.mot := mot; ne.freq := 1; p := n; while (p > 0) and (ne.mot < t[p].mot) do begin t[p+1] := t[p]; p := p - 1; end; t[p+1] := ne; n := n + 1; end;
procedure MAJ_Freq(mot : string ; var n : integer ; var t : tab_freq); var p : integer; begin p := Position_Mot(mot, n, t); if (p = 0) then Inserer_Mot(mot, n, t) else t[p].freq := t[p].freq + 1; end;
procedure afficher(n : integer; var t : tab_freq); var i : integer; begin for i:=1 to n do Writeln(t[i].mot : 21, '-', t[i].freq : 3); end;
procedure Compter_Mots(var f : text ; var n :integer ; var t : tab_freq); var ch : string; c : char; begin Reset(f); ch := ''; While (not EOF(f)) do begin Read(f, c); if (c = ' ') then begin ch := miniscule(ch); MAJ_Freq(ch, n, t); ch := ''; end else ch := ch + c;
end; ch := miniscule(ch); MAJ_Freq(ch, n, t); Close(f); end;
var n : integer; f : text; t : tab_freq; begin Assign(f, 'c:\exemple.txt'); Compter_Mots(f, n, t); Afficher(n, t); end. | |
|