Expérimentation sur la machine de Turing  Concepts de base

Partie 2. 

Programmation PASCAL

 

COURS 5 : Présentation générale du langage Pascal

COURS 6: Entrées/Sorties Pascal

TRAVAUX DIRIGES

 

 

                                            Partie 2.

                                    Programmation PASCAL

 

COURS 5 : Présentation générale du langage Pascal  Menu Programmation Pascal

 

Objectifs : Introduire un minimum de concepts PASCAL pour commencer à programmer.

5.1 Vocabulaire

C’est l’ensemble

- des identificateurs ( noms de variables et constantes )

- des mots clés (BEGIN, WHILE, ..)

- des séparateurs

- des opérateurs,

- des chaînes de caractères....

5.2 Objets

Les objets sont répartis en deux classes : les constantes et les variables. Les objets peuvent être de types

    Entier         INTEGER
    Réel          REAL
    Caractère CHAR
    Booleen    BOOLEAN

Les constantes sont définies par

    Const idf = valeur

Les variables sont définies par

    Var idf1, idf2,.... : type

5.3 Expressions

Les expressions peuvent être arithmétique (+, -, *, /, Div, ...) , logique (Not, And, OR,...) ou relationnelle (<, <=, >, >=, <>, ...)

5.4 Instructions

Une instruction PASCAL peut être simple ou composée.

Dans ce qui suit, Inst désigne une instruction simple ou composée, V une variable et Exp une expression.

Instructions simples

    Affectation          :     v := Exp
    Boucle While     :     While exp do inst
    Boucle For         :      For v = exp1 to exp2 do inst
                                 For v =exp1 Downto exp2 do inst

    Conditionnelle    :    If cond Then inst
    Alternative         :     If cond Then inst else inst

    Lecture               :     read(v)
    Ecriture               :     write (exp)

Instruction composée

    Begin inst1; inst2; .....instn End

Exemples

Affectation : A := (A + B) / C

Boucle While : While X > 5 DO X := X + 5

        While X + Y >= 1000 do

                Begin

                    X := x+ 10

                    Y := y –2

                End

Conditionnelle    : IF a > B then read(X, Y)

Alternative         : If x<Y then write(x) else write(y)

Lecture               : READ(x, y)

Ecriture              : WRITE(‘Résultat = ‘, Res)

5.5 Structure d'un programme

Un programme PASCAL a la forme suivante :

    Program nom;
        définition des constantes Const ....
        définition des variables Var ....
    Begin
        Corps du programme
    End.

5.6 Exemples

Reprenons nos algorithmes et donnons les programmes PASCAL correspondants :

