Struktogramm , Prüfe Pasch , Kniffel

  • Hei :)


    So ich habe vollgendes Problem bei einem Struktogramm , ich verstehe es nicht Wirklich ... :(


    Könnte mir das bitte einer Schritt für Schritt erklären?


    Hier das Blatt :


    Danke Schonmal .

  • Du hast eine Funktion pruefePasch die einen Boolean Werrt zurück gibt (also true oder false) und die Funktion benötigt ein Argument vom Typ GZ, dürfte wohl ein int oder sowas sein


    Also kannst du dir schon mal den Fuktionsrumpf bauen (anhander der Syntax von dem Funktionskopf geh ich mal davon aus ihr benutzt Delphi)

    Code
    1. function pruefePasch(pPaschTyp: GZ): Boolean;
    2. var
    3. begin
    4. end;


    Da du in Delphi die Variablen gesondert deklarieren musst, würde ich jetzt schon mal durch das Struktogramm gehen und alle Variablen zusammen suchen die du brauchst.
    Die da wären in deinem Fall

    Code
    1. augenZahl: Array[0..5] of integer;
    2. //muss global deklariert sein, derWuerfel: Array[0..4] of TEureWuerfelKlasse;
    3. paschOK: Boolean;
    4. i, nrWuerfel: Integer;


    So jetzt gehst du halt Schritt für Schritt das Struktogramm durch.
    Im ersten Abschnitt wird das augenZahl Array initialisiert
    Also

    Code
    1. for /*für*/ i := 0 to 5 /*0 bis 5*/ do
    2. augenzahl[i] := 0;


    Und so kannst das jetzt weiter Schritt für Schritt durchgehen.

  • Hallo, danke fuer die zuvorkommende Hilfe. Ich habe mich falsch ausgedrückt.
    Es geht mir nicht darum ,wie ich das Struktogramm in C,Oder Delphi schreibe, sondern ich möchte das Struktogramm verstehen.


    Vielleicht mag es dir lächerlich vorkommen, doch ich kapiere nicht , was da gemacht wird.
    Kannst du mir SCHRITT für Schritt erklären ,was genau unternommen wird,damit erkannt wird ,ob ein Pasch vorliegt oder nicht.


    Danke

  • Also,


    Das Ding ist in 5 Hauptblöcke unterteilt.
    3 Schleifen, 1 Zuweisung und die Auswertung/Rückgabe


    1. Block:
    1 Schleife (von 0 bis 5) mit einem Unterpunkt:
    durchlaufe das augenZahl Array (von 0 bis 5) und setze die Werte auf 0


    2. Block:
    1 Schleife (von 0 bis 4) mit 2 Unterpunkten:
    - setze in "a" die Augenzahl des gewürfelten Würfels ein
    - erhöhe die Zahl im augenZahl Array an der Stelle a (Augenzahl des Würfels) um 1


    3. Block:
    Setze paschOK (Boolean) auf false


    4. Block:
    1 Schleife (0 bis 5) mit einem Unterpunkt:
    Prüfe ob eine Zahl mehrmals bzw. genauso oft wie pPaschTyp vorgibt, gewürfelt worden ist -> Falls ja setze paschOK auf true


    5. Block:
    gib paschOK zurück


    Erklärung zum Algorithmus:
    In dem augenZahl wird gespeichert wie oft eine Zahl gewürfelt wurde, also wenn 2 x die 5 gewürfelt wurde 1 x die 1 und 2 x die 2 würde das Array so aussehen:
    augenZahl[0] = 1 //1 mal die 1
    augenZahl[1] = 2 //0 mal die 2
    augenZahl[2] = 0 //0 mal die 3
    augenZahl[3] = 0 //0 mal die 4
    augenZahl[4] = 2 //2 mal die 5
    augenZahl[5] = 0 //0 mal die 6
    Dann brauch man nur noch alle Zahlen durchzugehen und zu sehen ob wie oft die einzelnen Zahlen gewürfelt wurden und ob sie die durch pPaschType gegebene Bedingung erfüllen.

  • Abend,


    danke für die ausführliche Erklärung.
    Hoffe du bist mir nicht böse, wenn ich trotzdem nachfrage..


    Verstehe ich das richtig?:


    die erste zählschleife speichert ab ,wie oft eine augenzahl vorkommt. oder?


    was macht die zweiter zählschleife? das " - 1 " irritiert mich dermaßen...


    ich verstehe das so: es wird in a gespeicher ,welch wievielter wurf zu welchen augenzahl gehört. Richtig? was mache ich mit " - 1 " dann?



    warum wird augenzahl(a( - > augenzahl a+1 gemacht?




    Ich glaube,dass es ziemlich einfach ist, doch irgendwie häng ich,oder denke falsch..

  • Dann komme ich dir mal zuvor Traumfänger ;)


    Wie Traumfänger schon gesagt hat, in der ersten Schleife wird die Anzahl wie oft eine Zahl gewürfelt wurde auf 0 gesetzt.


    In der 2. Schleife wird dann in das Array, dessen Werte zuvor auf 0 gesetzt wurden mit der Anzahl, wie oft die ahl gewürfelt wurde gefüllt. Das -1 muss dahin weil der ArrayIndex null basiert ist und die Augenzahl eben nicht. Also wird eine 1 gewürfelt wird das im 0'ten Element gespeichert. Die Funktion gibAugenzahl() gibt dann aber 1 zurück, da wir aber auf das richtige Element zugreufen wollen, müssen wir von der Augenzahl noch -1 subtrahieren.

  • in dem Augenzahl Array wird gespeichert wie oft eine bestimmte Zahl gewürfelt wurde. Deshalb wird zuerst der zuvor gespeicherte Wert genommen und um eins erhöht, weil die Zahl ja nochmal gewürfelt wurde. Wenn ich am Schluss also 4 mal die 6 gewürfelt hab steht in meinem Array an der Stelle 5 (wegen null basiertem Index!) eine 4 (bei jedem Wurf einer 6 hat sich die Zahl um eins erhöht).