Comment écrire à l'écran en Langage Pascal ?
- Ecrire du texte avec write et writeln
- Ecrire des nombres avec write et writeln
- Récaputilatif de ce cour
Pour indiquer un simple texte, on délimite, en Pascal, ce texte entre guillements simples '...'. Nous admetrons, pour des raisons de compatibilité que c'est le seul moyen de définit une chaine de caractère en Pascal, même si, avouons-le le double guillemet aurait été un choix plus judicieux.
La fonction Write écrit du texte en continue en décalant le curseur (point de position du texte à l'écran) à droite à chaque nouveau caractère écrit à l'écran. A la fin de l'affichage d'un texte, le curseur se trouvera à la droite du texte affiché.
Exemple
write('Bonjour, comment allez-vous ?');
L'exécution de cette fonction affichera :
Bonjour, comment allez-vous ?
Si vous répondez 'Je vais bien, merci', vous pouvez être tenté d'écrire le code suivant :
write('Bonjour, comment allez-vous ?');
write('Je vais bien, merci');
Le résultat à l'écran sera :
Bonjour, comment allez-vous ?Je vais bien, merci
Pourquoi ? Simplement parce que, comme notifié auparavant, le curseur se positionnera à la droite du texte affiché! Ce code est ainsi équivalent à
write('Bonjour, comment allez-vous ?Je vais bien, merci');
Pour écrire du texte avec saut de ligne, il existe une autre fonction qui est writeln. Cette fonction fait la même chose que write à part qu'elle renvoie le curseur au début de la ligne suivante après avoir affiché le texte. Ainsi, pour reprendre l'exemple précédent, il faudrait écrire :
writeln('Bonjour, comment allez-vous ?');
writeln('Je vais bien, merci');
Le programme Pascal complet à exécuter sera :
Program MonTexte
Begin
writeln('Bonjour, comment allez-vous ?');
writeln('Je vais bien, merci');
End.
Le petit truc de l'expert
Writeln équivaut à écrire un texte en ajoutant 2 caractères "invisibles" sous environnement MS-DOS ou CP-M, qui sont la descente du curseur d'une ligne chr(10) et le positionnement en début de ligne chr(13) (Appelé "CARRIER RETURN" ou CR). Sous Unix, chr(13) fait les 2 à la fois (descente d'une ligne et positionnement en début de ligne).Ainsi, le programme précédent est équivalent à :
Program MonTexte
Begin
write('Bonjour, comment allez-vous ?'+chr(10)+chr(13)+'Je vais bien, merci'+chr(10)+chr(13));
End.
Remarque : Nous verrons plus tard ce qu'est une fonction (tel chr()) et les codes ASCI pour les caractères..
Ecrire des guillemets simples
Avec write et writeln vous pouvez écrire n'importe quel caractère alphanumérique (a à z, A à Z, chiffres, et tout caractère), y compris le double guillemet. Le code suivant :
write('La bonne couleur est "Rouge"');
affichera
La bonne couleur est "Rouge"
Cependant, un problème survient pour l'affichage de guillemets simples. Si on écrit le code suivant :
write('La bonne couleur est 'Rouge'.');
Il y aura une erreur dans l'exécution du programme.Fort heureusement, il y a une solution à cela, qui est de doubler le guillemet simple. En écrivant le code suivant, vous obtiendrez la sortie souhaitée:
writeln('La bonne couleur est ''Rouge''.');
affichera :
La bonne couleur est 'Rouge'.
.
Le petit truc de l'expert
Un autre moyen d'afficher le guillement simple, moins simple à coder, est de réutiliser la fonction chr(), précédemment vue, avec le code 39 :
writeln('La bonne couleur est ' + chr(39) + 'Rouge' + chr(39) + '.');
Exercice
- Codez la fonction write pour afficher la phrase suivante :
.D'habitude, l'artiste arrive à l'heure
Texte trop long ?
La fonction write (et writeln) ne tient pas compte des limites de l'écran. Lorsque vous souhaitez afficher un texte dont la longueur dépasse les limites de l'écran en largeur, seuls les caractères de début s'afficheront. Dans d'autres langages de programmation, tel le BASIC, la fonction d'écriture (PRINT) tient compte de la largeur de l'écran et positionne la suite du texte à la ligne.Ainsi pour le code suivant
writeln('Bonjour, comment allez-vous ? Je vais bien, merci. La cigale ayant chanté tout l''été se trouva fort dépourvue quand la bise fut venue. Elle alla crier famine chez la fourmi sa voisine.');
L'exécution de cette fonction entrainera cet affichage :
Bonjour, comment allez-vous ? Je vais bien, merci. La cigale ayant chanté tout
.
... le reste de la phrase étant en dehors de l'écran (pour un écran de 80 caractères de large) il ne sera pas affiché. La résolution de ce problème sortant du cadre d'initiation de ce chapitre, nous ne nous y attarderons pas.
Attention : En langage pascal, vous ne pouvez pas couper en plusieurs lignes un texte entre guillemets à afficher avec la fonction write. En revanche, vous pouvez séparer la chaine en plusieurs sous-chaines avec des VIRGULES.. Ainsi le code précédent pourra s'écrire :
writeln('Bonjour, comment allez-vous ? Je vais bien, merci. ' ,
'La cigale ayant chanté tout l''été se trouva fort dépourvue ' ,
'quand la bise fut venue. ',
'Elle alla crier famine chez la fourmi sa voisine.');
sans que cela ne provoque d'erreurs. Rappelons que, suivant les compilateurs Pascal, la taille maximale de chaque ligne de code peut compter jusqu'à 255 caractères.
Formattage de texte
Avec la fonction write/writeln, vous pouvez vouloir que le texte ait une longueur minimale. Pour cela, il suffit d'ajouter un ":" suivit du nombre de caractères minimal souhaité. Si le nombre de caractères du texte est inférieur à ce nombre, il sera complété par des caractères ESPACES à gauche de l'affichage. Cet attribut permet par exemple, d'aligner du texte à droite. Si vous exécutez le code suivant:
writeln('Texte court':20);
writeln('Texte plus long':20);
writeln('Texte un peu plus long':20);
l'écran affichera
Texte court
Texte plus long
Texte un peu plus long
.
On voit que quand la taille du texte dépasse les 20 caractères, il déborde sur la droite comparé aux 2 textes précédents (car plus long que 20 caractères).
Qu'est ce que le code ASCII ? (Pour les initiés)
Le code ASCII est une norme internationale indiquant que chaque caractère (lettre majuscule ou minuscules de l'alphabet latin, chiffres, signes diverses tels +, -, *, /, ! £ etc) a un code ASCII le différenciant des autres. Il existe différents codes ASCII au niveau international, mais quelle que soit ce code ASCII, les caractères correspondant aux nombres compris entre 32 et 127 sont identiques :| Code | Caractère | Code | Caractère | Code | Caractère | Code | Caractère | Code | Caractère | Code | Caractère |
|---|---|---|---|---|---|---|---|---|---|---|---|
| 32 | 48 | 0 | 64 | @ | 80 | P | 96 | ` | 112 | p | |
| 33 | ! | 49 | 1 | 65 | A | 81 | Q | 97 | a | 113 | q |
| 34 | " | 50 | 2 | 66 | B | 82 | R | 98 | b | 114 | r |
| 35 | # | 51 | 3 | 67 | C | 83 | S | 99 | c | 115 | s |
| 36 | $ | 52 | 4 | 68 | D | 84 | T | 100 | d | 116 | t |
| 37 | % | 53 | 5 | 69 | E | 85 | U | 101 | e | 117 | u |
| 38 | & | 54 | 6 | 70 | F | 86 | V | 102 | f | 118 | v |
| 39 | ' | 55 | 7 | 71 | G | 87 | W | 103 | g | 119 | w |
| 40 | ( | 56 | 8 | 72 | H | 88 | X | 104 | h | 120 | x |
| 41 | ) | 57 | 9 | 73 | I | 89 | Y | 105 | i | 121 | y |
| 42 | * | 58 | : | 74 | J | 90 | Z | 106 | j | 122 | z |
| 43 | + | 59 | ; | 75 | K | 91 | [ | 107 | k | 123 | { |
| 44 | , | 60 | < | 76 | L | 92 | \ | 108 | l | 124 | | |
| 45 | - | 61 | = | 77 | M | 93 | ] | 109 | m | 125 | } |
| 46 | . | 62 | > | 78 | N | 94 | ^ | 110 | n | 126 | ~ |
| 47 | / | 63 | ? | 79 | O | 95 | _ | 111 | o | 127 | |
Ce code ASCII n'est évidemment pas utilisable pour les langues utilisant une autre graphie, un autre alphabet (chinois, thaïlandais, Japonais, Birman etc)... Pour cela, on utilise ce qu'on appelle l'UNICODE (ou UTF-16), mais cette notion sort du cadre de ce chapitre.
Exercice
- Ecrivez la fonction write en testant différents codes ASCII entre (32 et 127)
- Que se passe-t-il quand vous écrivez les fonctions :
- write(chr(8);
- write(chr(9);
- write(chr(10);
- write(chr(11);
(vous pouvez enchainer plusieur fois la même fonction)
- write(chr(8);
- write(chr(9);
- write(chr(10);
- write(chr(11);
Ecrire des nombres avec write et writeln
En dehors du texte, vous pouvez également afficher des nombres, définis en temps que Nombres. Si vous tapez le code suivant:
writeln('Je m''appelle Hubert et j''ai 28 ans');
writeln('Je m''appelle Hubert et j''ai ', 28 ,' ans');
L'écran affichera
Je m''appelle Hubert et j'ai 28 ans
Je m''appelle Hubert et j'ai 28 ans
.
Comme on le voit dans cet exemple, on peut séparer différentes valeurs (chacun ayant un type) avec des virgules, dans la fonction write (ou writeln)
Note: La fonction write est nettement plus simple d'emploi (et intuitive) qu'en langage C (et ses dérivés comme le PHP) qui, non seulement utilise différentes fonctions (putc, putl, putw etc) pour les opérations d'affichage mais, de plus, avec l'équivalent de "write" (printf) demande en plus de préciser le type de variable donnée dans une chaine de caractère, sur les variables données dans les paramètres de printf... Alors qu'en Pascal, chaque valeur (ou variable) a un type connu et défini une fois pour toute!
Affichage de nombres à virgules (réels)
Par défaut en langage Pascal (turbo Pascal), un nombre réel sera affiché en écriture scientifique avec 16 chiffres pour les décimaux et l'exposant en puissance de 10. Ceci est dû au fait que le langage Pascal a longtemps été le langage de programmation scientifique par excellence. La notation scientifique affiche le nombre avec une valeur incluse entre 0 et 10 (non inclus) et la puissance de 10 associée. Ainsi le code suivant
writeln('Affichage d''un nombre réel : ',1.5);
Affichera :
1.5000000000000000E+0000
.
Dans cet exemple, vous voyez que l'on écrit la virgule des nombres réels AVEC un POINT et ce, QUELLE QUE SOIT le langage de programmation que vous utilisez.Formatage de l'écriture de nombres
Pour changer la manière dont on affiche un nombre, on utilise un duo de paramètres à la suite, séparés par ":". Le premier paramètre, tout comme vu précédemment, indique le nombre minimal de caractères d'affichage du nombre (Si on indique 10 pour le nombre 32.45, il sera ajouté 5 espaces à la gauche du nombre). Le second nombre indique le nombre de chiffres après la virgule à afficher, et ce même pour un nombre entierAinsi, pour afficher le nombre PI avec 10 caractères minimum, dont 5 décimales, vous écrirez
writeln('Pi avec 5 chiffres après la virgule = ',Pi:10:5 );
L'exécution de ce code affichera :
3.14159
.
Note : : Pi est, ici, une CONSTANTE PREDEFINIE dans le langage Pascal. Le compilateur remplacera le mot "Pi" par le nombre à virgule correspondant.
Notions vues dans ce cours
- Fonctions write et writeln
- Texte entre guillements simple
- Ecrire des guillemets simples
- Utilisation de la fonction chr()
- Formatage de texte dans write
- Séparation des champs de write avec la virgule
- Notion de type
- Code ASCII
- Ecrire un nombre entier
- Nombres à virgule (réels)
- Ecriture scientifique
- Formattage de nombres à virgule (réel)