Vous êtes sur la page 1sur 14

Chapitre 1 : Introduction au langage de programmation Pascal

1. crire un programme
Programmer consiste crire une suite d'ordres appels instructions que l'ordinateur devra excuter lorsqu'on le lui demandera. Pour crire un programme (suite d'instructions), on utilise un environnement de dveloppement intgr (ou IDE: integrated development environment en anglais) constitu d'un diteur de texte (traitement de texte simplifi), d'un compilateur (traducteur en langage machine) et d'un gestionnaire d'excution (pour vrifier le fonctionnement du programme). Nous utiliserons donc l'IDE nomm TurboPascal. Lancez le programme TurboPascal. L'IDE s'ouvre directement sur l'diteur; on peut maintenant crire le programme souhait. Le principe de la cration d'un programme est le suivant: demander l'utilisateur de saisir des donnes, traiter les donnes (i.e. effectuer des calculs sur ces donnes),

afficher les rsultats du traitement. Il s'agit, pour cela, d'utiliser un langage simultanment comprhensible par un humain (le programmeur) et par la machine. Le langage utilis cette anne est le langage Pascal (langage cr initialement pour l'apprentissage de la programmation) qui est trs proche de celui de vos calculatrices et dont les instructions essentielles sont en anglais. Ouvrez un nouveau document (Fichier/Nouveau) puis recopier exactement le programme suivant: PROGRAM mon premier programme ; VAR m,n : integer ; BEGIN write('Donner un premier nombre entier : ') ; readln(m) write('Donner un second nombre entier : ') ; readln(n) ; writeln('Somme : ',m+n,' Diffrence : ',m-n) ; writeln('Produit : ',m*n,' Quotient : ',m/n) ; writeln('Quotient entier : ',m DIV n,' Reste : ',m MOD n) ; END ;

1.2 La sauvegarde
Avant toute nouvelle manoeuvre, il est fondamental de sauvegarder votre programme (nul n'est l'abri d'une coupure de courant). Nous sauvegarderons toujours nos documents sur une cl USB dans le rpertoire cr cet effet: cliquez sur File / Save (ou bien appuyer sur la touche F2), donnez un nom sans accent, ni espace, ni point relativement explicite, comme par exemple CH1_1.PAS (pour chapitre 1, paragraphe 1; l'extension .PAS est facultative).

1.3 La compilation
Le programme tant crit, on cherche le faire excuter par la machine. Pour cela, l'ordinateur doit tout d'abord le compiler, c'est dire le traduire dans un langage totalement comprhensible par le processeur; on clique successivement sur : Compile / Compile. Vous constatez donc qu'un bandeau rouge contenant un message d'erreur apparat en haut de la fentre, lisez et traduisez le texte du message (en anglais). On corrige cette erreur en remplaant : PROGRAM mon premier programme ; par: PROGRAM mon_premier_programme ;

1
Mr Guerroudj Charg du TP Informatique II, Groupes (B1, B6, A1, A4):

ou bien par: PROGRAM MonPremierProgramme ; Puisque le nom du programme doit tre d'un seul tenant. On relance la compilation et l encore elle provoque une erreur ( ; expected ) car il manque un ; la fin de la ligne qui prcde le numro de ligne indiqu. Une troisime compilation s'arrte car la machine n'a pas trouv la fin du progamme (elle cherche autre chose compiler mais ne trouve plus rien). La correction apporter consiste remplacer: END ; par: END. le . marquant la fin du programme. Une dernire compilation s'effectue sans erreur. Vous remarquez donc que toutes les erreurs doivent tre corriges et que la machine est trs pointilleuse sur l'orthographe.

1.4 L'excution
On peut ensuite l'excuter : on clique sur Run. Vous tes dsormais sur l'cran de travail du programme. Saisissez les valeurs 40000 et 20000 et constatez que vous revenez l'cran d'dition. En fait, il s'est pass quelque chose mais cela s'est droul trop vite pour votre oeil. Pour visualiser les rsultats, il suffit appuyer sur Alt+F5. L'idal pour viter que ce dsagrment ne se reproduise est d'insrer systmatiquement en avant dernire ligne de chaque programme l'instruction: readln ; puis de recompiler de rexcuter. Vous visualisez dsormais des rsultats qui sont tout particulirement farfelus. Ce n'est ni tout fait de votre faute ni tout fait celle de l'ordinateur. Ces bizarreries seront expliques au chapitre 2. Vous pouvez lancer une nouvelle excution avec les valeurs 100 et 23, tout rentrera dans l'ordre. Remarque fondamentale: lorsque vous crivez le programme dans l'diteur de texte, vous jouez le rle de la machine ; lorsque vous testez votre programme, vous tes un simple utilisateur qui ne sait pas ncessairement comment le programme fonctionne. Les instructions readln et writeln (lire et crire) s'interprtent donc au sens de la machine et non au sens de l'utilisateur (c'est la machine qui lit et crit).

