Introduction à l’Algorithmique Cours d’Algorithmique Préparé par: • Inès El Korbi • Mouna Ayari Définition d’un algorithme • Caractéristiques d’un algorithmique • Élaboration d’un algorithmique • Nomenclature d’un algorithme • ([email protected]) ([email protected]) ISAMM 2005-2006 1 Définition d’un algorithme Un algorithme doit être: Lisible Est une suite finie d’actions (instructions) q’un automate (ordinateur) devra effectuer pour trouver une solution à un problème donné. Consiste à trouver une solution informatique automatisable à un problème réel. L’algorithme ne peut pas être exécuté par la machine: ISAMM 2005-2006 3 Chaque élément de l'algorithme ne doit pas porter à confusion. Structuré Traduire l'algorithme dans un langage de programmation. Phase de programmation. Traductible en n'importe quel langage de programmation. Précis Identifier le problème et spécifier les besoins des utilisateurs. Conception d’une solution informatique décrite dans un langage semi-formel compréhensible par un non-informaticien. compréhensible même par un non-informaticien De haut niveau L’élaboration d’un algorithme comprend les étapes suivantes: 2 Caractéristiques d’un algorithmique Un algorithme: ISAMM 2005-2006 un algorithme doit être composé de différentes parties facilement identifiables. ISAMM 2005-2006 4 Élaboration d’un algorithmique Nomenclature d’un algorithme Pour élaborer un algorithme, il faut Analyser le problème Formuler le problème. Définir les données du problème et les résultats attendus Un algorithme contient Un en-tête Un bloc de déclaration Le corps de l’algorithme Concevoir la solution Expliquer les différentes solutions possibles. Préciser la meilleure méthode de résolution choisie (justifier le choix). Écrire l’algorithme. Un algorithme est une suite d’actions manipulant des objets. Un objet peut être une constante ou une variable. ISAMM 2005-2006 5 ISAMM 2005-2006 6 Caractéristiques d’un objet Un algorithme manipule un certain nombre d’objets: Objets simples et traitements simples Un objet est caractérisé par: Les types d’objets • Les expressions • Les instructions • ISAMM 2005-2006 7 Constantes Variables Un identificateur : suite de caractères α-numériques (lettres, chiffres, quelques caractères), commençant par une lettre. Une classe: constante, variable. Un type : donne le domaine des valeurs possibles et les opérations possibles. ISAMM 2005-2006 8 Déclaration d’un objet et types d’objets Déclaration d’un objet: Constante Identificateur=valeur Exp: Constante Pi=3.14 Variable Identificateur : Type de variable A: entier Les types de base sont: Constante Le type booléen Le type booléen. Les types numériques: entier, réel. Le type caractère. Les types construits: Intervalle. Énuméré. La table du Non ISAMM 2005-2006 Le type Entier: Type scalaire : type qu’on peut énumérer ses valeurs. Type ordonné (Scalaire+ordonné type ordinal). Sous ensemble de Z : [-32 768, 32 767] Opération arithmétiques : +, -, *, div, mod Caractère Exp : 7 div 2 = 3 7 mod 2 = 1 Exp : delta >= 0 Le type Réel: Type ordonné mais pas scalaire. Sous ensemble de R : [-3.40*10^(38) à -1.40*10^(45)]. Exp : 3.14 Opérations arithmétiques : +, -, *, /, ^ (opérateur de puissance). Opérations de comparaison: =, ≠, <, >, <=, >=. Représentation d’un caractère α-numérique par un code ASCII. opérations de comparaison: =, ≠, <, >, <=, >= Exp : 3.0/2 = 1.5, 3.40*10^(38) 11 Code ASCII (Binaire) Code ASCII (Décimal) ‘A’ 0100 000 65 ‘B’ 0100 0010 66 ‘3’ 0011 0011 51 fonctions prédéfinies : Chr (valeur): renvoie le caractère de la valeur entière Rang(caractere): renvoie le code ASCII d’un caractère Fonctions prédéfinies : sin, cos, log, P ISAMM 2005-2006 10 ISAMM 2005-2006 Le type caractère La table du Ou La table du ET 9 Les types numériques Il ne peut prendre que deux valeurs (vrai ou faux). Opérations possibles: Non (négation), Et (conjonction), Ou (Disjonction) Tables de vérités Exp: Chr(65) = A , Rang(‘A’)=65, Chr(Rang(‘A’))=‘A’ ISAMM 2005-2006 12 Les expressions Les types construits Extension d’un domaine de valeurs Déclaration Une expression est un ensemble d’opérandes reliées par des opérateurs, et équivalente à une seule valeur. Type énuméré: T-énuméré = (valeur 1, valeur 2, P, valeur n) Exp : JOURS = (Lun, Mar, Merc, Jeu, Vend, Sam, Dim) COULEURS = (bleu, blanc, vert, rouge) Exp: Succ (Jeu) = Vend, Rang (Lun) = 0, Pred (mar) = Lun Sous ensemble d’un type ordinal. Déclaration: t-intervalle = val-Min .. val-Max L’intervalle hérite du type de base de ses bornes. ISAMM 2005-2006 ISAMM 2005-2006 L’instruction d’affectation consiste à attribuer une valeur à une variable donnée. ISAMM 2005-2006 Exp: Exp: (1 + 2 )* 3 = 9 15 A←B Exp: A ← B+4 Si B valait 12, A vaut 16 et B vaut toujours 12. On peut utiliser des parenthèses explicites pour forcer un ordre. Exp: Les variables de part et d’autre de la flèche d’affectation doivent être de même type. A ← 24 Une instruction d’affectation ne modifie que ce qui est à gauche de la flèche. Exp: 1 + 2 * 3 = 7 (et non pas 9) Exp: On peut attribuer à une variable le contenu d’une autre variable. 14 Instruction d’affectation Une expression est évaluée de gauche à droite. Les opérateurs ont des priorités prédéfinies (4 niveaux de priorités). Les opérateurs arithmétiques: +, -, *, /, div, mod, (-) unaire. Les opérateurs logiques: Non, Et, Ou. Les opérateurs de comparaison: =, <, >, <=, >=, <> (≠). 13 Évaluation d’une expression Syntaxe: opérande opérateur opérande +, -, /, et, ou, P Exp: 12+3, A Ou B; 1.3*2.5 Il existe 3 types d’opérateurs: Exp : Minuscule = ‘a’ .. 'z’ WE = Sam ..Dim Syntaxe: opérateur opérande (-) unaire, Non Exp: -6, Non A Bianires Type intervalle Unaires: Opération spécifiques: successeur, rang, prédécesseur Exp: 5+4; 123-45+844 ; (X < 4) Et (X >9) Les opérateurs peuvent être: A: entier; B: entier B ← 12; A ← B+4; (correct) A: entier; B: réel B ← 3.14; A ← B+4; (erreur) ISAMM 2005-2006 16 Ordre des instructions d’affectation Instructions d’entrée/sortie Le résultat final d’une algorithme dépend de l’ordre d’exécution de ses instructions. VARIABLE : A : Entier Début A ←0 B ← 12 A ←B+4 B ← A+2 Fin Assurer le dialogue entre la machine et l’utilisateur. Opération de lecture (Lire): VARIABLE : A : Entier Début A ←0 B ← 12 L’utilisateur rentre des valeurs au clavier exploitées par l’algorithme. Opération d’écriture (Ecrire): L’algorithme fournit des valeurs à l’utilisateur. B ← A+2 Variable : A : entier N : entier Debut Lire (N) A ← N^2 Ecrire (A) Fin A ←B+4 Fin Exp 1 Valeurs finales Exp 2 Exp 1: A=16, B=18 Exp 2: A=18, B=14 Il n’ay a pas d’intérêt à affecter une variable, pour l’affecter différemment toute suite après. A ←12 A ← 34 A ←34 ISAMM 2005-2006 /*Affiche la valeur 4 sur l’écran*/ Écrire des libellés à l’écran pour prévenir l’utilisateur de ce qu’il doit frapper. Peut être réécrit /*L’utilisateur entre la valeur 2*/ Exp: Ecrire ("Entrez un nombre :") Lire (N) 17 18 ISAMM 2005-2006 Structure conditionnelle simple Les structures conditionnelles La structure conditionnelle permet d’évaluer une expression logique (condition). Si l’expression est vraie, une séquence précise sera exécutée. Cette séquence sera sautée dans le cas contraire. Si (Cond 1) /* La condition est une expression logique*/ Alors A1 A2 K An Fin Si Structure conditionnelle simple • Structure conditionnelle alternative • Structures conditionnelles imbriquées • Structure conditionnelle à choix multiples • ISAMM 2005-2006 /* A1, A2, Ket An seront exécutées uniquement si Cond 1 est vraie * / /* Marque de fin des actions à exécuter si Cond 1 est vraie* Schéma de la conditionnelle simple 19 ISAMM 2005-2006 Algorithme Algo1 Variable A, B: entier Debut Lire(A,B) Si (A<B) Alors Ecrire(A) Fin Si Fin Exemple 20 Structure conditionnelle alternative Structures conditionnelles imbriquées Une première séquence d’actions est exécutée si la condition est vraie. Une deuxième séquence est exécutée si la condition n’est pas vérifiée. Les deux séquences ne peuvent pas s’exécuter en parallèle. Si (Cond 1) Alors I1 P In Sinon J1 P Jm Fin Si /* La condition est une expression logique*/ /* I1,K, In seront exécutées uniquement lorsque la condition est vérifiée */ /* Marque de fin des actions à exécuter si Cond 1 est vérifiée */ /* J1, K, Jm seront exécutées uniquement si Cond 1 n’est pas vérifiée */ /* Marque de fin des actions à exécuter si Cond 1 n’est pas vérifiée */ Dans un algorithme, une structure conditionnelle peut être elle même une structure conditionnelle. Si (Cond 1) Alors A1 A2 Si (Cond 2) Alors B1 P Bm FinSi A3 P An FinSi Algorithme Minimum Variable A, B: Entier Debut Lire(A,B) Si (A<B) Alors Ecrire(A) Sinon Ecrire(B) Fin Si Fin Exemple */ A1, K, An seront exécutées lorsque la Cond 1 est vérifiée */ */ De plus B1, K, Bm seront exécutée uniquement si Cond 2 est vérifiée */ Schéma des conditionnelles imbriquées Schéma de la conditionnelle alternative 21 ISAMM 2005-2006 Algorithme Temperature Variable Temp: Entier Début Ecrire ("Entrez la température de l’eau :") Lire(Temp) Si (Temp <= 0) Alors Ecrire("C’est de la glace" ) FinSi Si (Temp > 0) Et (Temp < 100) Alors Ecrire("C’est du liquide") Finsi Si (Temp > 100) Alors Ecrire("C’est de la vapeur") Finsi Fin ISAMM 2005-2006 Exemple 22 Structure conditionnelle à choix multiples Utilisation: plusieurs tests sur une même variable Structures conditionnelles simples et alternatives: Structure conditionnelle à choix multiples: Les structures itératives Un algorithme lourd en écriture et difficile à lire Exécution d’une séquence d’actions selon la valeur d’une variable. Algorithme Semaine Type JOURS = (Lun, Mar, Merc, Jeu, Vend, Sam, Dim) Variable J :JOURS Debut Choisir selon J Lun .. Vend: Ecrire (« Jour Ouvrable ») Sam..Dim : Ecrire (« Jour Ferier ») Fin Choix Fin Choisir selon (Critere) e1 : traitement 1 P. P. en : traitement n sinon: traitement par défaut Fin Choix Schéma de la conditionnelle à choix multiples La boucle Pour • La boucle Tant que • La boucle Répéter jusqu’à • Exemple ISAMM 2005-2006 23 ISAMM 2005-2006 24 La boucle Pour Les structures itératives Les structures itératives (boucle): A la fin de chaque itération, compt est incrémentée d’une quantité P (pas d’incrémentation). Début est la valeur initiale du compteur. Fin est sa valeur finale. Répéter un certain nombre de fois des instructions semblables les unes aux autres. Bloc d’instructions exécuté une fois dans une boucle. Les boucles sont: La boucle Pour La boucle Tant que Le nombre d’itérations est fini et connu. Le nombre d’itérations est donné par une condition Arrêt si condition fausse. La boucle Répéter jusqu’à Le nombre d’itérations est donné par une condition Arrêt si condition vraie. ISAMM 2005-2006 25 ISAMM 2005-2006 Au début de l’exécution de la boucle Tant que, évaluer la condition : Au début de l’exécution de la boucle Répéter jusqu’à: La condition est ignorée Exécution du bloc d’instructions. Évaluer la condition à la rencontre du mot jusqu’à: Si la condition est vraie Exécuter les instructions entre les mots Début et Fin. Si la condition est fausse Aller directement au mot Fin. 26 La boucle Répéter jusqu’à La boucle Tant que Répéter N fois une suite d’instructions à l’aide d’une variable entière servant de compteur. Une itération Si condition fausse: Retourner au mot clé Répéter et recommencer à exécuter le bloc d’instructions. Si condition vraie: Aller à la suite de l’algorithme. Le corps de la boucle Tant que peut ne jamais être exécutée si la condition n’est pas vérifiée. ISAMM 2005-2006 27 ISAMM 2005-2006 28 Inversion de tests Transformer une boucle Répéter en une boucle Tant que: Les tableaux Le test d’arrêt de la boucle Tant que doit être la négation de celui de la boucle Répéter Algorithmes équivalents. Transformer une boucle Tant que en une boucle Répéter: Le test d’arrêt de la boucle Répéter doit être la négation de celui de la boucle Tant que Algorithmes équivalents. Déclaration d’un tableau Opérations de base • Tri d’un tableau • • Définition et déclaration Représenter une suite de variables de même type (entier, réel, booléen, caractère) en mémoire. Un tableau est défini par: Le type d’indice (ordinal) qui permet de définir le nombre d’éléments dans le tableau. Le type des composants. La variable Nmax On peut déclarer des variables tableaux V[1..N] du type vecteur (N <=Nmax). Exemple Le nombre maximum d’éléments pour le type vecteur. Déclaration d’un tableau T_Ident : Tableau [type d’indice] de type-composants. Exp: V : Tableau[1..4] d’entiers E1 E2 E3 V indices 1 2 3 Constante Nmax=100 Type Vecteur = Tableau [1..Nmax] d’entiers Variable N : entier V [1..N] : vecteur E4 4 Les indices d’un tableau commencent à partir de 1. L’accès à un élément d’un tableau: Nom_Tableau[indice] (ex: V[1]=E1). ISAMM 2005-2006 Un tableau unidimensionnel est appelé vecteur. Déclaration : Constante Nmax=100 Type vecteur = tableau [1.. Nmax] de type composants 30 Tableau unidimensionnel ou vecteur Les tableaux: ISAMM 2005-2006 29 ISAMM 2005-2006 31 ISAMM 2005-2006 32 Remplissage, lecture et écriture d’un vecteur Parcours d’un vecteur Accès à un élément d’un vecteur: Nom_Vecteur[indice]; Exp: V[i] Pour i de 1 à N Faire Ecrire («Donnez le », i, « eme element de V ») Lire(V[i]) Fin Pour Parcours d’un vecteur par ordre croissant de ses indices. Chaque élément est traité à part. Algortithme Parcours Constante Nmax=100 Type Vecteur = Tableau [1..Nmax] d’entiers Variable N : entier V [1..N] : vecteur Debut /* Saisir la taille du vecteur N, 1=<N<=Namx */ Répéter Lire (N) Jusqu’à ((N+1 >=1 ) et (N+1<=Nmax)) Pour i de 1 à N Faire /* Traiter V[i] */ Fin pour Fin ISAMM 2005-2006 Écriture: Afficher chacune des valeurs du vecteur. Pour i de 1 à N Faire Ecrire («Le », i, « eme element de V est : ») Ecrire(V[i]) Fin Pour 33 ISAMM 2005-2006 34 Insertion d’un élément dans un vecteur Trouver l’élément V[i] dans le tableau V selon un critère de recherche bien déterminé. Algortithme Recherche /* Rechercher le premier élément égal à X*/ Constante Nmax=100 Type Vecteur = Tableau [1..Nmax] d’entiers Variable N : entier; V [1..N] : vecteur Debut /* Saisir la taille et les éléments du tableau*/ i 1 Ecrire (« Donnez X ») Lire (X) Tant que ((V[i] <>X) et (i<=N)) /* Critère de recherche (V[i]=X) */ i i+1 Fin Tant que Si ( V[i] =X) Alors Ecrire («X apparait pour la premiere fois dans V à la position » , i) Sinon Ecrire («X ne se trouve pas dans le tableau V ») Fin Si Fin ISAMM 2005-2006 Remplissage: Affecter une valeur à chacun des éléments du vecteur. Pour i de 1 à N Faire V[i]Valeur_i Fin Pour Recherche d’un élément dans un vecteur Lecture: Saisir chacun des éléments du vecteur. Décaler d’une position vers la droite les éléments se trouvant aux positions N à i (pas -1). Affecter la nouvelle valeur à l’élément se trouvant à la position i. Augmenter le nombre d’éléments de 1. Algortithme Insertion_position_i Constante Nmax=100 Type Vecteur = Tableau [1..Nmax] d’entiers Variable X, N : entier ; V [1..N] : vecteur Debut /* Saisir la taille et les éléments du tableau*/ Ecrire («Donnez une position d’insertion i et un entier X») Lire (i, X) Si (i>=1 et i<=N et N<Nmax ) Alors Pour j de N à (i+1) pas -1 Faire V[j+1] V[j] /*Décalage des éléments du tableau vers la droite */ Fin pour V[i] X; N N+1 Fin Si Fin 35 ISAMM 2005-2006 36 Suppression d’un élément d’un vecteur Tri d’un vecteur Décaler d’une position vers la gauche les éléments se trouvant aux positions (i+1) à N (pas 1). Diminuer le nombre d’éléments de 1. Algortithme Suppression_position_i Constante Nmax=100 Type Vecteur = Tableau [1..Nmax] d’entiers Variable X, N : entier ; V [1..N] : vecteur Debut /* Saisir la taille et les éléments du tableau*/ Ecrire («Donnez l’indice de l’element à supprimer») Lire (i) Si (i>=1 et i<=N et N>0) Alors Pour j de (i+1) à N Faire V[j-1] V[j] /*Décalage des éléments du tableau vers la gauche */ Fin pour N N-1 Fin Si Fin ISAMM 2005-2006 Permuter V[1] et V[Min] Le plus petit élément du tableau se trouve à la position 1 Rechercher l’indice Min parmi les éléments restants (indices 2..N). V[Min]=minimum(V[j]), j=2..N Permuter V[2] et V[Min] Les éléments V[1] et V[2] sont ordonnés. P. Rechercher l’indice Min parmi les 2 derniers éléments (indices N-1..N). V[Min]=minimum(V[j]), j=N-1..N 3 1 7 5 4 1 3 4 5 7 Vecteur trié Vecteur non trié Algorithmes de tri: tri par sélection, tri par insertion, tri à bulles. 38 ISAMM 2005-2006 39 5 7 1 3ème étape: 4 1ère étape: V[5]=minimum(V[j]),j=3..N Permuter V[5] et V[3] 1 3 4 5 7 V[4]=minimum(V[j]),j=1..N Permuter V[1] et V[4] 1 5 7 3 4 V[4]=minimum(V[j]),j=2..N Permuter V[2] et V[4] 3 4ème étape: V[4]=minimum(V[j]),j=4..5 Ne rien Faire (Min=4) 2ème étape: 1 Permuter V[N-1] et V[Min] Tous les éléments de V sont ordonnés. ISAMM 2005-2006 Exemple (Tri d’un vecteur par ordre croissant) 3 V[Min]=minimum(V[j]), j=1..N Si i<j Alors V[i] >= V[j] Vecteur initial V (N=5): Rechercher l’indice Min du plus petit élément du tableau. Trier V par ordre décroissant ordonner ses éléments de sorte que pour tout (i,j) appartenant à [1,N] : Exemple de tri par sélection d’un vecteur Trier les éléments du vecteur par ordre croissant: Si i<j Alors V[i] <= V[j] 37 Principe du tri par sélection Trier V par ordre croissant ordonner ses éléments de sorte que pour tout (i,j) appartenant à [1,N] : 7 5 1 4 3 4 5 7 Un tableau de taille N est trié en (N-1) étapes. ISAMM 2005-2006 40 Principe du tri par insertion Algorithme de tri par sélection Algortithme Tri_Selection Constante Nmax=100 Type Vecteur = Tableau [1..Nmax] d’entiers Variable N, i, j, Min, Aux : entier V [1..N] : vecteur Debut Pour i de 1 à (N -1) Faire Min i Pour j de (i+1) à N Faire Si (V[j] < V[Min]) Alors Min j Fin Si Rechercher le minimum Fin pour Parmi les éléments V[i]..V[N] Si (Min <> i) Alors Aux V[i] V[i] V[Min] Permuter V[i] et V[Min] V[Min] Aux Fin Si Fin pour Fin 3 5 7 1 4 1ère étape: Les éléments V[1] et V[2] sont triés 3 5 7 1 4 2ème étape: Les éléments V[1]PV[3] sont triés 3 5 7 1 4 3 5 7 3 4 5 4 7 Un tableau de taille N est trié en (N-1) étapes. ISAMM 2005-2006 Nous voulons insérer l’élément V[i+1] dans le tableau déjà trié. Rechercher l’indice p du premier élément du tableau V[1]...V[i] qui soit supérieur à V[i+1]. Sauvegarder V[i+1] dans une variable auxiliaire. ISAMM 2005-2006 42 Algortithme Tri_Insertion Constante Nmax=100 Type Vecteur = Tableau [1..Nmax] d’entiers Variable N, i, j, Min, Aux : entier V [1..N] : vecteur Rechercher l’indice p du Debut premier élément de V[1]..V[i] Pour i de 1 à (N -1) Faire qui soit supérieur à V[i+1] p1 Tant que (V[p] <V[i+1] et p<=i) Faire pp+1 Fin tant que Si (p<=i) Alors Aux V[i+1] Décaler les éléments Pour k de i à p pas -1 Faire V[p] ..V[i] d’une position V[k+1] V[k] Vers la droite Fin pour V[p] Aux Insérer V[i+1] à la position p Fin Si Fin 4ème étape: AuxV[5] Décaler les éléments V[3]..V[4] d’une position vers la droite V[3] Aux 1 Algorithme de tri par insertion 3ème étape: AuxV[4] Décaler les éléments V[1]..V[3] d’une position vers la droite V[1] Aux 1 On suppose triés les éléments du tableau V[1]..V[i]. Décaler tous les éléments V[i] à V[p] (pas -1) d’une position vers la droite. Insérer V[i+1] à la position p. Exemple de tri par insertion d’un vecteur Vecteur initial V (N=5): 41 ISAMM 2005-2006 Pour i de 1 à N-1: 43 ISAMM 2005-2006 44 Principe du tri à bulles Exemple de tri à bulles d’un vecteur Tri à bulles: Vecteur initial V (N=5): Rechercher le minimum sur le tableau V[1..N] par permutations successives: 3 1 Permuter V[3] et V[4] 4 étape: Permuter V[3] et V[4] 3 5 1 1 3 4 5 7 3ème étape: Ne rien Faire (vecteur trié) 7 4 1 3 4 5 7 Permuter V[2] et V[3] 3 A la fin de cette étape, on est sûrs que V[1] est le plus petit élément du tableau V[1..N]. Reprendre la recherche par permutations successives du minimum sur le tableau V[2..N] Ainsi de suite jusqu’à trouver le minimum sur le tableau V[N-1..N] Le tableau est ainsi trié 1 Algorithme du tri à bulles 5 7 4 4ème étape: Ne rien Faire (vecteur trié) Permuter V[1] et V[2] 1 3 5 7 4 1 2ème étape: Permuter V[4] et V[5] 1 3 45 ISAMM 2005-2006 5 4 7 3 4 5 7 Un tableau de taille N est trié en (N-1) étapes. ISAMM 2005-2006 46 Tableau multidimensionnel Déclaration d’un tableau multidimensionnel Ident : Tableau [type indice1, type indice 2, P, type indice n] de type-composants. Cas particulier: tableau à deux dimensions ou matrice Déclaration d’un tableau à deux dimensions Ident : Tableau [type indice1, type indice 2] de type-composants. Rechercher le minimum par Permutations successives sur le tableau V[i]..V[N] Constante Nmax =100 Mmax =100 Type Matrice = Tableau [1..Nmax, 1..Mmax] d’entiers Variable N , M: entier Mat[1..N, 1..M] : Matrice Permuter V[j-1] et V[j] si V[j-1]>V[j] Accès à un élément d’une matrice: ISAMM 2005-2006 7 1ère Pour i de N à 2 pas -1 faire Si V[j-1] >V[j] alors Permuter V[j-1] et V[j] Fin Si Fin Pour Algortithme Tri_Bulles Constante Nmax=100 Type Vecteur = Tableau [1..Nmax] d’entiers Variable N, i, j, Aux : entier V [1..N] : vecteur Debut Pour i de 1 à (N -1) Faire Pour j de N à i+1 pas -1 Faire Si (V[j-1] > V[j]) Alors Aux V[j-1] V[j-1] V[j] V[j] Aux Fin Si Fin pour Fin pour Fin 5 47 Nom_Matrice[indice_1, indice_2]; Exp: Mat[i,j] ISAMM 2005-2006 48 Remplissage, lecture et écriture d’une matrice Lecture: Saisir chacun des éléments de la matrice. Pour i de 1 à N Faire Pour j Pour i de 1 à N Faire 1 à M Faire Ecrire («Donnez l’element se trouvant aux indices », i , «et», j) Lire(Mat[i,j]) Fin Pour Fin Pour Les procédures et les fonctions Remplissage: Affecter une valeur à chaque élément de la matrice. Pour i de 1 à N Faire Pour j de 1 à M Mat[i,j] Valeur_ij Fin Pour Fin Pour Portée et visibilité • Paramètres des procédures et des fonctions • Chaînes de caractères • Récursivité • Écriture: Afficher chaque valeur de la matrice. Pour i de 1 à N Faire Pour j de 1 à M Ecrire(Mat[i,j]) Fin Pour Fin Pour ISAMM 2005-2006 Modularité et sous-algorithmes ISAMM 2005-2006 49 Les procédures Principe de la décomposition modulaire Un problème difficile est décomposé en plusieurs sous-problèmes plus faciles à résoudre séparément. Inétérêt de la modularité: La réutilisation: Un groupe d’instructions d’un algorithme peut être utilisé par un autre algorithme. Améliorer la lisibilité et faciliter la maintenance de l’algorithme. 50 La procédure permet d’exécuter une action bien déterminée. Appel de la procédure par son nom déclenchement des instructions contenues dans la procédure. Syntaxe : Procédure Ident (liste des paramètres formels) < Corps de la procédure > Un sous-algorithme est: Une solution algorithmique à un sous problème. Un morceau de l’algorithme (principal) qui a reçu un nom. 2 types de sous- algorithmes: Les valeurs passées par l’action appelante exploitées par la procédure. Les résultats transmis par à l’action appelante. Les procédures Les fonctions. ISAMM 2005-2006 Les paramètres de la procédure sont: 51 ISAMM 2005-2006 52 Les fonctions Algorithme modulaire Une fonction retourne un résultat et un seul. Une fonction est appelée dans une expression. Syntaxe : Un algorithme modulaire a le format suivant: Sous algorithmes Procédure A1(paramètres formels) : Action appelée < Corps de A1> Fonction A2(paramètres formels) : type < Corps de A2> Algorithme principal Debut P. A1(paramètres effectifs) : Action appelante Ecrire (A2(paramètres effectifs ) : Action appelante P. Fin Fonction Ident (liste des paramètres formels) : type < Corps de la fonction > Une fonction est un groupe d’instructions, dotée d’un nom et qui exécute une action bien déterminée. Les paramètres de la fonction sont: Les valeurs passées par l’action appelante exploitées par la fonction. L’identificateur d’une fonction a un type et retourne une valeur en fin d’exécution. ISAMM 2005-2006 ISAMM 2005-2006 Les paramètres formels n’ont de signification qu’au moment de l’écriture du sous algorithme. Ils déterminent le type des objets communiqués. Ils se substituent aux paramètres formels lors de l’appel du sous-algorithme. Il y a une bijection entre paramètres formels et effectifs. Trois types de paramètres formels : les paramètres données (passage par valeur): Les valeurs sont envoyées de l’action appelante à l’action appelée. les paramètres résultats (passage par adresse): Les paramètres données-résultats : Les résultats sont envoyés de l’action appelée à l’action appelante. paramètres données qui peuvent être modifiés. ISAMM 2005-2006 54 Les paramètres effectifs Communication entre actions appelantes et actions appelées. 2 types de paramètres: formels et effectifs 53 Les paramètres formels Les paramètres: 55 Nombre de paramètres formels = Nombre de paramètres effectifs. Les types des paramètres formels et effectifs doivent être compatibles. Exemple Sous algorithmes Fonction Minimum (DON A,B: entier) :entier Debut Si (A<B) Alors Paramètres formels Retourner (A) données Sinon Retourner (B) Fin Si Fin Paramètres effectifs Algorithme principal Debut Ecrire (« Le minimum de 2 et 3 est », Minimum(2,3) ) : Fin ISAMM 2005-2006 56 Identificateurs locaux et globaux Portée et visibilité Les identificateurs peuvent des constantes, des type, des variables, des procédures, des fonctions. Ils sont classés dans deux catégories : les identificateurs globaux Visibilité d'une entité : Toute entité déclarée dans un sous-algortihme: Ils sont déclarés dans l’algorithme principal. les identificateurs locaux 57 Une chaîne de caractères est un tableau de caractères dont le nombre maximum est fixé à la déclaration. Le nombre effectif de caractères dans une chaîne peut varier dans un algorithme. La fin d’une chaîne est détectée par le caractère de fin de chaîne: ‘\0’. Syntaxe: 58 Longueur : La longueur d’une chaîne est à grâce à une fonction prédéfinie : Long (Nom_chaine). Longueur(« hello »)=5 La chaîne vide notée par « » est de longueur 0. Affectation, lecture et écriture Exemple: Ident_chaîne [position] Exp: S1[1] = ‘A’. 59 Nom_chaine « hello » Lire (Nom_chaine) Ecrire (Nom_chaine) Concaténation de deux chaînes: La fonction Strcat . Accès à un caractère de la chaîne: ISAMM 2005-2006 Bloc i+2 Opérations sur les chaînes de caractères S1 : chaîne [3] ; S1 « AB ». Bloc i+1 ISAMM 2005-2006 Ident_caîne : chaîne [longueur] Bloc i Reprise de la visibilité de B du bloc i Chaîne de caractères n'est visible que dans ce sous-algortihme. disparaît une fois le sous-algortihme terminé. Visibilité de B du bloc i cachée par B du bloc i+2 Ce nom désigne deux objets différents suivant l’endroit où il est utilisé. ISAMM 2005-2006 Partie du code où l'entité est accessible. Visibilité de B dans les bloc i et i+1 On peut donner le même nom à un identificateur local et global. Partie du code où sa déclaration est effective, c'est à dire où l'entité existe. Ils ne peuvent être utilisés qu’à l’intérieur du sous algorithme dans lequel ils sont définis. Portée d'une entité (type, variable, constanteP) : Strcat ( Ch1, Ch2): Ajoute le contenu de la chaine Ch2 à la fin de Ch1. Strcat (« he », « ello ») donne Ch1= hello , Ch2=ello Les opérateurs relationnels: = , ≠, <, ≤, >, ≥ ISAMM 2005-2006 60 Récursivité (2) Récursivité (1) La récursivité est un concept puissant qui permet de décomposer un problème en un ou plusieurs sous problèmes de même nature. Un sous programme est dit récursif s’il fait appel à lui-même. La récursivité a pour avantage de programmer facilement certains problèmes complexes. Exemple: Dans le code du sous-algorithme: 61 63 Il doit y avoir une alternative qui ne relance pas un appel récursif. sinon la récursivité est infinie (saturation de la mémoire de la machine). Pour traiter un problème récursivement: «Initiation à l’algorithmique et aux structures de données, Volume 1 », J. Courtin, I. Kowarski, Editions DUNOD, 2ème édition, 1998. «L’algorithmique, votre passeport informatique pour la programmation », B. Warin, Ellipses, 2002. www.loria.fr/~tabbone/COURS/Algo/Cours_algo1.ppt ftp://ftp.discip.crdp.accaen.fr/discip/crgelec/Cours/algo.pdf sylvain.berbiqui.org/ALGO-T1.pdf graal.ens-lyon.fr/~yrobert/algo/poly-algo.ps ISAMM 2005-2006 Références Chaque niveau d'appel récursif crée sa propre copie des paramètres formels et des variables locales. Fonction factoriel (N: entier): entier Debut Si (N=0) alors Retourner(1) Sinon Retourner( factoriel(N-1)) Fin Si Fin ISAMM 2005-2006 Il faut déterminer sur quelle "variable" (ex: N) on fait la récurrence. Il faut avoir une solution d'arrêt de la récursivité (sur N). Supposons avoir la solution au rang N-1, trouver ce qu'il faut faire pour passer au rang N. ISAMM 2005-2006 62