Attualmente mi sto insegnando Ada e anche se potrei iniziare affrontando alcuni dei problemi più convenzionali per iniziare.Numero intero di lunghezza arbitraria in Ada
In particolare, provo a calcolare il fattoriale n !, mentre n> 100. La mia applicazione finora è:
with Ada.Text_IO;
with Ada.Integer_Text_IO;
use Ada.Text_IO;
procedure Factorial is
-- define a type covering the range beginning at 1 up to which faculty is to
-- be computed.
subtype Argument is Long_Long_Integer range 1..100;
-- define a type that is large enough to hold the result
subtype Result is Long_Long_Integer range 1..Long_Long_Integer'Last;
package Result_IO is new Ada.Text_IO.Integer_IO(Result); use Result_IO;
-- variable holding the faculty calculated.
fac : Result := 1;
begin
-- loop over whole range of ARGUMENT and calculate n!
for n in ARGUMENT loop
fac := (fac * n);
end loop;
end;
Il problema è, ovviamente, che anche Long_Long_Integer è troppo piccolo può per questo e genera un'eccezione CONTRAINT_ERROR per n> 20.
Esiste un pacchetto che implementa numeri interi di dimensioni arbitrarie?
Grazie!
PS: Ho optato contro la ricorsione perché volevo esplorare i loop in questo esercizio. In caso contrario, si prega di commentare tutti gli aspetti del codice (stile, best-practice, errore ..)
grazie mille! Questa è molto più di una risposta di quanto speravo di ottenere .. Vado a dare un'occhiata. – Arne
Buona risposta, Christian. Sono andato avanti e ho verificato le tue pagine web extra e le ho trasformate in link per te. Speriamo che i 10 punti extra della mia upvote ti aiuteranno a spingerti fuori dalla terra di noob inaffidabile prima. –