1.5 Quelques commentaires


Le programme dfinitif est donc le suivant: PROGRAM mon_premier_programme ; VAR m,n : integer ; BEGIN write('Donner un premier nombre : ') ; readln(m) ; write('Donner un second nombre : ') ; readln(n) ; writeln('Somme : ',m+n,' Diffrence : ',m-n) ; writeln('Produit : ',m*n,' Quotient : ',m/n) ; writeln('Quotient entier : ',m DIV n,' Reste : ',m MOD n) ; readln ; END.

2
Mr Guerroudj Charg du TP Informatique II, Groupes (B1, B6, A1, A4):

La premire ligne consiste donner un nom au programme (sans espace, sans accent, sans symbole diacritique). Elle est constitue d'une instruction et se termine par un ; comme toute instruction. Cette ligne est facultative.

La deuxime ligne est la ligne de dclaration des variables globales (celles qui peuvent tre utilises partout entre leur dclaration et la dernire ligne) dont le programme aura besoin. Cette ligne est fondamentale. Elle donne des noms (i.e. des rfrences) des zones de stockage de donnes numriques ou non numriques dans la mmoire vive de l'ordinateur et prcise la nature de l'objet stock, ce que l'on appelle le type en informatique. Ici, la ligne se traduit en langage mathmatique par la phrase Soit m et n deux entiers relatifs . Remarquez la prsence du ; qui marque la fin de l'instruction.

La ligne 3 marque le dbut du programme. Ce n'est pas une instruction (mais plutt une balise), donc pas de ; en fin de ligne.

La ligne 4 est compose de deux instructions (chacune se terminant par un ; ). La premire donne l'ordre (write) l'ordinateur d'crire l'cran le message se situant entre les apostrophes et de laisser le curseur la suite de ce qu'il a affich. La seconde donne l'ordre (readln) l'ordinateur de lire le nombre crit par l'utilisateur au clavier, de placer ce nombre dans la case mmoire rfrence m et de placer le curseur en dbut de ligne suivante. Attention, aucune vrification d'orthographe ou de grammaire n'est effectue par le compilateur dans les messages que l'ordinateur doit afficher.

La ligne 5 est du mme acabit que la 4. La ligne 6 est forme d'une unique instruction (writeln) donnant l'ordre d'afficher quatre informations l'cran les unes la suite des autres (sans les sparer par des espaces) et de placer le curseur en dbut de ligne suivante. Les quatre informations (spares par des , ) sont constitues d'un message, du rsultat d'une opration sur des valeurs de variables (le contenu de la zone rfrence), d'un second message et d'un autre rsultat d'opration.

Les lignes 7 et 8 sont du mme acabit que la 6. Remarquez toutefois la prsence d'oprations particulires (DIV et MOD) dont le commentaire qui prcde explique la nature (par exemple donc 12 DIV 8 = 1 et 12 MOD 8 = 4).

La ligne 9 permet l'utilisateur du programme de lire tranquillement ses rsultats. Lorsqu'il a termin, il doit appuyer sur Enter pour valider la fin du travail.

