Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1545 connectés 

  FORUM HardWare.fr
  Programmation
  Ada

  [ADA95] grrr c koi cette erreur ?

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[ADA95] grrr c koi cette erreur ?

n°207639
swich
snps
Posté le 02-09-2002 à 22:41:16  profilanswer
 

voila mon code :

Code :
  1. function image(liste : LISTES) return string is
  2.    i : INTEGER := 2;                      -- la  parenthèse+1
  3.    s : string(1..longueur_image(liste));
  4. begin
  5.    s(1):='(';
  6.    if liste.premier = NULL then
  7. return "()";
  8. else
  9.   while not en_fin(liste) loop
  10.    while liste.precourant.s.v /= null loop
  11.    s(i..(i+liste.precourant.s.v.all'length)) := liste.precourant.s.v.all;
  12.    i:=i+(liste.precourant.s.v.all'length);
  13.    end loop;
  14.    s(i..i+2):=", ";
  15.    i := i+2;  -- la virgule et l'espace
  16.    avancer(liste);     -- ERREUR ICI
  17.    end loop;
  18. s(i):=')';
  19.   return s;
  20. end if;
  21. end;


 
et az la compilation g l'erreur :
actual for list must be a variable


Message édité par swich le 03-09-2002 à 00:04:41
mood
Publicité
Posté le 02-09-2002 à 22:41:16  profilanswer
 

n°207645
antp
Super Administrateur
Champion des excuses bidons
Posté le 02-09-2002 à 22:54:31  profilanswer
 

C'est quoi comme langage ça :??:
Le truc d'Oracle ? (PLSQL?)


Message édité par antp le 02-09-2002 à 22:55:01

---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
n°207653
chicha
Posté le 02-09-2002 à 23:16:25  profilanswer
 

C'est de l'ADA 95, non ?

n°207656
chicha
Posté le 02-09-2002 à 23:19:06  profilanswer
 

es-tu sûr que liste n'a pas été déclarée comme constante ?


Message édité par chicha le 02-09-2002 à 23:19:20
n°207657
swich
snps
Posté le 02-09-2002 à 23:21:05  profilanswer
 

ouaip c de l'ada 95

n°207661
swich
snps
Posté le 02-09-2002 à 23:22:37  profilanswer
 

et liste n'a pas ete declare comme une constante
vla mon code :

Code :
  1. with unchecked_deallocation;
  2. package body STRLISTE is
  3.  
  4.    type PTRS is access STRING;
  5.    type ELEMS is record
  6.       v : PTRS;
  7.       s : PELEMS;
  8.    end record;
  9.  
  10.    procedure liberer is new unchecked_deallocation(STRING, PTRS);
  11.    procedure liberer is new unchecked_deallocation(ELEMS, PELEMS);
  12.  
  13.    function taille(LISTE :LISTES) return NATURAL is
  14.    begin
  15.       return liste.n;
  16.    end;
  17.  
  18.    function valeur(LISTE : LISTES) return STRING is
  19.    begin
  20.       return LISTE.precourant.s.v.all;
  21.    exception when CONSTRAINT_ERROR =>
  22.       if en_fin(LISTE) then raise ERREUR; end if;
  23.       return LISTE.premier.v.all;
  24.    end;
  25.  
  26.    function en_fin(LISTE : LISTES) return BOOLEAN is
  27.    begin
  28.       return LISTE.premier = null or else (LISTE.precourant /= null and then LISTE.precourant.s = null);
  29.    end;
  30.  
  31.    procedure aller_en_debut(liste : in out LISTES) is
  32.    begin
  33.       if en_fin(liste) then raise ERREUR; end if;
  34.       liste.precourant := liste.precourant.s;
  35.    exception when CONSTRAINT_ERROR => liste.precourant := liste.premier;
  36.    end;
  37.  
  38.    procedure avancer (liste : in out LISTES) is
  39.       begin
  40.          if en_fin(LISTE) then raise ERREUR; end if;
  41.            LISTE.precourant := LISTE.precourant.s;
  42.               exception when constraint_error =>
  43.               LISTE.precourant := LISTE.premier;
  44.    end;
  45.              
  46.  
  47.  
  48.    procedure inserer(liste : in out LISTES; S : in STRING) is
  49.       c : PTRS := new STRING'(S);
  50.    begin
  51.       if liste.precourant = null then
  52.          liste.premier := new ELEMS'(c, liste.premier);
  53.          liste.precourant := liste.premier;
  54.       else
  55.          liste.precourant.s := new ELEMS'(c, liste.precourant.s);
  56.          liste.precourant := liste.precourant.s;
  57.       end if;
  58.       liste.n := liste.n + 1;
  59.    exception when STORAGE_ERROR => liberer(c); raise;
  60.    end;
  61.  
  62.    procedure retirer(liste : in out LISTES) is
  63.       p : PELEMS;
  64.    begin
  65.       if en_fin(liste) then raise ERREUR; end if;
  66.       if liste.precourant = null then
  67.          p := liste.premier;
  68.          liste.precourant := liste.premier.s;
  69.       else p:= liste.precourant.s;
  70.            liste.precourant.s := liste.precourant.s.s;
  71.       end if;
  72.       liste.n := liste.n - 1;
  73.       liberer(p.v);
  74.       liberer(p);
  75.    end;
  76.  
  77. function longueur_image(liste : in LISTES) return INTEGER is
  78.   i : INTEGER := 2;                      -- les deux parenthèses
  79. begin
  80. if  liste.premier /= NULL then
  81.   while not en_fin(liste) loop
  82.     i := i + (liste.precourant.s.v.all'length);
  83.     i := i+2;    -- la virgule et l'espace
  84.     avancer(liste);   
  85.   end loop;
  86. end if;
  87.     return i;
  88. end;
  89.  
  90. function image(liste : LISTES) return string is
  91.    i : INTEGER := 2;                      -- la  parenthèse+1
  92.    s : string(1..longueur_image(liste));
  93. begin
  94.    s(1):='(';
  95.    if liste.premier = NULL then
  96. return "()";
  97. else
  98.   while not en_fin(liste) loop
  99.    while liste.precourant.s.v /= null loop
  100.    s(i..(i+liste.precourant.s.v.all'length)) := liste.precourant.s.v.all;
  101.    i:=i+(liste.precourant.s.v.all'length);
  102.    end loop;
  103.    s(i..i+2):=", ";
  104.    i := i+2;  -- la virgule et l'espace
  105.    avancer(liste);   
  106.    end loop;
  107. s(i):=')';
  108.   return s;
  109. end if;
  110. end;
  111. procedure extraire (X : in PELEMS;d: out PELEMS) is
  112. begin
  113. d:=X;
  114. while d.s /= NULL loop
  115.    while d.v.all>d.s.v.all loop
  116.       d:=d.s;
  117.       end loop;
  118. end loop;
  119. end;
  120. end STRLISTE;

n°207671
chicha
Posté le 02-09-2002 à 23:38:03  profilanswer
 

Je t'avoue que je ne suis plus vraiment dans l'Ada...
Mais à mon avis, l'idée pour commencer à debuger dans ta fonction image, est de voir si tu peux modifier liste avec une commande à la con.
Si c'est ça, c'est p-e une histoire de in/out qui couille sur liste  :??:

n°207682
swich
snps
Posté le 02-09-2002 à 23:56:07  profilanswer
 

hehe bien joue man :)
g remplace par ca :
 
function image(list : LISTES) return string is
   liste : LISTES := list;
 
et ca compile nickel

n°207684
chicha
Posté le 03-09-2002 à 00:02:12  profilanswer
 

ok c cool, c ce que je pensais...
mais je ne savais plus si fallait un .all ou pas ??

n°207685
antp
Super Administrateur
Champion des excuses bidons
Posté le 03-09-2002 à 00:04:26  profilanswer
 

swich a écrit a écrit :

ouaip c de l'ada 95
 




 
ça aurait été bien de le mettre dans la section ADA et de l'indiquer dans le premier post :p
Bon vais le faire moi-même...


---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
mood
Publicité
Posté le 03-09-2002 à 00:04:26  profilanswer
 

n°207694
swich
snps
Posté le 03-09-2002 à 00:51:23  profilanswer
 

ben non pq des que je met qqchose ds la section ada, y'a jamais de reponse, dc la dsl mais ct important

n°207786
antp
Super Administrateur
Champion des excuses bidons
Posté le 03-09-2002 à 09:58:40  profilanswer
 

si tu le mets dans la section ADA il apparaît dans la sous-section ADA et dans la section principale.
Si tu ne le mets dans aucune sous-section il n'apparaît que dans la section principale... donc tu as tout intérêt à utiliser ces sous-sections pour si jamais y a un gars qui vient juste voir les topics ADA.
Et si personne y répond c'est peut-être qu'il y a très peu de gens ici qui pourraient le faire ;)


---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
n°207808
benou
Posté le 03-09-2002 à 10:40:30  profilanswer
 

y a aussi le fait que tu réponds pas aux questions dans tes post : tu écris ton problème et tu te casses !

n°207826
chicha
Posté le 03-09-2002 à 11:00:43  profilanswer
 

swich a écrit a écrit :

ben non pq des que je met qqchose ds la section ada, y'a jamais de reponse, dc la dsl mais ct important
 




 
J'ai juste une question qui me trote... Tu peux me rappeler le sens du .all pour un type liste ?  :??:  Merci :hello:

n°207921
BifaceMcLe​OD
The HighGlandeur
Posté le 03-09-2002 à 13:23:59  profilanswer
 

swich a écrit a écrit :

hehe bien joue man :)
g remplace par ca :
 
function image(list : LISTES) return string is
   liste : LISTES := list;
 
et ca compile nickel




C'est pas très malin de faire ça...
Globalement, dans une fonction ("image" ) qui promet de ne pas modifier "list", tu essaies d'appeler une procédure ("avancer" ) qui va la modifier.
Résultat, tu es obligé de faire une copie locale de ta liste ! :ouch:  
Dans le genre efficace, on fait mieux... :sarcastic:
Ou alors, dans le cas présent (si l'opérateur "=" n'est pas redéfini sur ton type LISTES), c'est pire : cette copie locale introduit probablement un bug, car a priori, si "avancer" attend un paramètre en in/out, c'est qu'il modifie cet objet...  
 
Tu ferais mieux de réléchir un peu plus attentivement à qui doit modifier quoi, et écrire (enfin, modifier) ton code en conséquence...  :heink:


Message édité par BifaceMcLeOD le 03-09-2002 à 13:27:05
n°207929
swich
snps
Posté le 03-09-2002 à 13:28:04  profilanswer
 

ouaip ben en fait le prob c tout bete, c qu'il peut pas modifier liste pq il est en mode in, donc y fo faire une copie

n°207935
BifaceMcLe​OD
The HighGlandeur
Posté le 03-09-2002 à 13:32:54  profilanswer
 

chicha a écrit a écrit :

 
 
J'ai juste une question qui me trote... Tu peux me rappeler le sens du .all pour un type liste ?  :??:  Merci :hello:  




Pas pour un type liste, pour un type accès (bref, un pointeur). Cela permet de manipuler l'agrégat pointé dans son ensemble (la valeur de type record, si tu préfères).
 
En toute logique, pour accéder à n'importe quel des champs d'un agrégat pointé, il faudrait aussi utiliser " .all ". Exemple, "elem" est de type "access ELEMS" :

Code :
  1. elem.all.v


On "ouvre le pointeur pour accéder à l'agrégat pointé, avant d' "ouvrir" l'agrégat pour accéder à l'un de ses champs. Mais dans ce cas précis, Ada accepte que le " .all " soit implicite, et l'on peut écrire :

Code :
  1. elem.v


n°207943
BifaceMcLe​OD
The HighGlandeur
Posté le 03-09-2002 à 13:39:16  profilanswer
 

swich a écrit a écrit :

ouaip ben en fait le prob c tout bete, c qu'il peut pas modifier liste pq il est en mode in, donc y fo faire une copie




Non, le problème, c'est que tu utilises une procédure qui modifie "liste" dans une fonction qui ne la modifie pas. Alors soit "image" doit bien appeler "avancer", mais dans ce cas, le prototype d'"avancer" n'est pas correct, ou alors c'est "avancer" qui est correct, et dans ce cas c'est "image" qui ne doit pas appeler "avancer". Mais dupliquer les objets en mémoire parce que le compilateur interdit l'accès direct aux variables est une très mauvaise manière de résoudre les problèmes. Imagine que ta liste nécessite plusieurs dizaines ou centaines de mégaoctets en mémoire. Je ne te raconte pas l'état de ta machine au simple appel d'"image" (facile : sur les rotules...  :D )

n°208149
swich
snps
Posté le 03-09-2002 à 17:44:14  profilanswer
 

ouai suis d'accord, vu comme ca..

n°208406
BifaceMcLe​OD
The HighGlandeur
Posté le 04-09-2002 à 10:11:21  profilanswer
 

Ca s'appelle la programmation par interfaces.
Ca paraît un peu rigide comme raisonnement, mais quand on bosse à plusieurs, c'est la manière la plus efficace de bosser que je connaisse (on peut atteindre des rendements de folie en termes de production de code sans bug)... à condition évidemment de respecter le contrat défini par les interfaces qu'on s'était donné au préalable.


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Ada

  [ADA95] grrr c koi cette erreur ?

 

Sujets relatifs
[ php ] que veut dire cette erreur ??C++ Builder 6: C quoi cette erreur à la con?
[PHP] Erreur de syntaxe a la conJava2 SDK 1.4.0 -> Erreur à chaque applet
[HTML - JS] Pkoi j'ai une erreur ??Quelqu'un pourrais me dire ou est mon erreur ????
Erreur SQL PHP, affreux !! C koi ???erreur de compil dans jbuilder7
oracle 8 sur debian, erreur : ORA-03113Méga pb avec VB!!! Erreur 429 incompréhensible!
Plus de sujets relatifs à : [ADA95] grrr c koi cette erreur ?


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR