Vous êtes sur la page 1sur 22

KHAWARIZMI CENTRE

Cours Pascal
Premiers pas vers la programmation Orient Objet

INTRODUCTION

Avant de commencer les grandes thories sur la programmation, voici un petit historique sur les diffrents langages informatiques, un petit rappel sur les processus de traduction des programmes informatiques... Le langage de chaque ordinateur est le langage machine o les instructions et les donnes sont reprsentes par des combinaisons de bits. Ce langage compos de 0 et de 1 est compliqu et confus. C'est pour cette raison que l'on a cr un langage symbolique appel assembleur. La combinaison de bits d'une instruction est remplace par deux quatre caractres. Ces caractres sont souvent des abrviations anglaises qui dcrivent l'instruction (abrviations mnmoniques). Chaque processeur son propre langage assembleur. Comme ce genre de programmation demande des connaissances exactes du systme microprocesseur, on parle souvent de langage machine. Pour faciliter encore la programmation, des langages volus ont ts dvelopps. Ils sont orients vers le problme traiter et ne sont donc plus dpendants du microprocesseur employ. Voici un petit exemple.
Langage Langage machine assembleur BASIC

00111110 MVI A, 9H 10 PRINT 9-3 00000001 MVI B, 3H 00000010 SUB B 00111110 CALL 0869H 00001111 00001100 01100010 00001111

Quel est le langage que vous prfrez ? le langage machine ?

Arbre gnalogique de quelques langages volus

Nom

Signification

Domaine d'utilisation Mathmatiques et sciences naturelles Essentiellement problmes mathmatiques Langage dans le domaine de l'intelligence artificielle Problmes gnraux

FORTRAN Formula Translation APL LISP A Programming Language List Processing Language

BASIC

Beginners AllPurposeSymbolic Instruction Code Algorithmic Language Common Buisness OrientedLanguage Emprunt au mot grec LOGOS = la raison Basic Combined Programming Language

ALGOL COBOL LOGO

Mathmatiques et sciences naturelles Commercial Langage d'apprentissage dvelopp principalement pour les enfants Langage qui connat un grand succs, intgrant la puissance de l'assembleur

BCPL

SIMULA

Langage dvelopp partir de l'ALGOL et contenant des nouveaux concepts Programming Language n1 Commercial / mathmatiques et sciences naturelles Langage fortement orient vers le problme Langage utilis pour dvelopper les systmes d'exploitation. Par exemple UNIX ou MS-Windows. Langage structurel polyvalent

PL/1

PROLOG Programming in Logic C Successeur du langage B de AT&T

PASCAL

Du clbre mathmaticien Pascal Du nom de la premire programmeuse de l'histoire de l'ordinateur: Augusta Ada Byron, collaboratrice de Ch.Babbage

ADA

Langage polyvalent dont le veloppement a t command par le ministre amricain de la dfense

MODULA-2 Modular Language n2

Langage modulaire dvelopp partir du PASCAL

Processus de traduction

Programme source Programme crit dans un langage symbolique Programme de traduction Programme qui traduit la langage symbolique en langage machine Programme objet Programme en binaire excutable par le microprocesseur Assembleur Le mot assembleur dsigne aussi bien le langage de programmation que le programme de traduction. Chaque commande en langage assembleur est une expression symbolique qui remplace le code machine. Interprteur To interpret = Interprter. Lors de l'excution d'un programme source, l'interprteur traduit la premire instruction en code machine, et s'il n'y a pas d'erreur de syntaxe, l'excute. Il en fera de mme pour les autres instructions jusqu' la fin du programme. Un interprteur est comparable un traducteur qui fait une traduction simultane. Le BASIC est un langage interprt.

Compilateur L'ensemble du programme source est traduit en code machine puis mmoris. les erreurs de syntaxe sont donnes sous forme d'une liste par l'ordinateur. Les erreurs doivent tre corriges dans le programme source. Le processus de traduction complet doit alors tre rpt. Le PASCAL est un langage compil.

Comparaison

Cot de Connaissance Vitesse programmation du processeur d'excution Assembleur Langage Interprt Petit Langage compil Non Rapide Grand Oui Trs rapide Lente

Occupation mmoire --De 2 4 fois la place mmoire d'un programme en assembleur

STRUCTURE DU LANGAGE PASCAL

Un programme Pascal est un texte dont la structure est dfinie selon la figure suivante:
PROGRAM NomDuProgramme; { Dclarations } BEGIN { Dclarations } END.

En premire analyse:

PROGRAM, BEGIN et END sont des mots cls du langage PASCAL, et sont appels des mots rservs. NomDuProgramme est un identificateur

Premier petit programme

Prenons comme exemple un petit programme PASCAL qui va afficher sur l'cran la somme de deux nombres obtenus par une lecture au clavier:

ENTETE SECTION DECLARATIVE

PROGRAM Addition; VAR Somme : INTEGER; Nombre1, Nombre2 : INTEGER; BEGIN Write ('Premier nombre ? : '); ReadLn (Nombre1); { Lecture 1er nombre }

BLOC Write ('Deuxime nombre ? : '); D'INSTRUCTIONS ReadLn (Nombre2); { Lecture 2me nombre }
Somme := Nombre1 + Nombre2; WriteLn ('La somme vaut: ', Somme); END.

Quelques remarques:

Il est facile de dduire de cet exemple la position de la zone utilise pour les dclarations et celle utilise pour les instructions. Ses commentaires peuvent tre insrs dans le programme au moyen des dlimiteurs "{" et "}" ou "(*" et "*)"

Quelques rgles de syntaxe


Le pascal n'impose pas un format d'criture rigide tel que le FORTRAN, le C ou l'ASSEMBLEUR, le programmeur est libre d'insrer des espaces et des fins de lignes dans tout son programme, except l'intrieur des identificateurs et des chanes de caractres. Exemple 1 - Excellent
PROGRAM Exemple; BEGIN WriteLn ('Bonjour'); WriteLn ('Au revoir'); END.

Exemple 2 - Ca s'excute, mais la personne qui devra reprendre le programme ne vous dira pas merci ! :(
PROGRAM Exemple; BEGIN WriteLn ('Bonjour'); WriteLn ('Au revoir'); END.

Exemple 3 - Incorrect (Mais pourquoi ??)

PROGRAM Exemple; BEGIN WriteLn ('Bonjour'); WriteLn ('Au revoir'); END.

Le format libre du PASCAL implique l'utilisation de sparateurs. En gnral, le pointvirgule (;) est utilis pour sparer les instructions et les sections principales, tandis que la virgule (,) est utilise pour sparer les listes d'identificateurs ou paramtres.
PROGRAM Exemple; VAR { Introduction des variables } Mult, Somme : REAL; Entier : INTEGER; Reel : REAL; BEGIN { Dbut du programme } Write ('Tapez un nombre entier > '); ReadLn (Entier); { Lit un nombre entier } Write ('Tapez un nombre rel >'); ReadLn (Reel); { Lit un nombre rel } Somme := Entier + Reel; { Calculs } Mult := Entier * Reel; WriteLn ('Somme:', Somme, ' Produit:', Mult); END. { Fin du programme }

REGLES DE FORMATAGE ET CONVENTIONS D'ECRITURE

Comme nous l'avons-vu prcdemment, il est trs facile d'crire un programme illisibleou trs structur. Pour vous aider lors de la rdaction de vos programmes, voici les quelques rgles que j'essaie de respecter lors de l'criture de programmes:

IDENTIFICATEURS MOTS RESERVES ET IDENTIFICATEURS PRE-DECLARES


Les mots rservs du langage (BEGIN, END, FOR, DO, ...) ainsi que tous les identificateurs prdclars (INTEGER, BYTE, CHAR, ...) sont crits en majuscules.

CONSTANTES
Les identificateurs de constantes sont composs de minuscules uniquement. Les diffrents mots sont ventuellement spars des "underline". Exemples: dimension_tableau, blanc, tva, ...

VARIABLES
Les identifiants de variables sont crites en minuscules avec les initiales en majuscule. Les mots sont ventuellement spars par des "underline". Exemples: Age_Du_Capitaine, Couleur_Fond_Ecran, Vitesse, Acceleration, ...

TYPES
Les identificateurs de type commencent toujours par "T_" puis sont crits comme les variables, en minuscules avec des initiales en majuscules. Exemples: T_Couleur, T_Genre, T_Code_D_Erreur, ...

PROCEDURES
Les identificateurs de procdures sont crits comme les noms des variables en minuscules avec des initiales en majuscules.Mais on utilisera un verbe l'infinitif, car un appel de procdure dcrit une action raliser: Afficher, Close, Effacer_Ecran, Rebedouler, ...

FONCTIONS
Les identificateurs des fonctions sont crits comme les noms des variables en minuscules avec des initiales en majuscules.A l'inverse des procdures, un nom (ou une locution) sera utilis pour l'identification, car un appel de fonction dcrit le
9

rsultat d'une action raliser. Exemples: Caractere_Lu, Sinus_Hyperbolique, ... En principe, une fonction ne devrait avoir qu'un seul paramtre de sortie: le rsultat de la fonction. Si une routine doit avoir plusieurs paramtres de sortie, il est prfrable d'utiliser une procdure.

UNITES ET PROGRAMME PRINCIPAL


Les identificateurs d'units ou de programme principal sont galement crits comme les noms de variables en minuscule avec initiales en majuscules.

DECLARATIONS
Autant que possible, on ne dclarera qu'un objet par ligne (constante, type ou variable) afin de pouvoir commenter chacun de ces objets sur la mme ligne. Exemple:
CONST max_x = 100; max_y = 200;

{ Bla Bla Bla } { Patati Patata }

TYPE T_Couleur = (rouge, vert, bleu); { Pfffffrrrt } T_Truc = [39..45]; { Tagada... } T_Chose = RECORD { ...Tsoin tsoin } Zorglad_Gauche : INTEGER; Cameleo : T_Couleur; END; {RECORD} VAR I, { Voil voil } J, { Ca nous rajeunit pas } K, { K comme Koala } Longueur : INTEGER; { En angstrm } Tableau : ARRAY [1..max_c, 1..max_y] OF BYTE;

INDENTATION
Un incrment d'indentation de 2 caractres sera utilis chaque niveau BOUCLES FOR, WHILE ET REPEAT Ces boucles sont prsentes de la manire suivante:

10

Statment; Statment; FOR I := 1 TO 10 DO BEGIN Statment; Statment; END; {FOR} Statment; Statment; WHILE X < Y DO BEGIN Statment; END; {WHILE} Statment; Statment; REPEAT Statment; UNTIL X > Y; Statment;

On commentera les END de faon indiquer quelle boucle ils appartiennent. On placera galement un ";" aprs la dernire instruction de la boucle (juste avant le END). de faon faciliter d'ventuelles insertions d'instructions ultrieures.

INSTRUCTIONS IF ET CASE
Par analogie, l'indentation des instructions IF est CASE est la suivante:
Statment; Statment; IF Condition THEN BEGIN Statment; END; {IF} Statment; IF Condition THEN BEGIN Statment; END {IF} ELSE IF Condition2 THEN BEGIN Statment; Statment; END {ELSE IF} ELSE BEGIN Statment; END; {ELSE} Statment; Statment; Statment; Statment; CASE Couleur OF rouge : BEGIN Statment; Statment; END; {BRANCH OF CASE} vert : BEGIN Statment; Statment; END; {BRANCH OF CASE} ELSE BEGIN Statment; Statment; END; {OTHERWISE} END; {CASE OF} Statment; Statment;

