Les entiers
- Un entier de type integer est un entier compris entre -MAXINT-1 et MAXINT (avec MAXINT=32767).
- Exemple 1 :
program entier;
var a,b,c:integer;
begin
a:=32767;
b:=a+1;
c:=-a-2;
writeln('b=',b);
writeln('c=',c);
end.
- Les opérations permises sur les variables de type integer sont
l'addition (+),
la soustraction (-),
la multiplication (*),
le quotient dans la division euclidienne (div),
le reste dans la division euclidienne (mod).
- Exemple 2 : Le quotient de la division de 21 par 4 est égal à 5 et le reste vaut 1.
program entier;
var a,b,quotient,reste,x:integer;
begin
a:=21;
b:=4;
quotient:=a div 4;
reste:=a mod 4;
x:=b*quotient+reste;
writeln('quotient : ',quotient);
writeln('reste : ',reste);
writeln('x=',x);
end.
Les réels
- Déclaration :
var a:real;
- Les opérations permises sur les variables de type real sont
l'addition (+),
la soustraction (-),
la multiplication (*),
la division (/).
Les booléens
- Une variable de type boolean peut prendre seulement deux valeurs true ou false
- Exemple :
program vraifaux;
var a:integer;
x,y:boolean;
begin
a:=2;
x:=a=2;
y:=a=3;
writeln('a=2 est ',x);
writeln('a=3 est ',y);
end.
Les tableaux
- Déclaration :
var mon_tableau : array[1..dimension] of type;
- Exemple :
program tableau;
var vecteur_aleatoire : array[1..10] of integer;
k:integer;
begin
randomize;
for k:=1 to 10 do
vecteur_aleatoire[k]:=random(2);
for k:=1 to 10 do
writeln('vecteur_aleatoire[',k,']=',vecteur_aleatoire[k]);
end.
Affectation
-
On donne une valeur à une variable grace à l'instruction d'affectation :=.
- Exemple :
program affectation;
var a,b:integer;
begin
a:=1; writeln('a=',a);
b:=2; writeln('b=',b);
a:=b; writeln('a=',a,',b=',b);
end.
Instruction : writeln et write.
- Syntaxe
writeln(variable1,variable2,...);
writeln('message1',variable1,...);
write(variable1,variable2,...);
-
Les instructions writeln et write permettent d'écrire des messages ou des résultats sur l'écran (avec ou sans retour à la ligne).
Les messages sont délimités par des cotes (pour afficher une apostrophe, il faut utiliser deux cotes).
- Exemple : affichage d'un message et du contenu d'une variable.
program p1;
var a:integer;
begin
writeln('hello world !');
a:=5
writeln('a=',a);
end.
Instruction : readln :
- Syntaxe :
readln(variable1);
-
L'instruction readln permet à l'utilisateur d'affecter une valeur à une variable.
- Exemple : affichage de l'exponentielle de x.
program p2;
var x:real;
begin
write('x=');readln(x);
writeln('exp(',x,')=',exp(x));
end.
Les fonctions standards
- exp(x) : exponentielle de x
- ln(x) : logarithme de x.
- sqr(x) : carré de x
- sqrt(x) : racine carrée de x.
- abs(x) : fonction valeur absolue de x
- trunc(x) : partie entière de x si x est positif ; partie entière de x augmentée de 1 si x est négatif.
program tronque;
begin
writeln('trunc(1.8)=',trunc(1.8));
writeln('trunc(-1.8)=',trunc(-1.8));
end.
- La fonction puissance n'est pas une fonction standard !
Pour calculer x à la puissance n, on évitera d'écrire :
y:=exp(n*ln(x));
lorsque n est de type integer ! De plus, cette formule ne permet pas de calculer une puissance de réel négatif.
La méthode la plus simple est d'utiliser une boucle :
...
y:=1
for k:=1 to n do
y:=y*x;
...
Instruction : if ... then ... et if ... then ... else
- Syntaxe :
if [condition] then [instruction1];
if [condition] then [instruction1] else [instruction2];
-
Si la condition est vérifiée, l'instruction1 est exécutée sinon l'instruction2 est exécutée.
Si l'instruction1 (ou l'instruction2) contient plusieurs instructions, il faut délimiter le bloc par begin et end.
- Exemple : minimum de deux entiers
program p3;
var a,b,minimum:integer;
begin
write('a=');readln(a);
write('b=');readln(b);
if a<b then minimum:=a else minimum:=b;
writeln('min(',a,',',b,')=',mimimum);
end.
- Une variante de l'exemple précédent.
program p3;
var a,b,minimum:integer;
begin
write('a=');readln(a);
minimum:=a;
write('b=');readln(b);
if b<a then minimum:=b;
writeln('min(',a,',',b,')=',mimimum);
end.
- Une autre variante :
program p3;
var a,b:integer;
begin
write('a=');readln(a);
write('b=');readln(b);
if b<a then a:=b;
writeln('minimum = ',a);
end.
Instruction for ... to ... do :
- Syntaxe :
for mavariable:=valeur1 to valeur2 do [instruction];
for mavariable:=valeur1 downto valeur2 do [instruction];
-
La variable mavariable prend la valeur valeur1, le bloc [instruction] est exécuté une première fois, la variable mavariable augmente de 1 avec to (ou diminue de 1 avec downto), le bloc [instruction] est exécuté une deuxième fois,.... et ainsi de suite jusqu'à ce que mavariable soit égale à valeur2.
mavariable, valeur1, valeur2 sont des entiers.
Si [instruction] contient plusieurs instructions, l'ensemble doit etre délimité par begin et end.
- Exemple : affichage des carrés des entiers de 1 à 10.
program p4;
var k:integer;
begin
for k:=1 to 10 do
writeln(k,'^2=',k*k);
end.
Instruction repeat ... until ... :
- Syntaxe :
repeat [instruction] until [condition];
- Le bloc [instruction] est exécuté tant que [condition] est vraie.
- Exemple : affichage des carrés des entiers de 1 à 10.
program p5;
var k:integer;
begin
k:=1
repeat
writeln(k,'^2=',k*k);
k:=k+1;
until k=10;
end.
Instruction while ... do :
- Syntaxe :
while [condition] do [instruction];
-
Le bloc [instruction] est exécuté tant que [condition] est vraie.
Si [instruction] contient plusieurs instructions, l'ensemble doit etre délimité par begin et end.
- Exemple : affichage des carrés des entiers de 1 à 10.
program p5;
var k:integer;
begin
k:=1
while k<=10 do
begin
writeln(k,'^2=',k*k);
k:=k+1;
end;
end.
Instruction random et random()
- Syntaxe :
random;
random(n);
-
L'instruction random (sans argument) renvoie un réel pris au hasard dans l'intervalle [0,1[.
L'instruction random(n) où la variable n est un entier, renvoie un entier pris au hasard entre 0 et n-1.
L'instruction randomize doit etre placée au début du programme principal.
- Exemple : affichage de 10 réels pris au hasard dans l'intervalle [0,1[ puis affichage de 10 entiers pris au hasard entre 0 et 2.
program p6;
var k:integer;
begin
randomize;
for k:=1 to 10 do
writeln(random);
for k:=1 to 10 do
writeln(random(3));
end.
Structure générale
- La première ligne doit indiquer le nom de programme. Lors du lancement du programme, la première commande exécutée est la première commande du programme principal. Si le programme principal a besoin de fonctions ou de procédures, celles doivent etre placées avant.
- Organisation d'un programme PASCAL
program mon_programme;
[appel de bibliothèques (par exemple : uses wincrt;)]
[déclaration des variables globales]
[mes fonctions et procédures]
[déclaration des variables locales du programme principal]
begin
[instructions]
end.
Déclaration des variables
- Pour déclarer une variable, il suffit de donner son nom et de définir son type.
- Syntaxe :
var variable1,variable2,...:type;
- Exemple : déclaration de trois entiers a,b,c et de deux réels x,y
var a,b,c:integer;
x,y:real;
Les fonctions
- Pour déclarer une fonction, il faut lui donner un nom, préciser une liste de paramètres et le type du résultat qu'elle retourne. Les instructions de la fonction sont délimitées par begin et end. La fonction peut avoir besoin de variables, il faut les déclarer !
- Syntaxe :
function mafonction([liste de paramètres]):type;
[déclaration des variables locales]
begin
[instructions]
end;
- Exemple : minimum de trois entiers. La fonction minimum a deux paramètres entiers, retourne un entier. Cette fonction n'utilise aucune variable locale.
program mini;
function minimum(a,b:integer):integer;
begin
if a<b then minimum:=a else minimum:=b;
end;
var a,b,c:integer;
begin
write('a=');readln(a);
write('b=');readln(b);
write('c=');readln(c);
writeln('min(',a,',',b,',',c,')=',minimum(mimimum(a,b),c));
end.
Les procédures
- Pour déclarer une procédure, il faut lui donner un nom, préciser une liste de paramètres. Les instructions de la procédure sont délimitées par begin et end. La procédure peut avoir besoin de variables, il faut les déclarer !
- Syntaxe :
procedure ma_procedure([liste de paramètres]);
[déclaration des variables locales]
begin
[instructions]
end;
- Exemple 1 : la procédure distance calcule et affiche la distance entre deux points. Cette procédure a quatre paramètres réels et utilise trois variables locales.
program p4;
procedure distance(x1,y1,x2,y2:real);
var d,a,b:real;
begin
a:=x2-x1;
b:=y2-y1;
d:=sqrt(a*a+b*b);
writeln("La distance vaut ",d);
end;
var x1,x2,y1,y2:real;
begin
write('x1=');readln(x1);
write('y1=');readln(y1);
write('x2=');readln(x2);
write('y2=');readln(y2);
distance(x1,y1,x2,y2);
end.
- Exemple 2 : la procédure somme_produit calcule la somme et le produit de deux entiers. Le résultat est enregistré dans les paramètres variables s et p.
program ex2;
procedure somme_produit(x,y:integer;var s,p:integer);
begin
s=x+y;
p=x*y;
end;
var s,p:integer;
begin
somme_produit(2,3,s,p);
writeln('s=',s);
writeln('p=',p);
end.
- Exemple 3 : la procédure swap échange le contenu des variables x et y.
program ex3;
procedure swap(var x,y:integer);
var z:integer;
begin
z:=x;
x:=y;
y:=x;
end;
var x,y:integer;
begin
write('x=');readln(x);
write('y=');readln(y);
writeln('x=',x,',y=',y);
swap(x,y);
writeln('x=',x,',y=',y);
end.
- Si on change simplement la déclaration des paramètres de la procédure swap en
...
procedure swap(x,y:integer);
...
les variables x et y ont échangé leur valeur dans la procédure... mais au retour, elles gardent leur valeur initiale.
Utilisation des variables
- A commenter et vérifier...
program p1;
procedure swap(var a,b:integer);
var c:integer;
begin
c:=a;
a:=b;
b:=c;
end;
var a,b,c:integer;
begin
write('a=');readln(a);
write('b=');readln(b);
write('c=');readln(c);
swap(a,c);
swap(a,b);
writeln('a=',a);
writeln('b=',b);
writeln('c=',c);
end.
- A commenter et vérifier...
program p1;
procedure permutation_circulaire(var a,b,c:integer);
var d:integer
begin
d:=b;
b:=a;
a:=c;
c:=b;
end;
var a,b:integer;
begin
write('a=');readln(a);
write('b=');readln(b);
permuation_circulaire(a,b,a);
writeln('a=',a);
writeln('b=',b);
end.
Un peu d'algèbre (hors programme)
- A compléter, vérifier et commenter...
program algebre;
procedure multiplication(var A,B,C: array[1..10,1..10] of real);
var i,j:integer;
begin
for i:=1 to 10 do
for j:=1 to 10 do
begin
C[i,j]:=0;
for k:=1 to 10 do
C[i,j]:=C[i,j]+A[i,k]*B[k,j];
end;
end;
var A,B : array[1..10,1..10] of real;
begin
........
........
end.