Tableau de record et de type énumé - Ada - Programmation
Marsh Posté le 05-12-2006 à 11:57:11
salut stupid_coder, ... tu peut nous dire ce que fait ton programme et comment, en français s'il te plais
apres je décode ton code ... si j'y parviens.
Marsh Posté le 05-12-2006 à 13:12:04
bonjour Jovalise,
dès que je fais le point sur le code, avec plus de clarté, je le poste avec des commentaires et de plus amples explications ce soir.
Merci.
Marsh Posté le 05-12-2006 à 13:38:23
Après d'eventuelles corrections ("mode_p" -> "mod_p" )
j'obtien le message suivant
|
je n'ai pas trouvé le component "test" dans le code.
Marsh Posté le 05-12-2006 à 14:36:01
j'ai du faire des changements de code en cours de route...
je te poste le dernier code, que j'ai refais, avec l'erreur donnée qui ressemble beaucoup à ce que tu cites.
Marsh Posté le 05-12-2006 à 14:45:24
Code :
|
Marsh Posté le 05-12-2006 à 17:15:06
Pour ta question "Suivant la classification des types, un type tableau peut il contenir un type énumaratif ?", la classification des types et la possibilité de construire des tableaux d'lement de type enumératif n'on pas de relation. Mais oui, on peut construire des tableaux d'élément de type énumératif.
Pour le problème de la ligne 73, tu as au moins 3 solutions.
la premiere c'est de reecrire la fonction get pour le type T_Rubrique comme tu veux.
la deuxieme c'est de saisir un entier correspondant à la position de la valeur du type.
la troisiemme, c'est de saisir une chaine de caractere representant le non de la veur du type, du faire un uper_case et de comparer cette chaine avec le non de la valeur du type T_Rubrique.
Si je ne me suis pas bien exprimé, d'abord, désolé, puis, je peut te montrer un exemple.
Marsh Posté le 05-12-2006 à 17:39:24
Code :
|
Par exemple de la solution 2
Marsh Posté le 05-12-2006 à 17:41:43
Jovalise,
Si je comprends bien, l'utilisation du type t_rUbrique n'est pas exploitable dans l'état actuel...
Actuellement le get ne prend en compte que les integer, float ou string en gros ?
Donc créer une fonction get qui prenne les types énumératif.
Marsh Posté le 05-12-2006 à 17:54:15
Et bien, si je ne me trompe pas, oui, je ne connais pas de librairie qui propose une fonction get pour le type T_Rubrique. Soit, on te la fournit, soit tu l'implémente. ... Il me semble que c'est ça.
Marsh Posté le 05-12-2006 à 18:01:48
Mais comme tu peux le voir, l'attribut Value qui s'appique à des types enumérés, renvoie la valeur qui porte le nom donné en parametre.
Marsh Posté le 05-12-2006 à 18:02:23
tout ce qui touche au type énumération est il compris dans ada.text_io ?
Marsh Posté le 05-12-2006 à 18:06:40
ReplyMarsh Posté le 05-12-2006 à 18:07:49
dis moi, je ne t'ai pas expliqué le rendu de ce programme; mais quand tu le compiles (en mettant en commentaire les 2 lignes incriminées), le résultat est explicite ?
Marsh Posté le 05-12-2006 à 18:15:18
Je pense que tu as bien ciblé ma demande en répondant autour de ce type énumératif bloquant dans le code.
Le fait est que l'on doit faire une sortie (get) sur un type énumératif, t_rubrique.
Code :
|
Si je comprends ton code, je peux mettre salaire, versement ou loisirs... dans ta chaine de caractère sans me soucier de la longueur (car variable la longueur...) tant qu'elle est inférieur ou égalé à 10 ?
Marsh Posté le 05-12-2006 à 18:20:27
Ok, j'avais pas fais attention,
Pourquoi le nom de T_NbLignes, ça veux dire quoi Nb
T_NbLignes je suppose, devrait s'appeler T_Ligne(s)_Comptable, ... un ligne est une ligne .. une chaine ... quelquonque, T_Ligne(s)_Comptable ... un ligne comptable et, T_NbLignes_Comptable devrait s'appeler T_Tab_Ligne(s)_Comptable.
Moi je ferais comme ça. Le (s) c'est soit tu parle de l'objet ... donc au singulié ... soit tu parle de l'ensemble des objet ... de la classe ... et c'est au pluriel. Mais c'est perso
Si non c'est bon... besoin d'autre chose ...
Marsh Posté le 05-12-2006 à 18:26:59
stupid_coder a écrit : Je pense que tu as bien ciblé ma demande en répondant autour de ce type énumératif bloquant dans le code.
|
Oui, tout à fait ... me semble t-il, à moins que j'ai oublié un détail.
Marsh Posté le 05-12-2006 à 18:32:23
pour etre exact, c'est ::=
Code :
|
Mais je sais plus, il faut que je teste
Voila j'ai testé et c'est faux, c'est bien "Tab_B.Rubrique := T_Rubrique'value(to_uper(Rubrique(1..last_char)));" qu'il faut ecrire.
Marsh Posté le 05-12-2006 à 18:35:02
Oui effectivement j'utilise "tab_..." pour un tableau et "T_..." pour un type en temps normal...
Ensuite je voulais faire simple sans faire attention à une quelconque formalisation, qui dit au passage est très très bien pour la lecture du code comme pour sa compréhension.
Le "Nb" et autres font référence aux consignes de l'exercice, bête et discipliné...
Marsh Posté le 05-12-2006 à 18:44:16
j'utilise Nbr comme abréviation de Nombre, c'est pour ça que je te demandais ça.
Si non, c'est bien "Tab_B.Rubrique := T_Rubrique'value(to_uper(Rubrique(1..last_char)));" et non pas "Tab_B.Rubrique := T_Rubrique'value(to_uper(Rubrique(1..last_char-1)));
Marsh Posté le 05-12-2006 à 18:48:25
stupid_coder a écrit : Oui effectivement j'utilise "tab_..." pour un tableau et "T_..." pour un type en temps normal... |
Parce qu'un "type 'tableau' is array () of ..... " c'est pas un type peut-etre ??
Marsh Posté le 05-12-2006 à 18:53:41
je sais je sais... il y a "type" et "type".
Le tableau est spécial pour moi.
Il est définit en temps que conteneur, regroupe des données, donc je lui attribue une place de choix dans le code, bien distinguer les types et... les types tableaux !
Marsh Posté le 05-12-2006 à 19:02:48
je risque de reposter après avoir fait un petit lifting au code, en fin de soirée...
bonne soirée...
Marsh Posté le 07-12-2006 à 20:29:47
Bonjour Jovalise,
J'ai fait le lifting comme prévu.
Cependant j'obtiens un "constraint_error explicit raise" durant l'execution du programme, je valide une valeur décimale ( Get(tab_b.Valeur); ) et après c'est le drame...
J'utilise la déclaration suivante :
Code :
|
Au passage j'aimerais connaitre le " OTHERS => Ascii.Nul" . Kesako ?
Ensuite, avant le begin je déclare les variables suivantes, elles ne changent pas je crois :
Code :
|
Je reprends ton appel get_line avec mes variables:
Code :
|
Pour finir, j'ai refais une partie de la dernière ligne car celle que tu proposais ne mentionnais pas le type "T_Nblignes_Comptable" représenté par "lignes_A "
Comme c'est un tableau indicé, nous avons :
Code :
|
Pas de problème de compilation mais un "CONSTRAINT_ERROR EXPLICIT RAISE" comme annoncé au début.
Je me trompe surement avec le type t_nblignes, qui est un record avec notre fameux type énumératif t_rubrique, et le str_rubrique qui est un string.
Je comprends pas toute la ligne T_Rubrique'Value(To_Upper(str_Rubrique(1..Last_Char))); :
str_Rubrique(1..Last_Char) valeur du get_line gardé en mémoire -ok
To_Upper on met en majuscule les caractères -ok
T_Rubrique'Value est la transformatioin d'un type string en type t_rubrique car rubrique est un string jusqu'ici...
Merci de tes réponses, je continue à bucher dessus...
Marsh Posté le 07-12-2006 à 23:18:36
stupid_coder a écrit : |
ben on affecte le caractere nul au reste des variable, comme on specifit pas de variable en particulier OTHERS represente toute les variables.
stupid_coder a écrit :
|
Tout ceci semble correct ... de memoire ...
stupid_coder a écrit : |
On affecte la valeur retourné par l'attribut 'Value auquel on donne la mise en majuscule de la valeur du tableau de caracteres str_Rubrique du premier au dernier caractere saisie au clavier ou ailleur à la variablr Rubrique numéro i du tableau Ligne_A.
stupid_coder a écrit : |
c'est pas la transformation, c'est une fonctionnalité Ada, une transformation serait ::=
Rubrique := t_rubrique(str_Rubrique(1..Last_Char))
C'est une conversion, mais Ada, n'accepte pas cette conversion.
l'attribut 'Value propose de prendre la representation source "graphique" accepté par le langage des valeur du type et de retourner la valeur correspondante du type de base du type de Rubrique.
Je regarde ce qui ne va pas exactement d'ici demain
Marsh Posté le 08-12-2006 à 09:13:49
Bonjour,
A priori, il suffit d'inserer un "Skip_Line" avant de faire le get de rubrique, et ça roule.
Marsh Posté le 08-12-2006 à 19:21:50
c'est bien ça !
Je reviendrais prendre quelques consils, tu est efficace Jovalise, merci encore !
Marsh Posté le 04-12-2006 à 22:11:22
Bonjour à tous,
J'ai déjà posté pour d'autres sujets en ada couronnés de succès, merci bien !
Cependant je découvre avec désarois un problème majeur dans mon exercice.
Suivant la classification des types, un type tableau peut il contenir un type énumaratif ?
Regardez le code suivant, les erreurs divers (type ou déclaration de variables) sont surements la source de mon soucis :
Au départ j'avais uniquement déclaré les variables nblignes_Compta et nblignes car nblignes_Compta est un tableau de nblignes.
Cependant nblignes est un record avec des types énumérés et là ça coince.
Donc j'ai pensé appeler le type article directement, je sais c'est pas le truc le plus malin que j'ai fait.
L'erreur que je retrouve est "invalid prefix in selected component"test"".
J'en déduis une erreur dans la déclaration de ma variable, je pense devoir directement utiliser des types t_nblignes dans un tableau t_nblignes_compta dans mes déclarations et rien d'autre.
A vous de juger et d'éliminer le maillon faible...
Merci de votre aide.