report zsspring. ************************************************************************ * * Loesung fuer das SPRINGER Problem * 01.04.97 PAS Organisationsberatung * * BESCHREIBUNG : Berechnet alle Loesungen fuer das Springer Problem * und druckt das Ergebnis als Zugfolge (1,2,3..) aus. * HISTORY: * *"01 TTMMJJ name Text ************************************************************************ * S T R U K T U R E N ************************************************* DATA: BEGIN OF STR_SCHACHBRETT , A(16) type c value ' ', B(16) type c value ' ', C(16) type c value ' ', D(16) type c value ' ', E(16) type c value ' ', F(16) type c value ' ', G(16) type c value ' ', H(16) type c value ' ', END OF STR_SCHACHBRETT. * V A R I A B L E N *************************************************** DATA: VAR_ZEILE like sy-index, VAR_SPALTE like sy-index, VAR_EBENE(2) TYPE C, VAR_LOESUNG TYPE I. FIELD-SYMBOLS: . * P A R A M E T E R **************************************************** PARAMETERS: P_MAXLSG TYPE I DEFAULT 1. ************************************************************************ * H A U P T P R O G R A M M ************************************************************************ DO 8 TIMES. var_zeile = sy-index. DO 8 TIMES. var_spalte = sy-index. IF VAR_LOESUNG < P_MAXLSG. PERFORM LOESE_SPRINGER_PROBLEM USING VAR_ZEILE VAR_SPALTE. ENDIF. ENDDO. ENDDO. ************************************************************************ * U N T E R R O U T I N E N ************************************************************************ form loese_springer_problem using value(zeile) value(spalte). DATA: tmp_zeile like sy-index, tmp_spalte like sy-index, tmp_position TYPE I. IF ZEILE > 0 AND ZEILE < 9 AND "Nur weiter, wenn Springer SPALTE > 0 AND SPALTE < 9 AND "noch auf dem Brett VAR_LOESUNG < P_MAXLSG. tmp_position = ( ( ( zeile - 1 ) * 16 ) + ( SPALTE * 2 ) - 2 ). ASSIGN STR_SCHACHBRETT+TMP_POSITION(2) TO . IF = SPACE. VAR_EBENE = VAR_EBENE + 1. write var_ebene(2) to str_schachbrett+tmp_position(2). IF VAR_EBENE = 64. perform ausgeben_loesung. ELSE. tmp_zeile = zeile + 1. tmp_spalte = spalte + 2. perform loese_springer_problem using tmp_zeile tmp_spalte. tmp_zeile = zeile + 2. tmp_spalte = spalte + 1. perform loese_springer_problem using tmp_zeile tmp_spalte. tmp_zeile = zeile + 2. tmp_spalte = spalte - 1. perform loese_springer_problem using tmp_zeile tmp_spalte. tmp_zeile = zeile + 1. tmp_spalte = spalte - 2. perform loese_springer_problem using tmp_zeile tmp_spalte. tmp_zeile = zeile - 1. tmp_spalte = spalte - 2. perform loese_springer_problem using tmp_zeile tmp_spalte. tmp_zeile = zeile - 2. tmp_spalte = spalte - 1. perform loese_springer_problem using tmp_zeile tmp_spalte. tmp_zeile = zeile - 2. tmp_spalte = spalte + 1. perform loese_springer_problem using tmp_zeile tmp_spalte. tmp_zeile = zeile - 1. tmp_spalte = spalte + 2. perform loese_springer_problem using tmp_zeile tmp_spalte. ENDIF. WRITE ' ' TO STR_SCHACHBRETT+TMP_POSITION(2). VAR_EBENE = VAR_EBENE - 1. ENDIF ENDIF. ENDFORM. ************************************************************************ FORM ausgeben_loesung. DATA: TMP_POSITION TYPE I. var_Loesung = var_loesung + 1. WRITE: / VAR_LOESUNG, '. Loesungen'. skip 1. PERFORM AUSGEBEN_ZEILE USING STR_SCHACHBRETT-A. PERFORM AUSGEBEN_ZEILE USING STR_SCHACHBRETT-B. PERFORM AUSGEBEN_ZEILE USING STR_SCHACHBRETT-C. PERFORM AUSGEBEN_ZEILE USING STR_SCHACHBRETT-D. PERFORM AUSGEBEN_ZEILE USING STR_SCHACHBRETT-E. PERFORM AUSGEBEN_ZEILE USING STR_SCHACHBRETT-F. PERFORM AUSGEBEN_ZEILE USING STR_SCHACHBRETT-G. PERFORM AUSGEBEN_ZEILE USING STR_SCHACHBRETT-H. ENDFORM. ************************************************************************ FORM AUSGEBEN_ZEILE USING ZEILE. DATA: TMP_POSITION TYPE I. ULINE AT 1(41). WRITE: / '|'. DO 8 TIMES. TMP_POSITION = ( SY-INDEX * 2 ) - 2 . ASSIGN ZEILE+TMP_POSITION(2) TO . WRITE: , '|'. ENDDO. SKIP. ULINE AT 1(41). ENDFORM.