Lire ce qui est saisi au clavier
Exemple
Program saisies1;
Var
prenom:String[30];
age:byte;
Begin
Write('Quel est votre prénom ?');
Readln(prenom);
Write('Quel est votre âge ?');
Readln(age);
Write('Bienvenue ',prenom,'. Vous avez ',age,' ans');
readln;
END.
Ce programme demande votre prénom (30 caractères maximum), votre âge et affichera le texte indiqué avec les paramètres donnés.
Commentaires sur Read et Readln
- Pour entrer les valeurs au clavier, vous devez valider la saisie par la touche Entree.
- Si vous avez entré Read; ou Readln; sans paramètre, la saisie seul de latouche Entrée continuera le programme
- Readln fait la même chose que Read à part qu'elle positionne le curseur en début de ligne suivante, une fois la fonction terminée.
- Attention : les valeurs que vous saisissez doivent être compatibles avec le type de valeur attendu sous peine d'erreur de programme! Si vous saisissez des lettres pour la variable age qui est de type Byte (entier compris entre 0 et 255), le programme Pascal affichera une erreur. De même, si vous saisissez 5428 (type word) ou 2.546 (Type real), le programme pascal indiquera une incompatibilité de type. Une erreur sera également affichée si vous saisissez un nombre à virgule quand un entier est attendu. En cas d'erreur, ajouter un traitement d'erreur ou appeler la fonction système de traitement d'erreur.
Read et Readln peuvent lire plusieurs paramètres (fonction polymorphique) comme nous l'avons vu précédemment. Ainsi le programme prédédent aurait-il pu être écrit ainsi:
Program saisies1;
Var
prenom:String[30];
age:byte;
Begin
Write('Saisissez votre prénom et votre âge...');
Readln(prenom,age);
Write('Bienvenue ',prenom,'. Vous avez ',age,' ans');
readln;
END.
Autre exemple (programme complet)
Var
a,b : word;
Begin
Write ('Saisissez a et b :');
Readln(a,b);
writeln ('Somme de ',a,' et ',b,' = ',a+b);
writeln ('Différence entre ',a,' et ',b,' = ',a-b);
writeln ('Produit de ',a,' et ',b,' = ',a*b);
writeln ('Division entière entre ',a,' et ',b,' = ',a div b);
writeln ('Reste de division entière entre ',a,' et ',b,' = ',a mod b);
end.
Ce programme contient un ensemble exhaustif des notions en Pascal vues jusqu'à présent.Il vous demande de saisir 2 entiers de type word (Entier naturels compris entre 0 et 65535) et effectue diverses calculs (sur entiers) entre ces 2 variables.
Contrairement aux résultats sur des valeurs (comme on l'a vu dans le chapitre sur les calculs), dans lesquel le langage Pascal effectue les conversions de type si nécessaire pour le résultat d'opérations (Real pour la division sur 2 entiers), sur des variables, pour les calculs d'entiers, le résultat sera le type commun aux 2 variables : voir ette page du site internet vous indique de quel type sera le résultat d'opérations en fonction du type entier des 2 opérandes. Pour ce qui est des réels, les résultats des opérations sont toujours convertis en Real ou Extended.
Ainsi pour le programme précédent, si le résultat de la multiplication est inférieure à 65536, cela affichera le bon résultat. En revanche, si vous saisissez "1000" et "100", le résultat affiché de la multiplication, au cas où les options de compilation ne vérifient pas les dépassements de capacité, ne sera pas 100000 mais (100000-65536)! Si dans les options de compilation vous forcez la vérification de dépassement de capacité (Nécessaire en phase de développement d'un logiciel), vous aurez un message d'erreur. Pour éviter cela, nous allons "convertir à la volée" le type d'une des variables en LongInt avec la fonction LongInt().
writeln ('Produit de ',a,' et ',b,' = ', a * LongInt(b));
De même, en choisissant 100 (pour a) et 1000 (pour b), il y aura une erreur d'exécution du programme pour la soustraction. En effet, les 2 variables sont de type Entier Naturel et qu'en cas de différence entre 2 entiers dont le résultat serait négatif, si les options de compilations sont strictes, on aura une erreur. POur résoudre cela, ilfaut remplacer la ligne de soustraction par :
writeln ('Différence entre ',a,' et ',b,' = ', a - LongInt(b));
De tout ceci, il convient de respecter certaines règles dans le choix des types:
- Choisir le type le plus large possible pour une variable résultat (LongInt pour les entiers et Double pour les types réel). En règle global, une variable résultat doit avoir le double d'octets comparé aux variables opérandes.
- Limiter le plus possible les bornes des opérandes (en choisissant le type adéquat).
- Activer l'option de compilation "Overflow checking" (dépassement de capacité) dans le programme pour éviter des résultats faux
- TOUJOURS FAIRE UNE ÉTUDES DES BORNES DES VARIABLES ET DES OPÉRATIONS SUR CES VARIABLES
Notions vues dans ce cours
- Fonctions Read et Readlln
- Dépassement de capacité
- Bornes des types