You are on page 1of 114

Algorithmique

A. LAMNII

Problmatique

?
Pourquoi un cours dalgorithme ? Pourquoi programmer ?
Tout ce qui est classique a dj t programm !! ?

A LAMNII

Problmatique
Parce que lalgorithmique exprime les instructions rsolvant un problme donn indpendamment des particularits de tel ou tel langage. Pour prendre une image, sur un programme tait une narration, lalgorithmique serait le schma (plan) la formulation et lorthographe. Or, vous savez quil vaut mieux faire dabord le plan et rdiger ensuite lidentique Chaque jour : naissance de nouveaux problmes

A LAMNII

Problmatique
Parce quil nexiste pas de logiciel qui permet de faire ce quon veut. Exemples : La rpartition de l'hritage musulman Calcul de leffectif moyen annuel dune entreprise Automatisation de tches rptitives Segmentation et tiquetage de corpus crits, calculs, Ecriture de fichiers sur un continuum, Cration de stimuli sur un continuum, Affichage de plusieurs rsultats dans le mme format
A LAMNII 4

Introduction
Linformatique tant la science de traitement automatique de linformation a besoin dune machine (ordinateur) pour faire ce traitement. Lintrt de la machine est sa capacit de traiter rapidement et sans erreurs un grand nombre de donnes. Mais elle a aussi besoin quon lui indique "en dtail" comment raliser une tache. On doit alors dcomposer les oprations ncessaires la ralisation dun problme donn en un nombre fini dtapes lmentaires qui peuvent tre traits individuellement. Trier des objets, rsoudre une quation, multiplier deux nombres, Calculer une facture, chercher le plus court chemin, mettre du caf : cest mettre en place un algorithme
A LAMNII 5

Quest ce quun algorithme ?


Un algorithme est une suite finie dinstructions quon applique dans ordre bien dtermin un nombre fini de donnes pour arriver un rsultat. Lalgorithme est un moyen pour le programmeur de prsenter son approche dun problme donn (produit de deux nombres par exemple) dautres personnes. En effet, un algorithme est lnonc dans un langage bien dfini dune suite doprations permettant de rpondre au problme. Un algorithme permet de formuler un problme en un langage semi-naturel plutt que dutiliser une syntaxe rigide et cryptique telle que celle des langages de programmation traditionnels (C, C++, Java, etc. ).
A LAMNII 6

Algorithme : Exemple
Voici un algorithme indiquant l'cran si un nombre entr via le clavier de l'ordinateur est positif ou ngatif :
ALGORITHME PositifOuNgatif VARIAIBLES N : ENTIER DBUT AFFICHER("Entrez un nombre") SAISIR (N) SI (N > 0) ALORS AFFICHER ("Nombre positif") SINON AFFICHER ("Nombre nombre") FINSI FIN
A LAMNII 7

Comment crire un algorithme


Pour crire un algorithme on doit suivre les tapes suivantes : 1. Comprendre le problme 2. Identifier les donnes (entres) 3. Identifier les rsultats souhaits (sorties) 4. Dterminer les transformations faire sur ces donnes pour obtenir les rsultats (traitement/ dveloppement).

A LAMNII

Qu'est ce qu'un bon algorithme ?


Un algorithme doit donc tre : Lisible : lalgorithme doit tre comprhensible mme par un non informaticien. De haut niveau : lalgorithme doit pouvoir tre traduit en nimporte quel langage de programmation. Prcis : chaque lment de lalgorithme ne doit pas porter confusion. Concis : un algorithme ne doit pas dpasser une page. Si cest le cas, il faut dcomposer le problme en plusieurs sousproblmes Structur : un algorithme doit tre compos de diffrentes parties facilement identifiables.
A LAMNII 9

Comment crire un algorithme


Exemple 1 : Calcul de la moyenne suivante :
moy=(coef1*note1+ coef2*note2++ coefN*noteN)/(coef1+coefN++coefN)

A LAMNII

10

Les entres sont : les notes et les coefficients Les sorties sont : la moyenne Les traitements :

1 2

Un algorithme qui parait vident est de calculer les produits noteI * coefficientI (I de 1 N) puis les additionner ensuite diviser le rsultat sur la somme des coefficients .

4
A LAMNII

11

Exemple 2 : Trier une suite de nombres entiers dans l'ordre dcroissant. Les entres sont : N nombres entiers (a1, a2, ..., aN) Les sorties sont : Suite de nombres tris (ordre dcroissant) Les traitements : Permutations

A LAMNII

12

Les instructions de base


Dans la vie de tous les jours vous utilisez des algorithmes sans le savoir par exemples : Fiches de cuisine recette Laine modle Equation Solution instructions Pour reprsenter un algorithme, on peut recourir diverses mthodes : - Organigramme de programmation - Langage structur (pseudo code)
A LAMNII 13

Gteau Pull

Un premier algorithme

A LAMNII

14

Structure gnrale dun algorithme

A LAMNII

15

Rgles
Len-tte de lalgorithme : nom significatif Dlimiteur de dbut (Dbut) : marque le dbut de lalgorithme Dlimiteur de fin (Fin) : marque la fin de lalgorithme Dclaration de constantes, Dclaration de types, Dclaration de variables, Dclaration de prototypes de fonctions et de procdures Corps de lalgorithme : les diffrentes instructions : sont des actions lmentaires ou appels aux sous algorithmes, fonctions et procdures Commentaire : explique le rle dun algorithme ou de ses instructions

A LAMNII

16

Mots rservs
Afficher Saisir Dbut DbutFonction Variable DbutProcdure Faire Fin FinFonction Tableau FinPour FinProcdure FinSi FinTantQue Incrment Pour Retourner Selon Cas CasSinon FinSelon Pointeur Si Sinon TantQue Lire Ecrire Rpter Structure Entier Rel Caractre Boolen Null Vide Fonction Procdure On y ajoutera des fonctions utiles, par exemple : Alea(n), qui fournit un entier au hasard entre 0 et n 1, plus toutes les fonctions mathmatiques usuelles : mod, div, abs(x), sin(x),

A LAMNII

17

