Waldbrand

Getting started ... Alles für einen gelungenen Start.
7 Beiträge • Seite 1 von 1
7 Beiträge Seite 1 von 1

Waldbrand

Beitrag von drama (ForumUser / 25 / 11 / 0 ) »
Hallo Leute,

ich hab in SAP einen Waldbrand geschrieben.
Nun bin ich auf ein Problem gestoßen.

Ich hab die erste Ausgabe mit: "0. Schritt: Einfügen des Waldes."
Der Teil soll und wird ausgeführt, er soll jedoch in der Ausgabe nicht angezeigt werden.

Gibt es dafür eine Anweisung?

Ich weiß das es bei css für zum Beispiel, das drucken einer Seite oder ähnliches die Anweisung "display: none;"
gibt. Funktioniert sowas auch in SAP?

Ich hab ein Bild von meiner Ausgabe hinzugefügt falls ihr den code nicht einsetzten wollt

Es ist aus dem Grund notwendig, dass der erste Schritt ausgeführt wird, weil die Bäume nachwachsen. Würde ich es raus tun, währe der erste richtige Schritt das Problem. Wenn ich es aber so mache, wird mir der erste richtige Schritte gleich mit einem kompletten Wald angezeigt :)

Hier ist mal mein kompletter code

Code: Alles auswählen.

*&---------------------------------------------------------------------*
*& Report  ZTS_WALDBRAND
*&
*&---------------------------------------------------------------------*
*&
*&
*&---------------------------------------------------------------------*

REPORT  zts_waldbrand.

"! TODO Aus- und Eingabe in Prozent
"! TODO Ausgabe 0 ausführen aber für den User nicht anzeigen.             FORM initialisierung_wald.



SELECTION-SCREEN BEGIN OF BLOCK a WITH FRAME TITLE text-t01.
PARAMETERS p_feuer TYPE i DEFAULT 10.
SELECTION-SCREEN END OF BLOCK a.

SELECTION-SCREEN BEGIN OF BLOCK b WITH FRAME TITLE text-t02.
PARAMETERS p_wachs TYPE i DEFAULT 1.
SELECTION-SCREEN END OF BLOCK b.

SELECTION-SCREEN BEGIN OF BLOCK d WITH FRAME TITLE text-t04.
PARAMETERS p_aktion  TYPE i DEFAULT 5.
SELECTION-SCREEN END OF BLOCK d.

SELECTION-SCREEN BEGIN OF BLOCK e WITH FRAME TITLE text-t05.
PARAMETERS p_laenge TYPE i DEFAULT 10.
SELECTION-SCREEN END OF BLOCK e.

SELECTION-SCREEN BEGIN OF BLOCK f WITH FRAME TITLE text-t06.
PARAMETERS p_hoehe  TYPE i DEFAULT 10.
SELECTION-SCREEN END OF BLOCK f.

* DATENTYP  |    BEDEUTUNG     |
*-----------|------------------|
*     i     |   Ganze Zahl     |
*     f     |   Gleitpunktzahl |
*     c     |   Textfeld       |⁣⁣
*------------------------------|

CONSTANTS cv_frei(1)            TYPE c VALUE ' '.
CONSTANTS cv_baum(1)            TYPE c VALUE 'T'.
CONSTANTS cv_brennender_baum(1) TYPE c VALUE 'F'.
CONSTANTS cv_zahl_zwei          TYPE i VALUE  2. "aufbau_wald



TYPES: BEGIN OF ty_merken,
  zeile   TYPE i,
  spalte  TYPE i,
  wert(1) TYPE c,
END OF ty_merken.

*&---------------------------------------------------------------------*
*&      Interne Tabellen                                               *
*&---------------------------------------------------------------------*
DATA lt_wald_new        TYPE STANDARD TABLE OF ty_merken. "Namenskonvention
DATA lt_wald_old        TYPE STANDARD TABLE OF ty_merken. "Namenskonvention

*&---------------------------------------------------------------------*
*&      Strukturen                                                     *
*&---------------------------------------------------------------------*
DATA ls_wald_new        TYPE ty_merken. "Namenskonvention
DATA ls_wald_old        TYPE ty_merken. "Namenskonvention
DATA ls_wald_old_chg    TYPE ty_merken. "Namenskonvention

