Vous êtes sur la page 1sur 23

Cours Algorithmique Pr S.

EL BERNOUSSI Facult des Sciences de Rabat 2011-2012

I-Gnralits
I-1. Introduction Toute action ralise par une machine a t programme par un tre humain ; un ordinateur ne dcide de rien, il fait "btement" ce qu'il lui a t dict par un programme. Mais qu'est-ce que programmer ? Ecrire une srie d'actions lmentaires comprhensibles par le "cerveau" de la machine, cette succession permettant de raliser une action plus complique. Chacune de ces actions plus compliques, tant connue de la machine, peut tre utilise comme les actions lmentaires du dpart pour construire des actions encore plus complexes. La machine a son propre langage appel langage machine. Il serait trs compliqu d'crire directement en langage dit de bas niveau. Nous utilisons donc des langages dits "volus" comprhensibles pour un dveloppeur initi. Ce langage sera ensuite traduit en langage machine. Malgr que les langages soient de plus en plus proches du langage humain, ils ne sont pas directement lisibles. C'est pourquoi, nous allons utiliser un pseudo-langage, comportant toutes les structures de base d'un langage de programmation. Il suffira ensuite de traduire le "pseudo" en langage volu en fonction des possibilits de ce langage. Chaque langage de programmation fournit une liste des instructions qui sont implmentes et que l'on peut donc utiliser sans les rcrire en dtail. Ces instructions peuvent : Soit s'enchaner les unes aprs les autres, on parle alors de squence d'instructions; Ou bien s'excuter dans certains cas et pas dans d'autres, on parle alors de structure alternative; Ou se rpter plusieurs fois, on parle alors de structure rptitive. I-2. Dmarche de rsolution de problme par ordinateur Conception par le dveloppeur

Analyse du besoin.

Cours Algorithmique Pr. S. El Bernoussi

Description du contexte et reformulation des objectifs. Identification de la nature des objets manipuls. Distinction des entres, des sorties et des traitements.

La compilation et lexcution par la machine: Un langage de programmation sert crire des programmes de manire les excuter. Des outils permettent de traduire le langage crit par le programmeur en langage machine. Ils fonctionnent de la manire suivante : Le compilateur analyse le langage source afin de vrifier la syntaxe et de gnrer un fichier objet en langage intermdiaire assez proche du langage machine. Tant qu'il y a des erreurs de syntaxe, le compilateur est incapable de gnrer le fichier objet. Dmarche de rsolution de problme par ordinateur Souvent, on utilise dans un programme des fonctions qui soit ont t crites par quelqu'un d'autre soit sont fournies dans une bibliothque (graphique par exemple). Dans ce cas, le compilateur ne les connat pas et ne peut donc pas gnrer le langage intermdiaire correspondant. C'est le travail de l'diteur de liens que d'aller rsoudre les rfrences non rsolues. C'est dire que lorsqu'il est fait appel dans le fichier objet a des fonctions ou des variables externes, l'diteur de liens recherche les objets ou bibliothques concerns et gnre l'excutable. Il se produit une erreur lorsque l'diteur de liens ne trouve pas ces rfrences. Exploitation par l'utilisateur : Pour permettre au programme de dialoguer avec l'utilisateur, c'est dire d'afficher un rsultat l'cran et de lire une entre au clavier, il faut au moins deux instructions une pour lire, l'autre pour afficher. Dfinitions

Algorithme : Ensemble de rgles opratoires rigoureuses, ordonnant un processeur dexcuter dans un ordre dtermin un nombre fini doprations lmentaires ; il oblige une programmation structure.

Dfinitions Instruction : toute expression excutable se terminant par un point-virgule

Algorigramme : Reprsentation graphique de lalgorithme. Pour le construire, on utilise des symboles normaliss :

Dfinitions Dfinition

Cours Algorithmique Pr. S. El Bernoussi

Le langage de description dalgorithme : Un ensemble de mots cls et de structures permettant de dcrire de manire complte, claire, lensemble des oprations excuter sur des donnes pour obtenir des rsultats Un programme : une suite d'instructions excutes par la machine

Dfinitions Structure dun algorithme Lalgorithme est compos de 4 parties principales : Len-tte de lalgorithme : On spcifie un nom quon attribue lalgorithme, il permet didentifier un algorithme. Les dclarations (partie dclarative) : dans cette partie, on dclare toutes les variables et fonctions ncessaires lexcution de lalgorithme. elle est prcde par le mot-cl variables, cette liste est place en dbut dalgorithme. Le corps (partie bloc dinstructions) : dans cette partie de lalgorithme, sont places les tches (instructions, oprations) excuter, elle est dlimite par les mots-cls dbut et fin Les commentaires : Permettre une interprtation aise de lalgorithme, son utilisation est vivement conseille. Variables et constantes Les variables Une variable est une case mmoire qui contient la valeur utilise pendant lexcution de lalgorithme. Le contenu de la variable varie durant lexcution de lalgorithme. On distingue les variables par des noms qui sont des identificateurs. Les variables peuvent stocker des chiffres des nombres, caractres, des chanes de caractres, .dont la valeur peut tre modifie au cours de lexcution de lalgorithme Mot cl : Var Les constantes et les variables sont dfinies dans la partie dclarative par deux caractristiques essentielles, savoir : Les Identificateurs et le Type:

