You are on page 1of 114

Algorithmique

A. LAMNII

Problématique

?
Pourquoi un cours d’algorithme ? Pourquoi programmer ?
Tout ce qui est classique a déjà été programmé !! ?

A LAMNII

2

Problématique
Parce que l’algorithmique exprime les instructions résolvant un problème donné indépendamment des particularités de tel ou tel langage. Pour prendre une image, sur un programme était une narration, l’algorithmique serait le schéma (plan) la formulation et l’orthographe. Or, vous savez qu’il vaut mieux faire d’abord le plan et rédiger ensuite l’identique … Chaque jour : naissance de nouveaux problèmes

A LAMNII

3

Exemples : La répartition de l'héritage musulman Calcul de l’effectif moyen annuel d’une entreprise Automatisation de tâches répétitives Segmentation et étiquetage de corpus écrits. Ecriture de fichiers sur un continuum.Problématique Parce qu’il n’existe pas de logiciel qui permet de faire ce qu’on veut. calculs. Création de stimuli sur un continuum. Affichage de plusieurs résultats dans le même format … A LAMNII 4 .

Mais elle a aussi besoin qu’on lui indique "en détail" comment réaliser une tache. On doit alors décomposer les opérations nécessaires à la réalisation d’un problème donné en un nombre fini d’étapes élémentaires qui peuvent être traités individuellement. Trier des objets.Introduction L’informatique étant la science de traitement automatique de l’information a besoin d’une machine (ordinateur) pour faire ce traitement. L’intérêt de la machine est sa capacité de traiter rapidement et sans erreurs un grand nombre de données. Calculer une facture. multiplier deux nombres. résoudre une équation. chercher le plus court chemin. mettre du café : c’est mettre en place un algorithme A LAMNII 5 .

etc. un algorithme est l’énoncé dans un langage bien défini d’une suite d’opérations permettant de répondre au problème. ). L’algorithme est un moyen pour le programmeur de présenter son approche d’un problème donné (produit de deux nombres par exemple) à d’autres personnes. C++.Qu’est ce qu’un algorithme ? Un algorithme est une suite finie d’instructions qu’on applique dans ordre bien déterminé à un nombre fini de données pour arriver à un résultat. A LAMNII 6 . Un algorithme permet de formuler un problème en un langage semi-naturel plutôt que d’utiliser une syntaxe rigide et cryptique telle que celle des langages de programmation traditionnels (C. En effet. Java.

Algorithme : Exemple Voici un algorithme indiquant à l'écran si un nombre entré via le clavier de l'ordinateur est positif ou négatif : ALGORITHME PositifOuNégatif VARIAIBLES N : ENTIER DÉBUT AFFICHER("Entrez un nombre") SAISIR (N) SI (N > 0) ALORS AFFICHER ("Nombre positif") SINON AFFICHER ("Nombre nombre") FINSI FIN A LAMNII 7 .

Identifier les résultats souhaités (sorties) 4. Déterminer les transformations à faire sur ces données pour obtenir les résultats (traitement/ développement). Identifier les données (entrées) 3.Comment écrire un algorithme Pour écrire un algorithme on doit suivre les étapes suivantes : 1. A LAMNII 8 . Comprendre le problème 2.

Si c’est le cas. Concis : un algorithme ne doit pas dépasser une page. il faut décomposer le problème en plusieurs sousproblèmes Structuré : un algorithme doit être composé de différentes parties facilement identifiables. De haut niveau : l’algorithme doit pouvoir être traduit en n’importe quel langage de programmation.Qu'est ce qu'un bon algorithme ? Un algorithme doit donc être : Lisible : l’algorithme doit être compréhensible même par un non informaticien. A LAMNII 9 . Précis : chaque élément de l’algorithme ne doit pas porter à confusion.

Comment écrire un algorithme Exemple 1 : Calcul de la moyenne suivante : moy=(coef1*note1+ coef2*note2+…+ coefN*noteN)/(coef1+coefN+…+coefN) A LAMNII 10 .

4 A LAMNII 3 11 .Les entrées 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 résultat sur la somme des coefficients .

Exemple 2 : Trier une suite de nombres entiers dans l'ordre décroissant. aN) Les sorties sont : Suite de nombres triés (ordre décroissant) Les traitements : Permutations A LAMNII 12 . Les entrées sont : N nombres entiers (a1. ... a2..

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 modèle Equation Solution instructions Pour représenter un algorithme.Langage structuré (pseudo code) A LAMNII 13 Gâteau Pull .Organigramme de programmation . on peut recourir à diverses méthodes : .

Un premier algorithme A LAMNII 14 .

Structure générale d’un algorithme A LAMNII 15 .

Règles L’en-tête de l’algorithme : nom significatif Délimiteur de début (Début) : marque le début de l’algorithme Délimiteur de fin (Fin) : marque la fin de l’algorithme Déclaration de constantes. Déclaration de types. Déclaration de variables. fonctions et procédures Commentaire : explique le rôle d’un algorithme ou de ses instructions A LAMNII 16 . Déclaration de prototypes de fonctions et de procédures Corps de l’algorithme : les différentes instructions : sont des actions élémentaires ou appels aux sous algorithmes.

Mots réservés Afficher Saisir Début DébutFonction Variable DébutProcédure Faire Fin FinFonction Tableau FinPour FinProcédure FinSi FinTantQue Incrément Pour Retourner Selon Cas CasSinon FinSelon Pointeur Si Sinon TantQue Lire Ecrire Répéter Structure Entier Réel Caractère Booléen Null Vide Fonction Procédure … On y ajoutera des fonctions utiles. sin(x). qui fournit un entier au hasard entre 0 et n − 1. abs(x). par exemple : Alea(n). div. … A LAMNII 17 . plus toutes les fonctions mathématiques usuelles : mod.

Instructions élémentaires Un programme est constitué d’une séquence d’instructions. … A LAMNII 18 . Exemples instructions : affectation. écriture. nécessaire et suffisante pour les problèmes que nous aurons à écrire. Dans notre pseudo-code. incrémenter ou décrémenter un valeur. lecture. nous n’aurons que la liste minimale d’instructions. retourner une valeur. Une instruction est une action (ordre) que l’ordinateur est capable d’exécuter.

on va avoir en permanence besoin de stocker provisoirement des valeurs : frappées au clavier ou des résultats obtenus par le programme. RÉELS. Ces valeurs peuvent être des nombres. unNombre : ENTIER VARIABLE nom. du texte.) Exemples : VARIABLE val. VARIABLE Nom1.nomN : TYPE Instruction permettant de réserver de l’espace mémoire pour stocker des données (dépend du type de ces données : ENTIERS.Déclarer une variable Dans un programme informatique... prénom : TABLEAU DE CARACTÈRES A LAMNII 19 .. etc. CARACTÈRES. etc. Nom2.

Déclarer une constante CONSTANTE identificateur : TYPE ←(expression ou valeur) Instruction permettant de réserver de l’espace mémoire pour stocker des données dont la valeur est fixée pour tout l’algorithme.14 A LAMNII 20 . Exemples: CONSTANTE MAX : ENTIER ←100 CONSTANTE DOUBLEMAX : ENTIER ←MAX × 2 CONSTANTE pi : REEL ← 3.

Exemples: SAISIR(unNombre) SAISIR(nom.Saisir une donnée SAISIR (liste de noms de variables) ( LIRE) Instruction permettant de placer en mémoire les informations fournies par l'utilisateur. prénom) SAISIR(val) A LAMNII 21 .

"est différent de 0") //ÉCRIRE AFFICHER("La somme de". unNombre. un résultat AFFICHER(‘’liste de noms de variables … message ’’. unNombre+ val) A LAMNII 22 . "et". var) Instruction permettant de visualiser les informations placées en mémoire.Afficher une donnée. val . "est". Exemples: AFFICHER(unNombre.

Affecter une valeur à une variable
identificateur

←<expression> ou <constante> ou
<identificateur>

← : Instruction permettant d’attribuer à la variable identifiée par l'élément placé à gauche du symbole ← la valeur de l'élément 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: RÉEL //déclarations DÉBUT a2 //affectation b3 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 : RÉEL ←20.6 CONSTANTE Titre : CHAÎNE ←"Résultat" VARIABLE prixHT, prixTTC: RÉEL //déclarations DÉBUT 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

– Une valeur qui représente l’état actuel de l’objet. ESTO A LAMNII 26 .Les objets (variables) Chaque objet est défini par : – Un nom qui le désigne et le distingue des autres objets. – Un type qui caractérise la nature des informations qui seront représentées par l’objet et les opérations qui seront autorisées sur cet objet.

ESTO A LAMNII 27 .Les types : Le type permet de définir l’ensemble des valeurs susceptible d’être prise par une variable ainsi que les opérations possibles sur cette variable.2E6. – RÉEL : Les réels sont notés par un point et une virgule (-0. L’intervalle des entier est défini par le nombre de bits sur lequel la machine est paginée (Ensemble Z).5) ou une mantisse et un exposant 0. – CARACTÈRE : Les variables de ce type peuvent contenir tous les caractère du code ASCII. Les types de base sont : – ENTIER : une variable de type entier ne peut contenir que des types entiers.

– BOOLÉEN : Une valeur de ce type ne peut contenir que deux valeurs VRAIE et FAUX ou 1 et 0. ESTO A LAMNII 28 .

Les opérateurs Les opérateurs permettent de produire un effet sur les objets de l’algorithme (variables ou constante) en effectuant des calculs. Ils sont divisés en trois classe : a) Les opérateurs arithmétiques ESTO A LAMNII 29 . des vérification d’égalités et d’inégalités.