La ligne 10 indique au compilateur la fin du programme (c'est encore une balise). Pour le moment, la syntaxe gnrale d'un programme en langage Pascal est: PROGRAM nom_de_programme ; {aucun espace ni symbole diacritique} VAR liste_des_variables_de_type_entier : integer ; {, comme sparateur} liste_des_variables_de_type_rel : real ; {, comme sparateur} autres_variables : autres_types ; BEGIN {dbut du programme, l o commence l'excution} {saisie des donnes} instructions_des_saisies ; {au moins un readln()}

3
Mr Guerroudj Charg du TP Informatique II, Groupes (B1, B6, A1, A4):

{traitement des donnes} instructions_de_traitement ; {des calculs en rgle gnrale} {affichage des rsultats, ventuellement au cours du traitement} instructions_des_affichages {au moins un writeln()} readln ; {pour prendre le temps de lire les rsultats} END. {un point pour terminer la compilation} Une dernire remarque : en Pascal, on place entre accolades tous les commentaires jugs utiles par le programmeur pour qu'il puisse faire comprendre ses choix de programmation et qu'il puisse se remettre rapidement dans son programme aprs l'avoir laiss de ct quelques temps.

Exercices
Exercice 1.1
crire un programme qui: 1. affiche le message Donnez-moi votre ge : , 2. attend que l'utilisateur donne son ge, 3. affiche le message Prcisez-moi l'anne actuelle : , 4. attend que l'utilisateur donne l'anne en cours, 5. affiche le message Votre anne de votre naissance est : suivi du rsultat du calcul donnant l'anne de naissance de l'utilisateur. Solution PROGRAM mon_age ; VAR age,annee : integer ; BEGIN write('Donnez-moi votre ge : ') ; readln(age) ; write('Prcisez-moi l''anne actuelle : ') ; readln(annee) ; write('Votre anne de votre naissance est : ',annee-age) ; readln ; END.

Exercice 1.2
crire un programme qui saisit trois nombres entiers ( a1, a2 et a3) puis calcule et affiche le reste entier de la division du quotient entier de a1 par a2 avec le quotient entier de a2 par a3. Tester le programme avec a1=1000, a2=238 et a3=44 (le rsultat obtenir est 4). Solution PROGRAM un_calcul ; VAR a1,a2,a3 : integer ; BEGIN write('Donner un premier entier : ') ; readln(a1) ; write('Donner un deuxime entier : ') ; readln(a2) ; write('Donner un troisime entier : ') ; readln(a3) ; write('Rsultat compliqu : ',(a1 DIV a2) MOD (a2 DIV a3)) ; readln ; END.

4
Mr Guerroudj Charg du TP Informatique II, Groupes (B1, B6, A1, A4):

Les oprations sur les types


2. Notion de type
Comme nous l'avons vu dans le chapitre 1, toute zone de stockage temporaire utile un programme doit tre dclare en dbut de programme. Une dclaration comporte deux renseignements: le nom de la zone (appele variable globale) et la nature du contenu de la zone (appele type) afin de rserver un emplacement plus ou moins grand dans la mmoire de l'ordinateur. Quatre types sont connatre pour le programme d'informatique de ECS : Le type nombre entier , not integer, correspond aux entiers relatifs avec une restriction importante : les entiers sont dans l'intervalle (l'ordinateur ne sait pas grer

l'infini). De plus, l'ensemble est cyclique au sens de: l'entier qui suit 32767 est l'entier -32768 . La plupart des rsultats farfelus que vous pouvez obtenir l'excution d'un programme sont ds cette restriction (comme lors la premire excution du programme 1). Le type nombre rel , not real, correspond en fait des nombres dcimaux (l'ordinateur ne sait pas grer une infinit de dcimales) dans une plage relativement tendue. Ces nombres sont toujours affichs, par dfaut, sous la forme scientifique (0,00123456789 est crit 1.23456789E03). Le type tableau de nombres , not ARRAY, une ou plusieurs lignes. Le type boolen, not boolean.

2.1 Affectation
Le contenu d'une variable est appel valeur de la variable. Pour modifier cette valeur, on a dj vu au chapitre 1 qu'il suffit de saisir sa valeur au clavier l'aide de la procdure readln, l'inconvnient tant que seul l'utilisateur peut modifier cette valeur avec cette technique. Toutefois, un programme peut quand mme modifier la valeur d'une variable en lui affectant une nouvelle valeur.
Dfinition

L'affectation consiste placer une valeur dans la variable soit directement par le programme soit comme rsultat d'une combinaison d'oprations effectues par le programme: soit de manire absolue en donnant la valeur exacte, avec des calculs ou non (la variable a de type integer) : a := 1 ; ou bien a := (100-3) DIV 4+1 ; (avec les rgles de priorits en usage en mathmatiques), le symbole := devant s'interprter comme suit : mettre le rsultat du calcul dans la zone mmoire rfrence a. soit de manire relative, en rutilisant la valeur prcdente (la variable x de type real) : x := x+0.5 ; consiste augmenter la valeur de x de 0,5. On interprte cela comme suit: prendre la valeur de la variable x (le x du membre de droite), lui ajouter 0,5 et mettre le rsultat dans la variable rfrence x (le x du membre de gauche). De manire gnrale, une affectation est de la forme :

5
Mr Guerroudj Charg du TP Informatique II, Groupes (B1, B6, A1, A4):

lieu_de_stockage := resultat_d_un_calcul ; La ligne de programme prcdente cre une erreur de compilation ( type mismatch ) si la variable x est de type integer. En effet, l'opration x := x+0.5 gnre ncessairement un rsultat de type real (puisque 0,5 ne peut pas tre entier) qui ne peut se loger dans une variable de type entier. Par contre, tout entier est implicitement considr comme rel si ncessaire. Exemple Un utilisateur fournit les nombres 2 et 3 au programme qui suit. Qu'affiche la machine ? PROGRAM exemple_affectations ; VAR a,b : real ; BEGIN write('Donner a : ') ; readln(a) ; write('Donner b : ') ; readln(b) ; a := 2*a+b-1 ; b := a-3*b+1 ; writeln('a = ',a,' et b = ',b) ; readln ; END.

2.2 Oprations et fonctions usuelles


Dfinition

Les oprations usuelles entre deux nombres entiers (c'est dire que le rsultat est de type integer) sont : + - * DIV et MOD o DIV dsigne le quotient (entier) de la division euclidienne et MOD le reste (entier) de la division euclidienne. Le rsultat de chacune de ces opration est donc de type integer pourvu que les oprandes le soient (sinon il y a une erreur de compilation). Les rgles de priorits usuelles des oprations s'appliquent (*, DIV et MOD sont prioritaires sur + et -).

Les oprations usuelles entre deux nombres rels (ou bien entre un nombre rel et un nombre entier, ou bien encore entre un nombre entier et un nombre rel, ou bien mme entre deux nombres entiers) sont : + - * et / avec les rgles usuelles de priorits des oprations. Remarquez que la barre de division gnre toujours un rsultat de type real mme si les deux oprandes sont de type integer.

Les fonctions usuelles sur les rels (ou les entiers) sont: sqrt() (racine carre : square root), abs() (valeur absolue), sin() et cos().

Les fonctions puissances n'existent pas, la fonction tangente non plus . On peut convertir un real en un integer l'aide de la fonction partie entire trunc() ou bien arrondi l'entier le plus proche round() (cette dernire fonction n'est pas explicitement au programme mais peut se rvler utile).

Remarques Attention ne pas confondre les oprations de divisions DIV et /. Ainsi :

6
Mr Guerroudj Charg du TP Informatique II, Groupes (B1, B6, A1, A4):

5 DIV 3 donne le rsultat 1 (puisque 5/3 donne le rsultat 1.666666667E00.

et

).

5.1 DIV 3.2 provoque une erreur de compilation (que les valeurs soient crites comme cela ou bien que les valeurs soient contenues dans des variables de type real). 5.1/3.2 donne le rsultat 1.593750000E00. Attention aussi la gestion des types en sortie de calculs. Ainsi : sqrt(4) donne le rsultat 2.000000000E00 (rel) et non 2 (entier). exp(ln(2)) donne le rsultat 2.000000000E00 (rel) et non 2 (entier).

Exercices
Exercice 2.1
crire un programme qui, d'abord saisit deux entiers (stocks dans des variables notes a et b), ensuite permute les valeurs de ces deux variables (c'est dire que la variable a doit contenir au final la valeur initiale de b et vice versa) et enfin affiche ces nouvelles valeurs. On rappelle que toute modification de la valeur d'une variable entrane la perte irrmdiable de l'ancienne valeur. Un exemple d'excution du programme est : Donner un entier a : 3 Donner un entier b : -5 On permute les valeurs Nouvelle valeur de a : -5 Nouvelle valeur de b : 3

Solution PROGRAM permutation ; VAR a,b,c : integer ; BEGIN write('Donner un entier a : ') ; readln(a) ; write('Donner un entier b : ') ; readln(b) ; { On stocke le contenu de la variable a avant de l'craser } c := a ; { On remplace le contenu de la variable a par celui de la variable b } a := b ; { On remplace le contenu de la variable b par celui de la variable c qui contient l'ancienne valeur de a } b := c ; write('Valeur de a : ',a) ; write('Valeur de b : ',b) ; readln ; END.

7
Mr Guerroudj Charg du TP Informatique II, Groupes (B1, B6, A1, A4):

Exercice 2.2
crire un programme qui, successivement: 1. 2. saisit 3 nombres entiers positifs (dans des variables nommes n1, n2 et n3), calcule et stocke la moyenne arithmtique (dans la variable a), la moyenne gomtrique (dans la variable g), la moyenne harmonique (dans la variable h) et la moyenne quadratique (dans la variable q), 3. affiche ces quatre nombres sur quatre lignes successives (avec un message indicatif explicite). Tester le programme avec n1=1, n2=2 et n3=3. On doit obtenir les rsultats suivants : a=2.000000000E00 g=1.817120593E00 h=1.636363636E00 q=2.160246899E00 On rappelle que : la moyenne arithmtique est la moyenne usuelle, la moyenne gomtrique est la racine arithmtique des logarithmes des inverses, Solution la moyenne quadratique est la racine carre de la moyenne arithmtique des carrs. -ime du produit des nombres dont on calcule la moyenne, c'est dire l'exponentielle de la moyenne nombres, la moyenne harmonique est l'inverse de la moyenne arithmtique des

PROGRAM moyenne ; VAR n1,n2,n3 : integer ; a,g,h,q : real ; BEGIN write('Donner un entier strictement positif n1 : ') ; readln(n1) ; write('Donner un entier strictement positif n2 : ') ; readln(n2) ; write('Donner un entier strictement positif n3 : ') ; readln(n3) ; a := (n1+n2+n3)/3 ; g := exp((ln(n1)+ln(n2)+ln(n3))/3) ; h := 3/(1/n1+1/n2+1/n3) ; q := sqrt((n1*n1+n2*n2+n3*n3)/3) ; writeln('Moyenne arithmtique : ',a) ; writeln('Moyenne gomtrique : ',g) ; writeln('Moyenne harmonique : ',h) ; writeln('Moyenne quadratique : ',q) ; readln ;

8
Mr Guerroudj Charg du TP Informatique II, Groupes (B1, B6, A1, A4):

END.

Exercice 2.3
crire un programme qui saisit un rel x et affiche, successivement, son image par les fonctions: , , ,

Solution PROGRAM fonctions ; VAR x,f : real ; write('Donner un rel x : ') ; readln(x) ; f := sin(x)/x ; writeln('Rsultat 1 : ',f) ; f := x*exp(x) ; writeln('Rsultat 2 : ',f) ; f := x*x*x+6*x*-9*x+pi ; writeln('Rsultat 3 : ',f) ; f := x*sqrt(x+2)/((x+1)*(x-3)) ; writeln('Rsultat 4 : ',f) ; f := sqrt(trunc(x*x)) ; writeln('Rsultat 5 : ',f) ;

Les tableaux et l'instruction itrative "FOR...TO...DO..."


3. Exemple: calcul d'un terme d'une suite rcurrente
L'objectif est de calculer (de manire approche bien sr) le terme de rang de la suite dfinie par :

Recopier et tester le programme qui suit. PROGRAM suite_recurrente_tableau ; VAR u : ARRAY [0..1000] OF real ; k,n : integer ; BEGIN write('Donner u0 : ') ; readln(u[0]) ; write('Donner n : ') ; readln(n) ; FOR k := 0 TO n-1 DO u[k+1] := sqrt(1+u[k]*u[k])-1 ;

9
Mr Guerroudj Charg du TP Informatique II, Groupes (B1, B6, A1, A4):

FOR k := 0 TO n DO writeln('u',k,' = ',u[k]) ; readln ; END. Remarques L'entier fourni par l'utilisateur doit tre un lment de . : on dit que l'on effectue une On commence par calculer tous les termes de la suite du rang 1 au rang boucle ou bien que l'on itre l'instruction de calcul par rcurrence. Ensuite on affiche, un par un, tous les termes du rang 0 au rang (ici encore on dit que l'on itre

l'instruction d'affichage ou bien que l'on effectue une boucle pour l'affichage). Toutefois, il est possible d'afficher les termes au fur et mesure des calculs ; pour cela on remplace les lignes 7 et 8 du programme prcdent ce qui donne le programme qui suit : PROGRAM suite_recurrente_tableau ; VAR u : ARRAY [0..1000] OF real ; k,n : integer ; BEGIN write('Donner u0 : ') ; readln(u[0]) ; write('Donner n : ') ; readln(n) ;

writeln('u',0,' = ',u[0]) ; FOR k := 0 TO n-1 DO BEGIN u[k+1] := sqrt(1+u[k]*u[k])-1 ; writeln('u',k+1,' = ',u[k+1]) ; END ; readln ; END. Dans la mesure o le programme doit effectuer deux instructions chaque itration (calcul et affichage), il faut le prciser la machine par un marqueur de dbut (BEGIN) et un marqueur de fin (END ;). On dit que l'on a ainsi une instruction compose ou un bloc d'instructions. On peut aussi remplacer la ligne : FOR k := 0 TO n-1 DO u[k+1] := sqrt(1+u[k]*u[k])-1 ; par la ligne :

FOR k := 1 TO n DO u[k] := sqrt(1+u[k-1]*u[k-1])-1 ;

3.1 Syntaxe de la dclaration d'un tableau


Dfinition d'un tableau

10
Mr Guerroudj Charg du TP Informatique II, Groupes (B1, B6, A1, A4):

Un tableau se dclare comme une variable, puisque c'est une liste de variables numrotes. La dclaration s'effectue de la manire suivante : nom_tableau : ARRAY [debut..fin] OF type_voulu ; Remarques debut et fin sont deux nombres de type integer avec debut<fin ; debut et fin ne peuvent pas tre des variables (mmes entires) car un tableau doit avoir une taille fixe et dfinie l'avance (l'ordinateur ne peut pas rserver un nombre inconnu d'emplacements de mmoire) ; les deux points (..) sont obligatoires ; chaque lment du tableau est une variable du type type_voulu (l'un des types

usuels: integer, real, boolean) ; l'lment numro k ( ) du tableau nom_tableau est la variable nom_tableau[k] qui

s'utilise comme toutes les autres variables pour la saisie, l'affectation et l'affichage ; les instructions readln(nom_tableau) et writeln(nom_tableau) produisent une erreur de compilation car il faut saisir et afficher un tableau lment par lment.

3.2.Syntaxe de l'instruction itrative "FOR...TO...DO..."


Dfinition (cas d'une instruction unique itrer)

Lorsque l'on a qu'une seule instruction itrer (i.e. rpter) comme c'est le cas en dbut d'exemple prcdant), la syntaxe est la suivante: FOR variable_muette := valeur_debut TO valeur_fin DO instruction ; Remarques La variable variable_muette est presque toujours de type integer (elle peut, exceptionnellement, tre de type boolean). Cette variable est appele compteur de boucle (devinez pourquoi!). Les expressions valeur_debut et valeur_fin sont obligatoirement des nombres ou des variables de type integer. Le principe de la boucle est d'incrmenter le compteur variable_muette, c'est dire que instruction est ralise successivement: pour variable_muette=valeur_debut, puis pour variable_muette=valeur_debut+1, et ainsi de suite jusqu' ce que variable_muette=valeur_fin.

Lorsque la dernire itration de instruction est acheve, la machine passe l'instruction qui suit. Lorsque valeur_debut>valeur_fin, l'instruction instruction n'est jamais ralise et la machine passe directement l'instruction suivante (c'est le cas dans l'exemple qui prcde si on fournit la valeur 0 au programme).

11
Mr Guerroudj Charg du TP Informatique II, Groupes (B1, B6, A1, A4):

La tradition veut que nom_variable soit i ou j ou k (comme pour les notations de sommes ou de produits). Il convient donc de rserver ces noms de variables pour effectuer des itrations. Il est possible de dcrmenter le compteur (on compte rebours). Pour cela, on remplace le mot rserv TO par DOWNTO. Enfin, n'oubliez jamais de sauvegarder votre programme avant de l'excuter : si la boucle est mal programme, elle peut alors ne jamais se terminer et l'ordinateur parat ainsi plant .
Dfinition (cas d'une instruction compose itrer)

Lorsque l'on souhaite grouper plusieurs instructions (donc au moins deux), on dlimite ce groupe d'instructions, appel instruction compose, par BEGIN END ; comme suit: BEGIN instruction_1 ; instruction_2 ; ... instruction_n ; END ; La syntaxe de l'itration de ce type de bloc est donc : FOR nom_variable := valeur_debut TO valeur_fin DO BEGIN instruction_1 ; ... instruction_n ; END ; Remarques Les commentaires qui prcdent s'appliquent aussi dans ce cas. Marquez l'indentation (dcalage puis alignement des instructions correspondant un mme niveau d'excution) pour faciliter la (re)lecture et la correction d'ventuelles erreurs. Si vous oubliez la dlimitation de bloc ( BEGIN/END), seule instruction_1 sera itre. Les autres instructions ne seront excutes qu' l'issue de toutes les itrations de instruction_1 : elles ne seront donc excutes qu'une seule fois, puisqu'elles ne font pas partie de la boucle.

Exercices
Exercice 3.1
Pour chacune des suites, crire un programme qui saisit son premier terme rang puis calcule et affiche le terme : 1. 2. et un

12
Mr Guerroudj Charg du TP Informatique II, Groupes (B1, B6, A1, A4):

3. Solution

(indication : interdiction d'utiliser l'exponentielle mais utiliser une suite auxiliaire pour le calcul de )

PROGRAM suites ; VAR k,n integer ; u,v : ARRAY [0..1000] OF real ; BEGIN writeln('Premire suite') ; write('rang final : ') ; readln(n) ; write('premier terme (u0) : ') ; readln(u[0]) ; FOR k := 1 TO n DO u[k] := u[k-1]*exp(u[k-1]) ; writeln('u',n,' : ',u[n]) ; writeln('Deuxime suite') ; write('rang final : ') ; readln(n) ; write('premier terme (u0) : ') ; readln(u[0]) ; FOR k := 1 TO n DO u[k] := sqrt(k*u[k-1]) ; writeln('u',n,' : ',u[n]) ; writeln('Troisime suite') ; write('rang final : ') ; readln(n) ; v[0] := 1 ; write('premier terme (u0) : ') ; readln(u[0]) ; FOR k := 1 TO n DO BEGIN u[k] := (3+u[k-1])*u[k-1]/v[k-1] ; v[k] := 2*v[k1] END ; writeln('u',n,' : ',u[n]) ; readln ; END.

Exercice 3.2
crire un programme qui saisit les deux premiers termes calcule et affiche le terme de la suite dfinie par : et et un entier puis

Calculer Solution

puis

PROGRAM suite_de_fibonacci ; VAR k,n integer ; u : ARRAY [0..1000] OF real ; BEGIN write('rang final : ') ; readln(n) ; u[0] := 0 ; u[1] := 1 ; FOR k := 2 TO n DO u[k] := u[k-1] + u[k-2] ; writeln('u[',n,'] : ',u[n]) ; readln ; END.

13
Mr Guerroudj Charg du TP Informatique II, Groupes (B1, B6, A1, A4):

Exercice 3.3
crire un programme qui: 1. saisit un entier 2. permute les puis un tableau (not x) de lments de ce rels, de sorte que chaque

tableau

lment x[i] (pour

) voit son contenu remplac par la valeur de

l'lment x[i+1] et l'lment x[n] par la valeur de x[1], 3. affiche les lments du tableau ainsi actualis. Solution PROGRAM permutation ; VAR i,n integer ; x : ARRAY [0..100] OF real ; BEGIN { Saisie du nombre de cases puis des valeurs dans les cases } write('nombre de cases du tableau : ') ; readln(n) ; FOR i := 1 TO n DO BEGIN write('x',i,' : ') ; readln(x[i]) ; END ; { On utilise la case 0 du tableau x pour ne pas perdre le contenu de la case 1 la premire tape de la boucle } FOR i := 0 TO n-1 DO x[i] := x[i+1] ; { On utilise le contenu de la case 0 (x1 initial) pour le mettre dans la case n } x[n] := x[0] ; { Affichage des valeurs des cases } FOR i := 1 TO n DO writeln('x',i,' = ',x[i]) ; readln ; END.

14
Mr Guerroudj Charg du TP Informatique II, Groupes (B1, B6, A1, A4):