*&---------------------------------------------------------------------*
*&      Variablen                                                      *
*&---------------------------------------------------------------------*
DATA lv_zufalls_zahl    TYPE i.
DATA lv_zaehler_spalte  TYPE i.
DATA lv_zaehler_zeile   TYPE i.
DATA lv_zaehler_aktion  TYPE n.
DATA lv_spalte_links    TYPE i.
DATA lv_spalte_rechts   TYPE i.
DATA lv_zeile_oben      TYPE i.
DATA lv_zeile_unten     TYPE i.
DATA lv_zeile_old       TYPE i.
*&
*&*Nicht mehr relevant******************************************************
*&DATA: ld_ranint type QF00-RAN_INT,
*&      ld_maxint type QF00-RAN_INT,
*&      ld_minint type QF00-RAN_INT.
*&
*&*Nicht mehr relevant******************************************************
*&
*&*START-OF-SELECTION.
*&START-OF-SELECTION.
*&ld_minint = 1.
*&ld_maxint = 1000.
*&
*&do 3 times.
*&CALL FUNCTION 'QF05_RANDOM_INTEGER'
*&EXPORTING
*&  RAN_INT_MAX   = ld_maxint
*&  RAN_INT_MIN   = ld_minint
*&IMPORTING
*&  RAN_INT       =  ld_ranint
*&EXCEPTIONS
*&  INVALID_INPUT = 1
*&  OTHERS        = 2.
*&
*& WRITE:/ ld_ranint.
*&enddo.
*&***********************************************************************

*&---------------------------------------------------------------------*
*&      HAUPTPROGRAMM                                                  *
*&---------------------------------------------------------------------*
PERFORM initialisierung_wald.
DO p_aktion TIMES.
  PERFORM zeitschritt_simulieren.
ENDDO.

*&---------------------------------------------------------------------*
*&      UNTERPROGRAMME                                                 *
*&---------------------------------------------------------------------*


*&---------------------------------------------------------------------*
*&      Form  kein_feuer.
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM kein_feuer.

* Wenn 0 oder kleiner für Feuer gesetzt ist -> Ausgabe von normalen Wald

  IF p_feuer <= 0.

    WRITE: / 'Geben Sie bitte eine Zahl ein, die mehr als "0" beträgt.'.
  ENDIF.

ENDFORM.                    "kein_feuer

*&---------------------------------------------------------------------*
*&      Form  initialize_wald
*&---------------------------------------------------------------------*
*&       Startvorgang des Waldes
*&---------------------------------------------------------------------*

FORM initialisierung_wald.
  lv_zaehler_aktion = 0.

  WRITE:/ lv_zaehler_aktion , '. Schritt: Einfügen des Waldes.'.
  CLEAR lv_zaehler_aktion.

*Ursprünglichen Wald aufbauen
  PERFORM aufbau_wald.


*Ausgabe
  PERFORM display_wald.

ENDFORM.                   "starten_von_wald

*&---------------------------------------------------------------------*
*&      Form  zeitschritt_simulieren
*&---------------------------------------------------------------------*
*       Iterationsschritt ausführen
*----------------------------------------------------------------------*

FORM zeitschritt_simulieren.

  lv_zaehler_aktion = lv_zaehler_aktion + 1.

  WRITE:/ lv_zaehler_aktion , '. Schritt: Stadium nach ' , lv_zaehler_aktion , ' Iteration.'.

  WRITE:/ .

* Hier werden die weitern schritte ausgegeben


* Werte der alten Matrix übernehmen bzw. verändern wenn nötig

  LOOP AT lt_wald_old INTO ls_wald_old.

    IF ls_wald_old-wert = cv_frei.
      PERFORM feldaenderung_bei_wert_leer.

    ELSEIF ls_wald_old-wert = cv_baum.
      PERFORM feldaenderung_bei_wert_baum.

    ELSEIF ls_wald_old-wert = cv_brennender_baum.
      PERFORM feldaenderung_bei_wert_feuer.

    ENDIF.

  ENDLOOP.

* Ausgabe
  PERFORM display_wald.

ENDFORM.                    "zeitschritt_simulieren

