Actualmente me estoy enseñando a mí mismo Ada y aunque podría comenzar abordando algunos de los problemas más convencionales para comenzar.Número de longitud arbitrario en Ada
Más específicamente, trato de calcular el factorial n !, mientras que n> 100. Mi aplicación hasta ahora es:
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;
El problema es, obviamente, que incluso puede Long_Long_Integer es demasiado pequeño para esto y emite una excepción CONTRAINT_ERROR para n> 20.
¿Hay algún paquete que implemente enteros de tamaño arbitrario?
Gracias!
PD: Opté contra la recursividad porque quería explorar los bucles en este ejercicio. De lo contrario, comentar todos los aspectos del código (estilo, mejores prácticas, error ...)
gracias mucho! Esa es una respuesta mucho más de lo que esperaba obtener ... Lo comprobaré. – Arne
Buena respuesta, Christian. Seguí adelante y verifiqué sus páginas web adicionales y las convertí en enlaces para usted. Afortunadamente, los 10 puntos extra de mi voto ascendente ayudarán a expulsarlo de la tierra de los nobles que no son de confianza antes. –