Packages et liste générique

Packages et liste générique - Ada - Programmation

Marsh Posté le 28-04-2006 à 19:15:54    

salut tout le monde, j'ai (de nouveau) un pti probleme avec une approche différente d'un projet sur lequel vous m'aviez déja bien éclairé...
 
voila le topo :
 
J'ai un package listegen qui regroupe les fonctions sur les listes, et qui commence avec les parametres de généricité suivants:
 

Code :
  1. generic
  2. type TElement is private;
  3. with procedure écrire (x : in TElement);
  4. with procedure lire (x : out TElement);
  5. neutre : telement;
  6. with function egal (x,y : in TElement) return boolean;
  7. package PlistGen is
  8. ..........


 
et 2 autres packages : Pmot et Pphrase
 

Code :
  1. with plistgen;
  2. with text_io; use text_io;
  3. package pmot is
  4. type tmot is private;
  5. procedure saisie_mot (mot: out tmot);
  6. procedure affiche_mot (mot: in tmot);
  7. function mots_egaux (mot1, mot2 : tmot) return boolean;
  8. private
  9. package PListeCar is new Plistgen (character, put, get, ' ',"=" );
  10. use plistecar;
  11. type tmot is new Plistecar.tptrcellule;
  12. end;


 

Code :
  1. with plistgen;
  2. with pmot; use Pmot;
  3. with text_io; use text_io;
  4. package Pphrase is
  5. type tphrase is private;
  6. procedure saisie_phrase (phrase: out tphrase);
  7. procedure affiche_phrase (phrase: in tphrase);
  8. private
  9. package PListeMot is new Plistgen (tmot, affiche_mot, saisie_mot, <<<<<MOT NUL!!!>>>>> ,mots_egaux);
  10. use plisteMot;
  11. type tphrase is new PlisteMot.tptrcellule;
  12. end;


 
mon problème : déclarer une variable de type Tmot qui ne contiendrait qu'un point '.' pour coller au parametre de généricité "Neutre"

Reply

Marsh Posté le 28-04-2006 à 19:15:54   

Reply

Marsh Posté le 28-04-2006 à 20:02:53    

Bonjour tris,
 
je suis pas très fort en info mais :
 
Ne pourais-tu pas declarer
 
 mot_neutre : tmot; dans ton paquetage "pmot"
initialiser mot_neutre à '.'
faire un preelaborate
 
mais je parle de queleque chose que je connais pas en fait.... faut que je test

Reply

Marsh Posté le 28-04-2006 à 20:20:23    

Non, on peut pas, et une fonction qui retourne mot_neutre ?,
t'aurais pas le reste du code de plistgen ?

Reply

Marsh Posté le 29-04-2006 à 00:32:33    

j'ai essayé les 2 mais on ne peut pas déclarer mot_neutre : tmot; dans pmot ou alors je l'ai mis aux mauvais endroits...
J'ai essayé une procédure mais la pareil il faudrai exécuter cette procédure qui rendrait mot_neutre dans pmot, et je ne vois pas comment faire ....
 
Je pense qu'on peut le déclarer directement mais qu'il faut le mettre au bon endroit ... pour le package pmot, le probleme ne se posait pas car le caractère neutre es l'espace qui s'inscrit directement dans l'intanciation ' '
 
Pour le reste de plistgen il est dans ce post:http://forum.hardware.fr/hardwaref [...] 6642-1.htm
(c'est le même avec en plus les parametres de généricité précisés en haut)


Message édité par tris le 29-04-2006 à 00:35:58
Reply

Marsh Posté le 29-04-2006 à 07:15:26    

une fonction mot_neutre return tmot dans pmot + elaborate_body(pmot) dans pmot.ads, ça c'est possible !

Reply

Marsh Posté le 29-04-2006 à 07:42:41    

du code
 

Code :
  1. package body Pmot is
  2.   Neutre : Tmot
  3.   function Mot_Neutre return TMot is
  4.   begin
  5.      return Neutre;
  6.   end;
  7.  
  8. begin
  9.   Init_Liste(Neutre);
  10.   Insere_Apres(Neutre,'.');
  11. end Pmot;

Reply

Marsh Posté le 29-04-2006 à 11:05:12    

qu'est ce que tu entends par "elaborate_body(pmot)" ?
 
et pourquoi la fonction mot_neutre est en 2 fois ? je veux dire  
 
begin
return
end
 
puis de nouveau  
begin
les instructions
end

Reply

Marsh Posté le 29-04-2006 à 11:31:38    

Sorry,
 

Code :
  1. package body Pmot is
  2.   Neutre : Tmot
  3.   function Mot_Neutre return TMot is
  4.   begin
  5.      return Neutre;
  6.   end mot_neutre;
  7.  
  8. begin  -- début de la partie executive du corp de paquetage Pmot;
  9.   Init_Liste(Neutre);                --  C'est deux instructions son executer lors de l'elaboration de Pmot
  10.   Insere_Apres(Neutre,'.');     --  
  11. end Pmot; -- fin de la partie executive du corp du paquetage Pmot;


 
pragma elaborate_body  -- incapable de te traduire pragma mais
 

Citation :


elaborate_body [(nom_unité_de_bibliothèque)];
 
Il s'agit d'un pragma d'unité de bibliothèque. Spécifie que le corps de l'unité doit ètre
élaboré immédiatement aprés sa declaration  


 
Le corps de Pmot sera elaboré avant l'alaboration de la specification de Pphrase.
De cette maniere, dans mon exemple, mot_neutre retournera neutre initialisé et contenant 1 element => '.'
je crois.
 

Citation :


Il est quelquefois nécessaire de fournir une information supplémentaire au compilateur. Cette information ne fait pas partie du programme en tant que tel ; C'est plutôt une indication utile. On peut réaliser cela grâce a une construction appelée pragma.

Reply

Marsh Posté le 29-04-2006 à 11:48:35    

oula trop compliqué pour moi ça ^^
 
j'ai essayé ça :
 
dans pmot.adb

Code :
  1. function mot_neutre return Tmot is
  2. neutre:tmot;
  3. begin
  4. init_liste(neutre);
  5. insere_apres(neutre,'.');
  6. return Neutre;
  7. end;


 
je l'ai déclarée dans pmot.ads
 
et dans pphrase.ads
 

Code :
  1. private
  2. package PListeMot is new Plistgen (tmot, affiche_mot, saisie_mot,mot_neutre, mots_egaux);


ça compile ... on verra si ça marche  
 
sinon je savais pas qu'on pouvait créer des fonctions sans parametres en entrée

Reply

Marsh Posté le 29-04-2006 à 11:53:52    

Marchera pas, neutre n'est visible que pour mot_neutre, a la fin de mot_neutre neutre n'existera plus, sorry.
 
je crois que t'as pas trop de choix,  :heink:  

Reply

Marsh Posté le 29-04-2006 à 11:53:52   

Reply

Marsh Posté le 29-04-2006 à 12:01:58    

Citation :


oula trop compliqué pour moi ça ^^  


 [:bubblelover]  [:aless]  [:kernel-panic]  [:aldiallo]  :hello:  :lol:  :jap:  I :love: Ada

Reply

Marsh Posté le 29-04-2006 à 12:05:03    

c'est la fonction que j'apelle pas la variable

Reply

Marsh Posté le 29-04-2006 à 12:09:30    

Sorry,

Citation :


Marchera pas, neutre n'est visible que pour mot_neutre, a la fin de mot_neutre neutre n'existera plus, sorry.


 
Si ça marche je t'envoie une bouteille de champagne ! 2 même !
Si ça marche pas mon code est gratis !

Reply

Marsh Posté le 29-04-2006 à 12:27:37    

ça marche ^^ mais c autre chose qui marhce pas maintenant...
dans le plistgen la fct insere apres ... mais le programme se lance sans pb !

Reply

Marsh Posté le 29-04-2006 à 21:03:37    

bon ça marche presque, la saisie ne s'arrete pas au point. je pense que le mot neutre constitué n'est pas reconnu.

Reply

Marsh Posté le 04-05-2006 à 19:29:37    

Quelqu'un a une idée ?

Reply

Marsh Posté le 04-05-2006 à 19:56:19    

Bonjour Tris, t'a essayé ma soluce ?  :jap:  
j'espere que oui  :sol:

Reply

Marsh Posté le 04-05-2006 à 20:05:28    

Salut !
si tu parles du elaborate....... non sinon le code c'est celui la que j'ai depuis le début.
je n'ai pas appris ce genre de trucs, je n'ai donc pas à l'utiliser.

Reply

Marsh Posté le 04-05-2006 à 20:10:46    

Alors, je vais essayer de me casser la tête pour trouver autre chose, merci de ta reponse !
A+

Reply

Marsh Posté le 04-05-2006 à 20:16:46    

je précise la saisie de mots fonctionne bien, et s'arrete bien à ' ' (l'espace) , la fonction de saisie générique n'est donc pas en cause