Instructions lmentaires
Un programme est constitu dune squence dinstructions. Une instruction est une action (ordre) que lordinateur est capable dexcuter. Dans notre pseudo-code, nous naurons que la liste minimale dinstructions, ncessaire et suffisante pour les problmes que nous aurons crire. Exemples instructions : affectation, lecture, criture, retourner une valeur, incrmenter ou dcrmenter un valeur,
A LAMNII 18

Dclarer une variable


Dans un programme informatique, on va avoir en permanence besoin de stocker provisoirement des valeurs : frappes au clavier ou des rsultats obtenus par le programme. Ces valeurs peuvent tre des nombres, du texte, etc. VARIABLE Nom1, Nom2,..,nomN : TYPE Instruction permettant de rserver de lespace mmoire pour stocker des donnes (dpend du type de ces donnes : ENTIERS, RELS, CARACTRES, etc.) Exemples : VARIABLE val, unNombre : ENTIER VARIABLE nom, prnom : TABLEAU DE CARACTRES
A LAMNII 19

Dclarer une constante


CONSTANTE identificateur : TYPE (expression ou valeur) Instruction permettant de rserver de lespace mmoire pour stocker des donnes dont la valeur est fixe pour tout lalgorithme. Exemples: CONSTANTE MAX : ENTIER 100 CONSTANTE DOUBLEMAX : ENTIER MAX 2 CONSTANTE pi : REEL 3.14

A LAMNII

20

Saisir une donne


SAISIR (liste de noms de variables) ( LIRE)

Instruction permettant de placer en mmoire les informations fournies par l'utilisateur. Exemples: SAISIR(unNombre) SAISIR(nom, prnom) SAISIR(val)

A LAMNII

21

Afficher une donne, un rsultat


AFFICHER(liste de noms de variables message , var) Instruction permettant de visualiser les informations places en mmoire. Exemples: AFFICHER(unNombre, "est diffrent de 0") //CRIRE AFFICHER("La somme de", unNombre, "et", val , "est", unNombre+ val)

A LAMNII

22

Affecter une valeur une variable


identificateur

<expression> ou <constante> ou
<identificateur>

: Instruction permettant dattribuer la variable identifie par l'lment plac gauche du symbole la valeur de l'lment plac droite de ce symbole. Exemple: nom "Venus " val 50 val val 2 // commentaire
A LAMNII 23

Exemple
ALGORITHME Test VARIABLE a, b, c, d: REL //dclarations DBUT a2 //affectation b3 c-3.4 AFFICHER(a, b, c) //affichage a a - b b b + 2*c c 4 AFFICHER(a, b, c) //affichage FIN

A LAMNII

24

Saisies et affichages : exemple


ALGORITHME Calcul_TTC //Saisit un prix HT et affiche le prix TTC correspondant CONSTANTE TVA : REL 20.6 CONSTANTE Titre : CHANE "Rsultat" VARIABLE prixHT, prixTTC: REL //dclarations DBUT AFFICHER("Donnez-moi le prix hors taxe :") SAISIR(prixHT) prixTTC prixHT* (1+TVA/100) //calcul du prix TTC AFFICHER(Titre) AFFICHER(prixHT,"eurosH.T. devient", prixTTC, "eurosT.T.C.") FIN
A LAMNII 25

Les objets (variables)


Chaque objet est dfini par : Un nom qui le dsigne et le distingue des autres objets. Un type qui caractrise la nature des informations qui seront reprsentes par lobjet et les oprations qui seront autorises sur cet objet. Une valeur qui reprsente ltat actuel de lobjet.

ESTO A LAMNII

26

Les types : Le type permet de dfinir lensemble des valeurs susceptible dtre prise par une variable ainsi que les oprations possibles sur cette variable. Les types de base sont : ENTIER : une variable de type entier ne peut contenir que des types entiers. Lintervalle des entier est dfini par le nombre de bits sur lequel la machine est pagine (Ensemble Z). REL : Les rels sont nots par un point et une virgule (-0.5) ou une mantisse et un exposant 0.2E6. CARACTRE : Les variables de ce type peuvent contenir tous les caractre du code ASCII.
ESTO A LAMNII 27

BOOLEN : Une valeur de ce type ne peut contenir que deux valeurs VRAIE et FAUX ou 1 et 0.

ESTO A LAMNII

28

Les oprateurs
Les oprateurs permettent de produire un effet sur les objets de lalgorithme (variables ou constante) en effectuant des calculs. des vrification dgalits et dingalits. Ils sont diviss en trois classe : a) Les oprateurs arithmtiques

ESTO A LAMNII

29

Exemple: (15 mod 4) = 3 = le reste de la division euclidienne de 15 par 4; (10 div 2) = 5 = le quotient de la division euclidienne de 10 par 2; (11 div 2) = 5

ESTO A LAMNII

30

b) Les oprateurs de comparaison

c) Les oprateurs logiques

A LAMNII

31

A LAMNII

32

Linstructions conditionnelle
Si (condition) ALORS Squence dinstructions FINSI

SI (condition) ALORS Squence dinstructions #1 SINON Squence dinstructions #2 FSI

A LAMNII

33

Linstructions conditionnelle

Une condition est une expression crite entre parenthses valeur BOOLENNE. Une condition permet de prendre une dcision lmentaire suivant son rsultat : VRAI ou FAUX. Dans un langage, les conditions sont mises en uvre par les instructions conditionnelle et les boucles.

A LAMNII

34

Exemple
Calcul du net commercial. Si le montant brut est suprieur 1 000 on accorde une remise de 10%.
ALOGRITHME : Net commercial VARIABLE Prix, Quantit, Montant_Brut, Net_Cial: REEL DBUT AFFICHER ("Donnez le prix de l' article") SAISIR( Prix) AFFICHER ("Donner la quantit achet ") SAISIR (Quantit) Montant_Brut Quantit * Prix AFFICHER ("Le montant brut est", Montant_Brut) SI (Montant_Brut >1000) ALORS Net_Cial Montant_Brut * 0,9 SINON Net_Cial Montant_Brut FINSI AFFICHER ("Le net commercial est de :", Net_Cial) FIN
A LAMNII 35

