Poster un commentaire à la suite de l’article...

dimanche 8 novembre 2009
par  Nathalie CARRIÉ

Quel langage de programmation pour l’algorithmique en Seconde ?

Une carte mentale sur l’algorithmique permet de comparer divers langages de programmation pour un choix de langage en seconde.

En réponse à...

Logo de Marc JAMBON
lundi 15 novembre 2010 à 06h06 - par  Marc JAMBON

Algorithme d’Euclide sur Mathematica

Marc Jambon

Euclide utilise au livre VII des Eléments des soustractions successives, le
plus petit du plus grand, pour calculer le PGCD de deux nombres entiers
naturels.
Suite au défi lancé par Alain Busser, l’objectif est de proposer un programme
Mathematica sans utiliser un « tant que » ou « While » en anglais, suivi d’un
test, ce qui pourrait conduire à une boucle qui tourne sans fin si le test d’
arrêt n’est jamais atteint (par exemple suite à une erreur de programmation ou
à une entrée de nombre strictement négatif). Je propose d’utiliser la boucle
« Do » de Mathematica (« Faire » en français) dans laquelle, le nombre k de
boucles est indiqué à l’extrême droite entre accolades.
Voici donc le programme qui ne soulève aucune difficulté de compréhension au
niveau de la classe de seconde, il calcule le PGCD de a , b et le met dans d.

k=Max[a,b]+1 ;d=a ;c=b ;
Do[(z=d ;d=Max[z,c]-Min[z,c] ;c=Min[z,c]),k] ;
PGCD(a,b)=d

Ci-dessous exemples numériques d’exécutions.

Exemple 1
Clear[a] ;Clear[b] ;a=1 ;b=8 ;
k=Max[a,b]+1 ;d=a ;c=b ;
Do[(z=d ;d=Max[z,c]-Min[z,c] ;c=Min[z,c]),k] ;
PGCD(a,b)=1

Exemple 2
Clear[a] ;Clear[b] ;a=8 ;b=1 ;
k=Max[a,b]+1 ;d=a ;c=b ;
Do[(z=d ;d=Max[z,c]-Min[z,c] ;c=Min[z,c]),k] ;d ;
PGCD(a,b)=1

Exemple 3
Clear[a] ;Clear[b] ;a=0 ;b=0 ;
k=Max[a,b]+1 ;d=a ;c=b ;
Do[(z=d ;d=Max[z,c]-Min[z,c] ;c=Min[z,c]),k] ;d ;
PGCD(a,b)=0

Exemple 4
Clear[a] ;Clear[b] ;a=5 ;b=0 ;
k=Max[a,b]+1 ;d=a ;c=b ;
Do[(z=d ;d=Max[z,c]-Min[z,c] ;c=Min[z,c]),k] ;d ;
PGCD(a,b)=5

Exemple 5
Clear[a] ;Clear[b] ;a=9 ;b=6 ;
k=Max[a,b]+1 ;d=a ;c=b ;
Do[(z=d ;d=Max[z,c]-Min[z,c] ;c=Min[z,c]),k] ;d ;
PGCD(a,b)=3

Exemple 6
Clear[a] ;Clear[b] ;a=345 ;b=960 ;
k=Max[a,b]+1 ;d=a ;c=b ;
Do[(z=d ;d=Max[z,c]-Min[z,c] ;c=Min[z,c]),k] ;d ;
PGCD(a,b)=15

Exemple 7
Clear[a] ;Clear[b] ;a=6321 ;b=4256 ;
k=Max[a,b]+1 ;d=a ;c=b ;
Do[(z=d ;d=Max[z,c]-Min[z,c] ;c=Min[z,c]),k] ;d ;
PGCD(a,b)=7

Exemple 8
Clear[a] ;Clear[b] ;a=5437 ;b=8531 ;
k=Max[a,b]+1 ;d=a ;c=b ;
Do[(z=d ;d=Max[z,c]-Min[z,c] ;c=Min[z,c]),k] ;d ;
PGCD(a,b)=1

Exemple 9 : Entrée d’un nombre strictement négatif
Clear[a] ;Clear[b] ;a=-3 ;b=5 ;
k=Max[a,b]+1 ;d=a ;c=b ;
Do[(z=d ;d=Max[z,c]-Min[z,c] ;c=Min[z,c]),k] ;d ;
d=23
Noter que le programme s’arrête même s’il ne donne pas le PGCD.

modération a priori

Ce forum est modéré a priori : votre contribution n’apparaîtra qu’après avoir été validée par un administrateur du site.

Qui êtes-vous ?
Votre message

Pour créer des paragraphes, laissez simplement des lignes vides.