Poster une réponse 
[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 ?
  • Saisie de A
  • Saisie de B
  • Valeurs de A durant le calcul
  • Valeurs de B durant le calcul
  • Valeurs de A-B durant le calcul
  • Valeur du PGCD

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 :

[Image: capture2g.th.jpg]

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

  • C'est bête un utilisateur...

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 tongue )

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 :
[Image: capture3ke.th.jpg]

  • Faisons la différence !

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 !
[Image: capture4gy.th.jpg]

(On obtient une belle succession de 0, vu que nous n'avons que les valeurs initiales de A et de B).

  • Mise à jour de la valeur 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)

[Image: sanstitrebsi.th.png]

Vous pouvez tirer ces 2 formules jusqu'en bas.

Et voilà, votre algorithme est en place !! good

[Image: capture5ib.th.jpg]


Mais... où est mon PGCD dans tout ce bazar ?!?

Ne vous affolez pas, j'allais y arriver ! happy
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 whistle

[Image: captureww.th.jpg]

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 ! blink

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. whistle

Nous obtenons donc : =RECHERCHEV(0;J5:L35;3;FAUX)

Et.... tzadaaaa, le PGCD est affiché dans la cellule résultat good

[Image: capture1jh.th.jpg]


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 !)

[Image: pgcds.th.png]


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 :
Calcul PGCD.xls
File Type: .xls
Downloaded: 2 times
Size: 26 Ko


°°°°°\---\00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000/---/°°°°°
"Personne ne bouge, j’ai perdu ma cervelle !"
Visiter le site internet de cet utilisateur Trouver tous les messages de cet utilisateur
Citer ce message dans une réponse Return to top
21-03-2010, 06:43 PM
Message : #2
RE: [Excel] Calculer un PGCD
Super tuto... jap

Mais comme je suis un (bête) utilisateur huuh, j'ai deux remarques à faire :

1) J'ai rentré : A=36 et B=60
et dans le tableau de droite, A et B sont inversés blink
Moi pas comprendre... C'est bête un utilisateur tongue

[Image: image7hg.png]

2) Marche pas toujours hein decu

[Image: image10eg.png]

Cela montre les "limites" du tableur...
Un logiciel de programmation est plus adapté pour traduire un algorithme avec une boucle...

arrow Un bon exercice à faire avec Scratch whistle

[Image: 118.gif]
Visiter le site internet de cet utilisateur Trouver tous les messages de cet utilisateur
Citer ce message dans une réponse Return to top
21-03-2010, 08:20 PM
Message : #3
RE: [Excel] Calculer un PGCD
Oui, c'est sur qu'un petit soft en console serait plus adapté, mais bon... Sleepy

°°°°°\---\00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000/---/°°°°°
"Personne ne bouge, j’ai perdu ma cervelle !"
Visiter le site internet de cet utilisateur Trouver tous les messages de cet utilisateur
Citer ce message dans une réponse Return to top
23-03-2010, 03:56 PM
Message : #4
RE: [Excel] Calculer un PGCD
Hein?! On a parlé de scratch?! Big Grin

Je me disait bien qu'excel n'étais pas bien adpaté à ce genre de programme... roll

Ben tiens... moi je vais peut être le tenter sur scratch!! evil

Sinon, joli tuto. good
Trouver tous les messages de cet utilisateur
Citer ce message dans une réponse Return to top
23-03-2010, 09:33 PM
Message : #5
RE: [Excel] Calculer un PGCD
Citation :Sinon, joli tuto.

Merci jap

Citation :Je me disait bien qu'excel n'étais pas bien adpaté à ce genre de programme...

Bah en fait, c'est surtout que j'avais une folle envie d'inaugurer la section tableur du forum avec un tuto sur Excel. Et comme le 1er truc facile qui m'est tombé sous la main était le pgcd... bah voilà happy

°°°°°\---\00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000/---/°°°°°
"Personne ne bouge, j’ai perdu ma cervelle !"
Visiter le site internet de cet utilisateur Trouver tous les messages de cet utilisateur
Citer ce message dans une réponse Return to top
23-03-2010, 10:47 PM
Message : #6
RE: [Excel] Calculer un PGCD
Et quelle inauguration good encore bravo jap
( Quelque chose me dit aussi que la rubrique "Tableur" va bientôt grossir whistle )



Excuse pour ma réponse de "bête utilisateur" huuh

