Discussion:
missing "loop" qui ne semble pas manquer
(trop ancien pour répondre)
Mehdi Saada
2017-12-04 01:21:47 UTC
Permalink
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 il devrait pas y avoir de problèmes ?
Niklas Holsti
2017-12-04 08:28:28 UTC
Permalink
Post by Mehdi Saada
J'ai "ts_pile_2.adb:14:49: v
while (not PILE_PLEINE) and ENCORE = 'y'|'Y' loop
ENCORE in 'y' |'Y'
^^
Post by Mehdi Saada
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 il devrait pas y avoir de problèmes ?
--
Niklas Holsti
Tidorum Ltd
niklas holsti tidorum fi
. @ .
Mehdi Saada
2017-12-04 13:49:32 UTC
Permalink
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
2017-12-04 13:55:00 UTC
Permalink
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
2017-12-05 15:17:52 UTC
Permalink
Désolé, mais je ne vois vraiment pas en quoi le schéma WHILE expression LOOP sequence_of_statements END LOOP; n'est pas respecté ici.
g***@hotmail.com
2017-12-05 16:24:56 UTC
Permalink
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: http://pasta.phyrama.com/game.html
Mehdi Saada
2017-12-06 15:17:29 UTC
Permalink
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
g***@hotmail.com
2017-12-07 07:46:08 UTC
Permalink
Post by Mehdi Saada
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
P-ê que tu utilise une version d'avant Ada 2012 (ou un semi-vieux GNAT qui 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)

Continuer la lecture sur narkive:
Loading...