Equation du second degré

    PROGRAM Equation ;
    VAR A, B, C, DELTA : REAL ;
    BEGIN
        READ ( A, B, C) ;
        Delta := B**2 - 4*A*C
        IF Delta > 0
        THEN
            BEGIN
                WRITE( 'Première racine : ', -B + RAC(Delta) / 4* A*C ;
                WRITE( 'Deuxième racine : ', -B - Racine(Delta) / 4 *A*C
            END
        ELSE
            IF Delta = 0
            THEN WRITE ('Une racine double :', -B / ( 2*A) )
            ELSE
                WRITE('Pas de racine réelle')
    END.

Racine cubique

    PROGRAM Racine_cubique ;
    VAR
        A, X0, Mu, Ancien, Nouveau, Difference : REAL
    BEGIN
        READ(A, X0, Mu)
        Ancien := X0
        Nouveau := ( 2 Ancien + A/(Ancien)2 ) / 3
        Difference := ABS (Nouveau - Ancien)
        WHILE Difference < Mu DO
            BEGIN
                Ancien := Nouveau ;
                Nouveau := ( 2 Ancien + A/(Ancien)2 ) / 3 ;
                Difference := valeur absolue de (Nouveau - Ancien)
            END ;
        WRITE(Nouveau)
    END.

COURS 6: Entrées/Sorties Pascal  Menu Programmation Pascal

Objectifs : fournir les outils PASCAL pour, d’une part, introduire les données de l’écran et restituer les résultats sur écran et d’autre part pour imprimer des tableaux ou tout autre dessin. Introduire également le concept de fichier TEXT.

6. 1 Lecture

Toute introduction de données se fait par l’ordre

    Read[ln] ( V1, V2, ...Vn)

o� Vi est une variable de type INTEGER, REAL ou CHAR.

[ ] désigne une partie facultative.

Cette instruction provoque la lecture de n données à partir de l ‘écran. Pour les nombres, les données sont séparées par des blancs. Pour les caractères, le lecture se fait toujours caractère/caractère.

Si l’option ‘ln’ est présente il y a positionnement sur la ligne suivante après lecture des données.

6.2 Ecriture

    Write[ln] (P1, P2, ....., Pn)

P1, P2, …sont des expressions suivies éventuellement du mode d’écriture.

On peut avoir les 3 formes :

- E

- E : E1

- R : E1 : E2

avec E, E1, E2, R des expressions.

E : expression de type INTEGER, REAL, CHAR, BOOLEAN.

R : expression de type REAL.

E1, E2 de type INTEGER indique une largeur de champ ( E1 : nombre total de e de caractères de la valeur écrite, E2 : nombre de chiffres après le point décimal)

Première forme : E

Si E1 n'est pas spécifiée une valeur ( pour E1 ) par défaut est assurée dépendant du type c'est à dire :

CHAR : 1

INTEGER : 11

BOOLEAN : 8

REAL : 20

Ces valeurs peuvent changer selon la version PASCAL considérée.

Deuxième forme : E : E1

E1 désigne le nombre total de caractères à écrire. Si E1 ne suffit pas, le nombre ne sera pas tronqué sinon cadré à gauche par des blancs. Si E est réelle, le nombre est écrit en virgule flottante.

Troisième forme : R : E1 : E2

La partie fractionnaire de R doit comporter E2 caractères. Le nombre est écrit en format virgule fixe sans exposant.

6.3 Exemples

    PROGRAM Exemples ;
    Const Tab = 5;
    Var I, I1; I2 : integer
    R1 : real
    B : boolean

    Begin
        B := true ;
        I1 := -3 ;
        R1 := 4.5
        I2 := 6 ;
        Writeln(' Exemple de sortie');
        writeln; % saut de ligne %
        writeln(' ':Tab, 'I1=',I1:I2,'R1=',R1:13);
        Writeln((I1:2, I1, 'B=', B : 3 )
        Writeln( R1:8, R1:4:1)
    End.


Ce programme donne en sortie :

Ligne i Exemple de sortie

Ligne i+1

Ligne i+2 BBBBBI1=BBBB-3R1=B4.500000E+00

-3BBBBBBBBB-3B=BBT

B4.5E+00B4.5

6.4 Les fichiers TEXT

Au lieu de lire les données à partir de l’écran, ce qui peut être fastidieux lors de la mise au point des programmes, il est préférable et même très avantageux de lire les données à partir d’un fichier TEXT construit préalablement par un éditeur de texte.

La déclaration d’un tel fichier se fait comme suit :

    VAR Fe : TEXT ;

O� Fe désigne le nom logique du fichier.

Tout fichier déclaré de la sorte doit être lié à un fichier physique. Ce lien est établi gr�ce à l’instruction ASSIGN définie comme suit :

    ASSIGN( Nom logique, Nom physique)

De plus, le fichier doit être ouvert par l’opération

    RESET (Nom logique)

Les opérations de lectures sont alors faites par

    READ[LN] ( Nom logique, V1, V2, ….)

De même il est conseillé de récupérer les résultats sur un fichier TEXT, puis d’aller à l’éditeur et d’analyser calmement les résultats de votre programme. Il faudra donc déclarer le fichier et le lier avec le fichier physique comme précédemment.

Par contre le fichier doit être ouvert par :

    REWRITE(Nom logique)

Et les opération d’écritures se font par

    WRITE[LN] (Nom logique, P1, P2, …)

Il faut toujours rajouter l’instruction

    CLOSE ( Nom logique)    

afin de ne pas perdre les dernières écritures sur le fichier.

Exemple

PROGRAM SOMME;
VAR
    Fe, Fs : TEXT;
    I, S, Nombre, Val : INTEGER ;
BEGIN
    ASSIGN(Fe, 'Entree.pas');
    ASSIGN(Fs, 'Sortie.pas');
    RESET(Fe);
    REWRITE(Fs);
    READLN(Fe, Nombre);
    S := 0;
    FOR I:= 1 TO Nombre DO
        BEGIN
            READLN(Fe, Val);
            S := S + Val;
        WRITELN(Fs, 'Somme temporaire = ', S);
        END;
    WRITELN(Fs, '> Somme = ', S);
    CLOSE(Fs)
END.


Contenu du fichier 'ENTREE.PAS'

12
34
65
87
34
23
64
93
88
12
54
34
33

Contenu du fichier 'SORTIE.PAS'

Somme temporaire = 34
Somme temporaire = 99
Somme temporaire = 186
Somme temporaire = 220
Somme temporaire = 243
Somme temporaire = 307
Somme temporaire = 400
Somme temporaire = 488
Somme temporaire = 500
Somme temporaire = 554
Somme temporaire = 588
Somme temporaire = 621
> Somme = 621

TRAVAUX DIRIGES  Menu Programmation Pascal

1. Ecrire un algorithme de multiplication de deux entiers n'utilisant que des additions et des soustractions.

2.Ecrire un algorithme de division de deux entiers donnant le quotient entier et le reste.

3.Ecrire l’algorithmes qui calcule le PGCD (Plus Grand Commun Diviseur ) de deux entiers.

4.Ecrire l’algorithmes qui calcule le PPMC (Plus Petit Multiple Commun ) de deux entiers.

5. Ecrire l'algorithme, puis le programme ( en Pascal) pour calculer cos (x) avec une précision � donnée à l'aide de la série :

cos( x) = 1 - x2/2! + x4/4! - ...

6. Ecrire un algorithme qui calcule une valeur approchée de la racine carrée d'un nombre a > 0 sachant que la série :

x1 = a

xn = (a/xn-1 + xn-1 ) / 2

converge vers la racine carrée de a.

Donner le programme Pascal correspondant.

7. Imprimer 10 factures d’électricité, sachant qu'il y a deux tranches, la première facturée à 21.47 centimes le Kwh et la deuxième à 14.25 centimes le Kwh, que le montant de l'abonnement est de 89.09 DA et que la TVA est 19.5 %. Les données sont, pour chaque client, son nom et sa consommation dans chacune des deux tranches.

8. On veut imprimer une liste de bons du type suivant, dans lesquels, à la place de X, on fera figurer les noms lus en donnée :

****************************************

Monsieur X a gagné un poste à transistor

Le retirer à la mairie, se munir du présent bon

****************************************

Le nombre de gagnants est donné.

9. Construire la table des racines cubiques des 20 premiers nombres. Utiliser la suite convergente définie en cours. Le résultat sera de la forme :

   --------------------------------------------------
    I     Nombre     I     Racine cubique           I
    -------------------------------------------------
    I        1       I            1.OOOO            I
    -------------------------------------------------
    I           2 
    ........