Program vita1;
 (* esempi tempo di dimezzamento DIMOSTRATIVO *) 
 uses crt;
   VAR    nt,no,td,t,go,pr,gr:real;
          a:integer;
          moli:string;
     


procedure pausa;
begin
writeln('premi ENTER ');readln;
end;

procedure fine;  (* conferma uscita operazione *)
begin
writeln('fine operazione:confermare :premi enter');
readln;
end;

procedure cancella;
begin
clrscr;
end;

procedure chiede3;
begin
write('numero atomi radioattivi iniziali No =');readln(no);
write('tempo di dimezzamento             Td =');readln(td);
write('tempo trascorso                   t  =');readln(t);
cancella;
end;

procedure chiede4;
begin
write('grammi radioattivi iniziali       Go   =');readln(go);
write('peso atomico elemento radioattivo Pr   =');readln(pr);
write('tempo di dimezzamento             Td =');readln(td);
write('tempo trascorso                   t  =');readln(t);
no:=go/pr;
cancella;
end;

procedure calcola2(no,td,t:real);
begin
nt:=no*exp(-0.69*t/td);
writeln('atomi radioattivi iniziali  No = ',no:0:0);
writeln('tempo di dimezzamento       Td = ',td:0:2);
writeln('tempo trascorso             t  = ',t:0:2);
writeln;
writeln('calcolare atomi radioattivi Nt presenti dopo tempo trascorso');
writeln('Nt = No * exp(-0.69 * t / Td ) '); 
writeln;
writeln('atomi radioattivi residui Nt = ',nt:0:10);
pausa;
end;

procedure calcola3(no,td,t:real);
begin
nt:=no*exp(-0.69*t/td);
writeln('atomi radioattivi iniziali  No = ',no:0:0);
writeln('tempo di dimezzamento       Td = ',td:0:2);
writeln('tempo trascorso             t  = ',t:0:2);
writeln;
writeln('calcolare atomi radioattivi Nt presenti dopo tempo trascorso');
writeln('Nt = No * exp(-0.69 * t / Td ) '); 
writeln;
writeln('atomi radioattivi residui Nt = ',nt:0:10);
pausa;
end;

procedure calcola4(no,td,t:real);
begin
nt:=no*exp(-0.69*t/td);
gr:=nt*pr;
writeln('grammi radioattivi iniziali Go =       ',go:0:2);
writeln('peso atomico elemento       Pr =       ',pr:0:2);
writeln('atomi radioattivi iniziali  No = Go/Pr ',no:0:0,'  ',moli);
writeln('tempo di dimezzamento       Td =       ',td:0:2);
writeln('tempo trascorso             t  =       ',t:0:2);
writeln('calcolare grammi radioattivi Gr presenti dopo tempo trascorso');
writeln('calcolare atomi  radioattivi Nt presenti dopo tempo trascorso');
writeln;
writeln('grammi atomi radioattivi    Gr =       ',gr:0:10);
writeln('atomi radioattivi residui   Nt = Gr/Pr ',nt:0:10,'  ',moli);
pausa;
end;

procedure descrive;
begin
writeln('esempio per calcolare atomi radioattivi ancora presenti');
writeln('dopo che Ž trascorso un tempo noto,conoscendo il numero');
writeln('di atomi radioattivi inizialmente presenti o i grammi,');
writeln('e conoscendo il tempo di dimezzamento caratteristico');
pausa;
end;

procedure pro1;
begin
descrive;
end;

procedure pro2;
begin
(* atomi radioattivi,tempo dimezzamento,tempo trascorso *)

calcola2(1000,100,100);
calcola2(1000,100,200);
calcola2(1000,100,300);
calcola2(1000,100,400);
calcola2(1000,100,500);
calcola2(1000,100,600);
calcola2(1000,100,700);
calcola2(1000,100,800);
calcola2(1000,100,900);
calcola2(1000,100,1000);
calcola2(1000,100,1100);
calcola2(1000,100,1200);
end;

procedure pro3;
begin
chiede3;
calcola3(no,td,t);
end;

procedure pro4;
begin
chiede4;
calcola4(no,td,t);
end;

procedure scelta;  (* procedura con scelta opzioni e uscita *)
var s,sn:string;opzione:integer;
begin
clrscr;
writeln('seleziona opzione :atomi o grammi residui dopo tempo noto');
writeln('1...decrizione');
writeln('2...atomi presenti dopo tempo trascorso noto:DIMOSTRATIVO');
writeln('3...atomi presenti dopo tempo trascorso noto:SCRIVI DATI');
writeln('4...atomi,grammi,presenti:SCRIVI grammi radioattivi iniziali ');
writeln('9...fine ');
writeln('scelta =');readln(opzione);cancella;
case opzione of
1:pro1;
2:pro2;
3:pro3;
4:pro4;
9:fine;
end;
writeln('altra operazione?Esperimenti?:premi S...fine:premi N '); readln(sn);
if sn='S' then scelta ;
end;

begin            (* programma di lancio *)
clrscr;
moli:='* 6.3 * 10^23';
scelta;
end.