Zum Inhalt springen

ABAP: ITAB in ITAB speichern?


Ifrit

Empfohlene Beiträge

Hallo zusammen.,

ich habe grade angefangen ABAP zu lernen.

Bisher habe ich Java, C und PHP programmiert. Mit SQL habe ich auch erfahrungen, will heissen Tabellen sind mir nicht fremd.

und wie ich da ein simples 2-dimensionales Array erzeuge is mir klar, zumindest in den genannten sprachen.

Letztens habe ich mir in PHP einen Sudoku-Generator geschrieben und den wollte ich zu Übungszwecken in ABAP portieren in Form eines Reports.

Also erzeugen des 9x9 Feldes, paar Eingabefelder einfügen und dann die Eingaben überprüfen.

Allerdings scheitere ich schon am 9x9 Feld. ich krieg in die Y-Tabelle immer nur die letzte Zahl von X rein und nicht das ganze X. Liegt der fehler in der Definition von Y, der Übergabe oder in der Ausgabe?


REPORT Z_SUDOKU .


data:

  begin of X occurs 0,

    x1 type i,

  end of X,


  begin of Y occurs 0,

    y1 like X,

  end of Y.


data: a type i.


************************************************************************

* Initialisierung

************************************************************************

initialization.

do 9 times.

* X füllen mit  zufälligen a in X

  do 9 times.    

    perform rand using a.

    append a to X.

  enddo.

* X ausgeben  

  write: / 'X:'.

  loop at X from 1 to 9.

    write X.

  endloop.

* X in Y einfügen  

  append X to Y.

* X wieder leeren  

  loop at X from 1 to 9.

    delete X.

  endloop.

enddo.


************************************************************************

* Ausgabe des Ergebnisses

************************************************************************

start-of-selection.

write: /, / 'Y:'.

loop at Y from 1 to 9.

  write Y.

endloop.


************************************************************************

* Zufallsgenerator 1-9 (aus dem Fachinformatiker-Forum)

************************************************************************

form rand using number.

  data: ergebnis LIKE QF00-RAN_INT.


  CALL FUNCTION 'QF05_RANDOM'.


  CALL FUNCTION 'QF05_RANDOM_INTEGER'

  EXPORTING

  RAN_INT_MAX = 9

  RAN_INT_MIN = 1

  IMPORTING

  RAN_INT = ergebnis.

  number = ergebnis.

endform.

die ganzen überprüfungen ob zahlen schon vorhanden oder nicht sind da natürlich noch nicht drin, weil es bringt ja nix ein 9x9 feld überprüfen zu wollen,w enn ich nichtmal eins erzeugen kann ;)

ich hab mit dem gedanken gespielt eine interne tabelle zu machen mit 9 spalten, aber eigentlich wäre mir meine variante lieber, da ich das ganze eventuel auch mit 4x4, 16x16 oder 25x25 machen möchte... also dynamisch indem ich eine zahl ändere, nämlich die Größe... bei PHP hat das wunderbar geklappt.

MfG und danke fürs nachdenken

Ifrit

Link zu diesem Kommentar
Auf anderen Seiten teilen

append X to Y.

das übergibt die kopfzeile der tabelle X...

der ganze datenbereich ist in X[]...

schau dir das ganze mal im debugger an...

am besten machst du alles ohne occurs 0. damit solltest du keine kopfzeile haben (die deklarierst du extra) damit kommts dann auch nich wieder zu solchen verwechslungen ;)

oder aber:

loop at X.

append X to Y.

endloop.

sollte auch tun, mein miniSAP started grad erst, ich schau dann mal nach ;)

Link zu diesem Kommentar
Auf anderen Seiten teilen

Danke für die Hinweise, werde mal sehen ob ich das so hinkriege.

Und die Zufallsfunktion... wie dasteht habe ich die hier aus dem forum gefunden.

Und ja, ich hab schon festgestellt, dass die Zeilen nicht sonderlich variieren, aber es ist erstmal was ;)

eigentlich muss ich das ganze sowieso anders machen, da das mit nem Zufallsgenerator nich wirklich funktioniert, da ich nicht von 1-9 generieren kann, sondern meist irgendwelche Zahlen in der Liste fehlen(ausser gaaanz am anfang) :D

In PHP hab ich das so gelöst, dass jedes der 81 felder ein Array hat von 1-9 beinhaltet und wenn eine Zahl gesetzt wird, wird diese Zahl aus dem Array in allen Feldern der Spalte, Zeile und des kleinen Quadrats entfernt. Dann wird geschaut wo die wenigsten drin stehen und dort wird aus dem Array zufällig eine Zahl ausgewählt, in das Feld geschrieben und wieder aus allen aderen Arrays in Zeile, Spalte und kleinen Quadrat gelöscht und so weiter und so weiter.

Das ist noch nicht der Optimal Algo, aber er funktioniert. Ich denke drüber nach, das nicht Felderweise mit 1-9 zu belegen, sondern Zeilen/spalten/kleinesQuadratweise und dann für jedes Feld extra abzugleichen. Ob das besser ist, werde ich sehen, wenns fertig ist ^^.

Und welcher in ABAP am besten ist... irgendwann find ichs raus ^^

Link zu diesem Kommentar
Auf anderen Seiten teilen

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...