Exercices
1- Saisir deux nombres puis Afficher le plus grand 2- Valeur absolue dun nombre rel 3- Si n est un entier pair, alors y=n/2 - Si n est un entier impair, alors y = 3(n +1)/2 Ecrivez un algorithme qui demande n lutilisateur et qui affiche lcran la valeur de y
A LAMNII 36

Instruction conditionnelle: imbrique


Les blocs instruction#1 et instruction#2 peuvent eux aussi tre des instructions conditionnelles, ce qui permet d'imbriquer les structures conditionnelles. Exemple : Calcul du net commercial. Si le montant brut est infrieur 1 000 on n'accorde pas de remise, si le montant brut est compris entre 1 000 et 2 000 la remise sera de 12% et de 14 % au-del.

A LAMNII

37

PROGRAMME Net_commercial VARIABLES Prix, Quantit, Montant_Brut, Net_Cial: REEL DBUT AFFICHER ("Donnez le prix de l' article") SAISIR (Prix) AFFICHER ("Donner la quantit achet") SAISIR (Quantit) Montant_Brut Quantit * Prix AFFICHER ("Le montant brut est", Montant_Brut) SI Montant_Brut <=1000 ALORS Net_Cial Montant_Brut SINON SI Montant_Brut <= 2000 ALORS Net_Cial Montant_Brut * 0,88 SINON Net_Cial Montant_Brut * 0,86 FINSI FINSI AFFICHER ("Le net commercial est de :", Net_Cial) FIN
A LAMNII 38

La structure SELON CAS CASCASSINON .. FINSELON

SELON remplace avantageusement la structure : SI ALORS.. SINON.FINSI. On a plusieurs cas selon les valeurs prises par une variable ou expression
FORMAT :

SELON variable ou expression CAS Valeur1 : action1 CAS Valeur2 : action2 .. CAS SINON : action par dfaut FINSELON
A LAMNII 39

Exemple
PROGRAMME Mention VARIABLE Note : REEL DEBUT AFFICHER ("Donnez une note") SISAIR(Note) SELON Note CAS 12 > Note >= 10 : AFFICHER ("passable" ) CAS 14 > Note >= 12 : AFFICHER ("assez bien") CAS 16 > Note >= 14 : AFFICHER (" bien") CAS Note >= 16 : AFFICHER (" trs bien") CAS SINON : AFFICHER ("ajourn") FINSELON FIN

A LAMNII

40

Exercices
1- Les tarifs daffranchissement dune lettre sont les suivants : en-dessous de 30g 2.8 DH partir de 30g, mais en-dessous de 60g partir de 60g 6.5 DH

4.3 DH

Ecrire un algorithme qui permet de saisir le poids dune lettre et de calculer le tarifs daffranchissement

A LAMNII

41

Exercices
2- Rcrire Lalgorithme Mention en utilisant seulement des SI ALORS SINON FINSI. 3- Ecrire un algorithme qui permet de saisir un numro de couleur de l'arc-en-ciel et d'afficher la couleur correspondante : 1: rouge, 2 : orang, 3 : jaune, 4 : vert, 5 : bleu, 6 : indigo et 7 : violet. Utiliser la structure SELON CAS CASCASSINON .. FINSELON
A LAMNII 42

Structures rptitives : Boucles


Il arrive qu'un algorithme doive rpter une squence d'instructions un certain nombre de fois peut tre connu ou inconnu afin daccomplir une tche. gnralement il existe trois structures cette fin, appeles structures rptitives ou boucles :
1. La structure POUR 2. La structure TANQUE 3. La structure RPTER-JUSQU'

Les boucles sont bases sur l'valuation d'une condition, dont le rsultat est vrai ou faux. C'est sur la base de cette condition que la rptition est dtermine.
A LAMNII 43

La boucle : POURJUSQUINCRMENTFAIREFINPOUR
POUR var val_init JUSQU' val_fin INCRMENT val_inc FAIRE Squence d'instructions FINPOUR

Rpter une suite dinstructions un certain nombre de fois.

A LAMNII

44

Exemple 1
Cette boucle affichera successivement les multiples de 3 infrieurs 100.
POUR i 0 JUSQU' 100 INCRMENT 1 FAIRE SI (i MOD 3) = 0 ALORS AFFICHER (i) FINSI FINPOUR

Rcrire lexemple prcdent pour afficher les multiples de 3 en jouant seulement le pas dincrment (sans utiliser Modulo).
A LAMNII 45

Exemple 2
Problme :
On veut crire un algorithme qui calcule la somme des entiers positifs infrieur ou gale N.

Rsolution :
1re tape : Analyse 1- Entrer la valeur de N (>0) 2- Calculer la somme des N entiers positifs < =N 3- Afficher le rsultat 2me tapes : Conception dclaration des variables N, i (comteur de la boucle) et somme AFFICHER ( demander la valeur de N ) SISAIR (N) SI (N<0) ALORS AFFICHER (erreur) SINON somme 0 // initialiser POUR i1 JUSQU' N INCRMENT 1 FAIRE somme somme + i AFFICHER (la somme est somme) FINPOUR FINSI
A LAMNII 46

La boucle : TANT QUE FAIRE FINTANTQUE


TANTQUE condition FAIRE Squence d'instructions FINTANTQUE Rpter une suite dinstructions tant quune condition est remplie. Si la condition est fausse ds le dpart, le traitement nest jamais excut.

A LAMNII

47

Remarque & Exemple


Remarque : Si le nombre ditrations est connu lavance, il faut choisir la boucle POUR Si la boucle doit s'arrter quand survient un vnement , il faut choisir la boucle TANTQUE Exemple : L'exemple ci-dessous exploite une structure TANTQUE afin dafficher les entiers ngatifs > -100.
i -100 TANQUE (i<=0) FAIRE AFFICHER (i) i i+ 1 FINTANQUE
A LAMNII 48

La boucle : RPTER JUSQU'


RPTER
Squence d'instructions JUSQU' condition Cette boucle rpte des instructions jusqu' ce que la condition soit remplie. La condition est value aprs les instructions. Donc, dans cette structure, les instructions sont effectues au moins une fois.

A LAMNII

49

Exemple 1
Passage en Caisse : Calcul du total payer; une fois le prix dun article vaux 0 on arte.

N // le prix dun article T 0 // total payer RPTER AFFICHER( "le prix dun article: ") SAISIR (N) TT+N JUSQU' (N = 0) AFFICHER(" Le total est : ", T)

A LAMNII

50

Exemple 2
On dsire saisir un certain nombre de produits diffrents avec des prix et des quantits factures diffrentes. On arrtera les saisies lorsque l'utilisateur rpondra "N" la question : Autre produit (O/N) ?
Rponse 'O' RPTER AFFICHER ("Quel il est le prix du produit ?") SAISIR (Prix) AFFICHER ("Quelle elle est la quantit ?.") SAISIR (Quantit) Montant_Brut Prix * Quantit AFFICHER ("Montant_Brut=", Montant_Brut) AFFICHER ("Autre produit (O/N) ?") SAISIR (Rponse) JUSQU' (Rponse = 'N')
A LAMNII 51

Exercices
1- crire un algorithme permettant dafficher le carr des nombres entier entre 1 et 10. 2- crivez un algorithme qui saisit deux entiers positifs a et b et simule lopration de division entire entre eux. On divise le plus grand par le plus petit sans utiliser loprateur /. Affichez le quotient et le reste 3- Multiplication de deux nombres en utilisant la technique ressue
A LAMNII 52

Remarque

A LAMNII

53

Tableaux
Un tableau est une structure de donnes regroupant une suite de variables de mme type. Pour dclarer un tableau, il est ncessaire dindiquer sa dimension, sa taille et le type de ses lments. Mon_Tableau[0 : MAX] : TABLEAU de TYPE
Mon_Tableau : nom de la variable [] : indication d'intervalle d'indices 0 : indice minimum (facultatif, 0 par dfaut) MAX : indice maximum (obligatoire) TABLEAU : type tableau de : mot de sparation du type tableau et du type des lments TYPE : type de chaque lment
A LAMNII 54

Exemple
Pour reprer un lment parmi les autre, on utilise un index, nombre entier (0 index<MAX) qui permet d'accder un lment du tableau.
ALGORITHME JOURS Jour :TABLEAU[0:7] de CHAINE VARIABLE i : ENTIER DBUT Jour[0] lundi, Jour[1] mardi, Jour[2] mercredi, Jour[3] jeudi , Jour[4] vendredi, Jour[5] samedi, Jour[6] dimanche POUR i 0 JUSQU' 6 INCRMENT 1 FAIRE AFFICHER(Jour[i]) FinPour Fin
A LAMNII 55

Remarque : Si un programme est amen dpasser les limites dun tableau, il y a une erreur de logique quelque part. Il faut revoir lalgorithme. Un tableau deux dimensions correspond la notion de matrice (M x N). Dclaration :
Mon_Tableau[0 : MAX1, 0 : MAX2] : TABLEAU de TYPE

On atteint un lment dun tableau deux dimensions par un couple dindice : Mon_Tableau[i,j]
A LAMNII 56

Exemple
Saisir les valeurs de la matrice 3*4 suivante:
ALGORITHME Matrice Matrice :TABLEAU[0:3, 0:4] de ENTIER VARIABLE i, j : ENTIER DBUT POUR i 0 JUSQU' 2 INCRMENT 1 FAIRE POUR j 0 JUSQU' 3 INCRMENT 1 FAIRE AFFICHER("Donnez llment dindice",i, j) SAISIR(Matrice[i,j]) FinPour FinPour Fin
A LAMNII 57

Exercice 1
Soit T un tableau dentiers, crire un algorithme qui permet de trouver le plus grand lment de T ainsi que lindice de la premire occurrence.
Lide est dinitialiser une variable MAX avec la valeur du premier lment de T, ainsi que lindice Ind_MAX 0, puis de comparer successivement MAX avec chaque lment en affectant la valeur de ce dernier ainsi que son indice respectivement MAX et Ind_MAX, lorsquil est plus grand.

A LAMNII

58

Algorithme Max T : TABLEAU [ 0:10 ] De ENTIER VARIABLE MAX, Ind_MAX, i : ENTIER DBUT Ind_MAX 0 POUR i 0 JUSQU' 9 INCRMENT 1 FAIRE SAISIR (T [ i ]) FINPOUR MAX T [ 0 ] POUR i 0 JUSQU' 9 INCRMENT 1 FAIRE SI ( MAX < T[ i ]) ALORS Ind_MAX i MAX T[ i ] FINSI FINPOUR AFFICHER("le MAX de T est",MAX, "premire occurrence se trouve lindice", Ind_MAX) FIN
A LAMNII 59

Exercice 2
Soit T un tableau dentiers, crire un algorithme qui lit T et qui permet de: 1- Afficher le tableau dans le sens inverse: T[n-1] T[0]. 2- Afficher les lments de T dont lindice est impair. 3- Trouver le plus grand lment de T et de compter combien de fois ce maximum est atteint. 4- Refaire question 3 avec llment minimal.

A LAMNII

60

Fonctions
Une fonction est un sous-algorithme qui est compos d'instructions, elle reoit des donnes ou arguments et en gnral elle retourne un rsultat. Lutilisation des fonctions permet d'obtenir un code plus clair, et moins redondant. Exemple: Supposons quon est amen a calculer la somme suivante : i*i*i pour i=1 jusqu 30. Alors on est oblig a chaque itration de calculer le produit i*i*i . Do limportance dutiliser des fonctions (mois de redondance).
A LAMNII 61

Fonctions : Syntaxe
FONCTION NomFonction (var1,,varN) RETOURNE : TYPE VARIABLE // si il existe DEBUTFONCTION Corps de la fonction RETOURNER var FINFONCTION

Les arguments (var1,, var2) sont passs : A- par rfrence Ref, on crit Ref ListeVariable : NomDeType B- par valeur Val, on crit Val ListeVariable:NomDeType Le type du rsultat est VIDE si la fonction ne renvoie pas de rsultat. Une fonction sappelle de la manire suivante :
NomFonction (valeur Var1,, valeur varN)
A LAMNII 62

Exemple
Fonction qui retourne la surface d'un rectangle partir de sa longueur et de sa largeur.
FONCTION surface (L REL, l REL) RETOURNE :REL VARIABLE S : REL DBUTFONCTION S L l RETOURNER ( S ) FINFONCTION

Lalgorithme suivant utilise la fonction surface pour calculer la surface dun rectangle. Les dimensions L et l sont lit partir du clavier.

A LAMNII

63

ALGORITHME surfaceRect VARIABLE aire, long, larg : REL DBUT AFFICHER ("Donnez la longueur et la largeur de votre rectangle : ") SAISIR (long, larg) aire surface(long, larg) // appel de la fonction surface AFFICHER ( "Voici sa surface : ", aire) FIN

Remarque: Une fonction possde trois aspects : A- le prototype : cest la dclaration ncessaire avant tout ; B- lappel : cest lutilisation dune fonction lintrieur dune autre fonction (par exemple le programme principal) ; C- la dfinition : criture proprement dite de la fonction.
A LAMNII 64

Exercices
A- crire une fonction qui retourne le maximum de deux nombres donnes. Ecrire un algorithme dessai. B- crire une fonction qui retourne le maximum de quatre nombres donnes, en utilisant la fonction qui donne le maximum de deux nombre. Ecrire un algorithme dessai. C- Calculer la somme des puissances p-ime des entiers. Ce calcul doit tre effectu n fois pour des valeurs de p qui pourront varier : on va fabriquer un outil, une fonction, auquel lon donnera deux entiers x et p et qui restituera le nombre xp. D- crire lquivalent informatique de la fonction mathmatique : y = f( x ) = 3x + 4, avec x un rel. Ecrire un algorithme dessai.
A LAMNII 65

Rcursivit
La rcursivit est une mthode puissante qui permet dexprimer dune manire simple la solution de problmes difficiles. Une fonction sappelle elle-mme Dfinition dune fonction laide de cette mme fonction avec : Une condition darrt Un appel avec une complexit diminue Solutionne un problme en rsolvant le mme problme mais dans une situation plus simple, ce processus de simplification se poursuit jusqu latteinte dun cas o la solution est connue.

A LAMNII

66

Exemple 1
Considrons la suite factorielle, elle est dfinie par :
0!=1 factorielle(0)=1 // test darrt n!=n(n-1)! factorielle(n)= n*factorielle(n-1)

La fonction peut s'crire simplement


FONCTION factorielle(val n : ENTIER) RETOURNE : ENTIER DBUT SI (n=0) ALORS RETOURNER(1) SINON RETOURNER(n*factorielle(n-1)) FINSI FINFONCTION

A LAMNII

67

La fonction factorielle : Excution


factorielle(3)=3*2*1*1=6

A LAMNII

68

Exemple 2
Soit la suite dite de Fibonacci dfinie par :

Donner deux formulations (deux fonctions), l'une rcursive, l'autre itrative de la suite de Fibonacci.

A LAMNII

69

Solution rcursive
FONCTION fib(val n: ENTIER)RETOURNE : ENTIER DBUT SI( (n = 0) ou (n = 1)) ALORS RETOURNER(1) SINON RETOURNER(fib(n-1) + fib(n-2)) FINSI FINFONCTION

Calcul de fib(4) par la mthode rcursive:


fib(4) fib(3) fib(2) fib(2) fib(0)

fib(1) fib(1)

fib(1) fib(0) A LAMNII 70

Solution itrative
FONCTION fib(val n: ENTIER)RETOURNE:ENTIER VARIABLE a, b, t, i : ENTIER DBUT a 1 b 1 SI (n=0) ALORS RETOURNER(a) SINON i1 TANTQUE (i <> n) FAIRE ta a a+b bt i i+1 FINTANTQUE RETOURNER(a) FINSI FINFONCTION
A LAMNII 71

Exercices
1- somme(n)=1+2+3++n Donner une formulation rcursive puis donner algorithme associer. 2- La fonction daddition sur N N peut tre dfinie rcursivement de la manire suivante : add(x, y) = x si y = 0, add(x + 1, y 1) si y 0. crire lalgorithme de la fonction correspondante.
A LAMNII 72

Structures
Problme : Si on manipule une lite de 20 tudiants, rien n'est plus gnant de devoir toujours utiliser plusieurs variables pour un seul tudiant. Par exemple : Saisir les nom, prnom et la moyenne de 20 tudiants. Solution 1 : On utilise un tableau pour chaque donne
ALGORITHME Liste VARIBLE i : ENTIER tNom, tPrnom[0:20] : TABLEAU de CHANE tMoyenne[0:20] : TABLEAU de REEL DBUT POUR i 0 JUSQU' 19 INCRMENT 1 FAIRE AFFICHER("Taper nom, prnom et moyenne de ltudiant n", i) SAISIR(tNom[i], tPrenom[i], tMoyenne[i]) FINPOUR FIN
A LAMNII 73

Structures
Quels problmes pose cet algorithme ? Il faut traiter autant de tableaux que de donnes, chaque tableau est trait sparment pour une mme personne. Les indices doivent correspondre, sinon risque de traiter une donne d'une personne et une autre d'une autre personne simultanment. Il n'est pas possible de retourner le tableau car on ne peut retourner qu'une seule donne la fois Une fausse solution serait d'utiliser un tableau deux dimensions, mais toutes les donnes seraient alors du mme type et l'algorithme deviendrai difficile lire. La bonne solution est dutiliser un tableau d'lments structurs.
A LAMNII 74

Structures
Un type structur est constitu partir de types de base ou d'autres types dclars.
NomDeType : STRUCTURE NomDechamp1 : Type1 NomDechamp2 : Type2 ...................................... FINSTRUCTURE

Dclaration VARIABLE E : NomDeType On accde au diffrents champs par : E. NomDechamp1 E. NomDechamp2


A LAMNII 75

