Mehdi Saada
2017-12-07 15:43:22 UTC
Je galère vraiment à tenter les exo seul, même avec les corrections. De fait, si je ne comprend pas où se trouvent les différences d'avec le corrigé, ça ne rime à rien.
Ici, j'ai un bout de programme qui:
ouvre un fichier texte, la lit dans un UNBOUNDED_STRING phrase par phrase, stocke la même chaîne filtrée (ne garde que les lettres, une fois accentuées et mises en petit) dans une autre chaine et dans une pile, caracère par caractère, puis compare les 2 pour savoir si c'est ou non un palindrome. J'y arrive pas seul, vous pourez sûrement m'aiguiller un peu...
Ceci:
Fich_In : File_Type;
Ligne : Unbounded_String; -- pour lire la phrase
Chaine : Unbounded_String; -- pour stocker la phrase filtrée
La_Pile : T_Pile (100); -- pour stocker aussi la phrase filtrée
PALINDROME : BOOLEAN := TRUE;
COMPARE: CHARACTER;
while not End_Of_File (Fich_In) loop
Ligne := Get_Line(Fich_In); -- lire une ligne
TRANSLATE(LIGNE, BASIC_MAP);
TRANSLATE(LIGNE, LOWER_CASE_MAP);
for Ind in 1..Length(Ligne) loop
if IS_BASIC(ELEMENT(LIGNE,IND)) then
APPEND(CHAINE, ELEMENT(LIGNE,IND));
EMPILER(LA_PILE, ELEMENT(LIGNE,IND));
end if;
end loop;
for IND in 1..LENGTH(CHAINE)/2 loop
DEPILER(LA_PILE, COMPARE);
if COMPARE /= ELEMENT(CHAINE,IND) then PALINDROME := FALSE; end if;
end loop;
PUT(HAUT_PILE(LA_PILE));
if PALINDROME then PUT_LINE('"' & LIGNE & '"' & " est un palindrome."); end if;
VIDER_PILE(LA_PILE);
end loop;
donne ce message d'erreur:
sraised TS_PILE.P_PILE.EXC_PILE_VIDE : D�piler
tandis que le fichier pile.in contient :
"Votre entête ici (ce ne sera pas un palindrome !)
Tu l'as trop écrasé, César, ce port salut.
Je suis en train de faire des tests
Noël à Lyon.
, ?? .
Laval"
Voilà... j'en ai passé du temps avant de me résoudre à demander ici, croyez-moi.
Ici, j'ai un bout de programme qui:
ouvre un fichier texte, la lit dans un UNBOUNDED_STRING phrase par phrase, stocke la même chaîne filtrée (ne garde que les lettres, une fois accentuées et mises en petit) dans une autre chaine et dans une pile, caracère par caractère, puis compare les 2 pour savoir si c'est ou non un palindrome. J'y arrive pas seul, vous pourez sûrement m'aiguiller un peu...
Ceci:
Fich_In : File_Type;
Ligne : Unbounded_String; -- pour lire la phrase
Chaine : Unbounded_String; -- pour stocker la phrase filtrée
La_Pile : T_Pile (100); -- pour stocker aussi la phrase filtrée
PALINDROME : BOOLEAN := TRUE;
COMPARE: CHARACTER;
while not End_Of_File (Fich_In) loop
Ligne := Get_Line(Fich_In); -- lire une ligne
TRANSLATE(LIGNE, BASIC_MAP);
TRANSLATE(LIGNE, LOWER_CASE_MAP);
for Ind in 1..Length(Ligne) loop
if IS_BASIC(ELEMENT(LIGNE,IND)) then
APPEND(CHAINE, ELEMENT(LIGNE,IND));
EMPILER(LA_PILE, ELEMENT(LIGNE,IND));
end if;
end loop;
for IND in 1..LENGTH(CHAINE)/2 loop
DEPILER(LA_PILE, COMPARE);
if COMPARE /= ELEMENT(CHAINE,IND) then PALINDROME := FALSE; end if;
end loop;
PUT(HAUT_PILE(LA_PILE));
if PALINDROME then PUT_LINE('"' & LIGNE & '"' & " est un palindrome."); end if;
VIDER_PILE(LA_PILE);
end loop;
donne ce message d'erreur:
sraised TS_PILE.P_PILE.EXC_PILE_VIDE : D�piler
tandis que le fichier pile.in contient :
"Votre entête ici (ce ne sera pas un palindrome !)
Tu l'as trop écrasé, César, ce port salut.
Je suis en train de faire des tests
Noël à Lyon.
, ?? .
Laval"
Voilà... j'en ai passé du temps avant de me résoudre à demander ici, croyez-moi.