Boucle fantaisiste Turbo Pascal

Résolu/Fermé
dimi3 Messages postés 269 Date d'inscription mercredi 7 novembre 2007 Statut Membre Dernière intervention 1 avril 2011 - 24 févr. 2008 à 11:24
hamdiamor Messages postés 4 Date d'inscription samedi 19 avril 2008 Statut Membre Dernière intervention 25 avril 2008 - 25 avril 2008 à 17:44
Bonjour,
Voici mon petit programme en Turbo Pascal et les résultats que je ne comprends pas. Il consiste à faire rentrer 8 lettres d'alphabet puis de les afficher :

program mots ;

var
tirage : array[1..8] of char ;
ensemble : string ;
i : integer ;

begin
i := 1 ;
while i < 9 do
begin
writeln('Lettre ',i,' : ');
read(tirage[i]);
ensemble := ensemble + tirage[i];
i := i + 1 ;
end;
writeln('Les lettres sont : ',ensemble);
end.

-------------- résultat :

Je ne peux entrer que trois lettres puis le programme s'interrompt et affiche :

Lettre 1 :
a
Lettre 2 :
Lettre 3 :
Lettre 4 :
b
Lettre 5 :
Lettre 6
Lettre 7 :
c
Lettre 8 :
Les lettres sont : a
b
c

-------------------------

Comment s'explique le fait que la boucle n'est proposée que 3 fois plutôt que 8 ?
Comment s'explique le fait que la boucle ne s'exécute qu'une fois sur 3 ?

Je vous remercie de m'éclairer et bon dimanche.
A voir également:

12 réponses

kwaio Messages postés 3416 Date d'inscription mercredi 21 mars 2007 Statut Contributeur Dernière intervention 28 mars 2011 681
24 févr. 2008 à 11:30
ok j'ai résolu le pb :

1) ajouté "uses wincrt" après "program..."
2) change le type de la variable tirage en string (array[....] of char = string ^^)
3) changé la boucle en boucle for (c'est juste plus propre)
4) C'estc e qui a résolu le pb, étrangement :

write('Lettre ',i,' : ');
readln(tirage[i]);

au lieu de writeln()...read()...
Je sais c'est bizarre...
0
dimi3 Messages postés 269 Date d'inscription mercredi 7 novembre 2007 Statut Membre Dernière intervention 1 avril 2011 20
24 févr. 2008 à 11:34
Merci de votre rapide réponse.
Cette ligne me donne l'erreur suivante :

Error 15 : File not found (wincrt.tpu).
0
kwaio Messages postés 3416 Date d'inscription mercredi 21 mars 2007 Statut Contributeur Dernière intervention 28 mars 2011 681
24 févr. 2008 à 11:35
ca dépends du compilateur, oublies wincrt ^^

J'ai édité mon 1er message relisez le
0
Bonjour,

A vue de nez, cela ressemble a un probleme classique d'entree-sortie.
Je ne me souviens plus tres bien comment fonctionne Pascal mais je te suggere de remplacer read par readln.
Il s'agit de "manger" les caracteres sauts de ligne \n.

Sandrine

PS: et sous windows, ije crois qu'il y en a 2 (nouvelle ligne et fin de ligne)...
0
kwaio Messages postés 3416 Date d'inscription mercredi 21 mars 2007 Statut Contributeur Dernière intervention 28 mars 2011 681
24 févr. 2008 à 11:40
merci des précisions, en testant chez moi, j'ai bien résolu le pb en bidouillant les "ln" cf message 1
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
kwaio Messages postés 3416 Date d'inscription mercredi 21 mars 2007 Statut Contributeur Dernière intervention 28 mars 2011 681
24 févr. 2008 à 11:39
D'ailleurs, ta variable tirage, a moins d'etre réutilisée, ne sert à rien.
une simple variable char réutilisée à chaque itération aurait marché
0
dimi3 Messages postés 269 Date d'inscription mercredi 7 novembre 2007 Statut Membre Dernière intervention 1 avril 2011 20
24 févr. 2008 à 11:52
Merci,
Le script corrigé fonctionne en effet. Mais j'aimerais placer mes lettres dans un tableau. Dois-je me résigner à abandonner cette folie ?
0
kwaio Messages postés 3416 Date d'inscription mercredi 21 mars 2007 Statut Contributeur Dernière intervention 28 mars 2011 681
24 févr. 2008 à 12:02
Une chaine de caractère c'est un tableau. Ca comment à 1, mais en fait, dans chaine[0] il y a le nombre de caractères de la chaine...
Ca marche exactement pareil, tu peux remettre "array [1..8] of char;" si tu préfère.
0
dimi3 Messages postés 269 Date d'inscription mercredi 7 novembre 2007 Statut Membre Dernière intervention 1 avril 2011 20
24 févr. 2008 à 12:16
Je viens d'essayer d'afficher chacun des éléments de la chaîne et je m'aperçois en effet que la chaîne se comporte comme un tableau. Merci pour votre temps et votre patience.

