Applications sur les algorithmes récurrents avec Les Matrices Mme Ben Attia Imen & Les élèves de la classe 4 Sc.Info 1 Vous souhaite la bien venue Activité Leçon Modèle Applications sur les algorithmes récurrents avec Les Matrices
Rappel Quand peut-on parler d’un algorithme récurrent Quelle est la différence entre un algorithme récurrent et un algorithme récursif Qu’est ce qu’une matrice
Algorithmes récurrents Un algorithme ou un traitement est dit récurrent s’il utilise un procédé itératif ou récursif pour engendrer un résultat qui peut dépendre de p résultats précédents, nous parlons alors d’un algorithme ou d’un traitement récurrent d’ordre p. Ordre 1: Un algorithme récurrent est dit d’ordre 1 si son résultat dépend du résultat précédent. Ordre 2: Un algorithme récurrent est dit d’ordre 2 si son résultat dépend des deux résultats précédents. ….. Ordre p: Un algorithme récurrent est dit d’ordre p si son résultat dépend des P résultats précédents.
Différence entre un algorithme récursif et un algorithme récurrent Dans un Module récurrent on obtient un résultat en fonction d’un ou de plusieurs résultats précédents Dépendance entre les résultats Dans un module récursif on obtient un résultat en faisant un ou de plusieurs appel au module lui-même avec changement de paramètres d’appel Auto-dépendance du module
Soit A une matrice de N lignes et de M colonnes d’entiers : Une matrice est un tableau à deux dimension de N lignes et de M colonnes de type éléments Si M=N on dit qu’on a une matrice carrée. Chaque ligne de la matrice L peut être assimilée à un tableau unidimensionnel de M cases. Chaque colonne de la matrice C peut être assimilée à un tableau unidimensionnel de N cases. L 10 15 7 2 15 18 14 21 8 14 N Lignes=5 21 32 4 5 5 11 9 8 3 23 7 8 2 1 5 M colonnes=5
spécification du module itératif permettant de chercher le maximum d’une ligne de matrice Résultat = maxligneMax Traitement : Initialiser la variable Max à A[L, 1] Utiliser 1 structure itérative complète Pour C De 1 A M Faire Pour chaque itération : tester Si Max < A[L, C] Alors Max A[L, C] Donné = Matrice ( A ) / L,M30
0) fonction maxligne(L,M:entier;A:tab):entier 1) MaxA[L,1] Algorithme itératif 0) fonction maxligne(L,M:entier;A:tab):entier 1) MaxA[L,1] Pour C de 2 à M faire Si A[L,C]>Max alors MaxA[L,C] Finsi 2) Finpour 3) Maxlignemax 4) Fin maxligne T.D.Objets Locaux C Entier Compteur sur les colonnes Max entier Variable temporaire pour garder le maximum Algorithme récursif 0)procedure maxligne(L,C :entier;A:tab;var max:entier) Si C>1 alors maxligne(L,C-1,A,max) Finsi Si max<A[L,C] alors MaxA[L,C] 2) Fin maxligne
Algorithme récursif pour la recherche du minimum d’une colonne de matrice 0) procedure mincolonne(L,C:entier;A:tab; var min:entier) Si L>1 alors mincolonne(L-1,C,A,min) Finsi 2) Si min>A[L,C] alors Min A[L,C] 3) Fin mincolonne
Algorithme récursif pour chercher le maximum 0)procedure maximum(L,C:entier;A:tab; var max:entier) Si L>1 alors maximum(L-1,C,A,max) Finsi maxligne(L,C,A,max) 2) Fin maximum Tableau de codification des objets Locaux Objet Type/Nature Rôle Maxligne procédure Cherche le maximum d’une ligne
Algorithme récursif pour chercher le minimum Debut procedure minimum(L,C:entier;A:tab; var min:entier) Si C>1 alors minimum(L,C-1,A,min) Finsi mincolonne(L,C,A,min) Fin maximum Tableau de codification des objets Locaux Objet Type/Nature Rôle Mincolonne procédure Cherche le minimum d’une colonne
Réutilisation des modules réalisés Proposer une analyse du programme qui permet de remplir une matrice A de N lignes et de M colonnes puis chercher et afficher son maximum et son minimum en déduire les algorithmes de chaque module.
Décomposition Modulaire Prog_Matrice Saisir (Var Valeur) Remplir (Var A ;L,C) Maximum (l,c ;A ;var max) Minimum (l,c ; A ;var min) Remplir_ligne (var A ;L,C) Maxligne (L,C ;A ;var max) Mincolonne (L,C ;A ;var min)
Programme principal Saisir(N) Saisir(M) Remplir(A,N,M) Spécification Algorithme Résultat=Ecrire ("le maximum est :", max, "le minimum est :",min) Traitement : La valeur de Max est déterminée suite à l’appel de la procédure maximum(N,M,A,max), La valeur de Min est déterminée suite à l’appel de la procédure minimum(N,M,A,max) Appel de la procédure remplir pour saisir les éléments de A Appel de la procédure saisie une fois pour saisir N et une autre fois pour saisie M Donnée : A,N,M 0) Début Prog_Matrice Saisir(N) Saisir(M) Remplir(A,N,M) maximum(N,M,A,max) minimum(N,M,A,min) Ecrire("le maximum est :", max, "le minimum est :", min) 7) Fin Prog_Matrice
Tableau de déclaration de nouveaux types Tab= tableau de 15 lignes et de 15 colonnes d’entiers Tableau de codification des objets globaux Objet Type/Nature Rôle L, C entier Compteurs de lignes et de colonnes A Tab Matrice de N lignes et de M colonnes d’entiers Max Entier Variable temporaire pour garder le maximum Saisie Procédure Saisir un entier Remplir procédure Remplir une matrice de N lignes et de M colonnes d’entiers Maximum procédure Chercher le maximum d’une matrice Minimum procédure Chercher le minimum d’une matrice
La procédure Remplir récursif Spécification Algorithme Résultat = A Traitement : Si L>1 (point d’appui) alors faire un appel récursif à la procédure en diminuant le nombre de ligne Désempiler les appels récursif tout en appelant la procédure remplir_ligne(A,L,C) 0) procedure remplir(varA:tab; L,C:entier) Si L>1 alors remplir(A,L-1,C) Finsi 2) remplir_ligne(A,L,C); 3) Fin remplir Tableau de codification des objets Locaux Objet Type/Nature Rôle Remplir_ligne procédure Permet de remplir une ligne de la matrice
Résultat = remplir la ligne L Traitement : Spécification de la procédure remplir_ligne Algorithme de la procédure remplir_ligne Résultat = remplir la ligne L Traitement : Si C>1 (point d’appui) alors faire un appel récursif à la procédure en diminuant le nombre de colonne Désempiler les appels récursif tout en faisant la saisie d’une case 0) procedure remplir_ligne(var A:tab; L,C:Entier) Si C>1 alors Remplir_ligne(A,L,C-1) Finsi 2) Ecrire("A[",L, ",",C, "]="),Lire(A[l,c]); 3) Fin remplir_ligne
Spécification de la procédure Saisie Algorithme de la procédure Saisie Résultat = Valeur Traitement : Saisir une valeur Si cette valeur ne répond pas à la condition faire un appel récursif de la même procédure Donnée : valeur 0) procedure saisie(var valeur :entier) 1) Ecrire("donner un entier : ") 2) Lire(valeur) 3) Si non(valeur dans [1..15]) alors saisie (valeur) Finsi Fin Saisie
Problème On désire rechercher dans une matrice donnée A de N lignes et de M colonnes les éléments qui sont à la fois un maximum sur leur ligne et un minimum sur leur colonne. Ces éléments sont appelés des points cols. Afficher les positions et les valeurs de tous les points cols trouvés. Proposer une analyse à ce problème en déduire les algorithmes correspondants. Exemples: Les éléments soulignés sont des points cols: 1 8 3 4 0 4 5 8 6 3 5 6 7 7 1 2 7 6 7 2 7 0 3 8 9 3 4 2 2 8 9 4 5 6 3 4 9 3 6 3 2 9 7 7 8 9 Méthode: Établir deux matrices d'aide MMAX et MMIN de même dimensions que A, telles que: 1 si A[L,C] est un maximum sur la ligne i MMAX[i,j] = 0 sinon 1 si A[L,C] est un minimum sur la colonne j MMIN[i,j] = Les points cols sont ceux qui vérifient l’égalité suivante : MMAX[L,C] = MMIN[L,C]=1
Simulation Analyse
Matrice qui repère les maximums des lignes Matrice qui repère les Mmax 1 1 1 Max=8 Max=15 Max=21 Max=32 Max=23 1 1 10 15 7 2 15 1 18 14 21 8 14 Matrice qui repère les minimums des colonnes 21 32 4 5 5 Min=8 Min=2 Min=5 Min=1 Min=7 Mmin 11 9 8 3 23 7 8 2 1 5 1 1 1 1 1 1
DECOMPOSITION MODULAIRE Points_cols P P P P Afficher Afficher (A, N,M) Point point (N,M;A,mmin, mmax) Remplir Remplir (VAR A ;L,C) Saisie Saisie (VAR valeur) Remplir_MMax Remplir_MMax (N,M;A;VAR mmax) Remplir_MMin Remplir_MMin (N,M;A;VAR mmin) P Maxligne Max (L,C;A;VAR max) Mincolonne Min (L,C;A;VAR min) P
Programme principal Spécification Algorithme Résultat : Affichage des points cols Traitement : appel de la procédure point qui cherche et affiche les points cols en parcourant les 2 matrices Mmax et Mmin appel des procédures remplir_mmax et remplir_mmin pour remplir et afficher Mmax et Mmin qui indiquent respectivement les positions des maximum de chaque ligne et les positions des minimum de chaque colonne. Afficher la matrice A grâce à la procédure affiche La matrice A est remplie grâce al a procédure remplir N et M sont saisies par la procédure saisie 0) Debut points_cols saisie(N) saisie(M) remplir(N,M,A) Ecrire("voila la matrice initiale") affiche(N,M,A) Ecrire("voila la matrice qui indique les positions des maximum de chaque ligne") remplir_mmax(N,M,Mmax) Ecrire ("voila la matrice qui indique les positions des minimum de chaque colonne") remplir_mmin(N,M,Mmin) Ecrire ("voila les positions des points cols") point(n,m,A,mmin,mmax) Fin points_cols
Tableau de déclaration de nouveaux types Tab= tableau de 15 lignes et de 15 colonnes d’entiers Tableau de déclaration des objets globaux Objet Type/Nature Rôle N Entier Nombre de lignes de la matrice M Entier Nombre de colonnes de la matrice A Tab Matrice de N lignes et de M colonnes Mmax Tab Matrice de N lignes et de M colonnes contenant 1 à la place des maximum dans les ligne et 0 dans le reste Mmin Tab Matrice de N lignes et de M colonnes contenant 1 à la place des minimum dans les colonnes et 0 dans le reste
Procédure point Spécification Algorithme Résultat= Affichage des points cols Traitement= On parcours les 2 matrices tout en comparant les éléments des matrices pour afficher sauf les éléments répondant à la condition (Mmin[L,C]=1)et(Mmax[L,C]=1) On utilise 2 structures itératives complètes Pour L de 1 à n faire pour C de 1 à m faire 0) Procedure point(N,M:entier;A,Mmin,Mmax:tab) 1) Pour L de 1 à N faire pour C de 1 à M faire si (Mmin[L,C]=1)et(Mmax[L,C]=1) alors Ecrire("A[",L, ",",C, "]= ",A[L,C], " est un point cols") Finsi Finpour 2) Fin point
Tableau de déclaration des objets Locaux Type/Nature Rôle L Entier Compteur sur les lignes de la matrice C Compteur sur les colonnes de la matrice
procedure remplir_mmax Spécification Algorithme Résultat= Remplir et afficher la matrice MMax Traitement= Appel de la procédure affiche pour afficher MMax Parcourir toutes les lignes Pour i de 1 à N faire Pour chaque ligne chercher son maximum MaxA[i,1] maxligne(i,2,a,max) Parcourir les éléments de la matrice A pour cette ligne pour j de1 à M faire Pour chaque élément tester Si A[i,j]=max alors MMax[i,j]1 sinon MMax[i,j]0 0) procedure remplir_mmax(N,M:entier;var MMax:tab) 1) Pour i de 1 à N faire Maxa[i,1] maxligne(i,2,a,max) pour j de1 à M faire Si A[i,j]=max alors MMax[i,j]1 sinon MMax[i,j]0 Finsi Finpour 2) affiche(N,M,MMax) 3) Fin remplir_mmax
Tableau de déclaration des objets Locaux Type/Nature Rôle i Entier Compteur sur les lignes de la matrice j Entier Compteur sur les colonnes de la matrice Max Entier Variable de sauvegarde du maximum Maxligne procédure Cherche le maximum d’une ligne
Merci pour votre attention