(10 div 2) = 5 = le quotient de la division euclidienne de 10 par 2.Exemple: (15 mod 4) = 3 = le reste de la division euclidienne de 15 par 4. (11 div 2) = 5 ESTO A LAMNII 30 .

b) Les opérateurs de comparaison c) Les opérateurs logiques A LAMNII 31 .

A LAMNII 32 .

L’instructions conditionnelle Si (condition) ALORS Séquence d’instructions FINSI SI (condition) ALORS Séquence d’instructions #1 SINON Séquence d’instructions #2 FSI A LAMNII 33 .

A LAMNII 34 . Une condition permet de prendre une décision élémentaire suivant son résultat : VRAI ou FAUX.L’instructions conditionnelle Une condition est une expression écrite entre parenthèses à valeur BOOLÉENNE. les conditions sont mises en œuvre par les instructions conditionnelle et les boucles. Dans un langage.

Montant_Brut) SI (Montant_Brut >1000) ALORS Net_Cial ← Montant_Brut * 0. Quantité. Net_Cial) FIN A LAMNII 35 . Si le montant brut est supérieur à 1 000 on accorde une remise de 10%.Exemple Calcul du net commercial. Montant_Brut. ALOGRITHME : Net commercial VARIABLE Prix.9 SINON Net_Cial ← Montant_Brut FINSI AFFICHER ("Le net commercial est de :". Net_Cial: REEL DÉBUT 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".

alors y=n/2 . alors y = 3(n +1)/2 Ecrivez un algorithme qui demande n à l’utilisateur et qui affiche à l’écran la valeur de y A LAMNII 36 .Si n est un entier pair.Si n est un entier impair.Exercices 1.Valeur absolue d’un nombre réel 3.Saisir deux nombres puis Afficher le plus grand 2.

Si le montant brut est inférieur à 1 000 on n'accorde pas de remise. A LAMNII 37 .Instruction conditionnelle: imbriquée 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 compris entre 1 000 et 2 000 la remise sera de 12% et de 14 % au-delà.

Net_Cial) FIN A LAMNII 38 . Net_Cial: REEL DÉBUT 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".86 FINSI FINSI AFFICHER ("Le net commercial est de :". Montant_Brut) SI Montant_Brut <=1000 ALORS Net_Cial ← Montant_Brut SINON SI Montant_Brut <= 2000 ALORS Net_Cial ← Montant_Brut * 0. Montant_Brut.88 SINON Net_Cial ← Montant_Brut * 0. Quantité.PROGRAMME Net_commercial VARIABLES Prix.

La structure SELON CAS… CAS…CASSINON ….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 défaut FINSELON A LAMNII 39 . FINSELON SELON remplace avantageusement la structure : SI… ALORS. SINON…..

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 (" très bien") CAS SINON : AFFICHER ("ajourné") FINSELON FIN A LAMNII 40 .

8 DH à partir de 30g. mais en-dessous de 60g à partir de 60g 6.3 DH Ecrire un algorithme qui permet de saisir le poids d’une lettre et de calculer le tarifs d’affranchissement A LAMNII 41 .5 DH 4.Les tarifs d’affranchissement d’une lettre sont les suivants : en-dessous de 30g 2.Exercices 1.

4 : vert. 2 : orangé.Réécrire L’algorithme Mention en utilisant seulement des SI … ALORS … SINON … FINSI. 3.Exercices 2. 6 : indigo et 7 : violet. Utiliser la structure SELON CAS… CAS…CASSINON ….Ecrire un algorithme qui permet de saisir un numéro de couleur de l'arc-en-ciel et d'afficher la couleur correspondante : 1: rouge. 3 : jaune.. FINSELON A LAMNII 42 . 5 : bleu.

La structure TANQUE 3. A LAMNII 43 . dont le résultat est vrai ou faux.Structures répétitives : Boucles Il arrive qu'un algorithme doive répéter une séquence d'instructions un certain nombre de fois peut être connu ou inconnu afin d’accomplir une tâche. généralement il existe trois structures à cette fin. C'est sur la base de cette condition que la répétition est déterminée. La structure RÉPÉTER-JUSQU'À Les boucles sont basées sur l'évaluation d'une condition. La structure POUR 2. appelées structures répétitives ou boucles : 1.

La boucle : POUR…JUSQU‘À…INCRÉMENT…FAIRE…FINPOUR POUR var ← val_init JUSQU'À val_fin INCRÉMENT val_inc FAIRE Séquence d'instructions FINPOUR Répéter une suite d’instructions un certain nombre de fois. A LAMNII 44 .

Exemple 1 Cette boucle affichera successivement les multiples de 3 inférieurs à 100. POUR i← 0 JUSQU'À 100 INCRÉMENT 1 FAIRE SI (i MOD 3) = 0 ALORS AFFICHER (i) FINSI FINPOUR Réécrire l’exemple précédent pour afficher les multiples de 3 en jouant seulement le pas d’incrément (sans utiliser Modulo). A LAMNII 45 .

Calculer la somme des N entiers positifs < =N 3. 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 i1 JUSQU'À N INCRÉMENT 1 FAIRE  somme  somme + i AFFICHER (“la somme” est somme) FINPOUR FINSI A LAMNII 46 . Résolution : 1ère étape : Analyse 1.Entrer la valeur de N (>0) 2.Exemple 2 Problème : On veut écrire un algorithme qui calcule la somme des entiers positifs inférieur ou égale à N.Afficher le résultat 2ème étapes : Conception déclaration des variables N.

A LAMNII 47 . Si la condition est fausse dès le départ.La boucle : TANT QUE … FAIRE … FINTANTQUE TANTQUE condition FAIRE Séquence d'instructions FINTANTQUE Répéter une suite d’instructions tant qu’une condition est remplie. le traitement n’est jamais exécuté.

i  -100 TANQUE (i<=0) FAIRE AFFICHER (i) i i+ 1  FINTANQUE A LAMNII 48 . il faut choisir la boucle POUR Si la boucle doit s'arrêter quand survient un évènement .Remarque & Exemple Remarque : Si le nombre d’itérations est connu à l’avance. il faut choisir la boucle TANTQUE Exemple : L'exemple ci-dessous exploite une structure TANTQUE afin d’afficher les entiers négatifs > -100.

A LAMNII 49 . dans cette structure. La condition est évaluée après les instructions. Donc.La boucle : RÉPÉTER … JUSQU'À RÉPÉTER Séquence d'instructions JUSQU'À condition Cette boucle répète des instructions jusqu'à ce que la condition soit remplie. les instructions sont effectuées au moins une fois.

une fois le prix d’un article vaux 0 on arête.Exemple 1 Passage en Caisse : Calcul du total à payer. T) A LAMNII 50 . N // le prix d’un article T  0 // total à payer RÉPÉTER AFFICHER( "le prix d’un article: ") SAISIR (N) TT+N JUSQU'À (N = 0) AFFICHER(" Le total est : ".

") SAISIR (Quantité) Montant_Brut ← Prix * Quantité AFFICHER ("Montant_Brut=". On arrêtera les saisies lorsque l'utilisateur répondra "N" à la question : Autre produit (O/N) ? Réponse  'O' RÉPÉTER AFFICHER ("Quel il est le prix du produit ?") SAISIR (Prix) AFFICHER ("Quelle elle est la quantité ?. Montant_Brut) AFFICHER ("Autre produit (O/N) ?") SAISIR (Réponse) JUSQU'À (Réponse = 'N') A LAMNII 51 .Exemple 2 On désire saisir un certain nombre de produits différents avec des prix et des quantités facturées différentes.

