Hallo liebes Forum,
ich arbeite grad an einem komplizierten Problem, aber irgendwie fehlt mir noch die zündende "Einstiegsidee".
Und zwar soll aus einem TStringgrid heraus eine mathematische Vollvariation aller denkbaren Kombinationen von Möglichkeiten erzielt werden.
Ich erkläre es am besten an einem Beispiel.
So sähe der Grid mit Einträgen aus:
Jede Spalte kann immer nur den gleichen Wert eingetragen haben (bzw. überhaupt nur einen Buchstaben).
Jetzt sollen alle Kombinationen der Buchstabenreihen von oben nach unten errechnet werden (insgesamt sind es 12 --> leicht auszurechnen, da nur Multiplikation der Anzahl Einträge je Zeile, also 1*2*3*2).
Das Problem ist jetzt -
welche Reihenkombinationen ganz genau gibt es?
Die Berechnung hangelt sich dabei von Zeile zu Zeile im Grid und arbeitet sowohl mit den Werten, die darin stehen als auch der Anzahl der Werte je Spalte.
Grafisch skizziert sieht der Rechenvorgang so aus:
1. Die Werte aus Zeile 1 werden nacheinander in eine Tabelle gesetzt (hier nur ein Wert "b").
2. Entsprechend der Anzahl der Werte aus Zeile 2 wird die erste Zeile vervielfacht und nebeneinandergeschrieben (in Beispiel zweimal, da Werte "b" und "c" - gelb markiert).
3. Darunter wird je Vervielfachung ein Wert der Zeile 2 geschrieben (im Beispiel "b" und "c").
4. Der gesamte jetzt existierende Block wird wieder entsprechend der Anzahl der Werte der nächsten Zeile (3) vervielfacht und nebeneinandergeschrieben (in Beispiel dreimal, da Werte "a", "b" und "c" - grün markiert).
5. Darunter jetzt wieder je Vervielfachung ein Wert der Zeile 3 gesetzt...
usw. bis zur letzten Zeile.
Wenn dann die letzte Zeile ausgerechnet wurde, müsste man alle Möglichkeiten ermittelt haben.
Blau ist übrigens immer das markiert, was nach der Multiplikation einer Zeile hinzukommt und was genau den Spalteninhalten je Zeile entspricht.
In obigen Beispiel ist´s natürlich noch einfach, da übersichtlich und nur 4 Zeilen. Die Reihenanzahl ändert sich aber drastisch nach oben, wenn es schon 10 oder 12 Zeilen im Stringgrid werden, wo Daten drin stehen.
Die Komplikation besteht imo u. a. darin, dass Delphi erstmal erkennen muss, wieviel/welche Einträge im Grid in einer Zeile belegt sind (leere Felder ignorieren). Dann immer den gesamten schon vorhandenen Block je dieser Anzahl kopieren und je Block wieder die neuen Werte unten anfügen usw.
Habt Ihr einen Vorschlag, wie man an das Problem herangehen könnte?
Herzliche Grüße
Efrel
Moderiert von
Narses: Bilder als Anhang hochgeladen.