Partie 2.
Programmation PASCAL
COURS 5 : Présentation générale du langage Pascal
COURS 6: Entrées/Sorties Pascal
Partie 2.
Programmation PASCAL
COURS 5 : Présentation générale du langage Pascal
Objectifs : Introduire un minimum de concepts PASCAL pour commencer à programmer.
5.1 Vocabulaire
Cest lensemble
- 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 |
Les expressions peuvent être arithmétique (+, -, *, /, Div, ...) , logique (Not, And, OR,...) ou relationnelle (<, <=, >, >=, <>, ...)
5.4 InstructionsUne 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 programmeUn programme PASCAL a la forme suivante :
Program nom; définition des constantes Const .... définition des variables Var .... Begin Corps du programme End. |
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
Objectifs : fournir les outils PASCAL pour, dune part, introduire les données de lécran et restituer les résultats sur écran et dautre 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 lordre
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 loption ln est présente il y a positionnement sur la ligne suivante après lecture des données.
6.2 EcritureWrite[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 TEXTAu 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 dun fichier TEXT construit préalablement par un éditeur de texte.
La déclaration dun 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 à linstruction ASSIGN définie comme suit :
ASSIGN( Nom logique, Nom physique) |
De plus, le fichier doit être ouvert par lopé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 daller à léditeur et danalyser 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 linstruction
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
2.Ecrire un algorithme de division de deux entiers donnant le quotient entier et le reste.
3.Ecrire lalgorithmes qui calcule le PGCD (Plus Grand Commun Diviseur ) de deux entiers.
4.Ecrire lalgorithmes 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 ........