; GŽomŽtrie de la Tortue ; ---------------------- TO carre :c repeat 4 [fd :c rt 90] end to polyReg :n :c repeat :n [fd :c rt 360/:n] end TO polyRegSens :n :c :sens ; sens vaut +1 ou -1 repeat :n [fd :c rt sens*360/:n] end to maison RT 90 polyRegSens 3 100 -1 polyRegSens 4 100 1 RT -90 end to poly :cote :angle fd :cote rt :angle poly :cote :angle end to poly2 :cote :angle fd :cote rt :angle fd :cote rt 2*:angle poly2 :cote :angle end to polySpi :cote :angle :pas fd :cote rt :angle polySpi :cote+:pas :angle :pas end to inSpi :cote :angle :pas fd :cote rt :angle ;wait 1000 inSpi :cote :angle+:pas :pas end ; Autre forme des quatre procŽdures prŽcŽdentes ; --------------------------------------------- To Poly :cote :angle ; angles = 72, 144, 60, 135, 108, 1 while [true] [Fd :cote Rt :angle] end To Poly2 :cote :angle ; angle = 30, 144, 45,125 while [true] [Fd :cote Rt :angle Fd :cote Rt 2*:angle] end To PolySpi :cote :angle :pas ; angle = 95, 90, 120, 117 (pas = 1) while [true] [Fd :cote Rt :angle Make "cote :cote+:pas] end To InSpi :cote :angle :pas ; (angle, pas) = (0,7), (40,30), (2,20) (= 10 ou 20) while [true] [Fd :cote Rt :angle Make "angle :angle+:pas] end ; Pour arrt de Ç InSpi È (lorsquĠarrt il y a) ; --------------------------------------------- To InSpi :cote :angle :pas ; (angle, pas) = (0,7), (40,30), (2,20) (2,115+k) o k=0,1,2 (= 10 ou 20) make "position pos make "cap heading while [true] [Fd :cote Rt :angle Make "angle :angle+:pas if pos = :position and heading = :cap [STOP]] end TO InSpi :cote :angle :pas CS Make "angleInitial :angle Make "tours 0 while [true] \ [Fd :cote Rt :angle \ Make "tours :tours + :angle \ Make "angle :angle + :pas \ if (:angleInitial = Remainder :angle 360) and (0 = Remainder :tours 360) [STOP] ] END ; Autres procŽdures mathŽmatiques ; ------------------------------- TO ValeurAbsolue :X IF :X < 0 [OUTPUT -:X] [OUTPUT :X] END TO Facteurs :N FOR "I 1 :N [IF (REMAINDER :N :I) = 0 [PRINT :I]] END TO Syracuse :N MAKE "COMPTEUR 0 WHILE [:N > 1] [IF (REMAINDER :N 2) = 0 \ [MAKE "N :N / 2] \ [MAKE "N 3 * :N + 1] PRINT :N MAKE "COMPTEUR :COMPTEUR + 1] (PRINT "|Nombre d'Žtapes| :COMPTEUR) END TO SyracuseFonction :N MAKE "COMPTEUR 0 WHILE [:N > 1] [IF (REMAINDER :N 2) = 0 \ [MAKE "N :N / 2] \ [MAKE "N 3 * :N + 1] \ MAKE "COMPTEUR :COMPTEUR + 1] OUTPUT :COMPTEUR END TO SuperNombres :FACTEUR FOR "I 1 1000 [MAKE "ETAPES SYRACUSEFONCTION :I \ IF :I * :FACTEUR < :ETAPES [(PRINT :I "|-->| :ETAPES)]] PRINT "|TerminŽ| END TO Sierp :N :C ; cs ht rt -90 sierp 5 100 IF :N = 0 [STOP] REPEAT 3 [Sierp :N - 1 :C / 2 FD :C RT 120] END