Accueil        Lexique        Unités        Algorithmes        TUTORIEL        Groupe Facebook   

Sommaire Tutoriel

Lire ce qui est saisi au clavier

  1. Fonction Read et Readln
  2. Notions vues dans ce cours

  1. Fonctions Read et Readln

    Read et Readln sont les 2 seules fonctions existant en langage Pascal permettant de lire ce que l'utilisateur tape au clavier. Tout comme les fonctions Write et Writeln, ces fonctions sont polymorphes, ce qui signifie qu'elles peuvent contenir un nombre illimité de paramètres ayant différents types. Les paramètres de Read et Readln sont obligatoirement tous des variables de type SCALAIRE : ainsi les variables de type entiers, réels, booléens, char et string sont-ils acceptés... Ainsi que les types POINTER (type que nous n'avon pas évoqué mais qui sort du cadre de l'initiation au Pascal de ces premiers chapitres).

    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.
    
  2. 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

    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:


  3. Notions vues dans ce cours

    • Fonctions Read et Readlln
    • Dépassement de capacité
    • Bornes des types

Sommaire Tutoriel


Copyright © 2021 par Albatros Concept (Bruno Aubin)