Flux rss
Collection CommentCaMarche.net

Les bases du langage Pascal

De la structure du langage et des principaux mots-clés

Tout d'abord, nous sommes d'accord : notre but est d'écrire un programme; quand notre programme sera suffisamment élaboré, on pourra appeler ça une application (ça fait pro). Tous nos programmes seront constitués de la même manière, dont voici un exemple :

Program MonProg;
begin
end. 

Il faut savoir que le code source d'un programme Pascal, c'est un fichier texte, que l'on pourrait tout à fait écrire avec le bloc-notes de Windows. Autrement dit, il s'agit d'un texte sans aucune mise en forme (pas de gras, italique...). Donc pour s'y retrouver un peu, on met des majuscules, mais c'est uniquement pour faciliter la lecture. Évidemment, ce programme ne fait rien, mais il se compilera et s'exécutera quand même. Program, begin et end sont des mots-clés. Il existe comme cela de nombreux mot-clés, qui ne peuvent être utilisés à d'autre fin que celle définie par le compilateur. MonProg est le nom que j'ai donné au programme (noter le point-virgule après MonProg, et le point après end). Si on complique, on pourrait avoir :

Program MonProg;
var 
  i : integer;
begin
  i:=1;
end. 

Dans cet exemple, on a commencé à ajouter des traitements à faire, sous forme d'instructions. On utilise une variable, qui s'appelle i, et dans laquelle on met la valeur 1. Cela se traduit par l'instruction "i:=1". Cette variable doit obligatoirement être déclarée en début de programme, grâce à la clause VAR. En fait dans cette clause, on stocke toutes les déclarations de toutes les variables. Par exemple :

Program MonProg;
var 
  i : integer;
  j : string;
begin
  i:=1;
  j:='Bonjour à tous';
end. 

Notez les points-virgules en fin de chaque instruction. Pour rendre le texte plus lisible, on indente le texte, de manière à ce que chaque bloc soit décalé vers la droite. Deux espaces suffisent pour dégager ce que contient la clause VAR et ce qu'il y a entre le begin et le end. Cette présentation est extrêmement importante : utilisez-la au fur et à mesure que vous tapez le texte, et non après avoir tout tapé.

Texte non indenté, à NE PAS FAIRE :

Program MonProg;
var 
i : integer;
j : string;
begin
i:=1;
j:='Bonjour à tous';
end. 

Allez, puisqu'on est bien avancé, je vous présente d'un coup d'un seul la structure complète d'un programme :

Program <nom du prog>;

uses MonUnit1, MonUnit2, ...;

const
  maconstante1 = <valeur>;
  ...
type
  montype1 : <type de donnée>;
  montype2 : <type de donnée>;
  ...
var
  mavar1 : <type de donnée>;
  mavar2 : <type de donnée>;
  ...
procedure MaProc1;
begin
  <instructions>;
  ...
end;

function MaFonct1;
begin
  <instructions>;
  ...
end;

begin
  <instructions>;
  maproc1;
  mavar1:=MaFonct1;
  ...
end. 
La première partie (Program, Var), vous connaissez presque. On a simplement ajouté deux choses :
  • uses: Indique qu'on utilise des fonctions et outils contenus dans d'autres fichiers de programme (nommés des unités) que celui dans lequel on travaille.
  • Types: Cette clause sert à définir des types de données particulières.
  • procedure et function: On verra plus tard. L'essentiel est de savoir que ces procédures et fonctions sont situées AVANT le bloc principal begin/end.
En attendant, essayez ça :
Program MonPremierProg;

var
  s : string;

begin
  s := 'Salut à tous !';
  writeln(s);
  readln;
end. 