Solution 2
ALGORITHME Liste Etudiant : STRUCTURE VARIABLE nom : CHANE VARIABLE prnom : CHANE VARIABLE moyenne : REEL FINSTRUCTURE VARIABLE i : ENTIER tEtud[0:20] : TABLEAU de STRUCTURE Etudiant DBUT POUR i 0 JUSQU' 19 INCRMENT 1 FAIRE AFFICHER("Taper nom, prnom et moyenne de ltudiant n", i) SAISIR(tEtud[i].nom, tEtud[i].prnom[i], tEtud[i].moyenne[i]) FINPOUR FIN
A LAMNII 76

Exemple 1
Une date de naissance est un exemple de structure. On peut crire :
dateDeNaissance : STRUCTURE VARIABLE jourDeNaissance : ENTIER VARIABLE moisDeNaissance : ENTIER VARIABLE anneDeNaissance : ENTIER FINSTRUCTURE

Dclaration: VARIABLE UneDade : dateDeNaissance UneDade. jourDeNaissance3 UneDade. moisDeNaissance12 UneDade. anneDeNaissance1997
A LAMNII 77

Exemple 2
En gomtrie un cercle est caractriser par son centre et le rayon. 1-Dcrire une structure nomme point et une fonction cercle qui permettent de caractriser un cercle. 2- Dcrire une fonction qui calcule la surface ou le primtre dun cercle. 3- Ecrire un algorithme de test

A LAMNII

78

Type pointeur
En gnrale la mmoire centrale est dcoupe en octets dont chaque octet est identifi par un numro appel adresse. Par consquent, Dclarer une variable, c'est attribuer un nom une zone de la mmoire. Cette zone est dfinie par : sa position c'est--dire ladresse de son premier octet sa taille c'est--dire le nombre doctets Exemple : VARIABLE var : ENTIER var 5

A LAMNII

79

Type pointeur
Pour accder la valeur contenue dans cette variable, on utilise tout simplement son nom. Mais il peut arriver qu'on veuille accder son adresse; dans ce cas, on est oblig de passer par la notion pointeur. Dfinition : Un pointeur est une variable contenant l'adresse d'une autre variable d'un type donn. Dclaration d'un pointeur : Un pointeur est une variable qui doit tre dfinie en prcisant le type de variable pointe, de la faon suivante : nom : POINTEUR sur Typepoint Exemples : p : POINTEUR sur ENTIER pt1 : POINTEUR sur REEL
A LAMNII 80

Type pointeur
Pour affecter une adresse un pointeur gnralement on utilise une variable existante. Pour cela, on utilise l'expression "ADRESSE de". Il possible d'extraire ou modifier la valeur d'une variable pointe. Exemple : ALGORITHME TestPointeur
VARIABLE N : ENTIER 5 P : PIONTUER sur ENTIER DBUT P ADRESSE de N // c.--d. P pointe sur N AFFICHER (*P) // la valeur P AFFICHER (N) // la valeur N AFFICHER (P) // adresse AFFICHER (ADRESSE de N) *P 18 // changement des valeurs de P et N AFFICHER (*P) // la valeur P AFFICHER (N) // la valeur N FIN
A LAMNII 81

Application : passage par adresse


On suppose quon veuille changer deux nombre on utilisant une fonction change. On passe les arguments par deux faons: 1- passage par valeur :
FONCTION change1(a : ENTIER, b : ENTIER)RETOURNE : VIDE

2- passage par adresse:


FONCTION change2(a : PIONTUER sur ENTIER, b : PIONTUER sur ENTIER)RETOURNE : VIDE

Remarque: A- La fonction change1 cre une copie des variables a et b B- La fonction change2 peut modifier le contenu des variables a et b dans lalgorithme appelant.
A LAMNII 82

Application : passage par adresse


Exemple :
FONCTION change1(a : ENTIER, b : ENTIER)RETOURNE : VIDE VARIABLE tmp : ENTIER DBUT tmp a a b b tmp AFFICHER (a) AFFICHER (b) FIN
FONCTION change2(a : PIONTUER sur ENTIER, b : PIONTUER sur ENTIER)RETOURNE : VIDE

VARIABLE tmp : ENTIER DBUT tmp *a *a *b *b tmp AFFICHER (a) AFFICHER (b) FIN

Test : a 3, b6 change1(a, b) change2(ADRESSE de a, ADRESSE de b)


A LAMNII 83

Les fichiers
Toutes les donnes que nous avons traites jusqu' prsent taient saisies partir du clavier et stockes en mmoire (RAM). Ainsi, la fin de l'excution du programme on ne peut pas les utilises. Imaginons que lon veut crire un programme grant une facture et que lutilisateur doit pouvoir retrouver sa facture jour avec les modifications quil y a apportes la dernire excution du programme. Les donnes de cette facture ne peuvent pas tre inclues dans lalgorithme, et encore moins tre entres au clavier chaque nouvelle excution ! Les fichiers sont l pour remplir ce manque.
A LAMNII 84

Les fichiers
Dfinition : Un fichier est un regroupement d'informations sur un support non volatile tel que le disque.

Programme

Fichier
Disque

A LAMNII

85

Notion de fichier
Donnes et programmes sont stocks dans des fichiers Un fichier est identifi par un nom et une extension (fichier.doc, pgcd.c, texte.tex, etc.) Un fichier est caractris par des attributs: taille, date de cration, date de modification, etc. Lexploitation dun fichier par une application se fait par lintermdiaire du systme dexploitation qui accomplit les oprations logiques de base suivantes: ouvrir, fermer un fichier lire, crire dans un fichier Lutilisateur peut crer, dtruire, organiser, lire, crire, modifier et copier des fichiers ou des enregistrements qui les composent
A LAMNII 86

Lecture et criture de fichiers


Ouverture et la fermeture : Avant de lire un livre, il faut l'ouvrir. Aprs avoir lu un livre, il faut le fermer. De la mme faon, on va dclarer l'ouverture et la fermeture d'un fichier, en utilisant les instruction OUVRIR et FERMER La lecture et l'criture (les entres/sorties) des fichiers utilisent les instructions LIRE() et CRIRE(). SAISIR et AFFICHER pour le clavier et l'cran. Pour effacer un enregistrement on utilise l'instruction SUPPRIMER et pour le modifier on utilise l'instruction MODIFIER
A LAMNII 87

Fichiers : Dclaration et mode d'ouverture


Dans un programme, un fichier est dsign par une variable, qu'on dclare dans la section des variable par : VRRIABLE nom_fichier : FICHIER Les modes principaux d'ouverture d'un fichier : en lecture pour rcuprer des donnes du fichier dans des variables de la mmoire centrale en criture pour crer un ficher dans lequel enregistrer des rsultats. Si fichier existe dj, son ancien contenu est dtruit en mode ajout pour pouvoir ajouter des articles la fin d'un fichier dj existant
A LAMNII 88

Exemple : Ecriture
Dans cet exemple on a cre un fichier nomm Text.txt pour crire les entiers 0, 1, , 10.

ALGORITHME Ecriture_fichier VARIABLE n : ENTIER VARIABLE fid : FICHIER DBUT OUVRIRE(Test.txt, fid en mode criture) POUR n0 JUSQU 10 INCRMENT 1 faire CRIRE(fid, n) FINPOUR FERMER(fid) FIN

A LAMNII

89

Exemple : Lecture
Dans cet exemple on a fait une lecture du fichier Test.txt et on a affich les entiers 0, 1, , 10 lcran.
ALGORITHME Lecture_fichier VARIABLE n : ENTIER VARIABLE fid : FICHIER DBUT OUVRIRE(Test.txt, fid en mode lecture)
// On lit les entiers et on les affiche tant qu'on a pas atteint la fin du fichier

TANTQUE (non eof( )) Faire LIRE(fid, n) AFFICHER(n) FINTANTQUE FERMER(fid) FIN

eof( ) : Renvoie vrai lorsque la tte de lecture est en face une marque de fin de fichier.
A LAMNII 90

Notion de complexit
Quand on tente de rsoudre un problme, la question se pose souvent du choix dun algorithme. Quels critres peuvent guider ce choix ? Deux besoins contradictoires sont frquemment en prsence : lalgorithme doit
1. tre simple comprendre, mettre en uvre et mettre au point. 2. Mettre intelligemment contribution les ressources de lordinateur, et plus prcisment, il doit sexcuter le plus rapidement possible.
A LAMNII 91

Mesure de la complexit algorithmique


Le temps dexcution dun algorithme dpend des facteurs suivants :
1. Les donnes entrant dans le programme, 2. La qualit du code gnr par le compilateur pour la cration du programme objet, 3. La nature et la vitesse dexcution des instructions du microprocesseur utilis pour lexcution du programme. 4. La complexit du programme.

Dans ce cours nous ferons abstraction de ceci, pour nous concentrer sur le cot des actions rsultant de lexcution de lalgorithme, en fonction de la taille des donnes traites. Ceci permet de comparer deux algorithmes traitant le mme Calcul par exemple.
A LAMNII 92

Temps dexcution dun algorithme


On note T(n) le temps dexcution ou la complexit logarithmique dun programme portant sur des donnes de taille n. T(n) est une fonction de N dans R Dans ce cours la complexit dun algorithme dsigne le nombre dopration lmentaires (affectations, comparaisons, oprations arithmtiques) effectues par lalgorithme. Complexit au mieux Tmin(n) = min(Temps(d)| d donne de taille n) Complexit au pire Tmax(n) = max(Temps(d)| d donne de taille n) Complexit en moyenne Tmoy(n) = p(d)*Temps(d)
d :donnes de taille n

Avec p(d) une loi de probabilit sur les entres. Frquemment, on utilise la loi de probabilit uniforme.
A LAMNII 93

Exemple 1
Calcul de A- boule
S0 POUR i1 jusqu n incrment 1 Faire ss+i FINPOUR 1 aff. 1 aff. n incr. n comp. n aff. n add. total: T(n)=4n+2 1 add. 1 mul. 1 div. 1 aff. total: T(n)=4

B-

A LAMNII

94

Remarque: Le nombre ditrations dune boucle pour est gal : valeur finale de lindice moins sa valeur initiale, plus 1. Dans notre cas, nous avons: n 1 + 1 = n . Laffectation i 1. La condition de sortie (i < n) est value n fois. Lincrmentation de i est value n fois. Donc, nous avons en tout 2n+1

A LAMNII

95

Exemple 2
Calcul du nombre dactions excutes dun algorithme de tri
Pour i1 jusqu n-1 incrment 1 faire min_pos i min t[Pos] pour j i+1 jusqu n incrment 1 faire si (t[j] < min) alors min_pos j petit t[min_pos] finsi Finpour t[min_pos] t[i] t[i] min Finpour 2(n-1)+1 n-1 n-1 n(n-1)/2 n(n-1)/2 n(n-1)/2 n(n-1)/2 n-1 n-1 total: T(n)= 2n + 4n - 5

A LAMNII

96

Les notations O et
Dfinition : Soient f et g deux fonctions de IN dans IR , On dit que f est en O(g) sil existe un rel c >0 et un entier positif (un rang) n0 tel que : pour tout n > n0, f(n) c g(n) Exemple 1 : Soit la fonction f(n) = (n+1) et g(n)=n pour n0, alors la fonction f(n) est un O(n) pour n0=1 et c=4. En effet, pour n1, on a (n+1) 4n (il suffit dtudier le signe de (n+1) - 4n). Exemple 2 : La fonction f(n) = 3n + 2n est O(n) (g(n)=n)avec n0=1 et c=5. En effet, 3n + 2n - 5n = 2n(1-n) < 0 pour n >1 ; par consquent f(n) est O(n).
A LAMNII 97

Les notations O et
Dfinition : Soient f et g deux fonctions de IN dans IR, on dit que f est en (g) si f est en O(g) et g est en O(f). Exemple : 3n+1 est en (n) f(n) = 3n +1 g(n) = n

3n+1 est en O(n) pour n0 = 2, et c = 4 on a pour n> n0, lingalit 3n +1 4n n est en O(3n+1) Pour n0 =2, et c = 2 on a pour n> n0, lingalit n 2(3n+1)
A LAMNII 98

