cerhu > comp.lang.* > comp.lang.ada

Mehdi Saada (04/12/2017, 02h21)
J'ai "ts_pile_2.adb:14:49: v
pour ceci:
while (not PILE_PLEINE) and ENCORE = 'y'|'Y' loop
begin
GET (N1);
EMPILER (N1);
PUT_LINE("encore ? y ou n'importe quoi pour d'autres");
GET (ENCORE);
exception
when others => exit;
end;
end loop;

J'utilise pas fréquemment des expressions comme-celle-là, mais ildevrait pas y avoir de problèmes ?
Niklas Holsti (04/12/2017, 09h28)
On 17-12-04 03:21 , Mehdi Saada wrote:
> J'ai "ts_pile_2.adb:14:49: v
> pour ceci:
> while (not PILE_PLEINE) and ENCORE = 'y'|'Y' loop


ENCORE in 'y' |'Y'
^^
[..]
Mehdi Saada (04/12/2017, 14h49)
ENCORE est un littéral character, lu avec GET dans la boucle.... et l'expression étant évalué dès la première itération, le character n'est pas encore affecté, d'où l'erreur... C'est cela ?
Mehdi Saada (04/12/2017, 14h55)
Je ne vois toujours pas: ENCORE est un littéral character affectédès le départ avec 'y'... la condition de boucle est mal écrite ? Quand je rajoute des parenhèses autour de "(not" et " Y' " il me dit qu'il y a une parenthèse de trop, ignorée. J'ai l'impression désagréable de louper une chose évidente...

CHARACTER := 'y';
begin
while (not PILE_PLEINE) and ENCORE = 'y'|'Y'
Mehdi Saada (05/12/2017, 16h17)
Désolé, mais je ne vois vraiment pas en quoi le schéma WHILEexpression LOOP sequence_of_statements END LOOP; n'est pas respecté ici.
gautier_niouzes (05/12/2017, 17h24)
Essaie: ... (ENCORE = 'y' or ENCORE = 'Y')
Le 'y'|'Y' est dénifi pour les aggrégats:
type Char_Set is array (Character) of Boolean;
yes : Char_Set := ('y'|'Y' => True, others => False);
ou les instructions case.
Le Pascal a des ensembles définis "à la volée": ENCORE in ['y'|'Y'].
En Ada il faut (sûrement pour une bonne raison...) définir un type comme Char_Set plus haut. Les intersections (and), unions (or) sont définis automatiquement.

Gautier
__________________________________________________ ___________
A free online game in Ada: [..]
Mehdi Saada (06/12/2017, 16h17)
D'accord, mais pourquoi l'opérateur "test d'inclusion" ne fonctionne pas ?
Manuel 4.5.2 39/3
type Suit is (Clubs, Diamonds, Hearts, Spades);
list membership test-> Card in Clubs | Spades
gautier_niouzes (07/12/2017, 08h46)
Le mercredi 6 décembre 2017 16:17:30 UTC+1, Mehdi Saada a écrit :
> D'accord, mais pourquoi l'opérateur "test d'inclusion" ne fonctionnepas ?
> Manuel 4.5.2 39/3
> type Suit is (Clubs, Diamonds, Hearts, Spades);
> list membership test-> Card in Clubs | Spades


P-ê que tu utilise une version d'avant Ada 2012 (ou un semi-vieux GNATqui nécessiterait l'option -gnat2012).
En passant merci, j'ai pu découvrir l'existence de ce test!

Ada 2005:
N not in 1 .. 10 -- range membership test
Today in Mon .. Fri -- range membership test
Today in Weekday -- subtype membership test (see 3.5.1)
Archive in Disk_Unit -- subtype membership test (see 3.8.1)
Tree.all in Addition'Class -- class membership test (see 3.9.1)

Ada 2012:
N not in 1 .. 10 -- range membership test
Today in Mon .. Fri -- range membership test
Today in Weekday -- subtype membership test (see 3.5.1)
Card in Clubs | Spades -- list membership test (see 3.5.1)
Archive in Disk_Unit -- subtype membership test (see 3.8.1)
Tree.all in Addition'Class -- class membership test (see 3.9.1)
Discussions similaires
loop dans loop Tableau dynamique

Appareil électrique qui semble manquer de puissance

Ne pas manquer le 25/05...

A ne pas manquer !!!


Fuseau horaire GMT +2. Il est actuellement 01h43. | Privacy Policy