![]() |
AW: Sortieren und kombinieren von Längen
@jfheins:
Danke für den Tipp. Tatsächlich ist es das Untermengen-Problem. Wäre nie darauf gekommen dass das ein berümtes Problem der Informatik ist. Leider gibt es im i-net sehr wenig Infos darüber. Bisherige interessante Links(abgesehen von deinen) sind: ![]() ![]() @Jens Im i-net googeln ist eins, aber Nägel mit Köpfen machen ist was anderes. Habe bisher leider noch nix (mit Delphi) machen können ausser deinen Code zu überfliegen. Verstanden hab ich den Schleifenaufbau noch nicht ganz aber das kommt bestimmt wenn ich am Wochenende mal wieder Zeit fürs programmieren habe. Wie die Objekte aussehen sollen ist mir auch noch schleierhaft, das kommt aber nur daher weil ich mir nie selber welche definiere. Vielleicht hast du da noch einen Tipp. Dann könnte ich schneller ein Testprogramm schreiben und dir ne Rückmeldung geben. Gruß andone68 |
AW: Sortieren und kombinieren von Längen
Morgen andone68,
ich habe mein altes Programm mal auseinandergenommen, was nicht so einfach (und zeitaufwendig!) war. Es war eben noch TP 7 und ich selbst habe damals noch nicht so sauber programmiert. Es lieferte aber dieselben Ergebnisse wie ein teures Profiprogramm. Ich habe Sonntag und Montag versucht das auf Objektlisten umzustellen, was aber nicht so einfach war. Durchdenk Dir das Problem noch mal, dann guckn wir gemeinsam. Gruss Jens P.S.: Der Trick daran ist, dass vorab nach Große sortiert wird, die Kombinatorik wird dadurch um ein vielfaches vereinfacht. Es kommt aber trotzdem ein gutes Ergebnis raus. |
AW: Sortieren und kombinieren von Längen
Konnte jetzt endlich weitermachen und hab als erstes mal die Beispielliste sortiert
Delphi-Quellcode:
Jetzt muss ich "nur noch" deinen Code testen
unit KombiMain;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TForm1 = class(TForm) Label1: TLabel; Label2: TLabel; procedure FormCreate(Sender: TObject); private { Private-Deklarationen } public { Public-Deklarationen } end; type TListe = record // Teilstück Lg : Integer; // Länge Bez : String; // Bezeichnung end; var Form1: TForm1; // Listen der Teilstücke OListe: array of TListe; // Originalliste (also so wie eingegeben/unsortiert) SListe: array of TListe; // Sortierte Liste implementation {$R *.dfm} Procedure ListeEinlesen; begin SetLength(oListe, 1); oListe[ 0].Lg:=86; oListe[ 0].Bez:='1/1'; SetLength(oListe, 2); oListe[ 1].Lg:=41; oListe[ 1].Bez:='2/1'; SetLength(oListe, 3); oListe[ 2].Lg:=58; oListe[ 2].Bez:='2/2'; SetLength(oListe, 4); oListe[ 3].Lg:=87; oListe[ 3].Bez:='2/3'; SetLength(oListe, 5); oListe[ 4].Lg:=86; oListe[ 4].Bez:='2/4'; SetLength(oListe, 6); oListe[ 5].Lg:=78; oListe[ 5].Bez:='2/5'; SetLength(oListe, 7); oListe[ 6].Lg:=86; oListe[ 6].Bez:='2/6'; SetLength(oListe, 8); oListe[ 7].Lg:=77; oListe[ 7].Bez:='2/7'; SetLength(oListe, 9); oListe[ 8].Lg:=83; oListe[ 8].Bez:='2/8'; SetLength(oListe,10); oListe[ 9].Lg:=90; oListe[ 9].Bez:='3/1'; SetLength(oListe,11); oListe[10].Lg:=44; oListe[10].Bez:='3/2'; SetLength(oListe,12); oListe[11].Lg:=57; oListe[11].Bez:='3/3'; SetLength(oListe,13); oListe[12].Lg:=73; oListe[12].Bez:='3/4'; SetLength(oListe,14); oListe[13].Lg:=72; oListe[13].Bez:='3/5'; SetLength(oListe,15); oListe[14].Lg:=65; oListe[14].Bez:='3/6'; SetLength(oListe,16); oListe[15].Lg:=65; oListe[15].Bez:='3/7'; SetLength(oListe,17); oListe[16].Lg:=64; oListe[16].Bez:='3/8'; SetLength(oListe,18); oListe[17].Lg:=60; oListe[17].Bez:='3/9'; SetLength(oListe,19); oListe[18].Lg:=73; oListe[18].Bez:='3/10'; SetLength(oListe,20); oListe[19].Lg:=72; oListe[19].Bez:='3/11'; end; procedure SortiereListe; var i,j,k : Integer; LgTemp : integer; BezTemp : string; N : Integer; // Anzahl Listeneinträge begin n:=Length(oListe); SetLength(sListe,n); for i:=1 to n do begin // sliste:= oListe (kopieren) sListe[i-1].Lg := oListe[i-1].Lg; sListe[i-1].Bez := oListe[i-1].Bez; end; // BubbleSort For i:=0 to N-2 do begin k := i; // Position des größten Elementes initialisieren For j := i+1 to N-1 do // Nun wird das größte Elemente im Array [i..N-1] If sListe[k].Lg < sListe[j].Lg Then// gesucht und in k die Position gemerkt k := j; // '<' mit '>' vertauschen, wenn AUFsteigend sortiert wird. // k enthält die Position des größten Elementes [i..N] If i <> k then Begin// Vertauschen LgTemp := sListe[i].lg; sliste[i].Lg := sliste[k].Lg; sliste[k].Lg := LgTemp; BezTemp := sListe[i].Bez; sliste[i].Bez := sliste[k].Bez; sliste[k].Bez := BezTemp; End; End; end; procedure TForm1.FormCreate(Sender: TObject); Var s : string; i : Integer; n : Integer; t : String; begin ListeEinlesen; SortiereListe; // sListe ist jetzt sortiert n:=Length(oListe); t:=''; for i:=0 to n-1 do begin Str(oliste[i].Lg,s); t:=t+s+' - '+oListe[i].Bez+chr(10); end; Label1.Caption:=t; t:=''; for i:=0 to n-1 do begin Str(sliste[i].Lg,s); t:=t+s+' - '+sListe[i].Bez+chr(10); end; Label2.Caption:=t; end; end. Wie er funktioniert hab ich zwar immer noch nicht ganz verstanden, werde mich aber dazu noch melden. |
AW: Sortieren und kombinieren von Längen
TList oder TObjectList hat eine Sortiermethode Sort. Wie diese genau functioniert steht in einigen Forenbeiträgen drin. Welche Delphiversion benutzt Du?
![]() |
AW: Sortieren und kombinieren von Längen
Zitat:
|
AW: Sortieren und kombinieren von Längen
Benutze Delphi 6PE
Profil wird ausgeüllt, Danke für den Hinweis |
Alle Zeitangaben in WEZ +1. Es ist jetzt 15:45 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz