Affichage sans "put"

Affichage sans "put" - Ada - Programmation

Marsh Posté le 20-12-2009 à 22:22:44    

Bonjour,
 
J'ai un tableau d'entiers en variable. Je dois afficher ce tableau à l'aide d'une procédure que je dois écrire dans un package, sans utiliser de put ni de put_line. Je sais que c'est possible car j'ai déjà vu un exemple.
Le problème c'est que je ne sais plus trop à quoi ça ressemble. Je me rappelle juste avoir vu un "Unbounded string" dans le code, qui ne faisait que quelques lignes pour afficher quelques caractères.
 
C'était une fonction qui retournait "je sais pas quoi" convertit en string. return(to_string(truc)) je crois.
 
Merci

Reply

Marsh Posté le 20-12-2009 à 22:22:44   

Reply

Marsh Posté le 20-12-2009 à 22:46:33    

Interfaces.C.Streams peut être ?

Reply

Marsh Posté le 20-12-2009 à 22:54:32    

peut-être ^^
 
Mais je débute, j'aurai besoin d'un exemple pour savoir si c'est ça. Et puis au pire, si c'est pas ça et que ça marche, tant mieux. L'idée c'est de faire un Put(Fonction(truc)) dans la procédure principale, sans faire d'entrée/sortie dans "Fonction".

Reply

Marsh Posté le 20-12-2009 à 23:10:15    

Ahlala, c'est pas du tout ce que tu veux dans le premier message.
 
Parce que là, tu fais bien "put", alors, une fonction qui fait Put(fonction(Truc_a_afficher));
C'est simplement une fonction :

Code :
  1. function (Truc : in T_Truc) return T_Truc_Qui_S_Affiche;


T_Truc, c'est n'importe quoi et T_Truc_Qui_S_Affiche c'est tout ce qui est affichable.
 

Reply

Marsh Posté le 20-12-2009 à 23:16:04    

Oui, j'ai eu l'impression d'(être plus clair dans mon second post :)  
 
Dans ce cas, comment faire pour enregistrer plusieurs variables dans T_Truc ? exemple :
"Tableau : 1,5,4,8,9,10
Nombre d'elements : 6"

Reply

Marsh Posté le 20-12-2009 à 23:23:03    

ghuighui a écrit :

Oui, j'ai eu l'impression d'(être plus clair dans mon second post :)  
 
Dans ce cas, comment faire pour enregistrer plusieurs variables dans T_Truc ? exemple :
"Tableau : 1,5,4,8,9,10
Nombre d'elements : 6"


 
Tu veux l'afficher ou l'enregistrer ?
 
 
Je pense que tu dois réécrire "put" pour afficher ou utiliser Ada.Stream.Stream_Io pour enregistrer.


Message édité par Profil supprimé le 20-12-2009 à 23:23:44
Reply

Marsh Posté le 20-12-2009 à 23:28:50    

Je veux l'enregistrer dans le "return" de la fonction, pour l'afficher ensuite dans la procédure principale grâce à put.

Reply

Marsh Posté le 20-12-2009 à 23:31:26    

ghuighui a écrit :

Je veux l'enregistrer dans le "return" de la fonction, pour l'afficher ensuite dans la procédure principale grâce à put.


 
tu peux pas !

Reply

Marsh Posté le 20-12-2009 à 23:36:26    

Je l'ai pourtant vu :p
Mais le code était spécial, c'était pas des affectations.
 

Citation :

L'idée c'est de faire un Put(Fonction(truc)) dans la procédure principale, sans faire d'entrée/sortie dans "Fonction".


Donc y'a pas moyen d'afficher le texte que je viens de montrer en procédant comme ça ? C'est le retour à la ligne qui dérange ?

Reply

Marsh Posté le 20-12-2009 à 23:37:40    

ghuighui a écrit :

Je l'ai pourtant vu :p
Mais le code était spécial, c'était pas des affectations.
 

Citation :

L'idée c'est de faire un Put(Fonction(truc)) dans la procédure principale, sans faire d'entrée/sortie dans "Fonction".


Donc y'a pas moyen d'afficher le texte que je viens de montrer en procédant comme ça ? C'est le retour à la ligne qui dérange ?


 
Woai ! C'est un type composé, et faut composer la procédure put qui va avec !

Message cité 1 fois
Message édité par Profil supprimé le 20-12-2009 à 23:37:51
Reply

Marsh Posté le 20-12-2009 à 23:37:40   

Reply

Marsh Posté le 20-12-2009 à 23:39:36    


 
D'ailleurs même pour le tableau, faut écrire une procédure ad'oc.


Message édité par Profil supprimé le 20-12-2009 à 23:39:50
Reply

Marsh Posté le 20-12-2009 à 23:44:45    

Bizarre. Je me rappelle du code, ça tenait sur 10 lignes, il n'y avait qu'une seule fonction. On retournait la variable après l'avoir convertit en string (fonction to_string je crois)

Reply

Marsh Posté le 20-12-2009 à 23:47:54    

ghuighui a écrit :

Bizarre. Je me rappelle du code, ça tenait sur 10 lignes, il n'y avait qu'une seule fonction. On retournait la variable après l'avoir convertit en string (fonction to_string je crois)


 
Ce que tu peux faire là, c'est :
 

Code :
  1. function Table_To_String(Table : in T_Table) return string is
  2.  Table_String : unbounded_String :=  To_Unbounded_String("Elements de la table ::= " );
  3. begin
  4.  if Table.Nb_Element < Table.Elements'first or
  5.     Table.Nb_Element > Table.Elements'length then
  6.       return "Nombre d'élément invalide";
  7.  end if;
  8.  for in in 1..Table.Nb_Element loop
  9.      Table_String := Table_String & To_Unbounded_String(integer'image(Table.Elements(I) & ", " ));
  10.  end loop;
  11.   return To_String(Table_String);
  12. end To_String;


Message édité par Profil supprimé le 20-12-2009 à 23:57:49
Reply

Marsh Posté le 20-12-2009 à 23:48:58    

Merci
 

Citation :

Table_String := Table_String & To_Unbounded_String(integer'image(Table.Elements(I) & ", " ));


Ca ressemblait à ça !
 
edit :
Je pourrais simplement savoir comment ajouter un New_line si c'est possible ? merci


Message édité par ghuighui le 21-12-2009 à 00:06:10
Reply

Marsh Posté le 21-12-2009 à 00:09:55    

Code :
  1. with Ada.Strings.Unbounded;
  2. use Ada.Strings.Unbounded;
  3. with Ada.Text_Io;
  4. use Ada.Text_Io;
  5. procedure Main is
  6.  
  7.   type T_Elements is array (Integer range <> ) of integer;
  8.  
  9.      type T_Table is
  10.         record
  11.            Nb_Element : Natural;
  12.            Elements : T_Elements(-1..3);
  13.         end record;
  14.  
  15.  
  16.      function Table_To_String(Table : in T_Table) return string is
  17.         Table_String : unbounded_String :=  To_Unbounded_String("Elements de la table ::= " );
  18.      begin
  19.         if Table.Nb_Element = 0 or
  20.           Table.Nb_Element > Table.Elements'length then
  21.            return "Nombre d'élément invalide";
  22.         end if;
  23.         for I in 1..Table.Nb_Element loop
  24.            Table_String := To_Unbounded_String(To_String(Table_String) & integer'image(Table.Elements(Table.Elements'first+I)) & ", " );
  25.         end loop;
  26.         return To_String(Table_String) & character'val(13);
  27.      end Table_To_String;
  28.  
  29.  
  30.      Table : T_Table := (2, (-1, 0, 1, 2, 3));
  31.  
  32.    begin
  33.       Put(Table_To_String(Table));
  34.    end Main;


Message édité par Profil supprimé le 21-12-2009 à 00:21:50
Reply

Marsh Posté le 21-12-2009 à 00:18:09    

Citation :

invalid operand types for operator "&"


Ca me met ça pour le "&" qui se trouve juste avant la virgule : ", "

Reply

Marsh Posté le 21-12-2009 à 00:19:43    

ghuighui a écrit :

Citation :

invalid operand types for operator "&"


Ca me met ça pour le "&" qui se trouve juste avant la virgule : ", "


 
J'ai fini de corriger.

Reply

Marsh Posté le 21-12-2009 à 00:21:32    

D'accord.
 
Sinon dernière question, à quoi sert ceci :
 & character'val(13);

Reply

Marsh Posté le 21-12-2009 à 00:23:21    

ghuighui a écrit :

D'accord.
 
Sinon dernière question, à quoi sert ceci :
 & character'val(13);


 
Pardon, j'avais oublié un truc, maintenant, c'est correct. A peu près.
 
Le charcater val 13 est le retour à la ligne, 10 ou 13, ça dépend des système d'exploitation.
 
Tu peus mettre Latin_1.asci.cr peut-être à la place.


Message édité par Profil supprimé le 21-12-2009 à 00:24:18
Reply

Marsh Posté le 21-12-2009 à 00:26:06    

D'accord merci :)

Reply

Marsh Posté le 21-12-2009 à 00:26:46    

ghuighui a écrit :

D'accord merci :)


De rien !  :hello:

Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

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