Sur un autre post intitulé "clavier et éditeur Turbo Pascal 7" je posais la question de savoir comment faire entendre à l'éditeur de TP que j'utilise un clavier français. J'ai traficoté l'autoexec.bat mais rien n'y fait. Est-ce un nouveau rêve qui s'écroule ? :-)
0
kwaio Messages postés 3416 Date d'inscription mercredi 21 mars 2007 Statut Contributeur Dernière intervention 28 mars 2011 681
24 févr. 2008 à 13:07
comment ça ?
C'est quoi comme éditeur ?

Personnellement j'utilise une vielle version de Turbo pascal for windows trouvée en TP d'info ^^
0
dimi3 Messages postés 269 Date d'inscription mercredi 7 novembre 2007 Statut Membre Dernière intervention 1 avril 2011 20
24 févr. 2008 à 13:15
C'est l'éditeur intégré à Turbo Pascal 7.O téléchargé sur ce site.
On trouve à quelle adresse l'édition TP windows que vous utilisez ? Combien coûte-t-elle ?
0
kwaio Messages postés 3416 Date d'inscription mercredi 21 mars 2007 Statut Contributeur Dernière intervention 28 mars 2011 681
24 févr. 2008 à 14:20
Je ne l'ai trouvé nulle part sur le net.
Enfin, un ami me l'as mis sur son FTP, on l'a pompé sur les PC de l'école.
http://biomanred.free.fr/Turbo%20Pascal%20For%20Windows.zip

Attention c't'un vieux programme, mais il marche bien
(ne pas oublier "uses wincrt;" en deuxieme ligne du programme)
Attention² Ctrl-C & co ne marchent pas, les raccourcis sont différents
0
dimi3 Messages postés 269 Date d'inscription mercredi 7 novembre 2007 Statut Membre Dernière intervention 1 avril 2011 20
24 févr. 2008 à 15:42
Merci pour le temps que vous avez consacré à répondre à mes questions. Bon dimanche.
0
hamdiamor Messages postés 4 Date d'inscription samedi 19 avril 2008 Statut Membre Dernière intervention 25 avril 2008
25 avril 2008 à 07:46
salut, tu modifies juste read par readln, !! c'est une histoire!!

program mots ;
uses wincrt;
var
tirage : array[1..8] of char ;
ensemble : string ;
i : integer ;

begin
i := 1 ;
while i < 9 do
begin
writeln('Lettre ',i,' : ');
readLN(tirage[i]); {AU LIEU DE READ !!!!!!!!!!!!}
ensemble := ensemble + tirage[i];
i := i + 1 ;
end;
writeln('Les lettres sont : ',ensemble);
end.
0
kwaio Messages postés 3416 Date d'inscription mercredi 21 mars 2007 Statut Contributeur Dernière intervention 28 mars 2011 681
25 avril 2008 à 16:32
Mercid e lire la date.
Sujet résolu depuis 2 mois
0
hamdiamor Messages postés 4 Date d'inscription samedi 19 avril 2008 Statut Membre Dernière intervention 25 avril 2008
25 avril 2008 à 17:44
ahhhhhhhhhhhhhh!
je me réalise...
merci pour la réponse!
0