Chap 5 : Les algorithmes Arithmétiques Classe : 4 ème SI LES ALGORITHMES ARITHMETIQUES I- Introduction Dans ce chapitre nous allons étudier quelques algorithmes relatifs à l’arithmétique qui est une branche des mathématiques qui étudie les relations entre les nombres. C’est aussi l’étude des nombres et des opérations entre eux. II- Calcul du PGCD (Solution récursive) : 1. Activité 1: Proposer une analyse, puis déduisez l’algorithme d’une fonction permettant de calculer le PGCD (Le Plus Grand Commun Diviseur) de deux entiers positifs non nuls a et b, en utilisant la méthode des différences. 2. Méthode 1 n>m n<m n=m n=n–m m=m–n PGCD = m (ou n) m = m – n Exemple 1 : M = 35 ; n = 20 Exemple 2 : M 35 15 15 10 5 N 20 20 5 5 5 PGCD = 5 M=8;n=8 PGCD(8,8) = 8 a. Solution itérative Analyse de la fonction PGCD : Algorithme de la fonction PGCD : Résultat = PGCD 0- Début fonction PGCD (a, b : entier) : entier Traitement : PGCD a 1- Tant que a ≠ b Faire Tant que a ≠ b Faire Si a > b alors a a – b Si a > b alors a a – b Sinon b b - a Sinon b b - a Fin Si Fin Tant que la plus grande valeur sera remplacée par la différence jusqu’à a=b 2- PGCD a 3- Fin PGCD Profs: MSEKNI Dalila, SFAR Hayet & BAFFOUN Rim page-1/9- Chap 5 : Les algorithmes Arithmétiques Classe : 4 ème b. Solution récursive Algorithme Récursif de la fonction PGCD : 0- Début fonction PGCD (a, b : entier) : entier 1- Si a = b alors PGCD a Sinon Si a > b Alors PGCD FN PGCD (a-b, b) Sinon PGCD FN PGCD (a, b-a) Fin Si Fin Si 2- Fin PGCD 3. Méthode 2 PGCD (m, n) = PGCD (n, m mod n) jusqu’à n =0 d’où PGCD = m Exemple 1: M = 35 ; n = 20 PGCD (35, 20) = PGCD (20, 15) = PGCD (15, 5) = PGCD (5, 0) = 5 Exemple 2 : M=8;n=8 PGCD (8, 8) = PGCD (8, 0) = 8 a. Solution itérative : 0. Début fonction Calcul_PGCD (m, n: entier) : entier 1. Répéter R M mod N M N N R Jusqu’à (N = 0) 2. Calcul_PGCD M 3. Fin Calcul_PGCD b. Solution récursive function pgcd(m, n: integer): Integer; begin if (n=0) then pgcd := m else pgcd := pgcd (n, m mod n) ; end; Image2 1. Présentation Arrangement de P éléments parmi N : C’est le nombre de permutations ordonnées possibles de P éléments parmi N. Exemple avec {a, b, c} : A(2,3) = 6 {a, b}, {b, a}, {a, c}, {c, a}, {b, c}, {c, b} Profs: MSEKNI Dalila, SFAR Hayet & BAFFOUN Rim page-2/9- SI Chap 5 : Les algorithmes Arithmétiques Classe : 4 ème SI Combinaison de P éléments parmi N : C’est le nombre de permutations sans ordre possibles de P éléments parmi N. Exemple avec {a, b, c} : C(2,3) = 3 {a, b}, {a, c}, {b, c} 2. Calcul de l’arrangement Un arrangement de P éléments d’un ensemble E à N éléments est un p-uplet d’éléments distincts de E. Le nombre d’arrangements de P éléments de l’ensemble E est représenté par la notation suivante : Image1 N et P sont des entiers qui vérifient la condition suivante : 1≤ P ≤ N Activité : Proposez une analyse, puis déduisez les algorithmes correspondants au problème permettant de chercher puis d’afficher l’arrangement de deux entiers donnés N et P, avec (1≤ P ≤ N). Analyse du PP Algorithme du PP Résultat = Ecrire (" A ( ", n, ",", p, ")=", FN Arrange (n, p)) 0123- Traitement : La fonction arrange permet de rechercher l’arrangement. Début arrangement Proc saisie (n, p) Ecrire (" A ( ", n,",", p,")=", FN Arrange (n, p)); Fin Arrangement Algorithme de la fonction Arrange : 0- Début fonction arrange (n, p : entier) : entier La saisie de n et p sera la tache de la procédure saisie. Analyse de la fonction Arrange: 1- a 1 Pour I de n à (n-p+1) (pas = -1) faire a a*i Fin Pour Résultat =Arrange 2- Arrange a Traitement : Arrange a 3- Fin arrange [a 1] Pour i de n à (n-p+1) (pas = -1) faire aa*i Fin pour Profs: MSEKNI Dalila, SFAR Hayet & BAFFOUN Rim page-3/9- Chap 5 : Les algorithmes Arithmétiques Classe : 4 ème SI 3. Calcul de la combinaison Une combinaison de P éléments d’un ensemble E de N éléments est une partie de E formée par P éléments. Le nombre de combinaison de P éléments de l’ensemble E est représenté par la notation suivante : image3 N et P sont des entiers qui vérifient la condition suivante : 0≤ P ≤ N Activité : Proposez une analyse, puis déduisez les algorithmes correspondants au problème permettant de chercher puis d’afficher la combinaison de deux entiers donnés n et p, avec (0≤ P ≤ N). Solution Itérative Analyse du PP Algorithme du PP Résultat = Ecrire (" C ( ", n,",", p,")=", FN Comb (n, p)) Traitement : La fonction Comb permet de rechercher la combinaison de n et p. La saisie de n et p sera la tache de la procédure saisie. 0123- Analyse de la fonction Comb: Début Combinaison Proc saisie (n, p) Ecrire (" C ( ", n,",", p,")=", FN Comb (n, p)); Fin Combinaison Algorithme de la fonction Comb : 0- Début fonction Comb (n, p : entier) : réel 1- Comb FN Fact(n) / (FN Fact(p) * FN Fact(n-p)) 2- Fin Comb Résultat = Comb Traitement : Comb FN Fact(n) / (FN Fact(p) * FN Fact(n-p)) Solution Récursive D’après vos connaissances en Mathématiques, vous pouvez dégager la relation suivante : Image4 Analyse de la fonction Comb: Algorithme de la fonction Comb : Résultat = Comb 0- Début fonction Comb (n, p : entier) : réel Traitement : 1- Si (p=0) ou (p = n) alors Comb 1 Si (p=0) ou (p = n) alors Comb 1 Sinon Sinon Comb Fn Comb (n-1, p) + Fn Comb (n-1, p) Comb Fn Comb (n-1, p) + Fn Comb (n-1, p) Finsi 2- Fin Comb Profs: MSEKNI Dalila, SFAR Hayet & BAFFOUN Rim page-4/9- Chap 5 : Les algorithmes Arithmétiques Classe : 4 ème SI IV- Quelques règles de divisibilité : 1. Définition: Un entier n est divisible par un entier m, si le reste de la division euclidienne de n par m est nul. Une règle de divisibilité est une séquence d’opérations simples qui permet de reconnaître rapidement si un entier est divisible par un autre sans qu’il soit nécessaire d’effectuer des divisions. Ces règles sont généralement appliquées à des grands nombres. 2. Divisibilité par 3 : Règle : Un entier est divisible par 3 si la somme des chiffres qui le composent est divisible par 3. Activité : Ecrire une analyse modulaire permettant de vérifier si un entier n est divisible par 3 et déduire les algorithmes correspondants. Analyse du PP Algorithme du PP Résultat = Ecrire (n, FN Div_3(n)) 0. Début Divisibilite_3 1. Ecrire ("Entrer n :") Lire (n) 2. Ecrire ("L'entier ",n,Div_3(n)) 3. Fin Divisibilite_3 Traitement : La fonction Div_3 permet de savoir si un entier n est divisible par 3. La saisie de n sera faite dans le PP. Analyse de la fonction Div_3: Résultat = Div_3 Traitement : Parcourir la chaîne qui contient le nombre n et rechercher la somme des chiffres qui le compose puis tester si cette somme est divisible par 3 Algorithme de la fonction Div_3 : 0. Début fonction Div_3 (n : entier) : Chaine 1. Convch (n, ch); 2. Répéter S0 Pour i de 1 à long (ch) faire Valeur (ch[i], nb, e) S S + nb Fin pour Convch(s, ch) Jusqu’à long (ch)=1 Si S dans [3, 6, 9] Alors div_3 " est divisible par 3" Sinon div_3 " n’est pas divisible par 3" Fin si 3- Fin Div_3 3. Divisibilité par 4 : Un entier est divisible par 4 si le nombre composé des deux derniers chiffres est divisible par 4. Exemple : 5243 n’est pas divisible par 4 car 43 n’est pas divisible par 4 7224 est divisible par 4 car 24 est divisible par 4. Profs: MSEKNI Dalila, SFAR Hayet & BAFFOUN Rim page-5/9- Chap 5 : Les algorithmes Arithmétiques Classe : 4 ème SI Activité : Ecrire une analyse modulaire permettant de vérifier si un entier n est divisible par 4 en utilisant la règle de divisibilité précédente et déduire les algorithmes correspondants. Analyse du PP Algorithme du PP Résultat = Ecrire (n, FN Div_4(n)) 0. Début Divpar4 1. Ecrire ("Entrer n :") Traitement : Lire (n) 2. Ecrire ("L'entier ", n, Div_4(n)) La fonction Div_4 permet de déterminer 3. Fin Divpar4 si un entier n est divisible par 4. La saisie de n sera faite dans le PP. Algorithme de la fonction Div_4 : Analyse de la fonction Div_4: Résultat = Div_4 Traitement : Si d mod 4 = 0 Alors div_4"est divisible par 4" Sinon div_4" n'est pas divisible par 4" Fin si Valeur (ch1, d, er) ch1 sous chaine (ch, long (ch)-1,2) Convch(n,ch); 0. 1. 2. 3. 4. Début fonction Div_4 (n : entier) : Chaine Convch(n,ch); ch1 sous chaine (ch, long (ch)-1,2) Valeur (ch1, d, er) Si d mod 4 = 0 Alors div_4"est divisible par 4" Sinon div_4" n'est pas divisible par 4" Fin si 5. Fin Div_4 4. Divisibilité par 5: Un entier est divisible par 5 si son chiffre des unités est égal à 0 ou à 5. Exemple : 5243 n’est pas divisible par 5 car 3 Є {0,5} 72240 est divisible par 5 car 0 Є {0,5} Activité : Ecrire une analyse modulaire permettant de vérifier si un entier n est divisible par 5 en utilisant la règle de divisibilité précédente et déduire les algorithmes. 0. 1. 2. 3. 4. 5. 6. Algorithme de la fonction Div_5 Début Fonction div_5 (n : entier) : chaîne Convch(n,ch) ch1 "'' Ch1 sous chaine (ch,long(ch),1) Valeur (ch1, u, er) Si u dans [0,5] Alors div_5 " est divisible par 5" Sinon div_5" n'est pas divisible par 5" Fin si Fin Div_5 Profs: MSEKNI Dalila, SFAR Hayet & BAFFOUN Rim page-6/9- Chap 5 : Les algorithmes Arithmétiques Classe : 4 ème SI 5. Autre règles de divisibilité : Un entier est divisible par 2 si son chiffre des unités est divisible par 2. Un entier est divisible par 9 si la somme de ses chiffres est divisible par 9. Un entier est divisible par 10 si son chiffre des unités est égal à 0. Un entier est divisible par 25 si le nombre composé des deux derniers chiffres est divisible par 25. V- Conversion entre bases de numération : 1. Définition: Un système de numération est une méthode de comptage fondé sur une base de numération qui est un entier supérieur ou égal à deux. Soit N une base de numération, le système sera doté de N chiffres allant de [0 à N-1]. 2. Exemples de bases de Numération: Base 2 : Alphabet de la base 2 : {0,1} Base 8 : Alphabet de la base 2 : {0, 1, 3, 4, 5, 6, 7} Base 10 : Alphabet de la base 2 : {0, 1, 2, 3, 4, 5, 6, 7, 8, 9} Base 16 : Alphabet de la base 2 : {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F} 3. Conversion d’un nombre décimal en base b: Activité : Ecrire une analyse modulaire puis les algorithmes permettant de convertir un nombre décimal en binaire Image 5 Solution avec Tableau Algorithme de la Procédure conv_10_2 0. Procedure Conv_10_2 (N :entier ; var T :tab ; var i : entier ) 1. i 0 Répéter Inc(i) T[i] N mod 2 N N div 2 Jusqu’à (N = 0) 2. Fin Conv_10_2 Solution avec Chaine Algorithme de la fonction conv_10_2 0. Fonction Conv_10_2 (N : entier) : entier 1. Ch "" Répéter R Nd mod 2 Convch ( R, Ch1) Ch Ch1 + Ch Nd Nd div 2 Jusqu’à (Nd = 0) 2. valeur (ch, n, er) 3. Conv_10_2 n 4. Fin Conv_10_2 4. Conversion d’un nombre Hexadécimal en Binaire : Activité Ecrire une analyse modulaire puis les algorithmes permettant de convertir un nombre hexadécimal en binaire. Image6 Profs: MSEKNI Dalila, SFAR Hayet & BAFFOUN Rim page-7/9- Chap 5 : Les algorithmes Arithmétiques Classe : 4 ème SI Solution Algorithmique Algorithme PP 0. 1. 2. 3. Début Hexa_Binaire Proc Saisie (ch) Ecrire ("(", ch,") 16= (", binaire (ch),") 2") Fin Algorithme de saisie Algorithme de la fonction Binaire 0. Fonction Binaire (Ch: chaine):chaine 1. chb "" Pour I de 1 à long (ch) Faire Chbchb+Bin_chiffre (ch[i]) Fin Pour 2. Tant que chb [1] =" 0" Faire Efface (chb, 1,1) Fin Tantque 3. Binaire chb en 4. Fin Binaire 0. Procédure saisie (var ch: chaine) 1. Repeter Ecrire ("Donner un nombre Hexadécimal: ") Lire (ch) I 1, b Vrai Repeter Si ch[i] dans ["0".."9","A".."F"] Alors II+1 Sinon B faux Finsi Jusqu’à (b=Faux) ou (i>long (ch)) Jusqu’à b; 2. Fin saisie Algorithme Binaire Chiffre 0. fonction bin_chiffre(c:caractère):chaine 1. Si c dans ["0".."9"] Alors valeur (ch, n, er) Sinon N ord(c)-55 Finsi 2. ch "0000", i 4 repeter R n mod 2 Convch(R,ch1) ch[i] ch1[1] N N div 2 I i-1 Jusqu’à n=0 3. bin_chiffre ch 4. Fin bin_chiffre 5. Conversion d’un nombre octal en décimal: Activité Ecrire une analyse modulaire puis les algorithmes permettant de convertir un nombre de la base 8 en base 10. Image7 Profs: MSEKNI Dalila, SFAR Hayet & BAFFOUN Rim page-8/9- Chap 5 : Les algorithmes Arithmétiques Classe : 4 ème SI Solution Algorithmique Algorithme PP 0. 1. 2. 3. Début Octal_Decimal Proc Saisie(N) Ecrire ("(", N,") 8= (", Fn Decimal(N),")10") Fin Octal_Decimal. Algorithme de la procedure saisie 0. Procédure saisie (var N:entier long) 1. Répéter Ecrire ("Donner un nombre en binaire: ") Lire(N) Convch(N, ch) I 1 , b Vrai Répéter Si ch[i] dans ["0".."7"] Alors II+1 Sinon B faux Fin si Jusqu’à (b=Faux) ou (i>long (ch)) Jusqu’à b 2. Fin saisie Algorithme de la procedure saisie 0. fonction Décimal (N:entier long):entier long 1. Convch(N,ch) 2. s0 Pour I de 1 à long (ch) Faire valeur (ch[i],NB,er) S S+Nb*puissance(long(ch)-i) Fin Pour 3. Decimal S 4. Fin Decimal Algorithme de la procedure saisie 0. fonction puissance (x:entier): entier long 1. p 1 pour i de 1 à x Faire p p*8 Fin Pour 2. puissance p 3. Fin puissance 6. Conversion d’un nombre Binaire en Octal : Activité Ecrire une analyse modulaire puis les algorithmes permettant de convertir un nombre de la base 2 en base 8. Image8 Solution Algorithmique Algorithme fonction Octal 0. fonction Octal (ch: chaîne):entier long 1. Tant que long (ch) mod 3 <> 0 Faire ch "0"+ch Fin Tantque 2. ch2 ''; l long (ch) 3. repeter Algorithme Procedure saisie ch1 sous-chaine(ch,l-2,3) 0. Procedure saisie(var ch : chaine) s0 1. Répéter Pour I de 1 to long(ch1) faire Ecrire ("Donner un nombre en binaire: ") Valeur (ch1[i],NB,er) Lire (ch) S S+Nb*puissance(long(ch1)-i) 2. I1 btrue Fin Pour Repeter Convch(S, ch1) Si ch[i] dans ["0","1"] Alors i i+1 ch2 ch1+ch2 Sinon bfaux ll-3 Jusqu’ à (non(b)) ou (i>long (ch)) Jusqu’à (l = 0) Jusqu’à b 4. valeur (ch2, S, er) 3. Fin saisie 5. Octal S 6. Fin Octal Algorithme PP 0. Debut Octal_decimal 1. Proc Saisie (ch) 2. Ecrire ("(", ch, ") 2= (", Octal (ch), ") 8") 3. Fin Octal_decimal Profs: MSEKNI Dalila, SFAR Hayet & BAFFOUN Rim page-9/9-