Boucle fantaisiste Turbo Pascal

[Résolu/Fermé]
Signaler
Messages postés
269
Date d'inscription
mercredi 7 novembre 2007
Statut
Membre
Dernière intervention
1 avril 2011
-
Messages postés
4
Date d'inscription
samedi 19 avril 2008
Statut
Membre
Dernière intervention
25 avril 2008
-
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.

12 réponses

Messages postés
3415
Date d'inscription
mercredi 21 mars 2007
Statut
Contributeur
Dernière intervention
28 mars 2011
674
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...
Messages postés
269
Date d'inscription
mercredi 7 novembre 2007
Statut
Membre
Dernière intervention
1 avril 2011
20
Merci de votre rapide réponse.
Cette ligne me donne l'erreur suivante :

Error 15 : File not found (wincrt.tpu).
Messages postés
3415
Date d'inscription
mercredi 21 mars 2007
Statut
Contributeur
Dernière intervention
28 mars 2011
674
ca dépends du compilateur, oublies wincrt ^^

J'ai édité mon 1er message relisez le
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)...
Messages postés
3415
Date d'inscription
mercredi 21 mars 2007
Statut
Contributeur
Dernière intervention
28 mars 2011
674
merci des précisions, en testant chez moi, j'ai bien résolu le pb en bidouillant les "ln" cf message 1
Messages postés
3415
Date d'inscription
mercredi 21 mars 2007
Statut
Contributeur
Dernière intervention
28 mars 2011
674
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é
Messages postés
269
Date d'inscription
mercredi 7 novembre 2007
Statut
Membre
Dernière intervention
1 avril 2011
20
Merci,
Le script corrigé fonctionne en effet. Mais j'aimerais placer mes lettres dans un tableau. Dois-je me résigner à abandonner cette folie ?
Messages postés
3415
Date d'inscription
mercredi 21 mars 2007
Statut
Contributeur
Dernière intervention
28 mars 2011
674
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.
Messages postés
269
Date d'inscription
mercredi 7 novembre 2007
Statut
Membre
Dernière intervention
1 avril 2011
20
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 ? :-)
Messages postés
3415
Date d'inscription
mercredi 21 mars 2007
Statut
Contributeur
Dernière intervention
28 mars 2011
674
comment ça ?
C'est quoi comme éditeur ?

Personnellement j'utilise une vielle version de Turbo pascal for windows trouvée en TP d'info ^^
Messages postés
269
Date d'inscription
mercredi 7 novembre 2007
Statut
Membre
Dernière intervention
1 avril 2011
20
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 ?
Messages postés
3415
Date d'inscription
mercredi 21 mars 2007
Statut
Contributeur
Dernière intervention
28 mars 2011
674
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
Messages postés
269
Date d'inscription
mercredi 7 novembre 2007
Statut
Membre
Dernière intervention
1 avril 2011
20
Merci pour le temps que vous avez consacré à répondre à mes questions. Bon dimanche.
Messages postés
4
Date d'inscription
samedi 19 avril 2008
Statut
Membre
Dernière intervention
25 avril 2008

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.
Messages postés
3415
Date d'inscription
mercredi 21 mars 2007
Statut
Contributeur
Dernière intervention
28 mars 2011
674
Mercid e lire la date.
Sujet résolu depuis 2 mois
Messages postés
4
Date d'inscription
samedi 19 avril 2008
Statut
Membre
Dernière intervention
25 avril 2008

ahhhhhhhhhhhhhh!
je me réalise...
merci pour la réponse!