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

High­s­core­dia­gramm – Teil 4

Teil 4: Ma­xi­mum­su­che

In­halt: Me­tho­den mit Rück­ga­be­wert, Array-Al­go­rith­mus Ma­xi­mum­su­che, au­to­ma­ti­sches Tes­ten

Nach­dem die Punk­te­wer­te aus der ex­ter­nen Datei ein­ge­le­sen sind, soll nun der beste Spie­ler oder die beste Spie­le­rin er­mit­telt wer­den. Es wird also das Ma­xi­mum der Punk­te­wer­te ge­sucht. Die Funk­ti­on könn­te ent­we­der den größ­ten Wert oder die Po­si­ti­on des größ­ten Wer­tes im Array zu­rück­ge­ben. Es ist sinn­vol­ler die Po­si­ti­on zu­rück­zu­ge­ben, da damit der Wert leicht er­mit­telt wer­den kann. Um­ge­kehrt ist das nicht mög­lich.

Der Al­go­rith­mus ist der erste einer Reihe von Al­go­rith­men, die alle dar­auf ba­sie­ren, dass das Array mit einer for-Schlei­fe durch­lau­fen wer­den muss. Der Al­go­rith­mus müss­te den Schü­lern aus der Klas­se 8 be­kannt sein, da er dort be­han­delt wurde. Dort wurde al­ler­dings der Wert des Ma­xi­mums er­mit­telt und nicht die Po­si­ti­on im Array1:

Abbildung 1

Ab­bil­dung 1: Ma­xi­mum­su­che in Scratch von Lifel­ong-Kin­der­gar­ten-Group am MIT-Media-Lab [CC-BY-SA-2.0]

Um den Al­go­rith­mus zu wie­der­ho­len, kann der Film ma­xi­mum­su­che.mov (Ord­ner05_pra­e­sen­ta­tio­nen) ge­zeigt wer­den. Die SuS soll­ten selbst­stän­dig er­ken­nen, wel­ches Array-Ele­ment aus­ge­wählt wurde. Mit Hilfe des Puz­zles ( 13_al­g_­ma­xi­mum­su­che_­puz­zle.odt) kann der Al­go­rith­mus als Fluss­dia­gramm ge­legt wer­den. Dabei müs­sen die Ver­zwei­gung und die Schlei­fe­zer­schnit­ten und die Pfei­le von Hand ein­ge­zeich­net wer­den.

Abbildung 2

Die Um­set­zung in der Pro­gram­mier­spra­che er­folgt in einer ei­ge­nen Me­tho­de int maximumsuche(). Ein­drucks­voll ist es, wenn man den Ver­lauf der Aus­füh­rung ver­fol­gen kann. Das je­weils ak­tu­ell un­ter­such­te Ele­ment und das ak­tu­ell ma­xi­ma­le Ele­ment sol­len farb­lich her­vor­ge­ho­ben wer­den. Dazu muss zu­nächst die gra­phi­sche Dar­stel­lung an­ge­passt wer­den. Die Me­tho­de maximumsuche() muss dann par­al­lel zu der gra­phi­schen Dar­stel­lung ar­bei­ten und durch eine ent­spre­chen­de Ver­zö­ge­rung in an­ge­mes­se­ner Ge­schwin­dig­keit aus­ge­führt wer­den:

  • In Pro­ces­sing gibt es den Be­fehl thread(String methodenname), der sehr ein­fach einen par­al­le­len Thre­ad star­tet. Durch den Be­fehl delay(int millisekunden) kann die Aus­füh­rung ver­zö­gert wer­den. Damit das Bild neu ge­zeich­net wird, muss au­ßer­dem der Be­fehl redraw() auf­ge­ru­fen wer­den. Da­durch wird die Me­tho­de draw() von Pro­ces­sing au­to­ma­tisch neu aus­ge­führt. In die­ser muss die Me­tho­de zeichneBalken auf­ge­ru­fen wer­den.
  • In Green­foot wird bei einem Green­foot.delay(int mil­li­se­kun­den) die Aus­füh­rung au­to­ma­tisch an Green­foot zu­rück­ge­ge­ben. In die­ser Zeit ar­bei­tet Green­foot aus­ste­hen­de An­zei­ge­be­feh­le ab. Es ist also kein par­al­le­ler Thre­ad er­for­der­lich.
  • In nor­ma­lem Java (z.B. Ent­wick­lungs­um­ge­bung: Ja­va­Edi­tor) muss auch ein Thre­ad ge­star­tet wer­den. Die Syn­tax ist nicht ganz ein­fach, so dass die SuS dies nicht selbst pro­gram­mie­ren soll­ten.

Da es sich hier­bei um Spe­zia­li­tä­ten der je­wei­li­gen Um­ge­bung han­delt, wird den Schü­le­rin­nen und Schü­lern der Rah­men vor­ge­ge­ben. Sie müs­sen le­dig­lich in der Me­tho­de maximumsuche() die not­wen­di­gen Be­feh­le auf­ru­fen. Die Hin­wei­se dazu ste­hen im Quell­text der je­wei­li­gen Pro­gram­mier­spra­che.

In der Soft­ware­ent­wick­lung gibt es die Me­tho­de der "test­ge­trie­be­nen Ent­wick­lung". Dabei wer­den die Tests der Me­tho­den ge­schrie­ben, bevor die Im­ple­men­ta­ti­on der Me­tho­den selbst er­folgt. In jedem Ent­wick­lungs­schritt wird über­prüft, ob die Tests immer noch kor­rekt aus­ge­führt wer­den. Dies ist auch für die Schu­le eine gute Mög­lich­keit, die kor­rekt Im­ple­men­ta­ti­on von Schü­lern selbst tes­ten zu las­sen. Der Leh­rer gibt dabei die Tests vor. In BlueJ gibt es dafür die Mög­lich­keit von JUnit-Tests. In Pro­ces­sing, Green­foot und Java-Edi­tor gibt es diese Mög­lich­keit nicht. Man kann aber leicht ei­ge­ne Tests kon­stru­ie­ren, deren Er­geb­nis­se in der Kon­so­le aus­ge­ge­ben wer­den. Dies ist hier rea­li­siert. Es wer­den ver­schie­de­ne Da­ten­sät­ze zur Kon­trol­le der Ma­xi­mum­su­che ver­wen­det. Die Schü­ler star­ten die Tests durch

  • Pro­ces­sing: Drü­cken der Taste "t"
  • Green­foot: Auf­ruf der Me­tho­de tes­ten() im Kon­text­me­nü
  • Java-Edi­tor: Klick auf den But­ton "Tes­ten"

Zur Übung kön­nen die Schü­ler auch die Mi­ni­mum­su­che im­ple­men­tie­ren. Sie soll­ten dabei vor der Im­ple­men­ta­ti­on der Mi­ni­mum­su­che die Tests ent­spre­chend an­pas­sen.

1 Scratch wird von der Lifel­ong-Kin­der­gar­ten-Group am MIT-Media-Lab ent­wi­ckelt. Siehe http://​scratch.​mit.​edu. Scratch ist li­zen­ziert unter CC BY-SA 2.0

 

 

Hin­ter­grund und Un­ter­richts­ver­lauf: Her­un­ter­la­den [odt][2 MB]

Hin­ter­grund und Un­ter­richts­ver­lauf: Her­un­ter­la­den [pdf][380 KB]

 

Wei­ter zu High­s­core­dia­gramm – Teil 5-6