TP algorithmique 1 - PGCD et frations - 2 4
I Division
a. Comme en primaire
Vousvoulez diviser 37par4:àl'éole primaire,vousavezapprisàvousposer
la question:
En 37 ombien de fois 4?
Puis vient letemps dualul :
une fois 4, 4 : trop petit...
2 fois 4, 8 : trop petit...
3 fois 4, 12 : trop petit...
9 fois 4, 36 : trop petit...
10 fois 4, 40 : Ah! Trop grand!
Il yva don9 fois mais on n'y est pas enore : il me reste un petit pas à
faire de36 jusqu'à 37.
8 × 4 9 × 4 10 × 4
reste 37 4
Comment traduire ette division àl'aide d'une sommeetd'unproduit?
b. Parlons à l'ordinateur
Imaginez maintenant que vous devez expliquer e alul à un ordinateur en
l'imaginant ommeun petit lutinse promenant sur la droitedes nombres.
Vous pourriez ommener parlui dire :
tu pars de0 ettu vas ompter tesenjambées,
puis
tu avanes de 4 unitéstant que tu n'auraspasdépassé37.
Enn,
dèsquetu asdépassé37,tut'arrêtes:lequotientestlenombred'enjambées
moinsune.
Il nereste plusqu'à lui dire dans salangue... Nousétudierons prinipalement
deuxlangues informatiques ette année :le XCAS et leOCAML.
Par exemple, en XCAS,eladonne :
quotient(dividende,diviseur):={
enjambees:=0;
while(enjambees
*
diviseur<=dividende){
enjambees:=enjambees+1
}
return(enjambees1)
}
Érivez un sript qui renvoie ette fois le reste de la division eulidienne de deux
nombres.
II. PGCD 2 4-LyéeJeanPerrin-2009/2010
. Parlons à un ordinateur plus malin
Les mathématiques, 'est pour les fainéants... Le problème, 'est que pour
pouvoir sepayerleluxe d'êtrefainéant,il faut pasmal rééhir!
Par exemple, je suis malin et passablement fainéant. Je dois diviser a par b
donsavoir en a ombiende fois b. Je medis :
Ben déjà, si a est plus petit que b, en a il y va zéro fois : le quotient
vaut don zéro
Puis jeme dis :
Si je reule de b, il ira une fois de moins b dans a. Cela signie que
quotient(a,b)=1+quotient(a-b,b)
Ehben, ave ça, unordinateur intelligent va sedébrouiller...
Onlui demandele quotient de 37par4 :
est-e que 37 est plus petit que 4? Non, don je garde en mémoire que
quotient(37,4)=1+quo ti ent(3 7- 4,4 ) etje m'oupede quotient(33,4);
est-e que 33 est plus petit que 4? Non, don je garde en mémoire que
quotient(33,4)=1+quo ti ent(3 3- 4,4 ) etje m'oupede quotient(29,4);
et.
est-e que 5 est plus petit que 4? Non, don je garde en mémoire que
quotient(5,4)=1+quot ie nt (5- 4,4 ) etje m'oupe de quotient(1,4);
est-e que1 estplus petit que 4?Oui,don jesais que quotient(1,4)=0;
donje vais pouvoiraluler quotient(5,4) puis quotient(9,4) puis et.
Çaparaît plus long maise sale boulot de gestion de la mémoire est fait par
deslogiiels intelligents. Nous pouvonsnous ontenter de donner juste àl'or-
dinateur un assimpleet un moyen pouraller d'un asompliqué versle as
simple.
Regardez plutt!
quotient_malin(dividende,diviseur):={
if(dividende<diviseur)
then{0}
else{1+quotient_malin(dividendediviseur,diviseur)}
}
OCAMLparle àpeu prèsle mêmelangage :
let re quotient_malin(dividende,diviseur)=
if dividende<diviseur
then 0
else 1+quotient_malin(dividendediviseur,diviseur)
Érivezunsriptqui renvoieette foislerestemalindeladivisioneulidienne dedeux
nombres.
II PGCD
a. Diviseur
Le PéGéCéDé de deuxnombres,'est leur plusgrand diviseur ommun.
D'abord, qu'est-e qu'onappelle un diviseur danse ontexte?
Par exemple, 4 divise 80 ar le reste de la division de 80 par 4 vaut 0 : la
division tombe justeomme vousdisiez en CM1.
Onpeutaussidire que4divise 32:4 estdonun diviseur ommun de 32 et
80.Maisest-e leplus grand?
b. Eulide
Eulide, 'est un savant gre qui a eu beauoup de bonnes idées il y a 2300
ans.On utiliseenore largement ses résultats aulyée.
Bon, vous voulez onnaître le plus grand diviseur ommun de deux nombres
aet b.
Est-equ'il en existe au moinsun?
L'idéed'Eulide aétéd'eetuer ladivision...eulidi enne de aparb.Soit ale
plus granddesdeux.
III. OPÉRATIONSSUR LESNOMBRES RATIONNELS 2 4-LyéeJeanPerrin-2009/2010
a=bq+r ave 06r<b
Appelons dun diviseur ommunde a etb.
Pourquoi d estaussiun diviseur ommunde bet r?
Et vie-versa etdansl'autre sens?
Donherher lePGCD de aetb revient à herher eluide betr.
Quelestl'avantage?Qu'est-equi sepasseauboutd'unmoment?Ya-t-ilun
assimple?Peut-on utiliser notre méthode de fainéant?
Testezvos onjeturessur la mahine.
III Opérations sur les nombres rationnels
a. Fration simpliée
Quelle diéreneexiste-t-il entre 7
3 et
21
9
?
Quelrle peutjouer lePGCDdans ette histoire?
Onva réerun programme simpliant les frations.
Au lieu d'érireun nombrerationnel sous la forme
numérateur
dénominateur
, onva l'en-
trer dansla mahinesous la forme[numérateur,dénominateur℄.
Ainsi 21
9
s'érira [21,9℄.
Onpeutalors réerun programme qui simplieraunefration donnée.
Par exemple surXCAS:
simp(Fration):={
a:=Fration[0℄; // le premier terme de la fration
b:=Fration[1℄; // le seond
if(b==0)
then{"On peut po diviser par 0"}
else{[a/pgd(a,b),b/pgd(a,b)℄}
}:;
Desommentaires?
SurOCAML,on proèdeàquelques aménagements.
Pourprévenir toute divisionparzéroon varéerun opérateurtraitant lesex-
eptionsqu'onnommeraDivision_par_zeroet quinousservirade garde-
fou:
# exeption Division_par_zero;;
On invoquera ette exeption ave la ommande raise: étant donné votre
niveau d'anglais,ette ommandeest naturelle!...
Onpeutréerun opérateurqui simplie les frations :
# let simp([a;b℄) =
if b=0 then raise Division_par_zero
else [a/pgd(a,b);b/pgd(a,b)℄;;
b. Opérations sur les frations
Onrée ensuiteune sommesimpliée de frations :
# let som([a;b℄,[;d℄) =
if b=0 or d=0 then raise Division_par_zero else
simp([a
* d+b
*
;b
* d℄);;
Par exemple :
# som([2;3℄,[1;6℄);;
: int list = [5; 6℄
Bon:oupez-vousdelamultipliation, dualul del'inverseetdeladivision.
Quandtout seraprêt, ommententrer
1+ 2+
3
4
1- 5
6
et
3+ 1
2+ 1
1+
1
2+
1
6
.