En Turbo Pascal, taper le texte et lancer la compilation (F9).
En Delphi 4, nous avons un problème, car cet environnement est prévu pour générer des applications graphiques, et le modèle d'application console n'est pas disponible en Delphi 4 :

  • Fichier/Tout fermer
  • Fichier/Nouveau
  • Dans l'onglet application, choisir "texte", et taper le texte du programme
  • Une fois le texte tapé, Fichier/Enregistrer, choisir un répertoire sur votre disque et taper "crt1.dpr". Ensuite cliquer sur le bouton Enregistrer
  • Aller à nouveau dans Fichier/Tout Fermer
  • Aller dans Fichier/Réouvrir et choisir "crt1.dpr"
  • Pour compiler et lancer le programme, choisir Exécuter/Exécuter (ou F9). Pour fermer l'application, appuyer sur la touche Entrée.
  • Notre algorithme est le suivant :
    1. Affecter une valeur à une variable nommée S s:='Salut à tous';
    2. Ecrire le contenu de la variable à l'écran Writeln(s);
    3. Lire une touche au clavier Readln;

Procédures et fonctions

Lorsque notre programme s'étoffe un peu, il est hors de question de le décrire séquentiellement, même en indentant, vous imaginez 20000 lignes d'un seul bloc ! D'autre part, il peut être intéressant de définir des sous-programmes exécutant certaines tâches pour pouvoir les réutiliser. C'est précisément ce à quoi servent les procédures et les fonctions. D'ailleurs, vous en avez déjà utilisé dans l'exemple ci-dessus : writeln et readln sont des procédures définies "en standard".
Imaginons, dans notre exemple précédent, que nous demandions à l'utilisateur de notre programme de saisir des mots, et qu'il nous faille en faire une phrase en les concaténant. On pourrait faire :

Program MonDeuxiemeProg;

var
  s, Phrase : string;

begin
  writeln('Entrez un mot :');
  readln(s);
  Phrase:=s;

  writeln('Entrez un deuxième mot :');
  readln(s);
  Phrase:=Phrase+s
  writeln('Entrez un troisième mot :');
  readln(s);
  Phrase:=Phrase+s;

  writeln('La phrase complète est :');
  writeln(Phrase);
end. 
  • J'écris un texte à l'écran (remarquez les "quotes" entourant les chaînes de caractères) pour dire à l'utilisateur ce qu'il doit faire
  • je lis ce qu'il tape
  • je mets le résultat dans ma variable phrase
  • je lui demande de saisir un autre mot, et je lis ce qu'il tape
  • je cumule le contenu de phrase avec ce qu'il a tapé dans s (phrase:=phrase+s)
  • enfin, j'affiche la phrase complète.
En dehors du fait que c'est un peu répétitif, si je veux insérer une virgule après chaque mot tapé, je devrai le faire trois fois. Nous allons donc définir une fonction qui va faire tout ça une fois pour toute :
Program MonDeuxiemeProg;

function ConstruitPhrase(phrase:string):string;
var s : string;
begin
  readln(s);
  ConstruitPhrase:=phrase+', '+s;
end;

var
  Phrase : string;
begin
  Phrase:='';  {initialiser à chaîne vide}
  {premier mot}
  writeln('Entrez un mot :');
  Phrase:=ConstruitPhrase(Phrase);

  {deuxième mot}
  writeln('Entrez un deuxième mot :');
  Phrase:=ConstruitPhrase(Phrase);

  {troisième mot}
  writeln('Entrez un troisième mot :');
  Phrase:=ConstruitPhrase(Phrase);

  {résultat}
  writeln('La phrase complète est :');
  writeln(Phrase);
end. 

Remarquez les commentaires entre accolades. Ce texte est ignoré du compilateur.
Remarquez aussi l'initialisation de la variable phrase. Ceci est extrêmement important, car lorsqu'un programme démarre, les variables sont dans un état "indéfini" et peuvent contenir n'importe quoi. Ainsi la première fois qu'on appelle notre fonction, il faut bien qu'on lui envoie une chaîne vide (réflechissez voyons !!). La déclaration a été descendue juste au-dessus du begin de début, pour lever toute ambiguïté.
En effet, les variables, fonctions et procédures ne sont visibles que si elles sont situées au-dessus du code qui les appelle.

Déclaration de fonction

J'ai donc créé la fonction suivante :

function ConstruitPhrase(phrase:string):string;
var s : string;
begin
  readln(s);
  ConstruitPhrase:=phrase+', '+s;