Les identificateurs : servent dsigner les diffrents "objets" manipuls par le programme: variables, fonctions, etc. Ils sont forms d'une suite de caractres (lettres ou les chiffres), le premier d'entre eux tant ncessairement une lettre. Noter que: Le symbole '_' est considr comme une lettre.

Cours Algorithmique Pr. S. El Bernoussi

On distingue les majuscules et les minuscules, ainsi: 'Nom_var' est diffrent de 'nom_var':

Le type : il dtermine la nature de la variable ou de la constante (entier, rel, chane de caractres) La syntaxe de la dclaration des variables : var1, var2, a,b: type_de_variables ; Gnralement les langages de programmation offrent les types suivants : Le type Entier: Destin contenir un nombre entier positif ou ngatif. La dclaration des variables de type entier : variable1, variable2 : ENTIER ; Le type Rel: Il reprsente les nombres rels IR c'est dire qui comportent des dcimales. La dclaration des variables de type rel : variable1, variable2 : REEL ;

Le Type Caractre: Les variables de type caractre contiennent des caractres alphabtiques ou numriques (de 0 9), mais dans ce cas ils ne sont pas considrs comme tant des nombres et on ne peut pas faire d'oprations dessus. Une variable de type caractre se dclare ainsi : variable1, variable2 :CAR ; Le type Boolen: Il est souvent ncessaire lorsque l'on crit un programme qui introduit des variables qui prennent les valeurs vrai ou faux ou les valeurs oui ou non. Pour cela, il existe un type particulier dont les variables ne peuvent prendre que 2 valeurs : vrai ou faux. La dclaration s'crit : variable1, variable2,. : BOOLEEN ;

Les tableaux ( voir le chapitre Tableaux) : On peut regrouper plusieurs variables sous un mme nom, chacune tant alors repre par un numro. C'est ce que l'on appelle un tableau. On peut faire un tableau avec des variables de n'importe quel type. Le ime lment d'un tableau appel tab sera adress par tab[i-1] car lindice du premier lment dans un tableau est 0. Il existe galement des tableaux deux dimensions, dans ce cas tab[i-1,j-1] reprsente la jme colonne et la ime ligne.

Exemple : TABLEAU CAR mot[10]; TABLEAU ENTIER liste_nb[25] ; TABLEAU CAR MOTS[10][20]; Le premier exemple montre la dclaration d'un tableau nomm mot de 10 caractres, dans le deuxime exemple liste_nb reprsente un tableau qui peut contenir jusqu' 25 entiers, le troisime exemple dclare MOTS un tableau de dimensions 2 qui va contenir des caractres.

Les constantes Elles reprsentent des chiffres, des nombres, des caractres, des chanes de caractres, . Dont la valeur ne peut pas tre modifie au cours de lexcution de lalgorithme Mot cl : const Exemple Algorithme Dclaration ; Var a, b, longueur :Entier ; x, y, surface : Reel ;

Cours Algorithmique Pr. S. El Bernoussi

Const PI=3,14 ;

L'affectation Elle consiste donner une valeur la variable dclare ou de changer sa valeur par une expression. Scrit : Nom_de_la_Variable expression ; Se lit "Nom_de_la_variable reoit expression" Signifie que nous mmorisons la valeur de lexpression un endroit nomm Nom_de_la_variable. Nous pourrions aussi dire que nous rangeons une valeur dans des cases de la mmoire que nous nommons Nom_de_la_variable. Laffectation se fait toujours en 2 temps : 1- Evaluation de lexpression situe droite du symbole. 2- Affectation du rsultat lidentificateur de variable Ainsi dans linstruction daffectation suivante y 2*x + 3 Il ne faut jamais confondre valeur et variable. Une variable est caractrise par :

Une adresse c'est dire un emplacement dans la mmoire de la machine, Un type permettant d'indiquer la nature de l'information contenue, Eventuellement une longueur si le type ne le dfinit pas.

Avec des constantes : Algorithme affectation1 ; Var Longueur, X : ENTIER ; X2 : REEL; A : CAR ; Debut X 10 ; Avec des variables : Algorithme affectation2 ; Var X : ENTIER ; S, somme, X2 : REEL ; Debut X 12 ; X2 10.5 ; Avec des expressions : Algorithme affectation3 ; Var Longueur, Largeur : ENTIER ; X, Y, A, B, surface, somme : REEL ; Debut X 2.3 ; Y3.4 ;

Cours Algorithmique Pr. S. El Bernoussi

AX ; B Y ;

Les oprateurs Exemple : Algorithme operateurs_arithmtiques ; Var Longueur, Largeur, DivEnt : ENTIER; X, Y, A, B, somme, Division, RestDivEnt : REEL; Dbut X 2.3 ; Y 3.4 ; AX ; BY; Longueur 100 ; Largeur 40 ; somme Longueur + Largeur ; division X/Y ; ResteDivEnt Longueur MOD Largeur ; // ResteDivEnt prend la valeur 20 DivEnt Longueur DIV Largeur ; // DivEnt prend la valeur 2 Fin.

Les oprateurs relationnels ou de comparaisons Les symboles opratoires sont classs dans le tableau ci-dessous

Exemple : Algorithme comparaison ; Var X, Y: REEL ; A, B, C, D, E, F: BOOLEEN ; Dbut X 2.3 ; Y 3.4 ; A(X >Y) ; // A est faux B(Y >X); // B est vrai Fin.

Les oprateurs logiques Les oprateurs logiques Les oprateurs logiques les plus utiliss sont ET, OU et NON. Le rsultat dune opration logique est de type boolen

Les instructions dEntres Sorties Lecture des donnes Gnralement, les algorithmes ont besoin de donnes traiter. Ces donnes peuvent provenir de lextrieur. C'est--dire acqurir des donnes depuis le priphrique dentre (clavier) ou une source de donnes (fichier ou collection) La syntaxe de linstruction qui permet dacqurir les donnes est :

Cours Algorithmique Pr. S. El Bernoussi

Variable1, variable2, , variableN : Sont des variables auxquelles les donnes seront affectes dans lordre de saisie.

Lecture des donnes Exemple : Algorithme lecture ; Var Longueur, largeur, soustraction : ENTIER ; A, B, somme, produit : ENTIER ; Dbut Lire (Longueur) ; // lit un entier et laffecte la variable Longueur Lire (Largeur) ; // lit un entier et laffecte la variable Largeur Soustraction Longueur largeur Lire (A, B) ; // lit deux entiers et les affecte aux variables respectivement A et B Somme A +B ; Produit A * B ; Fin.

Ecriture des donnes Les rsultats trouvs par lalgorithme sont transfrs vers lextrieur. Ils sont affichs sur le priphrique de sortie (cran) ou ils sont crits dans une source de donnes (fichier, base de donnes, collection,) La syntaxe de linstruction qui permet laffichage des donnes est : Ecrire (expr1, expr2,.., exprN) ; Expr1, expr2,, exprN : sont des expressions. Elles peuvent tre aussi des variables ou des messages sous forme de chanes de caractres Exemple : Algorithme affichage ; Var A, B, somme : ENTIER Dbut // lit les deux entiers et les affecte aux variables respectivement A et B Lire (A, B) ; Somme A+B ; // affiche le message la valeur de A est : et la valeur contenue dans la variable A Ecrire (" la valeur de A est : " , A) ; // affiche le message la valeur de B est : et la valeur contenue dans la variable B Ecrire (" la valeur de Best : " , B) ; // affiche le message la somme est : et la valeur contenue dans la variable somme Ecrire (" la somme est : " , somme) ; // affiche le message le produit est : et la valeur de A*B Ecrire (" le produit est : " , A*B) ; Fin.

Exercices Exercice 1 :

Cours Algorithmique Pr. S. El Bernoussi

Ecrivez un algorithme qui lit le jour, le mois et lanne au clavier et crit la date sur lcran sous forme : jour/mois/anne. Exercice 2 : Ecrivez un algorithme qui lit deux rels et affiche sur lcran leur somme, leur produit et la moyenne Exercice 3 : Ecrire un algorithme qui calcule et affiche le prix toute taxe comprise (PTTC), le prix hors taxe (PHT) et le montant de la TVA (MTVA) dun article, partir du prix unitaire (PU) et de la quantit (Q) la TVA tant fixe 20%. Utiliser les formules suivantes : PHT= PU * Q MTVA= PHT * TVA PTTC= PHT + PHT * TVA

La structure alternative (conditionnelle)

Il est souvent ncessaire lorsquon crit un programme de distinguer les cas conditionnant l'excution de telles ou telles instructions. Pour ce faire, on utilise une structure alternative : si on est dans tel cas, alors on fait cela sinon on fait ceci. Dans cette structure, lexcution dun des 2 traitements distincts ne dpend que du rsultat dun test effectu sur la condition qui peut tre une variable ou un vnement ; Si la condition est vrifie seul le 1er traitement est excut. Si la condition nest pas vrifie seul est effectu le second traitement. Syntaxe SI condition ALORS Action(s) si vrai [SINON action(s) si faux] FINSI Exemple : Algorithme exemple1 ; Var X,Y : ENTIER ; Dbut Ecrire (" tapez la valeur de X : ") ; Lire(X) ; Ecrire (" tapez la valeur de Y : ") ; Lire(Y) ; Si (X > Y) Alors Ecrire (" le plus grand cest : ", X) ; // une seule instruction FinSi Fin Exemple 2 : Pour avoir la valeur absolue (appele nAbsolu dans notre exemple) d'un nombre (n1 dans notre exemple), s'il est ngatif nous le multiplions par 1 sinon la valeur absolue est gale au nombre :

Cours Algorithmique Pr. S. El Bernoussi

