|
[Excel] Calculer un PGCD
|
|
20-03-2010, 12:58 AM
(Ce message a été modifié le : 20-03-2010 05:27 PM par Badpixel.)
Message : #1
|
||||||||||
|
||||||||||
|
[Excel] Calculer un PGCD
Aujourd'hui, nous allons voir comment créer une page Excel qui nous permettra de calculer la valeur du PGCD (Plus Grand Diviseur Commun) de deux nombres par la méthode dite de "soustractions successives".
Principe Soient A et B deux nombres entiers positifs, et A>B Si un nombre est un diviseur de 2 nombres A et B, alors il est aussi un diviseur de leur différence A - B Exemple Soient A=60 et N=36 (ainsi A>B, de façon à ce que A-B>0) Commençons par soustraire 36 de 60 : 60 - 36 = 24 On continue en utilisant le résultat obtenu et le plus petit des 2 termes de la soustraction : 36 - 24 = 12 24 - 12 = 12 12 - 12 = 0 Le PGCD est le denier résultat non-nul. Ici, PGCD(36;60)= 12 Automatisation Bon, maintenant, nous rentrons enfin dans le vif du sujet : automatisons tout ça ! On se servira pour cela du tableur Excel, mais vous pouvez néanmoins vous servir d'un autre tableur (tel que Calc). Cependant, les fonctions que j'utiliserai risquent de différer de par leur nom et leur utilisation. Préparons le terrain ! Donc tout d'abord, on va faire en sorte de faire une feuille de calculs propre et claire. Pour cela, on commence par mettre les titres des colonnes, ainsi qu'une petite phrase d'instructions pour l'utilisateur. Quelles sont les colonnes dont nous aurons besoin ?
Important : La colonne "A-B" doit se situer à gauche des colonnes "A" et "B". Je vous expliquerais pourquoi plus loin. A ce stade, vous devriez obtenir quelque chose comme ça : ![]() Bien entendu, à vous de faire votre propre présentation, avec vos couleurs et vos polices préférées ! Mise en place de l'algorithme
Tout d'abord, il va nous falloir récupérer la saisie de l'utilisateur. Nous avons déjà vu qu'il est nécessaire que A>B, pour éviter d'obtenir une différence négative. Mais l'utilisateur, lui, ne le sait pas forcément ! (Oui, oui, c'est très bête un utilisateur )Pour éviter d'avoir un A Dans la 1ere ligne de la colonne "Valeurs de A durant le calcul", tapez : =MAX(E15;F15) E15 et F15 correspondent aux A et B entrés par l'utilisateur. Selon votre mise en page, vous pouvez ne pas avoir les mêmes cellules que moi. Cette fonction affichera le plus grand des deux termes. De même, dans la 1ere ligne de la colonne "Valeurs de B durant le calcul", tapez : =MIN(E15;F15) Ainsi, nous sommes désormais sûrs que, même si l'utilisateur entre A= et B=, les fonctions MAX et MIN rétablirons l'ordre dans les colonnes de l'algorithme. Petit test : ![]()
Et maintenant, il faut écrire une fonction permettant d'effectuer le calcul A-B et d'en afficher le résultat. Pour cela, rien de plus simple : =K5-L5 K5 correspond à la valeur de A et L5 à celle de B. Vous pouvez maintenant étirer cette formule jusqu'en bas de votre tableau (avec la petite poignée en bas à droite de votre cellule), afin que la différence soit faite pour chaque nouvelles valeurs que prendrons A et B au fil des calculs. Et... taddaaa ! ![]() (On obtient une belle succession de 0, vu que nous n'avons que les valeurs initiales de A et de B).
Quelles sont les valeurs que doivent prendre A et B après la 1ere ligne du tableau de l'algorithme ? Et bien c'est facile : A prend pour valeur le nombre le plus grand entre la valeur précédente de B et de la différence. De même pour B, qui récupère la valeur minimale de ces deux nombres. Ainsi, tapez dans la cellule de A (pour moi située en K6) : =MAX(L5;J5) et dans la cellule de B (située en L6) : =MIN(L5;J5) ![]() Vous pouvez tirer ces 2 formules jusqu'en bas. Et voilà, votre algorithme est en place !! ![]() ![]() Mais... où est mon PGCD dans tout ce bazar ?!? Ne vous affolez pas, j'allais y arriver ! ![]() La valeur du PGCD est celle affichée dans la colonne "B" et sur la même ligne de la 1ere différence nulle. Comment ça c'est pas clair ? ... Ok, je vais vous faire un p'tit dessin dans ce cas ![]() ![]() C'est mieux comme ça ? Fort bien. Bon, maintenant, on va aborder la partie la plus dure (enfin pas trop quand même...) de ce tutoriel : récupérer la valeur du PGCD dans le tableau pour l'afficher dans la cellule résultat ! ![]() Nous allons nous servir de la fonction RECHERCHEV. Cette fonction cherche une valeur donnée dans la première colonne de la matrice d'un tableau et renvoie une valeur se trouvant sur la même ligne mais dans une autre colonne de la matrice du tableau. La syntaxe de cette fonction est un peu particulière : =RECHERCHEV(valeur_cherchée;table_matrice;no_index_col;valeur_proche) Expliquons un peu tout ça: valeur_cherchée: Jusque là, ça va, c'est simplement la valeur que la fonction va essayer de trouver. Ici, nous allons chercher le 0. table_matrice: On doit indiquer où doit travailler la fonction. Ici, elle doit chercher le 0 dans la colonne "A-B", et retourner la valeur équivalente de la colonne "B". (RECHERCHEV ne cherche "valeur_cherchée" que dans la colonne la plus à gauche de la plage "table_matrice", ce qui explique que je vous ai fait mettre la colonne "A-B" à gauche de "A" et "B"). La fonction doit donc travailler dans tout le tableau "Algorithme" (appelé matrice). Pour indiquer une plage de cellule on utilise le signe ":", ce qui donne (chez moi) la matrice J5:L35. no_index_col: On doit indiquer le "numéro relatif" de la colonne où le résultat (notre PGCD !!) doit être cherché. La colonne "A-B" étant la colonne 1 de la matrice, il faut indiquer 3. valeur_proche: Hmmm... Laissez tomber, indiquez juste FAUX. ![]() Nous obtenons donc : =RECHERCHEV(0;J5:L35;3;FAUX) Et.... tzadaaaa, le PGCD est affiché dans la cellule résultat ![]() ![]() Pour aller plus loin... Vous en voulez encore ?? Très bien. Vous pouvez utiliser ce que nous venons de voir pour calculer un PGCD via l'algorithme d'Euclide ! Voici l'organigramme de cet algorithme. (Honteusement pompé sur le net.... Ouuuh, pas bien !) ![]() N'hésitez pas à poser des questions et à poster vos résultats ! ******************************************* Voici le fichier au format .xls sur lequel je me suis basé pour ce tutoriel :
| ||||||||||

Recherche
Liste des membres
Calendrier
Aide
Arcade

![[Image: capture2g.th.jpg]](http://img232.imageshack.us/img232/3773/capture2g.th.jpg)
)![[Image: capture3ke.th.jpg]](http://img27.imageshack.us/img27/3238/capture3ke.th.jpg)
![[Image: capture4gy.th.jpg]](http://img59.imageshack.us/img59/18/capture4gy.th.jpg)
![[Image: sanstitrebsi.th.png]](http://img402.imageshack.us/img402/6227/sanstitrebsi.th.png)

![[Image: capture5ib.th.jpg]](http://img263.imageshack.us/img263/6125/capture5ib.th.jpg)


![[Image: captureww.th.jpg]](http://img90.imageshack.us/img90/894/captureww.th.jpg)

![[Image: capture1jh.th.jpg]](http://img11.imageshack.us/img11/5448/capture1jh.th.jpg)
![[Image: pgcds.th.png]](http://img511.imageshack.us/img511/5724/pgcds.th.png)