end;

ConstruitPhrase est le nom.
Vient ensuite le paramètre (phrase:string) qui permet "d'envoyer" une donnée à la fonction. Celle-ci est de type chaîne de caractères.
Ensuite, après les deux points, j'indique que ma fonction doit me retourner une chaîne de caractères.
Cette fonction prend donc ce que je lui donne (Phrase), ajoute une virgule, puis ce que vient de taper l'utilisateur. On indique que c'est ce résultat qui doit être renvoyé en le stockant dans une "variable" qui est le nom de la fonction : ConstruitPhrase:=phrase+', '+s;.
On aurait pu aussi, en Delphi, utiliser le mot Result au lieu du nom de la fonction : result:=phrase+', '+s;.

Utilisation de fonctions

Pour utiliser la fonction, il suffit de citer son nom en lui indiquant le paramètre qu'elle demande :

ConstruitPhrase(Phrase,s);

Sauf que puisque c'est une fonction, je doit récupérer le résultat, que je stocke dans ma variable phrase :

Phrase:=ConstruitPhrase(Phrase);

En clair, j'appelle la fonction en lui donnant ce que contient Phrase, et elle me renvoie Phrase augmenté d'une virgule et d'un mot tapé par l'utilisateur. Remarquez que la variable s n'est plus déclarée en haut du programme, mais localement à la fonction, car je ne m'en sers que dans cette fonction. On ne peut pas l'utiliser en dehors. Une procédure est très similaire, sauf qu'elle ne renvoie rien. On aurait pu s'en sortir quand même, car il est possible de faire en sorte que le paramètre que l'on passe puisse nous revenir modifié : il s'agit d'un passage de paramètre par adresse. La syntaxe serait la suivante :

[...]
procedure ConstruitPhrase(var phrase:string);
var s : string;
begin
  readln(s);
  phrase:=phrase+', '+s;
end;

begin
  Phrase:='';  {initialiser à chaîne vide}
  {premier mot}
  writeln('Entrez un mot :');
  ConstruitPhrase(Phrase);
  [...]
end. 

Dans ce cas, je passe Phrase en paramètre, la procédure travaille dessus, la modifie, et le résultat m'est renvoyé. Cela est possible grâce au mot-clé var indiqué avant le paramètre. En fait, la procédure travaille sur la même variable (même si le nom aurait pu être différent) que celle du programme principal.

Article écrit par Thierry Cornu



Dernière modification le mardi 14 octobre 2008 à 17:40:36.

