next up previous contents index
suivant: Les carrés monter: Les dessins récursifs précédent: Les dessins récursifs   Table des matières   Index

Les segments

L'utilisateur choisit un réel a $ \in$ ]0;1[. Soit un point M0 d'affixe un réel z0 > 0 et les points Mk d'affixe zk = rkexp(ik$ \pi$/3) avec rk = a*rk-1.
Écrire un programme qui réalise le dessin du point M0 et des p segments MkMk-1 pour k = 1..p.

On a donc zk = = a*rk-1exp(i(k - 1)$ \pi$/3)exp(i$ \pi$/3) = = a exp(i$ \pi$/3)zk-1 On peut faire soit un programme itératif, soit un programme récursif.
On tape pour le programme itératif :

segmenti(a,z0,p):={
local L,k;
point(z0);
L:=NULL;
pour k de 1 jusque p faire 
L:=L,segment(z0,a*z0*exp(i*pi/3));
z0:=a*z0*exp(i*pi/3);
fpour;
retourne L;
}
:;
Pour le programme récursif : On peut décider d'avoir le dessin récursif seulement dans l'écran DispG : le programme est plus simple car toutes les instructions graphiques sont exécutées dans cet écran. On renvoie 1 pour que l'on puisse vérifier que la procédure s'est bien exécutée.
On tape :
segmentg(a,z0,p):={
  point(z0);
  si p>0 alors 
    segment(z0,a*z0*exp(i*pi/3));
    segmentg(a,a*z0*exp(i*pi/3),p-1);
  fsi;
  retourne 1;
}
:;
Ou bien on met les différentes instructions graphiques à réaliser dans une liste L.
On tape :
segmentr(a,z0,p):={
  local L;
  si p==0 alors retourne point(z0); fsi;
  L:=segment(z0,a*z0*exp(i*pi/3)),segmentr(a,a*z0*exp(i*pi/3),p-1);
  retourne L;
}
:;
Puis on tape :
segmenti(0.8, 20, 30) ou
segmentg(0.8, 20, 30) ou
segmentr(0.8, 20, 30)



Documentation de giac écrite par Renée De Graeve