La structure alternative (conditionnelle) SI (n 1 < 0) ALORS nAbsolu n1 * (-1) SINON nAbsolu n1 FINSI Exercices Exercice 1 : Ecrire un algorithme qui affiche le plus grand nombre partir de deux nombres saisis par lutilisateur Exercice 2 : Ecrire un algorithme qui affiche le plus grand nombre partir de 3 nombres saisis par lutilisateur Exercice 3 : Ecrire un algorithme qui calcule et affiche le prix toute taxe comprise (PTTC), le prix hors taxe (PHT) et le montant de la TVA (MTVA) dun article, partir du prix unitaire (PU) , de la quantit (Q) et du code. La TVA dpend du code selon le tableau suivant: Exercice 4 Donner un algorithme pour la rsolution de lquation de second degr.

Les conditions Pour exprimer les conditions on utilise les oprateurs conditionnels ou de comparaison Les actions Les actions Les actions qui suivent sinon ou alors peuvent tre : une simple instruction une suite d'instructions spares par des point-virgule une autre alternative une instruction rptitive Exemple (Algorigramme): Si condition alors Action1 ; Sinon

Cours Algorithmique Pr. S. El Bernoussi

Action2 ; Fin si Un programme a presque toujours pour rle de rpter la mme action un certain nombre de fois. Pour ce faire, nous utiliserons une structure permettant de dire " Excuter telles actions jusqu' ce que telle condition soit remplie". Bien qu'une seule soit ncessaire, la plupart des langages de programmation proposent trois types de structure rptitive. Voici celles de notre pseudo-langage.

TantQue Syntaxe : TantQue condition Action(s) FinTQ Ce qui signifie : tant que la condition est vraie, on excute les actions Exemple : Algorithme TantQue_Exemple Var a,b : ENTIER ; Dbut a4 ; b5 ; TantQue (a>0) bb+1; aa-1 ; FinTQ Ecrire("b=", b) ; Fin

Faire Jusqu' Syntaxe : FAIRE Action(s) JUSQUA condition Ce qui signifie que l'on excute les actions jusqu' ce que la condition soit vraie. Algorithme JusQua_Exemple Var a,b : ENTIER ; Dbut a4 ; b5 ; Faire bb+1; aa-1 ; Jusqu' (a<0) Ecrire("b=", b) ; Fin

Cours Algorithmique Pr. S. El Bernoussi

10

Pour

Trs souvent, nous utilisons une structure rptitive avec un compteur et nous arrtons lorsque le compteur a atteint sa valeur finale. C'est pourquoi la plupart des langages de programmation offrent une structure permettant d'crire cette structure rptitive plus simplement. Dans le pseudo-langage c'est la structure pour : Pour variable ALLANT DE valeur initiale A valeur finale [PAS valeur du pas] Action(s) FinPour Lorsque le PAS est omis, il est suppos gal +1. Exemple :calcul du factoriel dun nombre Pour : nFactoriel 1; POUR i ALLANT DE 1 A 10 nFactoriel nFactoriel * i ; FinPour Le mme exemple avec Tant que : TanTque : n1 1 ; nFactoriel 1; TantQue (n1 < 10) nFactoriel nFactoriel * n1 ; n1 n1 + 1 ; FINTQ

Exercices Exercice 1: 1. crivez un algorithme qui affiche les entiers de 1 100. 2. crivez un algorithme qui affiche les entiers pairs de 1 100. Exercice 2: 1. crivez un algorithme qui calcule la somme des n premiers nombres entiers positifs. Lalgorithme demandera lutilisateur dentrer la valeur de n. 2. crivez un algorithme qui calcule la somme des n premiers nombres entiers positifs paires. Lalgorithme demandera lutilisateur dentrer la valeur de n.

Exercice 3: 1. Excuter le programme suivant : Var i , j : ENTIER debut Pour i=1 jusqu 5 Ecrire(" i= ", i) Pour j=1 jusqu 3 Ecrire("le produit de",i," et ",j," est:",i*j)

Cours Algorithmique Pr. S. El Bernoussi

11

FinPour FinPour Fin 2. Excuter le programme suivant : Var i, j : Entier debut Pour i=1 jusqu 5 Ecrire(" i= ", i) FinPour Pour j=1 jusqu 3 Ecrire("le produit de",i," et ",j," est:",i*j) FinPour Fin Exercice4: crivez un algorithme qui calcule la somme S suivante : S = 1 + 2 + 3 + + (n-1) + n. Lalgorithme demandera lutilisateur dentrer la valeur de n.

Exercice 5: Soit lalgorithme suivant : vari a,b,r : entiers dbut ecrire("donner les valeurs de a et b : ") lire(a,b) TantQue b>0 faire r <- a MOD b // aMODb :reste de la division de a par b a <- b b <- r FinTanQue crire(a) Fin 1. Excuter lalgorithme (afficher dans un tableau les valeurs de a, b et r) pour : a. a = 50 et b = 45 b. a = 21 et b = 13 2. Que fait lalgorithme prcdant. Exercice 6: Un nombre entier p (diffrent de 1) est dit premier si ses seuls diviseurs positifs sont 1 et p. Ecrivez un algorithme qui effectue la lecture dun entier p et dtermine si cet entier est premier ou non.

