Zur Haupt­na­vi­ga­ti­on sprin­gen [Alt]+[0] Zum Sei­ten­in­halt sprin­gen [Alt]+[1]

Blatt 2 – Die Qua­dra­te

Als Nächs­tes fül­len wir die Rei­hen mit Qua­dra­ten.

7. Schrei­be den Rah­men einer Me­tho­de zeich­ne­Qua­dra­te(). Stel­le darin zu­nächst schwarz als Füll­far­be ein. (Die Li­ni­en­far­be bleibt grau.)

In einer Reihe sol­len je­weils acht Qua­dra­te ge­zeich­net wer­den, die wie­der den Ab­stand der ei­ge­nen Sei­ten­län­ge haben.

8. Pro­gram­mie­re das Zeich­nen der Qua­dra­te in der ers­ten Reihe. Nutze wie­der eine Zähl­schlei­fe und nutze auch die Va­ria­ble s für die Sei­ten­län­ge. Das erste Qua­drat soll einen Ab­stand von 10 Pi­xeln zum Rand haben. Star­te dein Pro­gramm und än­de­re dei­nen Pro­gramm­code ab, wenn etwas noch nicht stimmt. (Die Lö­sung liegt aus.)

In jeder Reihe star­tet das erste Qua­drat aber an einer an­de­ren Stel­le. In der ers­ten, mitt­le­ren und letz­ten Reihe bei 10 Pi­xeln, je­weils da­ne­ben bei 20 und in der drit­ten und sieb­ten Reihe bei 30 Pixel.

9. Über­le­ge dir, was du für die nächs­ten Rei­hen än­dern musst.

10. Pro­gram­mie­re das Zeich­nen der Qua­dra­te in der zwei­ten Reihe.

11. Pro­gram­mie­re das Zeich­nen der Qua­dra­te in der drit­ten Reihe.

Ver­glei­che mit der aus­lie­gen­den Lö­sung und hol dir dann das nächs­te Blatt.

Es ist sehr um­ständ­lich, für jede Reihe eine neue Schlei­fe pro­gram­mie­ren zu müs­sen. Ei­gent­lich wie­der­ho­len wir ja wie­der neun Mal das Zeich­nen einer Reihe von Qua­dra­ten.

12. Gib an, was gleich bleibt und über­le­ge dir, was sich än­dert. Fülle dazu fol­gen­de Ta­bel­le wei­ter aus:

Tabelle

Wir igno­rie­ren zu­nächst ein­mal die un­ter­schied­li­chen Ab­stän­de zum lin­ken Rand und neh­men bei allen Rei­hen die Zahl 10. Um die Än­de­rung küm­mern wir uns spä­ter.

Dann än­dert sich von Reihe zu Reihe nur die y-Ko­or­di­na­te.

13. Über­le­ge dir, wie du mit einer wei­te­ren Zähl­va­ria­ble j auf die y-Ko­or­di­na­ten kommst. Ver­glei­che deine Idee mit der aus­lie­gen­den Lö­sung.

Wir be­kom­men die Qua­dra­te einer Reihe mit­hil­fe einer Zähl­schlei­fe, die sich in der ver­ein­fach­ten Form nur in der y-Ko­or­di­na­te un­ter­schei­det.

Da wir aber neun sol­cher Rei­hen brau­chen, nut­zen wir eine wei­te­re Zähl­schlei­fe, die neun­mal un­se­re bis­he­ri­ge Zähl­schlei­fe durch­läuft.

ver­schach­tel­te Zähl­schlei­fe

Sind zwei oder mehr Zähl­schlei­fen in­ein­an­der ver­schach­telt, so nennt man das eine ver­schach­tel­te Zähl­schlei­fe.

Es gibt eine äu­ße­re Schlei­fe mit der Zähl­va­ria­blen j und eine in­ne­re Schlei­fe mit der Zähl­va­ria­blen i.

Die ver­schach­tel­te Zähl­schlei­fe sieht jetzt fol­gen­der­ma­ßen aus:

verschachtelte Zählschleife

14. Schrei­be eine neue Me­tho­de zeich­ne­Al­le­Qua­dra­te(), die diese ver­schach­tel­te Zähl­schlei­fe nutzt. Teste dann dein Pro­gramm.

15. Über­le­ge dir jetzt noch ein­mal ganz genau, was Schritt für Schritt pas­siert. Wenn es dir noch nicht klar ist, hole dir zur Hilfe das Ex­tra­blatt und fülle es Schritt für Schritt aus.

Es wird neun­mal nach­ein­an­der die in­ne­re Schlei­fe auf­ge­ru­fen, die je­weils acht Qua­dra­te ne­ben­ein­an­der zeich­net.

Lei­der ist es jetzt keine op­ti­sche Täu­schung mehr, weil wir links immer nur 10 Pixel Ab­stand las­sen.

Quadrate

Statt dem Wert 10 als Ab­stand zum lin­ken Rand, hät­ten wir gerne in jeder Reihe einen an­de­ren Wert. Da sich der Wert mal er­höht, mal er­nied­rigt, kön­nen wir ihn nicht durch die Schlei­fen­va­ria­ble j dar­stel­len, wie es bei dem Ab­stand nach oben funk­tio­niert hat.

Feld (Array)

Wir nut­zen hier ein so­ge­nann­tes Feld (Array), das mehr als einen Wert gleich­zei­tig spei­chern kann. Du hast eine sol­che Da­ten­struk­tur schon im letz­ten Jahr ken­nen ge­lernt.

Zur Er­in­ne­rung:

Den­ken wir bei einer Va­ria­ble an das Schach­tel­mo­dell (für jede Va­ria­ble gibt es eine Schach­tel, in der der ak­tu­el­le Wert der Va­ria­ble liegt), kön­nen wir uns hier im Ver­gleich meh­re­re an­ein­an­der­ge­kleb­te Schach­teln, die durch­num­me­riert sind, vor­stel­len.

In un­se­rem Fall würde in den Schach­teln je­weils der Ab­stand zum lin­ken Rand als Wert lie­gen.

Schachtelmodell

(Ei­sen­mann, ZPG IMP)

In Java müs­sen wir das Feld be­kannt ma­chen und kön­nen es auch gleich mit den Wer­ten fül­len.

Array

Die bei­den ecki­gen Klam­mern nach dem Da­ten­typ int zei­gen an, dass ab­sta­en­de ein Feld aus gan­zen Zah­len ist.

Der Zu­griff auf ein Ele­ment des Fel­des geht auch mit ecki­gen Klam­mern: z.B. lie­fert abstaende[0] den Wert 10.

16. Än­de­re dein Pro­gramm so ab, dass statt dem Ab­stand 10 der je­wei­li­ge Wert des Feld­ele­men­tes ge­nutzt wird (alte Zeile: rect(10+2*s*i,5+j*s,s,s);) Teste dein Pro­gramm und ver­glei­che mit der Lö­sung.

 

 

Op­ti­sche Täu­schun­gen: Her­un­ter­la­den [odt][371 KB]

Op­ti­sche Täu­schun­gen: Her­un­ter­la­den [pdf][393 KB]

 

Wei­ter zu Ver­schach­tel­te Zähl­schlei­fe