program numeroneperiano;
uses crt;
var e:array[1..60] of real;
ris,a:real;
esp,chose,i,cif:integer;
risp:char;
Procedure Calcolo;
begin
i:=1;
e[i]:= 2;
a:=1;
repeat
i:=i+1;
a:=a/i; until i=60;
end;
Function potric(esp:integer):real;
begin
if esp=0 then potric:=1
else potric:=potric(esp-1)*e[59];
end;
Procedure NumeroNeperiano;
begin
clrscr;
writeln('Calcolo del Numero di Nepero');
Calcolo;
writeln('e = ',e[59]:2:cif);
end;
Procedure Esponenziale;
begin
clrscr;
Calcolo;
writeln('Inserire l''esponente della potenza in base e');
readln(esp);
if esp<0 then ris:=1/potric(-esp)
else ris:=potric(esp);
writeln('e^',esp,' = ',ris:2:cif);
end;
Procedure Approssimazione;
begin
writeln('Con quale approssimazione si intende operare?:');
writeln('1: Decimo');
writeln('2: Centesimo');
writeln('3: Millesimo');
writeln('4: Altro...');
writeln('5: exit!');
readln(cif);
if cif=4 then begin
writeln('Quante cifre dopo la virgola? (Max:15)');
readln(cif);
end;
if cif=5 then halt;
end;
Procedure SceltaProgramma;
begin
writeln('Scegliere il programma desiderato:');
writeln('1: Calcolo del numero Neperiano');
writeln('2: Calcolo della funzione esponenziale con base e');
readln(chose);
if chose=1 then NumeroNeperiano;
if chose=2 then Esponenziale;
end;
begin
repeat
clrscr;
Approssimazione;
clrscr;
SceltaProgramma;
writeln;
writeln('Ripetere? s/n');
readln(risp);
until risp= 'n';
end.