Reply

Marsh Posté le 04-05-2006 à 20:19:34    

C'est bien la porté du mot neutre le problème ? n'est-ce pas ? As-tu essayé la même chose sans le preelaborate ?


Message édité par Profil supprimé le 04-05-2006 à 20:46:11
Reply

Marsh Posté le 04-05-2006 à 21:06:50    

c'est le repère qui termine une phrase qui doit poser probleme, car la saisie d'une phrase ne s'arrete pas.

Reply

Marsh Posté le 04-05-2006 à 21:18:22    

Un '.'
Est-ce que tu peut poster les corps de paquetage et ton main courant, je voudrais tester le programme dans son ensemble
 
Sans le preelaborate, j'ai peur que ma solution soit incomplete, sait-on jamais !
 
A par ça, je trouve pas, à moins de faire tout à fait differement !
 
Peut-etre en creant un autre paquetage Mot_Neutre mais je voudrais les corps de paquetage pour compiler l'ensemble !

Reply

Marsh Posté le 05-05-2006 à 04:27:32    

je vais t'envoyer le projet entier par mail ce sera plus simple ^^ ya tellement de fichiers

Reply

Marsh Posté le 05-05-2006 à 18:01:44    

:??:  Pas simple, le probleme,
           La solution l'est peut-être d'avantage !
 
up !
 
Edit : Petit erreur d'analise en vue !
 
Edit : Quelle sont tes contrainte de developpement ?


Message édité par Profil supprimé le 05-05-2006 à 18:05:54
Reply

Marsh Posté le 06-05-2006 à 17:31:22    

quelle erreur d'analyse ?
les fonctions sont imposées, les parametres de généricité de plisgen aussi. faut juste trouver un moyen d'exprimer un mot - point...
enfin exécute le tu verras où ça coince.
La structure en paquetages est imposée ainsi que les fonctons qu'ils doivent contenir. J'ai presque juste fait les corps des fonctions et rempli les parametres génériques.

Reply

Marsh Posté le 06-05-2006 à 18:27:00    

Moi je tourne en rond  [:aganemnon], je trouve pas  [:dawa_neowen]

Reply

Marsh Posté le 06-05-2006 à 18:33:54    

T'es sure qu'il n'y a qu'un seul paquetage de liste generique,
 
Il faudrait un paquetage de liste de liste
 
ou alors il faut passer le 'Mot neutre' a P_phrase et implementer Phrase, et non pas faire un simple appel a plistgen
 
Bref, je trouve pas, je fait le truc à ma sauce !  :sol:

Reply

Marsh Posté le 06-05-2006 à 18:41:10    

Pour les mot le paquetage ton paquetage plistgen, tel que je le connais, pas de problème !
 
Pour les phrase, tu fais des truc comme, comparer des pointeurs, afficher des pointeurs, saisir des pointeurs est-ce que tu saisis l'embrouille ?


Message édité par Profil supprimé le 06-05-2006 à 18:42:10
Reply

Marsh Posté le 06-05-2006 à 18:51:19    

Fait peter le sujet si tu veux, parce que je m'en sort pas !

Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

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