Ce document intitulé « Les bases du langage Pascal » issu de Comment Ça Marche (www.commentcamarche.net) est mis à disposition sous les termes de la licence Creative Commons. Vous pouvez copier, modifier des copies de cette page, dans les conditions fixées par la licence, tant que cette note apparaît clairement.
Exercice pascal (Résolu) Bonjour, j'ai un exercice en langage pascal qui permet d'ajouter des articles et les affichees puis il fait la trie de ces articles selon leurs quantites de stoskes mais le probleme que la trie ne marche pas correctement alors si pouver... www.commentcamarche.net/forum/affich-4038892-exercice-pascal
Programme pascal(plongeur) (Résolu) Bonjour, j'aimerais avoir des idee, pour ecrire un programme en langage pascal, qui doit traiter les données d’une compétition de plongeon regroupant cinq plongeurs, effectuant chacun trois plongeons, notés par sept juges. nom du plongeur, notes... www.commentcamarche.net/forum/affich-7429761-programme-pascal-plongeur
TURBO PASCAL (Résolu) Bonjour, j'ai fais un programme en language pascal qui permet d'enregistrer des film dans un fichier comme etant une base de donne et au moment de compilation il s'arrete en fin de ligne du programme END. il affiche cette erreur: error... www.commentcamarche.net/forum/affich-4020207-turbo-pascal
[Programmation] Comment débuter, quel langage?Comment débuter, quel langage? Introduction Ceux que l'on peut utiliser Delphi/Pascal Java Python .Net Smalltalk Ceux que l'on peut utiliser à la rigueur C/C++ PHP Ada Lisp/Caml/... Ceux que l'on peut ne pas utiliser www.commentcamarche.net/faq/sujet-457-programmation-comment-debuter-quel-langage
Le langage Python est faiblement typéMythe Le langage de programmation Python est faiblement typé, comme le php ou le Basic. Réalité FAUX. Explications Le Python est un langage à typage fort dynamique. Démonstration: >>> a="toto" >>> b=5 >>> print a+b Traceback (most recent... www.commentcamarche.net/faq/sujet-10123-le-langage-python-est-faiblement-type
VisualBasic est un langage orienté objetMythe VisualBasic est un langage orienté objet. Réalité FAUX. Explications Ce mythe revient régulièrement, mais c'est malheureusement faux: VB6 n'est pas un langage orienté objet. Prenons les principes de base de l'orienté objet: ... www.commentcamarche.net/faq/sujet-10257-visualbasic-est-un-langage-oriente-objet
Programme pascal(plongeur) (Résolu)Bonjour, j'aimerais avoir des idee, pour ecrire un programme en langage pascal, qui doit traiter les données d’une compétition de plongeon regroupant cinq plongeurs, effectuant chacun trois plongeons, notés par sept juges. voici les donnees a... www.commentcamarche.net/forum/affich-7298286-programme-pascal-plongeur
Re probleme dure en pascal (plongeur) (Résolu)Bonjour, Je n'ai eut aucune reponse alors j'affiche de nouveaux (je veux des exemples) j'aimerais avoir des idee, pour ecrire un programme en langage pascal, qui doit traiter les données d’une compétition de plongeon regroupant cinq... www.commentcamarche.net/forum/affich-7668975-re-probleme-dure-en-pascal-plongeur
Creation de virus (Résolu)Bonjour, est-il possible de programer un malware pour en neutraliser un autre (en particulier avec le language pascal)? www.commentcamarche.net/forum/affich-7307285-creation-de-virus
Télécharger Visual Basic 6 Runtime (VB6 DLL)Le Runtime Visual Basic 6 contient l'ensemble des librairies (DLL) nécessaires pour exécuter des programmes écrits en langage Visual Basic 6.0. Il contient notamment les DLL suivantes :... www.commentcamarche.net/telecharger/telecharger-3673521-visual-basic-6-runtime-vb6-dll
Télécharger Visual Basic Express 2005Le langage de programmation Visual Basic est historiquement dans les gènes de la société Microsoft. Avec plus de 30.000 développeurs en France l’utilisant au quotidien, Visual Basic reste un langage de programmation incontournable malgré les quelques... www.commentcamarche.net/telecharger/telecharger-160-visual-basic-express-2005
Télécharger Leet-speak GeneratorLe langage "leet" ou Leet-speak (=L33tsp34k) est un langage des initiés, des vrais geeks qui ne veulent plus utiliser l'alphabet comme base de la langue. Ils utilisent ce langage pour éviter de faire des fautes frappes et des lettres. Le Leet-speak... www.commentcamarche.net/telecharger/telecharger-34055868-leet-speak-generator
Introduction au langage PascalUn peu d'histoire Ce langage a été créé en 1969 à l'école polytechnique de ZURICH par N. WIRTH. Il a été conçu pour permettre d'enseigner la programmation comme une science. Ce langage est à la base d'une nouvelle méthode de programmation : la... www.commentcamarche.net/contents/pascal/pascintro.php3
Les caractéristiques du langage PascalDe l'Algorithme ou de l'art de ne pas être trop astucieux Définition du Petit Larousse : Suite finie d'opérations élémentaires constituant un schéma de calcul ou de résolution d'un problème. Ce mot est à connaître et à placer régulièrement dans... www.commentcamarche.net/contents/pascal/pasccarac.php3
Les bases du langage PascalDe la structure du langage et des principaux mots clés Tout d'abord, nous sommes d'accord : notre but est d'écrire un programme; Quand notre programme sera suffisamment élaboré, on pourra appeler ça une application (ça fait pro). Tous nos... www.commentcamarche.net/contents/pascal/pascbase.php3