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.