Multiplication de deux nombres en utilisant la technique ressue A LAMNII 52 .Écrivez un algorithme qui saisit deux entiers positifs a et b et simule l’opération de division entière entre eux.Exercices 1. 2.Écrire un algorithme permettant d’afficher le carré des nombres entier entre 1 et 10. Affichez le quotient et le reste 3. On divise le plus grand par le plus petit sans utiliser l’opérateur /.

Remarque A LAMNII 53 .

Tableaux Un tableau est une structure de données regroupant une suite de variables de même type. Pour déclarer un tableau. 0 par défaut) MAX : indice maximum (obligatoire) TABLEAU : type tableau de : mot de séparation du type tableau et du type des éléments TYPE : type de chaque élément A LAMNII 54 . il est nécessaire d’indiquer sa dimension. Mon_Tableau[0 : MAX] : TABLEAU de TYPE Mon_Tableau : nom de la variable [] : indication d'intervalle d'indices 0 : indice minimum (facultatif. sa taille et le type de ses éléments.

nombre entier (0 ≤ index<MAX) qui permet d'accéder à un élément du tableau. Jour[5] ← ‘samedi’. Jour[1]← ‘mardi’.Exemple Pour repérer un élément parmi les autre. Jour[4] ← ‘vendredi’. ALGORITHME JOURS Jour :TABLEAU[0:7] de CHAINE VARIABLE i : ENTIER DÉBUT Jour[0]← ‘lundi’. on utilise un index. Jour[2] ← ‘mercredi’. Jour[6] ← ‘dimanche’ POUR i← 0 JUSQU'À 6 INCRÉMENT 1 FAIRE AFFICHER(Jour[i]) FinPour Fin A LAMNII 55 . Jour[3]← ‘jeudi ’.

j] A LAMNII 56 . Déclaration : Mon_Tableau[0 : MAX1. il y a une erreur de logique quelque part. 0 : MAX2] : TABLEAU de TYPE On atteint un élément d’un tableau à deux dimensions par un couple d’indice : Mon_Tableau[i. Un tableau à deux dimensions correspond à la notion de matrice (M x N).Remarque : Si un programme est amené à dépasser les limites d’un tableau. Il faut revoir l’algorithme.

j]) FinPour FinPour Fin A LAMNII 57 .i. 0:4] de ENTIER VARIABLE i. j : ENTIER DÉBUT POUR i← 0 JUSQU'À 2 INCRÉMENT 1 FAIRE POUR j← 0 JUSQU'À 3 INCRÉMENT 1 FAIRE AFFICHER("Donnez l’élément d’indice". j) SAISIR(Matrice[i.Exemple Saisir les valeurs de la matrice 3*4 suivante: ALGORITHME Matrice Matrice :TABLEAU[0:3.

A LAMNII 58 .Exercice 1 Soit T un tableau d’entiers. lorsqu’il est plus grand. Écrire un algorithme qui permet de trouver le plus grand élément de T ainsi que l’indice de la première occurrence. L’idée est d’initialiser une variable MAX avec la valeur du premier élément de T. puis de comparer successivement MAX avec chaque élément en affectant la valeur de ce dernier ainsi que son indice respectivement à MAX et Ind_MAX. ainsi que l’indice Ind_MAX à 0.

"première occurrence se trouve à l’indice".MAX.Algorithme Max T : TABLEAU [ 0:10 ] De ENTIER VARIABLE MAX. Ind_MAX) FIN A LAMNII 59 . i : ENTIER DÉBUT Ind_MAX  0 POUR i← 0 JUSQU'À 9 INCRÉMENT 1 FAIRE SAISIR (T [ i ]) FINPOUR MAX  T [ 0 ] POUR i← 0 JUSQU'À 9 INCRÉMENT 1 FAIRE SI ( MAX < T[ i ]) ALORS Ind_MAX  i MAX  T[ i ] FINSI FINPOUR AFFICHER("le MAX de T est". Ind_MAX.

Exercice 2 Soit T un tableau d’entiers. 4.Trouver le plus grand élément de T et de compter combien de fois ce maximum est atteint. 3.Afficher les éléments de T dont l’indice est impair.Refaire question 3 avec l’élément minimal.Afficher le tableau dans le sens inverse: T[n-1] … T[0]. Écrire un algorithme qui lit T et qui permet de: 1. 2. A LAMNII 60 .

L’utilisation des fonctions permet d'obtenir un code plus clair. D’où l’importance d’utiliser des fonctions (mois de redondance). Alors on est obligé a chaque itération de calculer le produit i*i*i . et moins redondant.Fonctions Une fonction est un sous-algorithme qui est composé d'instructions. elle reçoit des données ou arguments et en général elle retourne un résultat. A LAMNII 61 . Exemple: Supposons qu’on est amené a calculer la somme suivante : ∑ i*i*i pour i=1 jusqu’à 30.

….….Fonctions : Syntaxe FONCTION NomFonction (var1. Une fonction s’appelle de la manière suivante : NomFonction (valeur Var1. var2) sont passés : A.varN) RETOURNE : TYPE VARIABLE // si il existe DEBUTFONCTION Corps de la fonction RETOURNER var FINFONCTION Les arguments (var1. valeur varN) A LAMNII 62 .par référence Ref.par valeur Val.…. on écrit Ref ListeVariable : NomDeType B. on écrit Val ListeVariable:NomDeType Le type du résultat est VIDE si la fonction ne renvoie pas de résultat.

l RÉEL) RETOURNE :RÉEL VARIABLE S : RÉEL DÉBUTFONCTION S L × l  RETOURNER ( S ) FINFONCTION L’algorithme suivant utilise la fonction surface pour calculer la surface d’un rectangle.Exemple Fonction qui retourne la surface d'un rectangle à partir de sa longueur et de sa largeur. A LAMNII 63 . FONCTION surface (L RÉEL. Les dimensions L et l sont lit à partir du clavier.

larg : RÉEL DÉBUT AFFICHER ("Donnez la longueur et la largeur de votre rectangle : ") SAISIR (long. B.la définition : Écriture proprement dite de la fonction.le prototype : c’est la déclaration nécessaire avant tout . aire) FIN Remarque: Une fonction possède trois aspects : A. larg) aire  surface(long.l’appel : c’est l’utilisation d’une fonction à l’intérieur d’une autre fonction (par exemple le programme principal) . long. larg) // appel de la fonction surface AFFICHER ( "Voici sa surface : ".ALGORITHME surfaceRect VARIABLE aire. A LAMNII 64 . C.

Ce calcul doit être effectué n fois pour des valeurs de p qui pourront varier : on va fabriquer un outil. avec x un réel. B.Exercices A. une fonction. Ecrire un algorithme d’essai.Écrire une fonction qui retourne le maximum de deux nombres données.Écrire une fonction qui retourne le maximum de quatre nombres données. auquel l’on donnera deux entiers x et p et qui restituera le nombre xp. D. en utilisant la fonction qui donne le maximum de deux nombre. A LAMNII 65 .Écrire l’équivalent informatique de la fonction mathématique : y = f( x ) = 3x + 4. Ecrire un algorithme d’essai.Calculer la somme des puissances p-ième des entiers. C. Ecrire un algorithme d’essai.

A LAMNII 66 .Récursivité La récursivité est une méthode puissante qui permet d’exprimer d’une manière simple la solution de problèmes difficiles. ce processus de simplification se poursuit jusqu’à l’atteinte d’un cas où la solution est connue. Une fonction s’appelle elle-même Définition d’une fonction à l’aide de cette même fonction avec : Une condition d’arrêt Un appel avec une complexité diminuée Solutionne un problème en résolvant le même problème mais dans une situation plus simple.

elle est définie par : 0!=1 factorielle(0)=1 // test d’arrêt n!=n(n-1)! factorielle(n)= n*factorielle(n-1) La fonction peut s'écrire simplement FONCTION factorielle(val n : ENTIER) RETOURNE : ENTIER DÉBUT SI (n=0) ALORS RETOURNER(1) SINON RETOURNER(n*factorielle(n-1)) FINSI FINFONCTION A LAMNII 67 .Exemple 1 Considérons la suite factorielle.

La fonction factorielle : Exécution factorielle(3)=3*2*1*1=6 A LAMNII 68 .

l'une récursive. l'autre itérative de la suite de Fibonacci.Exemple 2 Soit la suite dite de Fibonacci définie par : Donner deux formulations (deux fonctions). A LAMNII 69 .

Solution récursive FONCTION fib(val n: ENTIER)RETOURNE : ENTIER DÉBUT 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 méthode récursive: fib(4) fib(3) fib(2) fib(2) fib(0) fib(1) fib(1) fib(1) fib(0) A LAMNII 70 .

i : ENTIER DÉBUT a 1 b 1 SI (n=0) ALORS RETOURNER(a) SINON i1 TANTQUE (i <> n) FAIRE ta a a+b  bt i  i+1 FINTANTQUE RETOURNER(a) FINSI FINFONCTION A LAMNII 71 . b.Solution itérative FONCTION fib(val n: ENTIER)RETOURNE:ENTIER VARIABLE a. t.

A LAMNII 72 . Écrire l’algorithme de la fonction correspondante. 2.somme(n)=1+2+3+…+n Donner une formulation récursive puis donner algorithme associer.Exercices 1. add(x + 1. y − 1) si y ≠ 0. y) = x si y = 0.La fonction d’addition sur N × N peut être définie récursivement de la manière suivante : add(x.

Structures Problème : Si on manipule une lite de 20 étudiants. rien n'est plus gênant de devoir toujours utiliser plusieurs variables pour un seul étudiant. i) SAISIR(tNom[i]. prénom et moyenne de l’étudiant n°". Solution 1 : On utilise un tableau pour chaque donnée ALGORITHME Liste VARIBLE i : ENTIER tNom. tPrénom[0:20] : TABLEAU de CHAÎNE tMoyenne[0:20] : TABLEAU de REEL DÉBUT POUR i← 0 JUSQU'À 19 INCRÉMENT 1 FAIRE AFFICHER("Taper nom. tPrenom[i]. tMoyenne[i]) FINPOUR FIN A LAMNII 73 . prénom et la moyenne de 20 étudiants. Par exemple : Saisir les nom.

sinon risque de traiter une donnée d'une personne et une autre d'une autre personne simultanément. A LAMNII 74 . La bonne solution est d’utiliser un tableau d'éléments structurés. Les indices doivent correspondre.Structures Quels problèmes pose cet algorithme ? Il faut traiter autant de tableaux que de données. mais toutes les données seraient alors du même type et l'algorithme deviendrai difficile à lire. Il n'est pas possible de retourner le tableau car on ne peut retourner qu'une seule donnée à la fois Une fausse solution serait d'utiliser un tableau à deux dimensions. chaque tableau est traité séparément pour une même personne.

.. NomDeType : STRUCTURE NomDechamp1 : Type1 NomDechamp2 : Type2 ............ FINSTRUCTURE Déclaration VARIABLE E : NomDeType On accède au différents champs par : E.....Structures Un type structuré est constitué à partir de types de base ou d'autres types déclarés............. NomDechamp1 E. NomDechamp2 A LAMNII 75 .........

prénom[i].Solution 2 ALGORITHME Liste Etudiant : STRUCTURE VARIABLE nom : CHAÎNE VARIABLE prénom : CHAÎNE VARIABLE moyenne : REEL FINSTRUCTURE VARIABLE i : ENTIER tEtud[0:20] : TABLEAU de STRUCTURE Etudiant DÉBUT POUR i← 0 JUSQU'À 19 INCRÉMENT 1 FAIRE AFFICHER("Taper nom. prénom et moyenne de l’étudiant n°".moyenne[i]) FINPOUR FIN A LAMNII 76 . tEtud[i]. i) SAISIR(tEtud[i]. tEtud[i].nom.

jourDeNaissance3  UneDade. moisDeNaissance12  UneDade. annéeDeNaissance1997  A LAMNII 77 . On peut écrire : dateDeNaissance : STRUCTURE VARIABLE jourDeNaissance : ENTIER VARIABLE moisDeNaissance : ENTIER VARIABLE annéeDeNaissance : ENTIER FINSTRUCTURE Déclaration: VARIABLE UneDade : dateDeNaissance UneDade.Exemple 1 Une date de naissance est un exemple de structure.

Exemple 2
En géométrie un cercle est caractériser par son centre et le rayon. 1-Décrire une structure nommée point et une fonction cercle qui permettent de caractériser un cercle. 2- Décrire une fonction qui calcule la surface ou le périmètre d’un cercle. 3- Ecrire un algorithme de test

A LAMNII

78

Type pointeur
En générale la mémoire centrale est découpée en octets dont chaque octet est identifié par un numéro appelé adresse. Par conséquent, Déclarer une variable, c'est attribuer un nom à une zone de la mémoire. Cette zone est définie par : sa position c'est-à-dire l’adresse de son premier octet sa taille c'est-à-dire le nombre d’octets Exemple : VARIABLE var : ENTIER var  5

A LAMNII

79

Type pointeur
Pour accéder à la valeur contenue dans cette variable, on utilise tout simplement son nom. Mais il peut arriver qu'on veuille accéder à son adresse; dans ce cas, on est obligé de passer par la notion pointeur. Définition : Un pointeur est une variable contenant l'adresse d'une autre variable d'un type donné. Déclaration d'un pointeur : Un pointeur est une variable qui doit être définie en précisant le type de variable pointée, de la façon suivante : nom : POINTEUR sur Typepointé Exemples : p : POINTEUR sur ENTIER pt1 : POINTEUR sur REEL
A LAMNII 80

Pour cela.-à-d. Exemple : ALGORITHME TestPointeur VARIABLE N : ENTIER  5 P : PIONTUER sur ENTIER DÉBUT P  ADRESSE de N // c. Il possible d'extraire ou modifier la valeur d'une variable pointée. 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 . on utilise l'expression "ADRESSE de".Type pointeur Pour affecter une adresse à un pointeur généralement on utilise une variable existante.

b : PIONTUER sur ENTIER)RETOURNE : VIDE Remarque: A.Application : passage par adresse On suppose qu’on veuille échanger deux nombre on utilisant une fonction échange.La fonction échange1 crée une copie des variables a et b B.passage par valeur : FONCTION échange1(a : ENTIER. On passe les arguments par deux façons: 1. b : ENTIER)RETOURNE : VIDE 2.passage par adresse: FONCTION échange2(a : PIONTUER sur ENTIER. A LAMNII 82 .La fonction échange2 peut modifier le contenu des variables a et b dans l’algorithme appelant.

b : PIONTUER sur ENTIER)RETOURNE : VIDE VARIABLE tmp : ENTIER DÉBUT tmp  *a *a *b *b tmp   AFFICHER (a) AFFICHER (b) FIN Test : a  3. b6  échange1(a. ADRESSE de b) A LAMNII 83 .Application : passage par adresse Exemple : FONCTION échange1(a : ENTIER. b) échange2(ADRESSE de a. b : ENTIER)RETOURNE : VIDE VARIABLE tmp : ENTIER DÉBUT tmp  a a b b tmp   AFFICHER (a) AFFICHER (b) FIN FONCTION échange2(a : PIONTUER sur ENTIER.

Ainsi. A LAMNII 84 . et encore moins être entrées au clavier à chaque nouvelle exécution ! Les fichiers sont là pour remplir ce manque.Les fichiers Toutes les données que nous avons traitées jusqu'à présent étaient saisies à partir du clavier et stockées en mémoire (RAM). à la fin de l'exécution du programme on ne peut pas les utilisées. Les données de cette facture ne peuvent pas être inclues dans l’algorithme. Imaginons que l’on veut écrire un programme gérant une facture et que l’utilisateur doit pouvoir retrouver sa facture à jour avec les modifications qu’il y a apportées la dernière exécution du programme.

Les fichiers Définition : Un fichier est un regroupement d'informations sur un support non volatile tel que le disque. Programme Fichier Disque A LAMNII 85 .

etc. détruire. etc. écrire. lire.doc.tex. fermer un fichier lire. date de modification.) Un fichier est caractérisé par des attributs: taille.c.… L’exploitation d’un fichier par une application se fait par l’intermédiaire du système d’exploitation qui accomplit les opérations logiques de base suivantes: ouvrir. date de création. modifier et copier des fichiers ou des enregistrements qui les composent A LAMNII 86 . organiser. texte. écrire dans un fichier L’utilisateur peut créer. pgcd.Notion de fichier Données et programmes sont stockés dans des fichiers Un fichier est identifié par un nom et une extension (fichier.

on va déclarer l'ouverture et la fermeture d'un fichier. en utilisant les instruction OUVRIR et FERMER La lecture et l'écriture (les entrées/sorties) des fichiers utilisent les instructions LIRE() et ÉCRIRE(). SAISIR et AFFICHER pour le clavier et l'écran. il faut l'ouvrir. Après avoir lu un livre. De la même façon. il faut le fermer.Lecture et écriture de fichiers Ouverture et la fermeture : Avant de lire un livre. Pour effacer un enregistrement on utilise l'instruction SUPPRIMER et pour le modifier on utilise l'instruction MODIFIER A LAMNII 87 .

un fichier est désigné par une variable. son ancien contenu est détruit en mode ajout pour pouvoir ajouter des articles à la fin d'un fichier déjà existant A LAMNII 88 . Si fichier existe déjà.Fichiers : Déclaration et mode d'ouverture Dans un programme. qu'on déclare dans la section des variable par : VRRIABLE nom_fichier : FICHIER Les modes principaux d'ouverture d'un fichier : en lecture pour récupérer des données du fichier dans des variables de la mémoire centrale en écriture pour créer un ficher dans lequel enregistrer des résultats.

txt. fid en mode écriture) POUR n0 JUSQU’À 10 INCRÉMENT 1 faire  ÉCRIRE(fid. n) FINPOUR FERMER(fid) FIN A LAMNII 89 .txt pour écrire les entiers 0.Exemple : Ecriture Dans cet exemple on a crée un fichier nommé Text. 1. 10. …. ALGORITHME Ecriture_fichier VARIABLE n : ENTIER VARIABLE fid : FICHIER DÉBUT OUVRIRE(Test.

Exemple : Lecture Dans cet exemple on a fait une lecture du fichier Test.txt.txt et on a affiché les entiers 0. 1. A LAMNII 90 . 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. 10 à l’écran. n) AFFICHER(n) FINTANTQUE FERMER(fid) FIN eof( ) : Renvoie vrai lorsque la tête de lecture est en face une marque de fin de fichier. …. ALGORITHME Lecture_fichier VARIABLE n : ENTIER VARIABLE fid : FICHIER DÉBUT OUVRIRE(Test.

Quels critères peuvent guider ce choix ? Deux besoins contradictoires sont fréquemment en présence : l’algorithme doit 1. à mettre en œuvre et à mettre au point. et plus précisément.Notion de complexité Quand on tente de résoudre un problème. la question se pose souvent du choix d’un algorithme. Être simple à comprendre. A LAMNII 91 . Mettre intelligemment à contribution les ressources de l’ordinateur. 2. il doit s’exécuter le plus rapidement possible.

La qualité du code généré par le compilateur pour la création du programme objet. Dans ce cours nous ferons abstraction de ceci.Mesure de la complexité algorithmique Le temps d’exécution d’un algorithme dépend des facteurs suivants : 1. 3. pour nous concentrer sur le coût des actions résultant de l’exécution de l’algorithme. La nature et la vitesse d’exécution des instructions du microprocesseur utilisé pour l’exécution du programme. 4. Ceci permet de comparer deux algorithmes traitant le même Calcul par exemple. en fonction de la “taille” des données traitées. Les données entrant dans le programme. 2. La complexité du programme. A LAMNII 92 .

Fréquemment. comparaisons. on utilise la loi de probabilité uniforme. opérations arithmétiques) effectuées par l’algorithme. T(n) est une fonction de N dans R Dans ce cours la complexité d’un algorithme désigne le nombre d’opération élémentaires (affectations.Temps d’exécution d’un algorithme On note T(n) le temps d’exécution ou la complexité logarithmique d’un programme portant sur des données de taille n. A LAMNII 93 . Complexité au mieux Tmin(n) = min(Temps(d)| d donnée de taille n) Complexité au pire Tmax(n) = max(Temps(d)| d donnée de taille n) Complexité en moyenne Tmoy(n) = ∑ p(d)*Temps(d) d :données de taille n Avec p(d) une loi de probabilité sur les entrées.

1 aff. n comp. n aff.boule S0  POUR i1 jusqu’à n incrément 1 Faire  ss+i  FINPOUR 1 aff. total: T(n)=4n+2 1 add. 1 aff. 1 mul. 1 div. n add.Exemple 1 Calcul de A. n incr. total: T(n)=4 B- A LAMNII 94 .

L’incrémentation de i est évaluée n fois. plus 1. Donc.  La condition de sortie (i < n) est évaluée n fois. Dans notre cas. nous avons: n − 1 + 1 = n . L’affectation i 1.Remarque: Le nombre d’itérations d’une boucle pour est égal à : valeur finale de l’indice moins sa valeur initiale. nous avons en tout 2n+1 A LAMNII 95 .

5 A LAMNII 96 .Exemple 2 Calcul du nombre d’actions exécutées d’un algorithme de tri Pour i←1 jusqu’à n-1 incrément 1 faire min_pos ← i min ← t[Pos] pour j← i+1 jusqu’à n incrément 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 .

5n³ = 2n²(1-n) < 0 pour n >1 . 3n³ + 2n² .Les notations O et Θ Définition : Soient f et g deux fonctions de IN dans IR . En effet.4n²). A LAMNII 97 . f(n) ≤ c g(n) Exemple 1 : Soit la fonction f(n) = (n+1)² et g(n)=n² pour n≥0. On dit que f est en O(g) s’il existe un réel c >0 et un entier positif (un rang) n0 tel que : pour tout n > n0. on a (n+1)² ≤ 4n² (il suffit d’étudier le signe de (n+1)² . alors la fonction f(n) est un O(n²) pour n0=1 et c=4. pour n≥1. Exemple 2 : La fonction f(n) = 3n³ + 2n² est O(n³) (g(n)=n³)avec n0=1 et c=5. En effet. par conséquent f(n) est O(n³).

Exemple : 3n+1 est en Θ (n) f(n) = 3n +1 g(n) = n 3n+1 est en O(n) pour n0 = 2. l’inégalité 3n +1 ≤ 4n n est en O(3n+1) Pour n0 =2. l’inégalité n≤ 2(3n+1) A LAMNII 98 . on dit que f est en Θ(g) si f est en O(g) et g est en O(f).Les notations O et Θ Définition : Soient f et g deux fonctions de IN dans IR. et c = 2 on a pour n> n0. et c = 4 on a pour n> n0.

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 Θ Propriétés 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 n→∞ 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 à l’infini de f.

Les notations O et Θ En pratique on cherchera des équivalents à l’infini de f.. nombre d’opérations) et g fait partie d’une échelle de fonctions simples (n. n2. En pratique f représente une quantité à étudier (temps.) destinée à informer sur le comportement de f. nlog2(n). A LAMNII 100 .. etc.

• Les algorithmes linéaires en complexité O(n) ou en O(n log(n)) sont considérés comme rapides.Les grandes classes de complexité Les algorithmes usuels peuvent être classés en un certain nombre de grandes classes de complexité : • La plupart des instructions de la plupart des programmes sont exécutées une fois ou au plus un petit nombre de fois. • Les algorithmes sub-linéaires. Si toutes les instructions d’un programme ont cette propriété on dit qu’il a une complexité constante c’est-à-dire O(1). comme l’évaluation de la valeur d’une expression composée de n symboles ou les algorithmes optimaux de tri. A LAMNII 101 . dont la complexité est en général en O(log(n)). C’est le cas de la recherche d’un élément dans un ensemble ordonné fini de cardinal n.

c’est le cas de la multiplication des matrices et du parcours dans les graphes. les algorithmes polynomiaux en O(nk). sans parler des algorithmes exponentiels (dont la complexité est supérieure à tout polynôme en n) que l’on s’accorde à dire impraticables dès que la taille des données est supérieure à quelques dizaines d’unités. pour k>3 sont considérés comme lents. A LAMNII 102 .• Plus lents sont les algorithmes de complexité située entre O(n²) et O(n³). • Au delà.

A LAMNII 103 .

nous chercherons une borne supérieure en fonction de paramètres correspondant à la taille des données. Ceci nous permettra d’obtenir l’ordre de grandeur du temps d’exécution dans le pire des cas. A LAMNII 104 .Évaluation d’un algorithme Pour évaluer un algorithme. • nk actions élémentaires de genre k Chaque ni demandant un temps ti. supposons que l’exécution faisant intervenir le maximum d’actions élémentaires nécessite : • n1 actions élémentaires de genre 1 (par exemple affectations) • n2 actions élémentaires de genre 2 (par exemple additions) • …. En effet.

c 2 = max t i . indépendamment de la machine utilisée.Le temps total pour cette exécution sera : t = ∑tn i i i i Pour une machine donnée : c1 ∑ n i ≤ T ( n ) ≤ c 2 ∑ n i i avec c1 = min t i . i i Donc T(n) = O(∑ni) est l’ordre de grandeur du temps de l’algorithme dans le pire des cas. A LAMNII 105 .

à coefficients réels. en utilisant les seules opérations élémentaires : addition et multiplication. 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é.Exemple On considère le polynôme en x réel. A LAMNII 106 .

nombre de multiplications pour tous : 1+2+…+n = n(n+1)/2 .nombre d’additions : n . Calculons en fonction de n le nombre d’opérations élémentaires qui seront effectuées lors de l’exécution de cet algorithme : .Total : n(n+3)/2 Donc cet algorithme est O(n²).nombre de multiplications pour un ai xi: i . A LAMNII 107 .1ère méthode : On peut écrire un algorithme qui calcule les unes après les autres et les additionne (ajouter ).

A LAMNII 108 . on peut écrire un algorithme qui calcule P(x0)de la manière suivante : Analyse : itérer n fois : .mettre le résultat obtenu dans A commencer avec A= an.multiplier A par x0 et additionner le coefficient suivant .2ème méthode (schéma de Hörner) : P(x) peut s’écrire : P(x) = ((K(((an x + an−1 )x + an−2 )x + an−3 )x + Ka1 )x + a0 ) Grâce à cette écriture.

A) POUR i1 JUSQU’À n INCRÉMENT 1 FAIRE  SAISIR(B) AA*X+B  FINPOUR AFFICHER(A) FIN Complexité : Cet algorithme comporte n multiplications. X. i : ENTIER A. Il est en O(n). Il est donc meilleur que le précédent en ce sens que pour les grandes valeurs de n.ALGORITHME Hörner VARIABLES n. 1 écriture. n affectations. n addition. X : RÉEL DÉBUT SAISIR(n. le temps d’exécution du premier a pour ordre de grandeur le carré du deuxième. B. A LAMNII 109 . n+3 lectures.

Il permet de spécifier à l'ordinateur. les données en entrées. Java… Programmation logique : Prolog… A LAMNII 110 . Cobol.Langages de programmation Un langage Informatique est un langage spécifique "compréhensible" par l'ordinateur. C++. C… Programmation orienté objet : SmallTalk. Historique des langages Langage de bas niveau (proche du langage machine): Jusqu’en 1945 : langage binaire 1950 : langage assembleur Langage de haut niveau (proche des langages naturels): Depuis 1955: Programmation procédurale : Fortran. les résultat et les traitement à faire pour résoudre un problème donné .

C.Et beaucoup d’autres… Evolution: Programmation impérative (fonction): Exemples : Pascal. … 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 exécuter logique de réalisation du traitement à effectuer Instructions et données doivent résider en mémoire centrale pour être exécutées Programmes et données sont sauvegardés dans des fichiers Le processeur se charge d’effectuer les opérations arithmétiques et logiques qui transformeront les données en résultats A LAMNII 112 .

Démarche de programmation Phase d'analyse et de réflexion (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 exécutable. compréhensible par l'ordinateur Phase de test Phase d ’exécution A LAMNII 113 .

A LAMNII 114 .