Ce tutorial a été fait pour que vous puissiez apprendre le turbo pascal version 4 a 7, même et surtout si vous êtes débutant. J'ai fait de mon mieux pour qu'il soit facilement compréhensible; si vous avez des questions ou des rectifications, n'hésitez pas a me mailer à prof online
Le pascal est un langage de programmation de haut niveau dit "structuré", par opposition aux langages dits "de programmation événementielle". C'est bien beau, mais ça veut dire quoi? Ca veut dire qu'on y retrouve une structure, donc il est plus facile à lire et à comprendre. Le terme "de haut niveau" veut dire qu'il est très proche du langage humain (anglais) et donc intuitif. Le Pascal est un langage compilé : cela veut dire que le compilateur (Turbo Pascal) produit un fichier exécutable directement compréhensible par le CPU.
A. Avantages du pascal
Programmation structurée
Langage proche de la machine
Rapide à l'exécution
Compilé
Facile à comprendre(de haut niveau)
B. Désavantages du pascal (par rapport au C)
Un peu moins souple et rapide que le C
16 bits(version 1 à 6) contre 32 pour les versions actuelles
A. Déclarations et en-têtes
Comme je l'ai dit plus haut, ce langage est structuré ; on y retrouvera donc une structure :
Titre du programme [Facultatif]
Bibliothèques utilisées
Déclaration de constantes
Types
Variables
Procédures
Fonctions
Début du programme
Fin du programme
B. 1er programme
Le programme ci-dessous n'est qu'un squelette des structures que l'on rencontre en Pascal. Le terme "MOT CLE" signifie "mot servant à la compréhension et à la définition de certaines choses au compilateur"
Program Hello_world ;
Begin
Writeln('Hello, World !');
End .
Program : mot clé signalant le début du programme et son identification pour l'utilisateur, et n'influence pas le résultat. La barre entre le o et le w sert à remplir le blanc (facultatif).
Begin : Mot-clé signalant le début du programme.
L'instruction writeln permet d'afficher un texte à l'écran, puis de faire un retour chariot. Elle a été utilisée avec 'Hello …' comme ARGUMENT, et affiche donc la CHAINE DE CARACTERES qu'il constitue.
End : signifie " Fin du programme".Notez que toutes les instructions, à part Begin et end. (qui sont des MOTS CLES), se terminent par un point-virgule. Cela signifie que l'instruction est terminée, et qu'il faut passer à la suivante.
Résultat à l'écran :
C:\TP\Hello.exe
Hello, World !
C:\TP\>
C. Les variables
On appelle une variable, une lettre, un nom auquel on peut attribuer une valeur, et modifier celle-ci au cours d'un programme. En Pascal, TOUTES les variables utilisées doivent être définies de cette manière :
VAR variable1 : type_de_variable;
Var2 : type_de_variable2;Comme toujours, le nom d'une variable ne peut pas contenir d'espaces, peut contenir des caractères alphanumériques, et doit commencer par une lettre (A-Z,a-z). Attention, il faut cependant vérifier que le nom de la variable n'est pas un mot réservé; nous en reparlerons plus loin.
Voici le même programme, utilisant les variables :
Program Hello_world_variable;
Var texte : string ; On définit la variable texte comme étant une chaîne de caractères.
Begin
Texte := 'Hello, Variables and types !' ; On attribue 'Hello…' à la variable texte avec l'opérateur := (à ne pas confondre avec =)
Writeln(texte); Où sont passés les apostrophes ?
End .Le texte en vert est bien-sûr des commentaires qui ne font pas partie du programme.
L'opérateur := signifie "attribuer ceci à cela"
Pourquoi il n'y a plus d'apostrophes ? C'est parce que dans les arguments, j'ai mit une variable, et non une chaîne de caractères. Si on subsitue texte, on obtient le même programme qu'en haut.
D. Les types numéraux
Il peut y avoir plusieurs types de variable, nous l'avons vu. Certains sont des nombres, mais pas classés de n'importe quelle manière :
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Il existe d'autres types de nombres associés au FPU (floting Point Unit, coprocesseur math si vous préférez).Pourquoi le pascal utilise plusieurs sortes de nombres ?
Pour la bonne raison que si on doit utiliser 1000 valeurs, à mettre dans un tableau (cf. tableaux), il faut économiser de la place en memoire.
Rappel : 8 bits font un byte, ou aussi appelé OCTET (perso je préfère byte, à pas confondre avec bit ou le mot obscène qui y ressemble)
Comment choisir le type d'une variable ?
Il suffit de réfléchir à quel usage on va prendre une variable
Imaginons un compteur d'incrémentation
Program types_1;
Var i : word ;
for i := 0 to 65535 do
begin
writeln(i);
end ;
end .Ici j'ai utilisé le type word, qui correspond à un entier 16 bits non signé, car notre programme n'utilisera jamais pour i que des valeurs de 0 à 65535
j'ai appelé la variable 'i' parce que il est habituel de représenter un compteur par i , j ou k.
x et y représentent souvent des coordonnées, et les autres noms sont 'proscris' pour une meilleure lisibilité du programme.
Une somme := terme1 + terme2; est toujours plus clair qu'un c := a+b;
Vous comprennez peut-etre pas à quoi correspond for; ça sert simplement à repeter 65535 fois l'écriture de i. cf les boucles
E. Les procédures utilitaires
Lorsqu'on fait de la programmation, il y a souvent des procédures et des fonctions qui reviennent très souvent. Au mieux on les utilise au mieux on programme !
write et writeln : affichent une chaine de caractère, un nombre ou un caractère spécial sur la sortie standard (écran ou bien fichier).
syntaxe : write(arg1,arg2,arg3,...,argn);
affiche les arguments les un à la suite des autres. meme syntaxe pour writeln. On vera plus tard comment ecrire dans un fichier
note : writeln emet à la fin un caractère RC (retour chariot) pour passer à la ligne.clscr : efface l'écran. s'utilise tout seul et a comme syntaxe clscr ;
read : attend l'entrée d'une chaine de caractère ou d'un ou plusieurs nombres au clavier.syntaxe : read(variable de n'importe quel type)
read place la réponse dans la variable donnéex = random(y) : donne à x une valeur aléatoire entre 0 et y. cf function
attention, il faut entrer une réponse du type donné en argument
F. Les boucles
Une boucle ??? qu'est-ce que c'est donc que cela pour une bête ???
Bien c'est tout simplement une instruction ou un groupe d'instruction que l'on doit executer un nombre défini ou indéfini de fois.Exemple : calcul de la puissance nième d'un nombre entier.
program boucles_1;
var i,puissance : byte; { on n'a pas besoin d'aller plus loin que 255}
nombre : integer ; { 32000 c'est suffisant non ?}
resultat : longint; {le resultat est forcément plus grand que l'entrée}
begin
write ('entrez un nombre entre -32000 et 32000 : ');
read (nombre);
write ('donnez la puissance voulue : ');
read (puissance);
resultat := 1
for i := 0 to puissance do
begin
resultat := resultat * nombre ;
end ;
writeln('voici le resultat de ',nombre,'^',puissance,' : ',resultat);
end .
Commentaires :
On demande à l'utilisateur de choisir des nombres et de les entrer.
On donne à resultat la valeur 1 car x^0 = 1 dans tous les cas.
for est le type de boucle le plus utilisé.
i := 0 to puissance veut dire que i prendra à chaque itération une valeur entre 0 et puissance, de 1 en plus.
do veut dire que l'argument de boucle commence.
begin et end; encadrent l'argument de boucle.
le writeln donne le résultat de manière 'propre' et 'présentable'.Il existe d'autres type de boucles : while et repeat until.
Usage :
WHILE condition DO instructions
tant que la condition est vraie, les instructions sont exécutées.
une condition peut etre
-une condition :(x=5) ou ((x<4) and (y>5)) ou (4 = 5)
-une valeur booléenne : false, true, keypressed...
les instructions doivent soit etre encadrées par begin end; si elles sont plusieures, soit sans begin end; si elles sont uniques.
ex :
while (x=1) do
begin
write (x);
x := x-1;
end ;
ou bien
while (x=1) do
x := x-1;
REPEAT instructions UNTIL condition
Equivaut à peu près à while sauf que la condition est testée à la fin de la boucle, donc le corps est executé au moins une fois.
Les instructions ne nécéssitent pas d'encadrement par begin end; , car elles sont déjà encadrées par repeat et until.
G. Utilisation des functions
Kesako function ? jamais entendu parler !
Mais si ! c'est en réalité une fonction !
Pas plus clair ? non ?
Une fonction est le résultat (numérique ou autre) de l'execution d'un 'mini-programme', soit interne au compilateur , soit interne au programme. Nous verons plus loin comment en créer soi-meme.Nous avons déjà utilisé une fonction dans random
x := random (100) ;
random retourne une valeur aléatoire entre 0 et le nombre en argument, et donne cette valeur à x.On peut aussi les utiliser dans une instruction :
writeln (random(100));Les fonctions peuvent se mêler facilement aux nombres, mais ne sont pas accéptés comme arguments de boucle. Vous suivez ?
for i := 0 to random(100) don'est pas valable !!!
Vous verez qu'à force de les utiliser cette notion passe facilement .
H. Les conditions
Il est souvent (tres souvent) utile (ou indispensable) de faire un choix. Tout le monde sait que de lui meme, un ordinateur ne peut faire de choix. Donc nous devons réfléchir pour lui.
IF condition THEN
BEGIN
instruction(s)
END ;
ELSE
BEGIN
instructions
END ;se lit comme ceci :
Si condition alors
instructions
sinon
instructionsComme d'hab , si il n'y a qu'une instruction BEGIN et END ; ne sont pas obligatoire, de meme ELSE n'est pas obligatoire.
Cette notion ne me semble pas compliquée. Si la condition est vraie, l'instruction THEN est executée, sinon l'instruction ELSE est executée si elle existe.
ex :
Prog condit_1;
var i : byte;
begin
write ('entrez un nombre : ');
read (i);
if (i > 128) then
writeln('nombre plus grand que 128');
else
begin
if (i=128) then
writeln('le nombre est 128');
else
writeln('nombre plus petit que 128');
end ;
end .
Conclusion : on peut imbriquer des if. pas conseillé mais bien pratique
On peut se passer des else, à condition d'effectuer 3 tests à la place de 2
if (i > 128) then
writeln('n > 128');
if (i = 128) then
writeln ('n = 128');
if (i < 128) then
writeln ('n < 128');voilà.
Avec tout ça vous devriez etre capable de faire un petit programme ...
I. Synthèse en un programme
Nous allons ici essayer de faire un programme regroupant ce que l'on a vu au dessus.
Ici je vous demanderai un petit travail personnel consistant à réaliser ce programme tout seul avant de regarder les sources que je donne ici.
Le programme consiste à choisir un nombre aléatoire entre 0 et 100, et à demander à l'utilisateur en un nombre maximal de 10 x de le deviner, en disant à chaque fois si le vrai nombre est plus grand ou plus petit, et si il est égal, de fermer le programme.
dans notre programme entrent en compte le choix de variables, l'usage de write et de read, l'usage de fonctions, l'usage de boucles et de conditions.
program jeu_1;
var nreel, nuser : byte;
i : byte;
flag : boolean;
begin
nreel := random(100);
i := 0;
flag := true;
repeat
write ('donnez un nombre : ');
read (nuser);
if (nuser < nreel) then writeln ('nombre plus grand');
if (nuser > nreel) then writeln ('nombre plus petit');
if (nuser = nreel) then
begin
writeln ('REUSSI !');
flag := false;
end ;
until ((i <10) and (flag));
if (i = 10) then writeln('le nombre était ',i);
end .
Vous avez sans doute quelque chose de semblable au mien mais différent à certains points de vue.
si il marche, tant mieux, mais n'oubliez pas que les bugs existent ! donc : testez votre programme !
Fin.
© Aflo Informatique , 2003-2004