esercizi di chimica con turbo pascal 1.1 su mac

program tabula1;
(* richiama tabella elementi con simboli,pesi atomici,elettronegativita*)
const k=92;
 
var s,h1,va,indice:integer;    
    n:array[1..k] of string;
    p:array[1..k] of integer;
    e:array[1..k] of real;
    sh:array[1..4] of string;
    h:array[1..4] of integer;
    p1,pm,pm1,moli,g,pe:real;
    s1:string;
{$I dati}
procedure fine;
begin
writeln('premi enter');
readln;
end;
procedure pausa;
begin
writeln('premi ENTER per proseguire ');readln;
end;
procedure calcola(s1:string;h1:integer);
var a:integer;
begin
p1:=0;
writeln('peso atomico':20,'peso*indice':20,'somma pesi*indici':20);
writeln;
for a:=1 to k do
begin
if n[a]=s1 then begin 
p1:=p[a]*h1;
pm:=pm+p1;
writeln(p[a]:20,p1:20:2,pm:20:2);
end
else
end;
end;
procedure pro1;
var a,inizio,termine:integer;
begin
dati;
write('scrivi numero atomico dal quale iniziare 1..2..92..');readln(inizio);
write('scrivi numero atomico al quale finire ...1..2..92..');readln(termine);
clearscreen;
writeln('Z=':10,'simbolo':20,'massa atomica':20,'elettronegativita':20);
writeln;
for a:=inizio to termine do
writeln(a:10,n[a]:20,p[a]:20,e[a]:20:2);
end;
procedure pro2; (* calcola peso molecolare *)
var ne,a:integer;
begin
write('scrivi numero elementi presenti ');readln(ne);
writeln('inserire simboli presenti nella formula');
writeln('per ogni simbolo,scrivere numero totale atomi presenti');
writeln('se uno solo,scrivere 1....');
writeln('es.CaS...Ca=1..S=1....Ca(NO3)2...Ca=1...N=2...O=6 ');
writeln;
dati;
for a:=1 to ne do
begin
write('simbolo elemento=');readln(sh[a]);
write('indice  elemento=');readln(h[a]);
writeln;
calcola(sh[a],h[a]);
end;
writeln;
writeln('peso molecolare = ',pm:8:2);
pm1:=pm;
pm:=0;
end;
procedure pro2a; (* calcola peso molecolare o equivalente*)
var ne,a:integer;
begin
write('scrivi numero elementi presenti ');readln(ne);
writeln('inserire simboli presenti nella formula');
writeln('per ogni simbolo,scrivere numero totale atomi presenti');
writeln('se uno solo,scrivere 1....');
writeln('es.CaS...Ca=1..S=1....Ca(NO3)2...Ca=1...N=2...O=6 ');
writeln;
dati;
for a:=1 to ne do
begin
write('simbolo elemento=');readln(sh[a]);
write('indice  elemento=');readln(h[a]);
writeln;
calcola(sh[a],h[a]);
end;
writeln;
write('valore per denominatore..valenza..');readln(va);
pe:=pm/va;
writeln('peso equivalente = ',pm/va:8:2);
if indice=1 then writeln('numero equivalenti=',(g/pe):8:2);
pm1:=pm;
pm:=0;
end;
procedure pro3;
begin
write('scrivi grammi composto  ');readln(g);
writeln('moli = grammi/peso molecolare ');
writeln('passa a chiedere formula e calcola peso molecolare ');
writeln;
pro2;
moli:=g/pm1;
writeln('moli=grammi/peso molecolare ',moli:8:2);
end;
procedure pro4;
begin
writeln('peso equivalente ELEMENTO   = peso atomico/valenza ');
writeln('peso equivalente ACIDO      = peso molecolare/numero H+  ');
writeln('peso equivalente IDROSSIDO  = peso molecolare/numero OH-  ');
writeln('peso equivalente OSSIDO     = peso molecolare/valenza*indice Met.');
writeln('peso equivalente SALE       = peso formula/cariche + o - ');
writeln('peso equivalente REDOX      = peso molecolare/elettroni trasferiti ');
writeln('-----------------------------------------------------------------');
writeln('si deve indicare simbolo o formula con indici ');
writeln('si deve indicare il valore da assegnare al denominatore ');
writeln('-----------------------------------------------------------------');
pausa;
pro2a;
end;
procedure pro5;
begin
writeln('numero equivalenti=grammi/peso equivalente ');
write('scrivi numero grammi composto o elemento ');readln(g);
writeln('inserisci simboli e indici per elemento o composto');
writeln('poi calcola peso equivalente ed esegui il rapporto');
pausa;
indice:=1;
pro4;
indice:=0;
end;
procedure scelta;
var ancora:integer;
begin
clearscreen;
writeln('seleziona tipo problema ');
writeln('1...stampa tabella elementi');
writeln('2...calcolo peso molecolare composto da indicare');
writeln('3...calcolo moli presenti in grammi di composto');
writeln('4...calcolo peso equivalente di atomi o composti ');
writeln('5...calcolo equivalenti presenti in grammi di composto o elemento');
writeln('9...fine ');
write('opzione=');readln(s);
clearscreen;
case s of
1:pro1;
2:pro2;
3:pro3;
4:pro4;
5:pro5;
9:fine;
end;
writeln('----------------------------');
writeln('altro problema:scrivi 1...fine:scrivi 2 ');readln(ancora);
if ancora =1 then scelta else fine;
end;
begin
clearscreen;
pm:=0;
writeln('funzione programma:utilizzare tabella elementi');
writeln('---------------------------------------------------');
writeln('premi enter');readln;
scelta;
end.