Les notations O et
Proprits
f(n) lim = a 0 f est en (g) n g( n ) f(n) lim = 0 f est en O(g) mais f n' est pas en (g) n g ( n )

3) lim

f(n) = g( n )

f n est pas en O(g) et donc f n' est pas en (g)

En pratique on cherchera des quivalents linfini de f. Exemple : f(n) = 3n + 2n et g(n)=n

f (n) lim =3 donc f est en (n ) n g (n)

A LAMNII

99

Les notations O et
En pratique on cherchera des quivalents linfini de f. En pratique f reprsente une quantit tudier (temps, nombre doprations) et g fait partie dune chelle de fonctions simples (n, nlog2(n), n2, etc...) destine informer sur le comportement de f.

A LAMNII

100

Les grandes classes de complexit


Les algorithmes usuels peuvent tre classs en un certain nombre de grandes classes de complexit : La plupart des instructions de la plupart des programmes sont excutes une fois ou au plus un petit nombre de fois. Si toutes les instructions dun programme ont cette proprit on dit quil a une complexit constante cest--dire O(1). Les algorithmes sub-linaires, dont la complexit est en gnral en O(log(n)). Cest le cas de la recherche dun lment dans un ensemble ordonn fini de cardinal n. Les algorithmes linaires en complexit O(n) ou en O(n log(n)) sont considrs comme rapides, comme lvaluation de la valeur dune expression compose de n symboles ou les algorithmes optimaux de tri.
A LAMNII 101

Plus lents sont les algorithmes de complexit situe entre O(n) et O(n), cest le cas de la multiplication des matrices et du parcours dans les graphes. Au del, les algorithmes polynomiaux en O(nk), pour k>3 sont considrs comme lents, sans parler des algorithmes exponentiels (dont la complexit est suprieure tout polynme en n) que lon saccorde dire impraticables ds que la taille des donnes est suprieure quelques dizaines dunits.

A LAMNII

102

A LAMNII

103

valuation dun algorithme


Pour valuer un algorithme, nous chercherons une borne suprieure en fonction de paramtres correspondant la taille des donnes. Ceci nous permettra dobtenir lordre de grandeur du temps dexcution dans le pire des cas. En effet, supposons que lexcution faisant intervenir le maximum dactions lmentaires ncessite : n1 actions lmentaires de genre 1 (par exemple affectations) n2 actions lmentaires de genre 2 (par exemple additions) . nk actions lmentaires de genre k Chaque ni demandant un temps ti.

A LAMNII

104

Le temps total pour cette excution sera : t =

tn
i i i

Pour une machine donne : c1 n i T ( n ) c 2 n i


i

avec

c1 = min t i , c 2 = max t i .
i i

Donc T(n) = O(ni) est lordre de grandeur du temps de lalgorithme dans le pire des cas, indpendamment de la machine utilise.

A LAMNII

105

Exemple
On considre le polynme en x rel, coefficients rels, de degr n : P ( x ) = a n x n + a n 1 x n 1 + K + a1 x + a 0 On veut calculer sa valeur P(x0) pour x=x0 donn, en utilisant les seules oprations lmentaires : addition et multiplication.

A LAMNII

106

1re mthode : On peut crire un algorithme qui calcule les unes aprs les autres et les additionne (ajouter ). Calculons en fonction de n le nombre doprations lmentaires qui seront effectues lors de lexcution de cet algorithme : - nombre de multiplications pour un ai xi: i - nombre de multiplications pour tous : 1+2++n = n(n+1)/2 - nombre dadditions : n - Total : n(n+3)/2 Donc cet algorithme est O(n).

A LAMNII

107

2me mthode (schma de Hrner) : P(x) peut scrire :

P(x) = ((K(((an x + an1 )x + an2 )x + an3 )x + Ka1 )x + a0 )


Grce cette criture, on peut crire un algorithme qui calcule P(x0)de la manire suivante : Analyse : itrer n fois : - multiplier A par x0 et additionner le coefficient suivant - mettre le rsultat obtenu dans A commencer avec A= an.
A LAMNII 108

ALGORITHME Hrner VARIABLES n, i : ENTIER A, B, X : REL DBUT SAISIR(n, X, A) POUR i1 JUSQU n INCRMENT 1 FAIRE SAISIR(B) AA*X+B FINPOUR AFFICHER(A) FIN

Complexit : Cet algorithme comporte n multiplications, n addition, n+3 lectures, n affectations, 1 criture. Il est en O(n). Il est donc meilleur que le prcdent en ce sens que pour les grandes valeurs de n, le temps dexcution du premier a pour ordre de grandeur le carr du deuxime.
A LAMNII 109

Langages de programmation
Un langage Informatique est un langage spcifique "comprhensible" par l'ordinateur. Il permet de spcifier l'ordinateur, les donnes en entres, les rsultat et les traitement faire pour rsoudre un problme donn . Historique des langages Langage de bas niveau (proche du langage machine): Jusquen 1945 : langage binaire 1950 : langage assembleur Langage de haut niveau (proche des langages naturels): Depuis 1955: Programmation procdurale : Fortran, Cobol, C Programmation orient objet : SmallTalk, C++, Java Programmation logique : Prolog
A LAMNII 110

Et beaucoup dautres Evolution: Programmation imprative (fonction): Exemples : Pascal, C,

A LAMNII

111

Notion de programme
Terminologie: Programme, application et logiciel sont des synonymes Un programme est une suite logique d'instructions que l'ordinateur doit excuter logique de ralisation du traitement effectuer Instructions et donnes doivent rsider en mmoire centrale pour tre excutes Programmes et donnes sont sauvegards dans des fichiers Le processeur se charge deffectuer les oprations arithmtiques et logiques qui transformeront les donnes en rsultats

A LAMNII

112

Dmarche de programmation
Phase d'analyse et de rflexion (algorithmique) Phase de programmation choisir un langage de programmation traduction de l'algorithme en programme programme (ou code) source compilation : traduction du code source en code objet traduction du code objet en code machine excutable, comprhensible par l'ordinateur Phase de test Phase d excution

A LAMNII

113

A LAMNII

114

You might also like