Il faut noter que chaque END est accompagn d'un commentaire indiquant quel BEGIN il appartient. Cela est fort utile lorsqu'il y a plusieurs boucles imbriques les unes dans les autres...

11

De plus, mme s'il n'y a qu'une seule ligne dans le IF THEN ou le CASE, il y a toujours un BEGIN..END, afin de faciliter l'insertion ultrieure de quelques nouvelles lignes de code. Pour terminer cette thorie, voici deux listings de la mme procdure. Lequel des deux trouvez-vous le plus agrable lire ?
TYPE Type tTableau=Array[1..100] Of Real; tTableau=Array[1..100] OF REAL; Procedure MaxMin(T:tTableau; PROCEDURE MaxMin(T:tTableau; Var max, min: Real); VAR max, min:REAL); Var i : Integer ; VAR i : INTEGER; Begin max := T [ 1 ] ; BEGIN min := T [ 1 ] ; max := T[1]; For i := 2 to n Do min := T[1]; If T [ i ] > max Then FOR i := 2 TO n DO BEGIN max := T [ i ] IF T[i] > max THEN BEGIN Else If T [ i ] < min Then max := T[i]; min := T [ i ] END {IF} End; ELSE IF T[i] < min THEN BEGIN min := T[i] END; {ELSE IF} END; {FOR} END; {PROCEDURE MaxMin}

Question subsidiaire, que fait cette procdure ?

12

IDENTIFICATEURS, VARIABLES, TYPES PREDEFINIS ET CONSTANTES

Identificateurs
Dfinition

Les noms du programme et des variables sont appels des identificateurs. Le programmeur est libre de les choisir, mais il doit cependant respecter certaines rgles de syntaxe:

L'identificateur doit tre une combinaison de lettres et de chiffres Le premier caractre doit tre une lettre Les caractres spciaux, les espaces et les lettres accentues sont interdites

Voici quelques exemples:


CORRECT INCORRECT Alice Au-Del

BlackBird RS232 Likely Au_Debut


Limitations et particularits

7eme SYS$READ Pas pas Rvision

A la diffrence du C, le langage ne fait pas la diffrence entre les majuscules et les minuscules (Nom, NOM et nom peuvent rfrencer la mme valeur). Le nombre de signes significatifs dpend de l'implmentation Certains caractres spciaux sont admis, tels que le "Underline"

Les mots rservs

Ces mots sont rservs au langage. Ils ont une signification bien dtermine. Leur rle est de structurer le programme. On les appelle aussi des mots cls. Il est impossible des les employer d'autres fins. Exemples de mots rservs: BEGIN, END, PROGRAM, AND
Les identificateurs ou types prdfinis

Un certain nombre d'identificateurs sont prdfinis dans le langage Pascal et peuvent tre
13

utiliss sans dclaration pralable. Ils ont une signification bien dtermins et dfinissent un ensemble de facilits permettant l'accs des utilitaires tels que les fonctions mathmatiques, ou la saisie et l'affichage de valeur. Il est toutefois possible de les redfinir pour les utiliser d'autres fins, mais c'est fortement dconseill. Exemples d'identificateurs prdfinis: Write, ReadLn, Sin, Odd, INTEGER, STRING La liste des types prdfinis du Pascal sont dcrits plus bas...

Variables
Dfinition

Une variable reprsente une information pouvant tre manipule et modifie par le programme.
Le type

La nature de l'information reprsente par une variable est dfinie par un type. Les types les plus utiliss sont:

Les nombres entiers (INTEGER) Les nombres rels (REAL) les caractres (CHAR) Les chanes de caractres (STRING)

Dclaration

La dclaration des variables s'effectue dans la "section dclarative" d'un programme. Cette section est introduite par le mot rserv VAR.
ENTETE SECTION DECLARATIVE
PROGRAM Addition; VAR {Section de dclaration des variables} Somme : INTEGER; Nombre1, Nombre2 : INTEGER; BEGIN {Les variables dclares sont maintenant utilisables dans le programme} Write ('Premier nombre ? : '); ReadLn (Nombre1); {Lecture 1er nombre}