Les structures de donnes statiques Un ensemble de valeurs portant ainsi le mme nom de variable et repres par un nombre, sappelle un tableau, et le nombre qui sert a reprer chaque valeur sappelle un indice.

Cours Algorithmique Pr. S. El Bernoussi

12

Un tableau de taille n est une structure trs simple constitue de n emplacements conscutifs en mmoire. Il est donc possible d'accder a un lment d'un tableau en temps constant pourvu que l'on connaisse sa position (ou indice). Un tableau est donc une structure trs simple et trs efficace. Il n'est cependant pas possible de modifier la taille d'un tableau, ce qui est gnant pour un certain nombre d'algorithmes. On dit cette structure est statique. Le nombre dlments qu'elle contient ne peut pas varier.

Exemple Const Max 200 var tableau Note[Max],i,somme,n : entier moyenne : reel dbut ecrire("entrer le nombre de notes :") lire(n) /* saisir les notes */ ecrire("entrer les ",n," notes :") pour i allant de 0 n-1 faire lire(Note[i]) finpour /* effectuer la moyenne des notes */ somme 0 pour i allant de 0 n-1 faire somme somme + Note[i] finPour moyenne = somme / n /* affichage de la moyenne */ ecrire("la moyenne des ",n," notes est :",moyenne) fin

Remarque 1. La dclaration : tableau Tab[10] : entier Crera un tableau Tab de 10 lments, le plus petit indice tant 0 et le plus grand indice est 9. 2. Ne pas confondre lindice dun lment dun tableau avec le contenu de cet lment. Les tableaux dynamiques

Il arrive frquemment que lon ne connaisse pas l avance le nombre dlments que devra comporter un tableau. Pour rsoudre ce problme, on a la possibilit de dclarer le tableau sans prciser au dpart son nombre dlments. Ce nest que dans un second temps, au cours du programme, que lon va fixer ce nombre via une instruction dallocation : Allocation(nom,nombre,type), Notez que tant quon na pas prcis le nombre dlments dun tableau, dune manire ou dune autre, ce tableau est inutilisable. Il ne faut pas oublier de librer le tableau a la fin de son utilisation avec linstruction : libere(nom).

Exemple var tableau Note[], moyenne, somme : reel

Cours Algorithmique Pr. S. El Bernoussi

13

i, n : entier dbut ecrire("entrer le nombre de notes saisir : ") lire(n) /* allouer n nombres de types reels */ allocation(Notes,n,reel) /* saisir les notes */ ecrire("entrer les ",n," notes :") pour i allant de 0 n-1 faire lire(Notes[i]) finpour /* effectuer la moyenne des notes */ somme 0 pour i allant de 0 n-1 faire somme somme + Notes[i] finPour moyenne = somme / n /* affichage de la moyenne */ ecrire("la moyenne des ",n," notes est :",moyenne) /* liberer le tableau Notes */ libere(Notes) fin

Tableaux deux dimensions

Pour reprsenter par exemple les matrices dans un ordinateur, un tableau ne suffit pas, puisque chaque ligne de la matrice est en effet un tableau, donc une matrice nk peut par exemple tre reprsente par n tableaux de k lments chacun. Un tel tableau se dclare ainsi : tableau matrice[10][10] : entier Cette dclaration signifie : rserver un espace de mmoire pour 10 x 10 entiers, et quand jaurai besoin de lune de ces valeurs, je les reprerai par deux indices. matrice[i][j] est llment de la matrice qui se trouve a lintersection de la ligne i et la colonne j. matrice[2][3] 5 Remarque : Rappelons que ces reprsentations rectangulaires sont trs conventionnelles. Dans la mmoire de lordinateur ces quatre tableaux sont plutt arrangs en lignes

Exemple : Somme de deux matrices

const N =20 var Tableau A[N][N],B[N][N],C[N][N],i,j,n : entier dbut crire("donner la taille des matrices(<20) :") lire(n) /* lecture de la matrice A */ pour i allant de 1 n faire

Cours Algorithmique Pr. S. El Bernoussi

14

crire("donner les lments de la ",i," ligne:") pour j allant de 1 n faire lire(A[i][j]) finpour fipour /* lecture de la matrice B */ pour i allant de 1 n faire crire("donner les lments de la ",i," ligne:") pour j allant de 1 n faire lire(B[i][j]) finpour fipour /* la somme de C = A + B */ pour i allant de 1 n faire pour j allant de 1 n faire C[i][j] A[i][j]+B[i][j] finpour fipour /* affichage de la matrice de C */ pour i allant de 1 n faire pour j allant de 1 n faire ecrire(C[i][j]," ") finpour ecrire("\n") /* retour la ligne */ finpour fin

Les structures denregistrement Comment regrouper les informations suivantes concernant une personne? nom ; ge.