*&---------------------------------------------------------------------*
*&      Form  feldaenderung_bei_wert_leer
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM feldaenderung_bei_wert_leer.
* Entscheiden ob Baum wächst oder Feld leer bleibt
  PERFORM get_zufallszahl USING p_wachs.

  IF lv_zufalls_zahl = 1.
    PERFORM ls_wald_new_fuellen USING cv_baum ls_wald_old-spalte ls_wald_old-zeile.
  ELSE.
    PERFORM ls_wald_new_fuellen USING cv_frei ls_wald_old-spalte ls_wald_old-zeile.
  ENDIF.

  INSERT ls_wald_new INTO TABLE lt_wald_new.
  CLEAR ls_wald_new.
ENDFORM.                    "feldaenderung_bei_wert_leer


*&---------------------------------------------------------------------*
*&      Form  feldaenderung_bei_wert_baum
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM feldaenderung_bei_wert_baum.
* Umliegende Felder prüfen, ob brennend oder nicht.
  PERFORM umliegende_felder_pruefen.

* Wenn kein brennender Baum umliegend, Feld unverändert.
  IF ls_wald_new-wert <> cv_brennender_baum.
    ls_wald_new = ls_wald_old.
  ENDIF.

  INSERT ls_wald_new INTO TABLE lt_wald_new.
  CLEAR ls_wald_new.
ENDFORM.                    "feldaenderung_bei_wert_baum

*&---------------------------------------------------------------------*
*&      Form  umliegende_felder_und_tree_auf_fire_prüfen
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*

*&---------------------------------------------------------------------*
*&      Gibt das feuer an die umligenden Bäume weiter und testet ob
*&      ein Baum verfügbar ist = Ob ein Baum da steht, ob er brennt und
*&      ob er nicht brennt.
*&---------------------------------------------------------------------*

FORM umliegende_felder_pruefen.
* Links von dem Aktiven Feld prüfen
  lv_spalte_links = ls_wald_old-spalte - 1.
  READ TABLE lt_wald_old WITH KEY spalte = lv_spalte_links zeile = ls_wald_old-zeile INTO ls_wald_old_chg.

  IF ls_wald_old_chg-wert = cv_brennender_baum.
    PERFORM ls_wald_new_fuellen USING cv_brennender_baum ls_wald_old-spalte ls_wald_old-zeile.
  ENDIF.

* Rechts von dem Aktiven Feld prüfen
  IF ls_wald_new-wert <> cv_brennender_baum.
    lv_spalte_rechts = ls_wald_old-spalte + 1.
    READ TABLE lt_wald_old WITH KEY spalte = lv_spalte_rechts zeile = ls_wald_old-zeile INTO ls_wald_old_chg.

    IF ls_wald_old_chg-wert = cv_brennender_baum.
      PERFORM ls_wald_new_fuellen USING cv_brennender_baum ls_wald_old-spalte ls_wald_old-zeile.
    ENDIF.
  ENDIF.

* Über dem Aktiven Feld prüfen
  IF ls_wald_new-wert <> cv_brennender_baum.
    lv_zeile_oben = ls_wald_old-zeile + 1.
    READ TABLE lt_wald_old WITH KEY spalte = ls_wald_old-spalte zeile = lv_zeile_oben INTO ls_wald_old_chg.

    IF ls_wald_old_chg-wert = cv_brennender_baum.
      PERFORM ls_wald_new_fuellen USING cv_brennender_baum ls_wald_old-spalte ls_wald_old-zeile.
    ENDIF.
  ENDIF.

* Unter dem aktuellen Feld prüfen
  IF ls_wald_new-wert <> cv_brennender_baum.
    lv_zeile_unten = ls_wald_old-zeile - 1.
    READ TABLE lt_wald_old WITH KEY spalte = ls_wald_old-spalte zeile = lv_zeile_unten INTO ls_wald_old_chg.

    IF ls_wald_old_chg-wert = cv_brennender_baum.
      PERFORM ls_wald_new_fuellen USING cv_brennender_baum ls_wald_old-spalte ls_wald_old-zeile.
    ENDIF.
  ENDIF.
ENDFORM.                    "umliegende_felder_und_tree_auf_fire_prüfen

*&---------------------------------------------------------------------*
*&      Form  feldaenderung_bei_wert_feuer
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM feldaenderung_bei_wert_feuer.

  DATA lv_baum_bool TYPE abap_bool.

  lv_baum_bool = abap_true.

  lv_spalte_links = ls_wald_old-spalte + 1.
  READ TABLE lt_wald_old WITH KEY spalte = lv_spalte_links zeile = ls_wald_old-zeile INTO ls_wald_old_chg.

  IF ls_wald_old_chg-wert = cv_baum.
    lv_baum_bool = abap_false.
  ENDIF.

* Rechts vom Aktiven Feld prüfen
  lv_spalte_rechts = ls_wald_old-spalte + 1.
  READ TABLE lt_wald_old WITH KEY spalte = lv_spalte_rechts zeile = ls_wald_old-zeile INTO ls_wald_old_chg.

  IF ls_wald_old_chg-wert = cv_baum.
    lv_baum_bool = abap_false.
  ENDIF.

* Über dem Aktiven Feld prüfen
  lv_zeile_oben = ls_wald_old-zeile - 1.
  READ TABLE lt_wald_old WITH KEY spalte = ls_wald_old-spalte zeile = lv_zeile_oben INTO ls_wald_old_chg.

  IF ls_wald_old_chg-wert = cv_baum.
    lv_baum_bool = abap_false.
  ENDIF.

* Unter dem Aktiven Feld prüfen
  lv_zeile_unten = ls_wald_old-zeile + 1.
  READ TABLE lt_wald_old WITH KEY spalte = ls_wald_old-spalte zeile = lv_zeile_unten INTO ls_wald_old_chg.

  IF ls_wald_old_chg-wert = cv_baum.
    lv_baum_bool = abap_false.
  ENDIF.

  IF lv_baum_bool = abap_true.
    PERFORM ls_wald_new_fuellen USING cv_frei ls_wald_old-spalte ls_wald_old-zeile.

  ELSE.
    ls_wald_new = ls_wald_old.
  ENDIF.

  INSERT ls_wald_new INTO TABLE lt_wald_new.
  CLEAR ls_wald_new.
ENDFORM.                    "feldändern_bei_wert_feuer

*&---------------------------------------------------------------------*
*&      Form  aufbau_wald
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM aufbau_wald.

  DO p_hoehe TIMES.
    lv_zaehler_zeile = lv_zaehler_zeile + 1.
*   Abstand zum linken Rand
    WRITE '        '.

    DO p_laenge TIMES.
      lv_zaehler_spalte = lv_zaehler_spalte + 1.

      PERFORM get_zufallszahl USING cv_zahl_zwei.
      IF lv_zufalls_zahl = 1.
        p_feuer = 100 / p_feuer.
        PERFORM get_zufallszahl USING p_feuer.
        IF lv_zufalls_zahl = 1.
          PERFORM ls_wald_new_fuellen USING cv_brennender_baum lv_zaehler_spalte lv_zaehler_zeile.
        ELSE.
          PERFORM ls_wald_new_fuellen USING cv_baum lv_zaehler_spalte lv_zaehler_zeile.
        ENDIF.
      ELSEIF lv_zufalls_zahl = 2.
        PERFORM ls_wald_new_fuellen USING cv_frei lv_zaehler_spalte lv_zaehler_zeile.
      ELSEIF lv_zufalls_zahl = 0.
        p_feuer = p_feuer / 100.
      ENDIF.
      INSERT ls_wald_new INTO TABLE lt_wald_new.
    ENDDO.
    CLEAR lv_zaehler_spalte.
  ENDDO.
ENDFORM.                    "aufbau_wald
*&---------------------------------------------------------------------*
*&      Form  ls_wald_new_fuellen
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->VALUE      text
*      -->(1)        text
*----------------------------------------------------------------------*
FORM ls_wald_new_fuellen USING iv_wert TYPE c iv_spalte TYPE i iv_zeile TYPE i.
  ls_wald_new-wert = iv_wert.
  ls_wald_new-spalte = iv_spalte.
  ls_wald_new-zeile = iv_zeile.
ENDFORM.                    "ls_wald_new_fuellen

*&---------------------------------------------------------------------*
*&      Form  get_zufallszahl
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->IV_ZAHL_LIMIT  text
*----------------------------------------------------------------------*

FORM get_zufallszahl USING iv_zahl_limit TYPE i.
  CALL FUNCTION 'QF05_RANDOM_INTEGER'
    EXPORTING
      ran_int_max   = iv_zahl_limit
      ran_int_min   = 1
    IMPORTING
      ran_int       = lv_zufalls_zahl
    EXCEPTIONS
      invalid_input = 2
      OTHERS        = 1.
