[ADA - débutant] Concaténer 2 listes

Concaténer 2 listes [ADA - débutant] - Ada - Programmation

Marsh Posté le 26-12-2007 à 15:08:14    

Bonjour,

 

Voici la procédure que j'ai écrite pour mettre bout à bout 2 listes d'entiers L et L2. En sortie, je veux que L contienne la concaténation de L et L2

 

Je défini avant un type cellule

Code :
  1. type Cellule ;
  2.   type Liste is access Cellule ;
  3.  
  4.   type Cellule is record --on définit ici le type cellule qui sera utilisé par la suite
  5.      Val: Natural ;
  6.      Suiv: Liste ;
  7.   end record ;
 

Puis voici le code de ma procédure

Code :
  1. procedure Abouter(L:in out Liste ; L2: in Liste) is --permet de concaténer deux listes
  2.         Pcour:Liste:=L;                                     --en sortie : L:=L@L2
  3.         temp:Liste;                                    
  4.      begin
  5.         while Pcour/=null loop
  6.            Temp:=Pcour;
  7.            Pcour:=Pcour.Suiv;
  8.         end loop; --ici, temp vaut le dernier pointeur non nul de la liste L
  9.         Temp.suiv:=L2; -- c'est ici que j'obtiens un "access checked failed" car manifestement le fait que Temp.suiv vaut null ne plait pas
  10.      end Abouter;
 

Merci pour votre aide


Message édité par lebest le 26-12-2007 à 17:00:38
Reply

Marsh Posté le 26-12-2007 à 15:08:14   

Reply

Marsh Posté le 26-12-2007 à 15:43:18    

edit : je disais une bétise grosse comme mon cerveau.


Message édité par Profil supprimé le 26-12-2007 à 15:49:56
Reply

Marsh Posté le 26-12-2007 à 15:52:48    

A mon avis, la vérité viens d'ailleurs.

Reply

Marsh Posté le 27-12-2007 à 12:27:38    

Reply

Marsh Posté le 27-12-2007 à 17:43:03    

lebest a écrit :

Mais encore?


Vérifie le reste de ton code.

Reply

Marsh Posté le 27-12-2007 à 19:34:32    

C'est donc que cette procédure est exacte?

 

Pourtant quand je modifie temp.suiv:=L2 en temp:=L2 je n'obtiens plus de "access check failed"... (mais bien sûr la concaténation devient inexacte, il manque le dernier élément de L)

Message cité 1 fois
Message édité par lebest le 27-12-2007 à 19:35:05
Reply

Marsh Posté le 27-12-2007 à 19:56:43    

lebest a écrit :

C'est donc que cette procédure est exacte?
 
Pourtant quand je modifie temp.suiv:=L2 en temp:=L2 je n'obtiens plus de "access check failed"... (mais bien sûr la concaténation devient inexacte, il manque le dernier élément de L)


 
SI ça lève cette erreur c'est que temps = null.
Il doit n'y avoir qu'un élément dans ta liste.
Montre tes ajouts dans la liste L pour voir.  

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed