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.