BLOC D'INSTRUCTIONS Write ('Deuxime nombre ? : ');

ReadLn (Nombre2); {Lecture 2me nombre} Somme := Nombre1 + Nombre2; WriteLn ('La somme vaut: ', Somme); END.

14

Les types prdfinis


Voici les diffrents types prdfinis du Pascal:
Simple Standard Entier (INTEGER) Utilisateur Enumration * Structur Standard Tableaux (ARRAY) *

Boolen (BOOLEAN) Caractre (CHAR) Rel (REAL) Chane (STRING)

Intervalle *

Enregistrements (RECORD) * Ensembles (SET) * Dynamiques (POINTER) * Fichiers (FILE) *

* Ce type sera expliqu plus tard... patience Entier - INTEGER

Ce type reprsente l'ensemble des nombres entiers dans l'intervalle -2n-1 ... (2n-1 - 1) o n est le nombre de bits allous pour une variable de ce type. Notation: 12 -1522 +31
ENTIERS SHORTINT INTEGER -128 ... +127 -32768 ... +32767 8 bits 16 bits

LONGINT -2'147'483'648 ... +2'147'483'647 32 bits BYTE WORD Caractre - CHAR 0 ... 255 0 ... 65535 8 bits 16 bits

Ce type reprsente l'ensemble des caractres dfinis par le standard ASCII (Lettres, chiffres,
15

signes, etc...). Chaque caractre est cod sur 7 bits, il y a donc 128 (0.127) caractres diffrents que l'on peut reprsenter.La table ASCII sur 8 bits n'est pas normalise. Notation: 'a', 'A', '*', '4'
Rel - REAL

Ce type reprsente les nombres rels. Notation: 1.0 1.6 -5.12 2.45E7
REELS REAL SINGLE DOUBLE 2.9E-39 ... 1.7E38 1.5E-45 ... 3.4E38 5.0E-324 ... 1.7E308 6 bits 4 bits 8 bits

EXTENDED 3.4E-4932 ... 1.1E4932 10 bits COMP Boolen - BOOLEAN -9.2E18 ... 9.2E18 8 bits

Ce type dfinit une information pouvant prendre une des deux valeurs prdfinies TRUE (vrai) ou FALSE (faux). Une variable de ce type ne peut tre imprime. Notation: TRUE FALS
BOOLEENS BOOLEAN BYTE 8 bits 16 bits

WORDBOOL WORD

LONGBOOL LONGINT 32 bits BYTEBOOL Chanes de caractres - STRING BYTE 8 bits

Une chane de caractres est dfinie par une suite de caractres ASCII imprimables comprise entre deux apostrophes ('). La taille d'une STRING est de 255 caractres par dfaut maximum). Pour dfinir une autre longueur, l'indiquer entre crochets. A la diffrence du C, lorsqu'une chane de 10 caractres de long est dfinie (STRING[10]), elle peut effectivement contenir 10 caractres.

16