ENDFORM.                    "get_zufallszahl




*&---------------------------------------------------------------------*
*&      Form  display_wald
*&---------------------------------------------------------------------*
*       Ausgabe
*----------------------------------------------------------------------*


FORM display_wald.
  LOOP AT lt_wald_new INTO ls_wald_new.
    IF ls_wald_new-zeile > lv_zeile_old.
      NEW-LINE.
      WRITE '               '.
    ENDIF.

    IF ls_wald_new-wert = cv_baum.
      WRITE ls_wald_new-wert COLOR 5.
    ELSEIF ls_wald_new-wert = cv_brennender_baum.
      WRITE ls_wald_new-wert COLOR 6.
    ELSE.
      WRITE ls_wald_new-wert.
    ENDIF.

    lv_zeile_old = ls_wald_new-zeile.
  ENDLOOP.

  lt_wald_old = lt_wald_new.

  CLEAR lv_zeile_old.

  CLEAR lt_wald_new.

  WRITE:/ .
  WRITE:/ .
ENDFORM.                    "display_wald

gesponsert
Stellenangebote auf ABAPforum.com schalten
kostenfrei für Ausbildungsberufe und Werksstudenten


Re: Waldbrand

Beitrag von ewx (Top Expert / 4782 / 294 / 628 ) »

Code: Alles auswählen.

IF schritt = 0.
  EXIT.
ENDIF.
Die Bäume wachsen während des Brandes sozusagen SOFORT nach...?!? ;)

Folgende Benutzer bedankten sich beim Autor ewx für den Beitrag:
drama


Re: Waldbrand

Beitrag von drama (ForumUser / 25 / 11 / 0 ) »
ewx hat geschrieben:

Code: Alles auswählen.

IF schritt = 0.
  EXIT.
ENDIF.
Die Bäume wachsen während des Brandes sozusagen SOFORT nach...?!? ;)
Nicht sofort. :)

Baum steht -> Baum brennt -> leeres Feld -> Baum steht

Wenn man aber bei:
p_wachs, 0 reinschreibt, werden gar keine Bäume nachwachsen.
Bis p_feuer oben, unten, links und rechts von dem brennenden Baum keinen Baum mehr findet, der noch nicht brennt (Diagonale Bäume werden nicht getestet).
Zuletzt geändert von drama am 05.02.2016 10:46, insgesamt 1-mal geändert.

Re: Waldbrand

Beitrag von ewx (Top Expert / 4782 / 294 / 628 ) »
Aber im ersten Schritt ist der Wald ja komplett grün...
Also ist seit Schritt 0 alles nachgewachsen?!

Re: Waldbrand

Beitrag von drama (ForumUser / 25 / 11 / 0 ) »
ewx hat geschrieben:Aber im ersten Schritt ist der Wald ja komplett grün...
Also ist seit Schritt 0 alles nachgewachsen?!
Ja, weil im Schritt 0 freie Felder sind.
Wenn ein Freies Feld da ist, wird ein Baum im nächsten Schritt da stehen :)

Also immer noch so:

Wenn ein Baum noch nicht brennt, fängt er das brennen an sobald ein Baum neben, ober oder unter ihm ist, der bereits brennt. :)

Nachwachsen tut ein Baum an einer zufälligen stelle die nicht mit einem "F" oder "T" belegt ist. Jedoch erst in dem Schritt nachdem das freie Feld angezeigt wurde. Was auch so sein soll. :)

Es ist also immer eine Lücke zwischen Baum und Feuer. :)

Re: Waldbrand

Beitrag von drama (ForumUser / 25 / 11 / 0 ) »
kann mir immer noch keiner helfen? :roll:

Re: Waldbrand

Beitrag von Josalla (ForumUser / 4 / 0 / 0 ) »
Ich muss ganz ehrlich sagen. Der Code verwirrt mich schon ein bisschen

Seite 1 von 1

Über diesen Beitrag


Unterstütze die Community und teile den Beitrag für mehr Leser und Austausch

Newsletter Anmeldung

Keine Beiträge verpassen! Wöchentlich versenden wir lesenwerte Beiträge aus unserer Community.
Die letzte Ausgabe findest du hier.
Details zum Versandverfahren und zu Ihren Widerrufsmöglichkeiten findest du in unserer Datenschutzerklärung.