Ĉi tiu tasko baziĝas sur la fakto ke ĉiun kalkulilan nombron oni povas akiri per la jena ŝablono:
- Por ekzemplo, por desegni «4», oni ŝaltu l’ ortangulojn 3, 4, 5, 7.
- Por desegni «8», oni ŝaltu l’ ortangulojn 1, 2, 3, 4, 5, 6, 7.
- Por desegni «3», oni ŝaltu l’ ortangulojn 2, 3, 4, 5, 6.
Se oni deziras ekzemple grafiki plenan ortangulon grandan je 100 mul 200, unua ideo povas esti desegni la ortangulon je
100 mul 200, poste desegni ortangulon je 99 mul 199, poste ortangulon je 98 mul 198... ĝis la ortangul’ estos tute
plena.
Ni komencu per difini ortangulon je lango kaj larĝo dependaj je du variabloj.
por ort :lo :la
ripetu 2 [an :lo dn 90 an :la dn 90]
fino
Por plenigi nian grandan ortangulon, oni rulu:
ort 100 200 ort 99 199 ort 98 198 ..... ort 1 101
Difinu tiam proceduron ortangulo dediĉita grafiki tiun plenan ortangulon.
por ortangulo :lo :la
ort :lo :la
ortangulo :lo-1 :la-1
fino
Oni provu ortangulo 100 200 kaj oni rimarku ke estas problemo: la proceduro ne haltas kiam la ortangulo estas
plena; ĝi plu grafikas ortangulojn! Oni do aldonu provon ebligantan detekti ĉu la longo aŭ la larĝo egalas 0. Tiam,
oni petas la programon halti per la komando haltu.
por ortangulo :lo :la
se aŭ :lo=0 :la=0 [haltu]
ort :lo :la
ortangulo :lo-1 :la-1
fino
Rimarko: anstataŭ uzi la primitivon aŭ, oni povas uzi la simbolon «|»; oni skribus:
Ni bezonas la plenan ortangulon antaŭan:
por ort :lo :la
se :lo=0 |:la=0 [haltu]
ripetu 2 [an :lo dn 90 an :la dn 90]
ort :lo-1 :la-1
fino
Ni supozas ke la testudo ekiras de la malsupra maldekstra angulo. Ni difinos proceduron nomatan cifero
akceptantan 7 argumentojn :a, :b, :c, :d, :e, :f, :g. Kiam :a valoras 1, oni desegnu la ortangulon 1. Se :a valoras
0, oni ne desegnu ĝin. Jen la principo.
Jen la proceduro:
por cifero :a :b :c :d :e :f :g
# Oni desegnu la ortangulon 1
se :a=1 [ort 160 40]
# Oni desegnu la ortangulon 2
se :b=1 [ort 40 160]
l dn 90 an 120 mdn 90 ml
# Oni desegnu la ortangulon 3
se :c=1 [ort 160 40]
l an 120 ml
# Oni desegnu la ortangulon 5
se :e=1 [ort 160 40]
# Oni desegnu la ortangulon 4
mdn 90 l man 40 ml
se :d=1 [ort 160 40]
# Oni desegnu la ortangulon 6
dn 90 l an 120 mdn 90 ml
se :f=1 [ort 160 40]
# Oni desegnu la ortangulon 7
l an 120 mdn 90 man 40 ml
se :g=1 [ort 160 40]
fino
Ĉi tie ni simulos retronombradon aperigante sekvence la ciferojn de 9 ĝis 0 je ordo malkreska.
por retronombro
ev tdk cifero 0 1 1 1 1 1 1 atendu 60
ev tdk cifero 1 1 1 1 1 1 1 atendu 60
ev tdk cifero 0 0 1 0 1 1 0 atendu 60
ev tdk cifero 1 1 1 1 0 1 1 atendu 60
ev tdk cifero 0 1 1 1 0 1 1 atendu 60
ev tdk cifero 0 0 1 1 1 0 1 atendu 60
ev tdk cifero 0 1 1 1 1 1 0 atendu 60
ev tdk cifero 1 1 0 1 1 1 0 atendu 60
ev tdk cifero 0 0 1 0 1 0 0 atendu 60
ev tdk cifero 1 1 1 0 1 1 1 atendu 60
fino
Jen malgranda problemo: estas palpebruma efiko malagraba dum krei ĉiun ciferon. Por fluemigi tion oni uzos la
primitivojn movado, neplu_movigu kaj novigu.
- movado ebligas ŝalti la moduson «movado». La testudo ne desegnos plu sur l’ ekrano, sed en bufro, tio
estas, en memoro. Ĝi aldonos la bildon nur kiam oni petos per la primitivo novigu.
- neplu_movigu ebligas malŝalti tiun moduson kaj reveni en la klasikan moduson.
Jen la modifita programo:
por retronombro
# Pasu en moduson movado
movado
ev tdk cifero 0 1 1 1 1 1 1 novigu atendu 60
ev tdk cifero 1 1 1 1 1 1 1 novigu atendu 60
ev tdk cifero 0 0 1 0 1 1 0 novigu atendu 60
ev tdk cifero 1 1 1 1 0 1 1 novigu atendu 60
ev tdk cifero 0 1 1 1 0 1 1 novigu atendu 60
ev tdk cifero 0 0 1 1 1 0 1 novigu atendu 60
ev tdk cifero 0 1 1 1 1 1 0 novigu atendu 60
ev tdk cifero 1 1 0 1 1 1 0 novigu atendu 60
ev tdk cifero 0 0 1 0 1 0 0 novigu atendu 60
ev tdk cifero 1 1 1 0 1 1 1 novigu atendu 60
# Revenu en moduson klasikan
neplu_movigu
fino