Obecnie uczę siebie Ada i chociaż mogę zacząć od rozwiązania niektórych bardziej konwencjonalnych problemów, aby zacząć.Arbitralna długość całkowita w Ada
Dokładniej staram się obliczyć silnię n !, natomiast n> 100. Moja implementacja tak daleko jest:
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;
Problemem jest to, oczywiście, że nawet Long_Long_Integer jest może zbyt mała dla tego i zgłasza wyjątek CONTRAINT_ERROR dla n> 20.
Czy istnieje pakiet implementujący liczby całkowite o dowolnej wielkości?
Dzięki!
PS: Oparłem się na rekursji, ponieważ chciałem zbadać pętle w tym ćwiczeniu. Ale w innych przypadkach prosimy o komentowanie wszystkich aspektów kodu (styl, najlepsze praktyki, błąd ..)
dzięki dużo! To jest o wiele więcej odpowiedzi, niż miałam nadzieję ... Sprawdzę to. – Arne
Dobra odpowiedź, Christian. Poszedłem dalej i zweryfikowałem twoje dodatkowe strony internetowe i zamieniłem je w linki dla ciebie. Mam nadzieję, że dodatkowe 10 punktów z mojego programu pomoże szybciej wyprowadzić cię z niezaufanej ziemi noobów. –