S'il on veut utiliser le caractre apostrophe dans une chane de caractres, il faut le doubler pour que le compilateur ne le prenne pas pour la fin de la chane (voir Chaine2 dans l'exemple cidessous). Exemples:
VAR Chaine1 : STRING; {Chane de 255 caractres} Chaine2 : STRING[255]; {Chane de 255 caractres} Chaine3 : STRING[10]; {Chane de 10 caractres} Chaine4 : STRING[1]; {Chane d'un caractre} BEGIN Chaine1 := 'Ceci est une chane de caractres'; Chaine2 := 'Aujourd''hui, il pleut'; {Apostrophe doubl !} Chaine3 := #10 + #13; {Saisie de caractres ASCII} Chaine4 := 'A'; END.

Les constantes
Il existe deux type de constantes:

Les constantes simples dont la valeur ne peut tre pas tre modifie par le programme Les constantes types dont la valeur peut tre modifie par le programme.

Ces deux types de constantes peuvent reprsenter une valeur numrique, une chane de caractres. Les constantes types sont comparables des variables dj initialises.
Dclaration

La dclaration des constantes s'effectue dans la section dclarative, et elle est prcde du mot rserv CONST. Exemple:
ENTETE
PROGRAM Bidon; CONST {Dclaration des constants} max_x = 10; pi = 3.14; chaine = 'toto'; chaine_modif : STRING = 'Bonjour'; VAR {Dclaration des variables} {Dclare un tableau de 10 lments} Tableau : ARRAY[1..max_x] OF STRING; BEGIN BLOC D'INSTRUCTIONS WriteLn ('Pi = ', pi); WriteLn ('Chane = ', chaine_modif);

SECTION DECLARATIVE

17

chaine_modif := 'Bonsoir'; WriteLn ('Chaine = ', chaine_modif); END.

INSTRUCTIONS

Instruction compose
Une instruction compose, est une suite d'instructions simples ncessaires pour effectuer une tache, un programme. Il existe plusieurs moyen de les reprsenter:

BEGIN Prod := A * B; {Premire instruction} Somme := A + B; {Seconde instruction} Soustr := B - A; {Troisime instruction} END;

Instructions de tests
IF

Parfois, il est ncessaire dans un programme de faire un choix. Pour que le programme sache que faire en fonction de conditions de tests, plusieurs instructions existent. La premire est le test avec un IF.

18

SI il fait beau ALORS aller la piscine SINON aller au cinma FIN SI

IF BeauTemps THEN BEGIN AllerPiscine; END {IF} ELSE BEGIN AllerCinema; END; {ELSE}

Ah, un petit dtail, il est possible que l'instruction ne soit excute que si la condition du test est vraie, sinon on continue normalement l'excution du programme...

SI j'ai des sous ALORS Je m'achte une glace FIN SI

IF Money THEN BEGIN AcheteGlace; END; {IF}

CASE

Ci-dessus, nous avons vu comment effectuer un test OUI/NON. Mais si il y a plusieurs conditions au test, pas uniquement BLANC/NOIR mais galement GRIS. Comment faire ? Premire possibilit, imbriquer des tests IF les uns dans les autres:

19

SI il fait beau ALORS Aller la piscine SINON SI il pleut ALORS Aller au cinma SINON Descendre aux abris FIN SI FIN SI

Mais, a devient trs vite le Bronx grer... une autre approche consiste utiliser l'instruction CASE. C'est plus simple, et on est sur de ne pas se tromper...

CASE TempsQuIlFait OF Beau : AllerALaPiscine; Pluie : AllerAuCinema; Ouragan : DescendreAuxAbris; END; {CASE OF}

Instructions de boucles
FOR

Maintenant que nous savons comment raliser un test, tudions comment raliser une boucle. Le
20

premier type de boucle est une boucle qui doit parcourir toutes les valeurs entre une borne de dpart et une borne d'arrive.
POUR Boucle DE 1 A 10 FAIRE FOR I := 1 TO 10 DO BEGIN Afficher la valeur de Boucle WriteLn(I); END; {FOR} FIN BOUCLE

REPEAT ... UNTIL

La boucle REPEAT ... UNTIL rpte une l'excution d'une instruction jusqu' ce qu'une condition soit remplie. Le test s'effectue aprs l'excution de l'instruction (elle est donc excute au moins une fois).

Jouer au foot JUSQU'A l'arrt du jeu

REPEAT Jouer au Foot UNTIL FinDuJeu;

WHILE ... DO

Cette boucle est similaire la boucle REPEAT ... UNTIL, mais ici, le test s'effectue au dbut de la boucle. Tant que la condition du test est vraie, on excute l'instruction.

21

TANT QUE le rservoir n'est pas plein ALORS Remplir le rservoir

WHILE NOT ReservoirPlein DO BEGIN RemplirReservoir END; {WHILE}

22

Vous aimerez peut-être aussi