Une structure denregistrement est une collection de composants (champs) avec : - un nombre fini et fixe de champs ; - un type quelconque pour chaque champ. Algorithme dbut Var enregistrement personne(nom: chaine, age: entier); personne.nom Said" /* affecte " Said " au champs nom */ personne.age 20 /* affecte 20 au champs age */ Fin

La dfinition de type La dfinition de type permet de crer ses propres types. Exemple de la cration dun type personne : Algorithme Dbut Type personne(nom: chaine, age: entier); Var Fatima: personne;

Cours Algorithmique Pr. S. El Bernoussi

15

Fatima.nom Tazi" Fatima.age 20 Fin

Limbrication de structures

La dfinition de type permet dviter lcriture fastidieuse des structures. Algorithme dbut Type nom_propre = tableau [10] car Type nom_mois = ( "janvier", "fvrier", , "dcembre" ) Type data = ( jour: entier, mois: nom_mois, annee: entier Type personne = ( nom: nom_propre, date_naiss: date ) Var Fatima: personne Fatima.nom[ 3 ] <- d Fatima.date_naiss.annee 1956 Fin

Exemple. Dans le service qui affecte les nouveaux numros CIN, on veut crire lalgorithme de la fonction qui, partir des renseignements ncessaires sur une personne donne et du dernier numro personnel affect par ce service, cre un nouveau numro CIN. Les renseignements sur la personne sont fournis sous la forme dune variable composite forme de: - nom - prnom - date de naissance sous la forme dun triplet (jour, mois, anne) - code ville - sexe : 'M' pour masculin, 'F' pour fminin Le numro de CIN sera de type composite, form de: - code: 1 pour masculin , 2 pour fminin - anne de naissance (seulement les 2 derniers chiffres ) - mois de naissance sous la forme dun entier - code de la ville de naissance - numro personnel Le numro personnel est obtenu en ajoutant 1 au dernier numro personnel affect par le service. algorithme fonction CINcreer (personne : EtatCivil, dernier_numero : entier) :CIN dbut si personne.sexe = 'M' alors code 1 sinon code 2 fsi numro_CIN (code, personne. datenaiss.annee mod 100, personne.datenaiss.mois , personne.villenaiss, dernier_numro + 1) retourne numero_CIN fin lexique - Etatcivil = <nom: chane, prnom: chane, datenaiss: Date, villenaiss : entier, sexe : car >

Cours Algorithmique Pr. S. El Bernoussi

16

- personne : Etatcivil, personne qui souhaite un numro CIN - dernier_numero : entier, dernier numro personnel affect - code : entier, code pour reprsenter le sexe - CIN = < codesexe : entier, annaiss : entier, moisnaiss : entier, villenaiss : entier, numro : entier> - numro_CIN : CIN, numro CIN affect.

Les Fonctions et Procdures La fonction compter Compter le nombre de fois ou apparat la lettre a dans une phrase ? Fonction compter( phrase : chane de caractres, c : car) : entier Dbut VAR compteur : entier variable lettre : car compteur <- 0 lettre <- ExtraireLettre( phrase ) Tant que lettre # . rpter Si lettre = c alors compteur <- compteur + 1 Fin si lettre <- ExtraireLettre( phrase ) Fin tant que retourne compteur Fin

Les Fonctions Lanalyse descendante consiste a dcomposer le problme donn en sous problmes, et ainsi de suite, jusqua descendre au niveau des primitives. Les tapes successives donnent lieu a des sous programmes.

Beaucoup de langages distinguent deux sortes de sous-programmes : les fonctions et les procdures. Lappel dune fonction est une expression, tandis que lappel dune procdure est une instruction. Ou, si on prfre, lappel dune fonction renvoie un rsultat, alors que lappel dune procdure ne renvoie rien.

Les fonctions Une Fonction est un sous-programme qui partir de paramtres fournit un, ou plusieurs, rsultats. Fonction nomDeLaFonction( nomParamtre : typeDeParamtre, ... ) : typeDuRetour Dbut VAR variableLocale : type retourne ...

Cours Algorithmique Pr. S. El Bernoussi

17

Fin nomDeLaFonction Remarques: Quelle est la granularit dune fonction (quand doit-on arrter de dcomposer un problme en sous-problmes) ? une fonction ne doit faire quune seule chose (son nom doit reflter sa fonction) ; on arrte la dcomposition quand on peut crire un algorithme ; une fonction doit pouvoir tre utilise hors du contexte o elle a t conue.

Exemple crire lquivalent informatique de la fonction mathmatique y = f( x ) = 3x + 4, avec x dans IR. Fonction f( x : REEL ) : REEL Dbut VAR y : REEL y <- 3 * x + 4 retourne y Fin crire un programme calculant f( 3 ). Programme Bidon Dbut VAR y : REEL y <- f( 3 ) Fin y est une variable locale qui occupe un emplacement mmoire distinct de la variable y du programme principal. Conseil: un programme ne devrait tre compos que dappels de fonctions.

Les paramtres entrants et sortants Comment crire une fonction qui compte le nombre de fois o apparat la lettre a dans une phrase, et qui remplace les lettres a par des * ?

Comment une fonction peut-elle retourner plusieurs rsultats ? Fonction compter( phrase : chane de caractres entre/sortie, c : caractre entre ) :ENTIER Dbut retourne nombreLettre Fin

c est en lecture seule , et phrase est en lecture/ criture. Remarques

Cours Algorithmique Pr. S. El Bernoussi

18

Si le type de la fonction nest pas indiqu, le compilateur suppose quil sagit dune fonction qui ne retourne rien. Lorsquune fonction ne renvoie pas une valeur, cest-a-dire lorsquelle correspond plus a une procdure qua une vraie fonction, il est prudent de la dclarer comme rendant un objet de type vide. Ce type est garanti incompatible avec tous les autres types : une tentative dutilisation du rsultat de la fonction provoquera donc une erreur la compilation. Prototype. La fonction peut tre mise n importe o dans le programme mais, si lon veut que le compilateur puisse vrifier la correspondance entre paramtres formels et paramtres rels (nombre et type en particulier), il faut que la fonction soit place avant son utilisation. Prototype : pour viter cette restriction (et permettre aussi que deux fonctions puissent sappeler mutuellement), on peut utiliser un prototype de fonction. Un prototype est constitu par la partie dclaration de la fonction, on la place en gnral au dbut du programme.

Exemple: prototype /* prototypes */ fonction f(entier,entier):entier fonction g(chane de caractre, entier) ; /* corps de la fonction f */ fonction f(x:entier, y:entier):entier; var message : chane de caractre dbut g(message,y) ; Fin /* corps de la fonction g */ fonction g(m :chane de caractre, y :entier) var a,b,c : entier dbut c f(a,b); fin Lutilisation des prototypes nest pas obligatoire mais est fortement recommande pour un meilleur contrle des paramtres et pour une meilleure lisibilit du programme : les outils utilises sont listes au dbut du texte.

Rsultat dune fonction

Pour retourner le rsultat dune fonction on utilise linstruction :

Cours Algorithmique Pr. S. El Bernoussi

19

retourne(valeur) ; ou valeur doit tre du type prvu dans lentte de la fonction.

Exercice Un tudiant doit, pour obtenir son diplme, passer un crit et un oral dans deux modules. Le coefficient du premier module est le double de celui du second module. La moyenne dun module, afin de ne pas pnaliser trop les ventuels checs accidentels, accorde un coefficient double la meilleure des deux notes obtenues. On veut dcrire un algorithme o, aprs saisie des quatre notes, la dcision finale est affiche (diplme obtenu si la moyenne est suprieure ou gale 10, aucun module ne devant avoir une moyenne infrieure 8).

Solution fonction calculerMoyenne(n1 : REEL, n2 : REEL) : REEL dbut moy (n1+2*n2)/3 // m1 retourne moy // m2 fin lexique : - n1 : rel, note de coefficient 1 - n2 : rel, note de coefficient 2 - moy : rel, moyenne calcule fonction calculerNoteModule(n1 : REEL, n2 :REEL) : REEL dbut si n1>n2 // n1 alors note calculerMoyenne(n2,n1) // n2 sinon note calculerMoyenne(n1,n2) // n3 fsi retourne note // n4 fin lexique : - n1 : rel, premire note - n2 : rel, deuxime note - note : rel, note du module fonction accorderDiplme(m1 : REEL, m2 : REEL) : BOOLEEN Var moy: reel; Recu: booleen; dbut moy calculerMoyenne(m2,m1) // d1 si moy < 10 // d2 alors recu faux // d3 sinon si (m1<8) ou (m2<8) // d4 alors recu faux // d5 sinon recu vrai // d6 fsi

Cours Algorithmique Pr. S. El Bernoussi

20

fsi retourne reuu // d7 fin Lexique: - m1 : rel, moyenne premier module - m2 : rel, moyenne second module - moy : rel, moyenne gnrale - reu : boolen, vrai si ltudiant a obtenu son diplme Algorithme diplome dbut lire (ne_m1) ; lire (no_m1) ; lire (ne_m2 ) ; lire (no_m2 ) ; obtenu accorderDiplome(calculerNoteModule(ne_m1,no_m1), calculerNoteModule(ne_m2,no_m2)) ; si obtenu // 6 alors crire( diplme obtenu ) ; sinon crire( diplme non accord ) ; fsi fin lexique - ne_m1 : rel, note dcrit du premier module - no_m1 : rel, note doral du premier module - ne_m2 : rel, note dcrit du second module - no_m2 : rel, note doral du second module -obtenu : boolen, vrai si le diplme est accord

Faire un test avec les valeurs On suppose que les valeurs introduites par lutilisateur sont : 12 7 10 8.

Variables locales et globales Il peut y avoir diffrents niveaux de dclaration de variables. - Les variables dfinies dans le programme hors des fonctions sont dites variables globales. Les variables globales sont connues de tout le programme.

- Les variables dclares dans le corps dune fonction sont dites variables locales. Les variables locales sont connues uniquement a lintrieur de la fonction, cest-a-dire quelles sont propres a la fonction et invisibles de lextrieur. Cela permet dutiliser des variables de mme nom dans des fonctions diffrentes sans craintes dinterfrences fcheuses.

Les paramtres dappels

Il y a deux types de passage de paramtres, le passage par valeur et le passage par adresse.

Cours Algorithmique Pr. S. El Bernoussi

21

Passage par valeur : Dans un appel par valeur le paramtre dappel est considr comme une variable locale, toutes les modifications se feront dans une case mmoire temporaire dans laquelle est range la valeur du paramtre dappel. En particulier, on peut appeler la fonction avec une expression qui sera value et dont la valeur sera le paramtre rel. Passage par adresse Si on veut modifier une variable a lintrieur dune fonction et si lon dsire que cette modification soit effective dans la fonction appelante on fera un passage de paramtre par adresse. En C tous les arguments des fonctions sont des appels par valeur. Le seul moyen de modifier une variable externe a une fonction est indirecte : on transmet son adresse. Largument de la fonction doit donc tre une adresse cest-a-dire un pointeur. Fonctions rcursives

Introduction Il arrive, en mathmatique, que des suites soient dfinies de la manire suivante : u0 = constante un = f(un-1) Exemple : La suite factorielle : n! = n*(n-1)!, pour n1 avec 0!=1, peut scrire : f(0)=1 f(n)=n*f(n-1) Ce que lon peut traduire par : f(n) = (si n=0 alors 1 sinon n*f(n-1)). Cela peut se traduire en algorithmique par : fonction factorielle1(n :entier) : entier dbut si (n=0) alors retourne(1) sinon retourne(n*factorielle1(n-1)) finsi fin Dans la fonction factorielle1(), on constate que la fonction sappelle elle-mme. Ceci est possible, puisque la fonction factorielle1() est dclare avant son utilisation (cest tte dune fonction qui la dclare).

Dfinition de la rcursivit

La rcursivit est un concept fondamental en mathmatiques et en informatique. La dfinition la plus simple que lon puisse en donner consiste a dire quun programme rcursif est un programme qui sappelle lui-mme. Pourtant, il faut bien quun programme cesse de sappeler lui-mme si lon veut viter la boucle infinie. Un programme rcursif doit contenir une condition de terminaison qui autorise le programme ne plus faire appel lui-mme. Les dfinitions rcursives de fonctions sont frquentes en mathmatiques ; le type le plus simple, portant sur des arguments entiers, est la relation de rcurrence. La fonction la plus familire de ce type est sans doute la fonction factorielle vue plus haut.

Une deuxime relation de rcurrence bien connue est celle qui dfinit la suite de Fibonacci :

Cours Algorithmique Pr. S. El Bernoussi

22

Fn = Fn-1 + Fn-2, pour n 2 avec F0=0 et F1=1.

Exercice Ecrivez une fonction qui prend pour argument un tableau dentiers T et sa taille n, et nous informe si les lments d'un tableau d'entiers sont tous conscutifs ou non. (Par exemple, si le tableau est : 7; 8; 9; 10, ses lments sont tous conscutifs. Si le tableau est : 7; 9 ; 10; 11, ses lments ne sont pas tous conscutifs). Exercice: Ecrivez une fonction qui prend pour arguments un tableau de rels T et sa taille n, et nous donne la plus grande et la plus petite valeur du tableau T. Exercice: Insertion et suppression dun lment dun tableau. 1. Ecrire une procdure qui permet dinsrer un lment dans un tableau a une position donne. 2. Ecrire une fonction qui permet dinsrer un lment dans un tableau dj trie a une position donne. 3. Ecrire une fonction qui permet de supprimer un lment dun tableau. Exercice : Recherche dun lment dans un tableau. 1. Ecrire une procdure qui recherche un lment dans un tableau de faon squentiel. 2. On se place dans le cas ou le tableau est ordonne et les lments du tableau sont deux a deux distincts. Ecrire une procdure qui recherche un lment de faon dichotomique. Exercice : 1. Ecrire une procdure afficher_matrice() : qui prend pour arguments n et une matrice A, et elle affiche la matrice A. 2. Ecrire une procdure qui donne la transpose dune matrice A. 3. Ecrire une procdure qui vrifie si une matrice est symtrique. 4. Ecrire une procdure qui effectue la somme de deux matrices. 5. Ecrire une procdure qui effectue le produit de deux matrices. Exercice: Suite de Fibonacci . La suite de Fibonacci est donne par les quations : u0 = 0 u1 = 1 un = un-1 + un-2 pour n 2 Ecrire une procdure qui affiche les n premiers termes de la suite de Fibonacci. Exercice : Implantation des algorithmes de tri simple. 1. Ecrire une fonction qui tri un tableau par la mthode dinsertion simple. 2. Ecrire une fonction qui tri un tableau par la mthode de slection. 3. Ecrire une fonction qui tri un tableau par la mthode de tri a Bulles.

Cours Algorithmique Pr. S. El Bernoussi

23