mais cela fait réfléchir aussi...
Il y a 2 méthodes (soustractions successives et algorithme d'Euclide).
La méthode que tu présentes (soustraction successives) n'est pas apprise au Collège, ni en Seconde, ni en Première : On ne la voit qu'en Spécialité de Mathématiques de TerminaleS

Elle semble, à première vue, bien plus simple que l'algorithme d'Euclide...

Mais mon exemple avec A=60001 et B=20 montre que l'algorithme d'Euclide est le plus performant, car il aboutit plus vite au PGCD
(en 2 lignes !!!
60001=20*3000 + 1
20 = 1*20 + 0
donc PGCD (60001 ; 20) = 1 Smile )

Avec 60 et 36, c'est pareil, il suffit de 3 lignes
60 = 36*1 + 24
36 = 24*1 + 12
24 = 12*2 + 0
donc PGCD (60 ; 36) = 12

L'algorithme d'Euclide est le plus rapide (surtout avec des grands nombres...) Smile

[Image: 118.gif]
Visiter le site internet de cet utilisateur Trouver tous les messages de cet utilisateur
Citer ce message dans une réponse Return to top
24-03-2010, 01:39 PM (Ce message a été modifié le : 24-03-2010 01:40 PM par Badpixel.)
Message : #7
RE: [Excel] Calculer un PGCD
Citation :La méthode que tu présentes (soustraction successives) n'est pas apprise au Collège, ni en Seconde, ni en Première : On ne la voit qu'en Spécialité de Mathématiques de TerminaleS

Ah bon ? Mais comment je connais ça moi alors ??? Huh

Et...
Citation :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 !

°°°°°\---\00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000/---/°°°°°
"Personne ne bouge, j’ai perdu ma cervelle !"
Visiter le site internet de cet utilisateur Trouver tous les messages de cet utilisateur
Citer ce message dans une réponse Return to top
24-03-2010, 01:53 PM
Message : #8
RE: [Excel] Calculer un PGCD
(24-03-2010 01:39 PM)Badpixel a écrit :  Ah bon ? Mais comment je connais ça moi alors ??? Huh
Euh... Tu l'as honteusement pompé sur le net ? happy

[Image: 118.gif]
Visiter le site internet de cet utilisateur Trouver tous les messages de cet utilisateur
Citer ce message dans une réponse Return to top
24-03-2010, 02:09 PM
Message : #9
RE: [Excel] Calculer un PGCD
Nan, même pas...
Eh, mais c'est vous qui nous avez apprit ça !!
(Si si, je m'en rappelle !)

°°°°°\---\00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000/---/°°°°°
"Personne ne bouge, j’ai perdu ma cervelle !"
Visiter le site internet de cet utilisateur Trouver tous les messages de cet utilisateur
Citer ce message dans une réponse Return to top
24-03-2010, 04:42 PM
Message : #10
Video RE: [Excel] Calculer un PGCD
A bon... c'est pas au programme?! Pourtant ça semble couller de source, y a pas à l'apprendre... (en tout cas, chez moi Big Grin)!

En fait, d'après ce que j'ai compris, l'algo. d'Euclide, c'est la même chose, mais en faisant le plus de sourtractions possibles en même temps... donc c'est normal que ce soit plus rapide.[/font]
Trouver tous les messages de cet utilisateur
Citer ce message dans une réponse Return to top
27-03-2010, 01:39 AM
Message : #11
RE: [Excel] Calculer un PGCD
La méthode des soustractions successives et l'algorithme d'Euclide sont au programme des classes de Troisième hein (dans les nouveaux programmes actuels )
Et la méthode des soustractions successives sert à introduire l'algorithme d'Euclide

(24-03-2010 04:42 PM)Dadalouche a écrit :  En fait, d'après ce que j'ai compris, l'algo. d'Euclide, c'est la même chose, mais en faisant le plus de sourtractions possibles en même temps... donc c'est normal que ce soit plus rapide.[/font]
yes. Tu as du faire ça l'an dernier en Troisième...



(24-03-2010 01:39 PM)Badpixel a écrit :  Mais comment je connais ça moi alors ??? Huh
Je parlais des anciens programmes (que tu as fait Badpixel)
On parlait un peu du PGCD en Seconde, mais on ne faisait la démonstration des algorithmes qu'en spé Maths de TS

Et puis, en fait, je ne sais plus si on le faisait au collège decu )
Sûrement que oui, car je ne crois pas que ce soit moi qui t'ai appris ça...
(Ou alors, lors de nos séances "folles" de programmation en AI de Seconde hein )



En tout cas, tu as bien fait d'avoir bâti ton tutoriel ainsi
C'est une bonne approche du tableur...
Et faire l'algorithme d'Euclide est un bon entraînement sur les formules...

[Image: 118.gif]
Visiter le site internet de cet utilisateur Trouver tous les messages de cet utilisateur
Citer ce message dans une réponse Return to top
27-03-2010, 11:33 AM
Message : #12
RE: [Excel] Calculer un PGCD
Citation :dans les nouveaux programmes actuels

Ah oui c'est vrai... Et dire que maintenant on fait des algorithmes et de la cryptographie en 2nd... J'aurais du être moins vieux ! Undecided

Citation :Ou alors, lors de nos séances "folles" de programmation en AI de Seconde

Ah oui, c'était plutôt fun les AI de maths avec Thomas et Cécile ! Même si c'était plus vraiment de l'AI pour le coup... happy

°°°°°\---\00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000/---/°°°°°
"Personne ne bouge, j’ai perdu ma cervelle !"
Visiter le site internet de cet utilisateur Trouver tous les messages de cet utilisateur
Citer ce message dans une réponse Return to top
Poster une réponse