statistica e lingue
Il sorgente del programma Pascal
...

Quello che segue è il sorgente del programma Pascal utilizzato per realizzare l'analisi statistica delle lingue latina, italiana, francese, tedesca, inglese.


program Text_Stat;

  type
    frequenza=array['@'..'Z'] of integer;
    frequenza_rel=array['@'..'Z'] of real;
    bigrammi=array['@'..'Z'] of frequenza;
    stringa=array[0..1000] of char;
    nome=array[0..79]of char;

  procedure azzerabigrammi(var big:bigrammi);
    var riga,colonna:char;
  begin
    for riga:='@' to 'Z' do
      for colonna:='@' to 'Z' do
        big[riga,colonna]:=0;
  end;

  procedure statistica(file_:nome;var testo:text;var freq:frequenza;var big:bigrammi);
    var indice,ch1,ch:char;
  begin
    azzerabigrammi(big);
    for indice:='@' to 'Z' do
      freq[indice]:=0;
    assign(testo,file_);
    reset(testo);
    ch1:=' ';
    while not eof(testo) do
      begin
        read(testo,ch);
        if ch=' ' then ch:='@';
        ch:=upcase(ch);
        if (ch >= '@') and (ch <= 'Z') then
          begin
            freq[ch]:=freq[ch]+1;
            big[ch1,ch]:=big[ch1,ch]+1;
          end;
        ch1:=ch;
      end;
      close(testo);
  end;

  procedure calcola_freq_rel(var freq:frequenza;var freq_rel:frequenza_rel);
    var indice:char;
    var somma:longint;
  begin
    somma:=0;
    for indice:='@' to 'Z' do
      somma:=somma+freq[indice];
    for indice:='@' to 'Z' do
      freq_rel[indice]:=freq[indice] / somma;
  end;

  procedure scrivi_freq(var testo:text;freq:frequenza);
    var indice:char;
  begin
    rewrite(testo);
    writeln(testo);
    for indice:='@' to 'Z' do
      writeln(testo, indice, #9, freq[indice]);
    close(testo);
  end;

  procedure scrivi_freq_rel(var testo:text;freq:frequenza_rel);
    var indice:char;
  begin
    rewrite(testo);
    writeln(testo);
    for indice:='@' to 'Z' do
      writeln(testo,'La frequenza relativa di ',indice,'  ',freq[indice]:6:4);
    close(testo);
  end;

  procedure scrivi_big(VAR testo:text; big:bigrammi);
  var riga,colonna:char;
  begin
    ReWrite(testo);
    write(testo,chr(15)); { inizia stampa compressa }
    Write(testo, '  ');
    for colonna:='@' to 'Z' do
      write(testo, colonna:4);
    writeln(testo);
    for riga:='@' to 'Z' do
      begin
        write(testo, riga:4);
        for colonna:='@' to 'Z' do
          write(testo,big[riga,colonna]:4);
        writeln(testo);
      end;
    write(testo,'  ');
    for colonna:='@' to 'Z' do
      write(testo,colonna:4);
    write(testo,chr(18)); { finisci stampa compressa }
    close(testo);
  end;

  procedure scrivi_big_html(VAR testo:text; big:bigrammi);
  var riga,colonna:char;
  begin
    ReWrite(testo);
    writeln(testo,'<head><title>Tabella frequenze</title></head>');
    Writeln(testo, '<body>');
    writeln(testo,'<table>');
    writeln(testo,'<tr>');
    for colonna:='@' to 'Z' do
      write(testo,'<th>',colonna);
    writeln(testo);
    for riga:='@' to 'Z' do
      begin
        write(testo, riga:4);
        for colonna:='@' to 'Z' do
          write(testo,big[riga,colonna]:4);
        writeln(testo);
      end;
    writeln(testo,'<tr>');
    for colonna:='@' to 'Z' do
      write(testo,'<th>',colonna);
    writeln(testo,'</table>');
    writeln(testo,'</body>');
    close(testo);
  end;


  var freq:frequenza;
  var freq_rel:frequenza_rel;
  var big:bigrammi;
  var testo:text;
  var nomefile,file_:nome;
begin
  writeln('Programma per l''analisi dei testi');
  writeln;
  writeln('Nome del file di testo:');
  readln(file_);
  statistica(file_,testo,freq,big);
  calcola_freq_rel(freq,freq_rel);
  writeln('Nome del file su cui scrivere le frequenze assolute delle lettere:');
  readln(nomefile);
  assign(testo,nomefile);
  scrivi_freq(testo,freq);
  writeln('Nome del file su cui scrivere le frequenze relative delle lettere:');
  readln(nomefile);
  assign(testo,nomefile);
  scrivi_freq_rel(testo,freq_rel);
  writeln('Nome del file su cui scrivere le frequenze dei bigrammi:');
  readln(nomefile);
  assign(testo,nomefile);
  scrivi_big(testo,big);
  readln;
end.


Pagina a cura del
Ginnasio-Liceo "M.Foscarini" di Venezia
Scrivete via E-Mail.
Sito Web della scuola.
Crittografia - prima pagina.
Analisi statistica delle lingue
Storia della Crittografia.
Glossario
Autori
Bibliografia