HUFFMAN

roro1689
Messages postés
1
Date d'inscription
jeudi 27 mars 2008
Statut
Membre
Dernière intervention
9 avril 2008
- 9 avril 2008 à 15:12
cs_cantador
Messages postés
4720
Date d'inscription
dimanche 26 février 2006
Statut
Modérateur
Dernière intervention
31 juillet 2021
- 10 avril 2008 à 10:49
Bonjour
Pouvez vous m'aider je doit réaliser un programme en pascal me permettant de calculer le nombre d'apparition des lettres dans le texte et ensuite de réaliser le l'arbre correspondent voici ce que j'ai fait seulement il ne marche et de plus je ne voi pas comment rétuliser les resultat pour construire l'arbre.
je suis débutant
merci d'avance pour vos explication

program compter;
uses wincrt;


var texte:string;
    a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z:integer;
    it:integer;


 


Begin
Writeln('Entrez le texte');
readln(texte);
 
  for it:=1 to length(texte) do
     if texte[it]='a'
        then a:=a+1;
        writeln(a);
 
 for i:=1 to length(texte) do
     if texte[i]='b'
        then b:=b+1;
        writeln ('b');
  for i:=1 to length(texte) do
     if texte[it]='c'
        then c:=c+1;
        writeln (c);
 
  for i:=1 to length(texte) do
     if texte[it]='d'
        then d:=d+1;
        writeln (d);
  for i:=1 to length(texte) do
     if texte[it]='e'
        then e:=e+1;
        writeln (e);
  for i:=1 to length(texte) do
     if texte[it]='f'
        then f:=f+1;
        writeln (f);
  for i:=1 to length(texte) do
     if texte[it]='g'
        then g:=g+1;
        writeln (g);
  for i:=1 to length(texte) do
     if texte[it]='h'
        then h:=h+1;
        writeln (h);
  for i:=1 to length(texte) do
     if texte[it]='i'
        then i:=i+1;
        writeln (i);
  for i:=1 to length(texte) do
     if texte[it]='j'
        then j:=j+1;
        writeln (j);
  for i:=1 to length(texte) do
     if texte[it]='k'
        then k:=k+1;
        writeln (k);
  for i:=1 to length(texte) do
     if texte[it]='l'
        then l:=l+1;
        writeln (l);
  for i:=1 to length(texte) do
     if texte[it]='l'
        then l:=l+1;
        writeln (l);
  for i:=1 to length(texte) do
     if texte[it]='m'
        then m:=m+1;
        writeln (m);
  for i:=1 to length(texte) do
     if texte[it]='n'
        then n:=n+1;
        writeln (n);
  for i:=1 to length(texte) do
     if texte[it]='o'
        then o:=o+1;
        writeln (o);
  for i:=1 to length(texte) do
     if texte[it]='p'
        then p:=p+1;
        writeln (p);
  for i:=1 to length(texte) do
     if texte[it]='q'
        then q:=q+1;
        writeln (q);
  for i:=1 to length(texte) do
     if texte[it]='r'
        then r:=r+1;
        writeln (r);
  for i:=1 to length(texte) do
     if texte[it]='s'
        then s:=s+1;
        writeln (s);
  for i:=1 to length(texte) do
     if texte[it]='t'
        then t:=t+1;
        writeln (t);
  for i:=1 to length(texte) do
     if texte[it]='u'
        then u:=u+1;
        writeln (u);
  for i:=1 to length(texte) do
     if texte[it]='v'
        then v:=v+1;
        writeln (v);
  for i:=1 to length(texte) do
     if texte[it]='w'
        then w:=w+1;
        writeln (w);
  for i:=1 to length(texte) do
     if texte[it]='x'
        then x:=x+1;
        writeln (x);
  for i:=1 to length(texte) do
     if texte[it]='y'
        then y:=y+1;
        writeln (y);
  for i:=1 to length(texte) do
     if texte[it]='z'
        then z:=z+1;
        writeln (z);
 End.

2 réponses

f0xi
Messages postés
4205
Date d'inscription
samedi 16 octobre 2004
Statut
Modérateur
Dernière intervention
12 mars 2022
37
9 avril 2008 à 16:39
var
  Letters : array['a'..'z'] of longword;
  i, L, T : integer;
  P       : single;
  C       : char;
 
begin
  // reset
  for C := 'a' to 'z' do
    Letters[C] := 0;
  T := 0;

  // count letters
  L := Length(Text);
  for i := 1 to L do
  begin
    C := LowerChar(Text[i]);
    if C in ['a'..'z'] then
    begin
      inc(Letters[C]);
      inc(T);
    end;
  end;
  P := 100/T;

  // show result
  for c := 'a' to 'z' do
    if Letters[C] <> 0 then
      Writeln(format(C+'= %6.d | %.2f%%',[Letters[C], P*Letters[C]]));
end;
   

<hr size="2" width="100%" />
0
cs_cantador
Messages postés
4720
Date d'inscription
dimanche 26 février 2006
Statut
Modérateur
Dernière intervention
31 juillet 2021
14
10 avril 2008 à 10:49
@foxi :
j'ai effectué quelques corrections.

procedure TForm1.Button1Click(Sender: TObject);
var
  Letters: array['a'..'z'] of longword;
  i, L, T: integer;
  P: single;
  C: char;
  Ch, Chm: string;
  F1: textFile; {fichier de sortie}
begin
  try
    screen.Cursor := CrHourGlass;
  // reset
    Ch := 'Foxi est un brillant informaticien';
    AssignFile(F1, 'c:\temp\fichResult.csv');
    Rewrite(F1);          {écrasement et création du fichier de sortie}


    for C := 'a' to 'z' do
      Letters[C] := 0;
    T := 0;


  // count letters
    L := Length(Ch);
    Chm := LowerCase(Ch); {conversion de la chaîne en miniscule }
    for i := 1 to L do
    begin
      C := Chm[i];
      if C in ['a'..'z'] then
      begin
        inc(Letters[C]);
        inc(T);
      end;
    end;
    if T <> 0 then
      P := 100 / T;


  // show result
    for c := 'a' to 'z' do
      if Letters[C] <> 0 then
        Writeln(F1, format(C + '= %6.d | %.2f%%', [Letters[C], P * Letters[C]]));
  finally
    Screen.Cursor := CrDefault;
    CloseFile(F1);
    ShowMessage('terminé !');
  end;
end;

cantador
0