Hola Tronk. Aqui te adjunto unos ficheros donde puedes encontrar tu problema resuelto.
Tienes que escribir esto en otro fichero llamado tipos.ads
package tipos is
type Nodo;
type A_Nodo is access Nodo;
type Nodo is record
Num:Natural;
sig:A_Nodo;
end record;
A continuacion escribe un fichero llamado Operaciones_Lista.ads donde pongas
with Tipos;
use Tipos;
Package Operaciones_lista is
Procedure Insertar_Elemento (L:in out A_Nodo;E:in Natural);
end Operaciones_Lista;
Si haces esto todo irá bien y el código del fichero adjunto se encargará de insertar el elemento al final de la lista.
Si quieres te envio tambien el codigo de un fichero de prueba por si quieres probar el programa (Yo ya lo he probado y funciona, creeme). El codigo es el que sigue.
with Ada.text_Io,Ada.Integer_Text_Io,Tipos,Operaciones_Lista;
use Ada.text_Io,Ada.Integer_Text_Io,Tipos,Operaciones_Lista;
Procedure prueba is
L:A_Nodo:=New Nodo;
Aux:A_Nodo;
Elem:natural:=5;
begin
L.Num:=4;
L.Sig:=NUll;
for i in reverse 1..3 loop
Aux:=New Nodo;
Aux.Num:=i;
Aux.sig:=L;
L:=Aux;
end loop;
Insertar_Elemento(L,Elem);
Put (" La lista resultado es: ");
Aux:=L;
While Aux/=Null loop
Put (Aux.Num,width=>0);
Put (",");
Aux:=Aux.sig;
end loop;
end Prueba;
La salida correcta de este programa es:
La lista resultado es:1,2,3,4,5,
Asi podras comprobar que efectivamente el fichero adjunto ha cumplido con su cometido.
Ha sido un placer ayudarte
Atentamente