![]() |
Ausgabe eines Dynamischen Arrays in ein Memofeld?
Halli Hallo und Frohes neues Jahr! :)
Ich hab da son Problem (genau genommen nicht nur eins): Ich muss ein Programm für Sortieralgorithmen schreiben (klappt auch soweit alles). Nun soll ich jedoch auch die Zwischenschritte des Algorithmus mit angeben. Also wie das Array nach dem 1. durchlauf, nach dem 2. usw. bis zum sortierten Array aussieht. Dies soll ich mit einem RichEdit- oder Memo-Feld machen. Leider hab ich da keine Ahnung von... Ich hab versucht, das gesamte Array in dieses Memo-Feld zu packen, aber das geht nicht, da das dyn. Array nicht die gleiche weiß-ich-nich-wie-es-heißt hat (Also sowas wie wenn man versucht in nem editfeld nen integer auszugeben, wo man ja noch IntToStr machen muss): Memo1.Lines.Add(Feld) //Feld heißt das dyn. Array Mit einer for-schleife geht es aber auch nicht, weil dann ja die Array-Indices untereinander ausgegeben werden, sie sollen jedoch NEBENeinander ausgegeben werden. Und nun bin ich am Ende meines begrenzten Fachwissen und Google hat sich auch gegen mich verschworen :( Kann mir jemand helfen? (Nebenbei noch eine Frage, die es sich aber nicht lohnt einen neuen Thread aufzumachen: Wie kann ich die Werte einer Listbox vertauschen, sodass der Unterste Wert der erste wird usw.? Denn die Ausgabe meines BubbleSorts sortiert die Liste von hohen Zahlen zu niedrigen... (Also 9-9-7-3-2 statt 2-3-7-9-9) Danke schonmal :) |
Re: Ausgabe eines Dynamischen Arrays in ein Memofeld?
Hallo,
prinzipiell sollte es in etwa so gehen.
Delphi-Quellcode:
Grüße
s:='';
for i:=0to high(feld) do s:=s+feld[i]; memo1.lines.add(s); Klaus |
Re: Ausgabe eines Dynamischen Arrays in ein Memofeld?
Und wegen der falschen Sortierung sollte es reichen das > in ein < zu verändern oder umgekehrt, je nach Code. :zwinker:
|
Re: Ausgabe eines Dynamischen Arrays in ein Memofeld?
Danke für die Antworten :)
@Klaus01: Meinst du so? So Klappts aber irgendwie nicht.
Delphi-Quellcode:
{ MinSort: }
procedure TForm1.BitBtnMinSortClick(Sender: TObject); var i,j,s: Integer; //Zaehlvariablen Temp,Min: Integer; //Zwischenspeicher, Minimum ZeitAnfang,ZeitEnde: real; CounterVertauschungen: Integer; begin CounterVertauschungen:=0; Buttons_Verstecken; ZeitAnfang := Time; s:=' '; <-----"Inkompatible Typen Int und Char" for i := 0 to High(Feld) do begin Min := i; for j := i + 1 to High(Feld) do if Feld[j] < Feld[Min] then Min := j; Temp := Feld[Min]; Feld[Min] := Feld[i]; Feld[i] := Temp; s:=s+feld[i]; <----- MemoZwischenschritte.lines.add(IntToStr(s)); <----- CounterVertauschungen:=CounterVertauschungen + 1; ListboxSortiert.Items.Add(IntToStr(Temp)); //Ausgabe end; LblAuswahl.Caption:='Auswahl:'+ #13+#10+'MinSort'; ZeitEnde := Time; LblEdtSortierzeit.Text := FloatToStrF((ZeitEnde-ZeitAnfang)*24*60*60,ffFixed,10,2); Ausgabe_GrafischeDarstellung; If CheckBoxZwischenschritte.Checked=true then LblEdtSortierzeit.Text:='---'; LblEdtVertauschungen.Text:=IntToStr(CounterVertauschungen); LblEdtZuweisungen.Text:=IntToStr(3+(CounterVertauschungen*8)+6); end; Zitat:
|
Re: Ausgabe eines Dynamischen Arrays in ein Memofeld?
Deklarier s mal als String und ändere die Zeile
Zitat:
Delphi-Quellcode:
s:=s+IntToStr(feld[i]);
|
Re: Ausgabe eines Dynamischen Arrays in ein Memofeld?
Und nimm in der Zeile danach das IntToStr weg. Es wandelt ja einen Integerwert in einen String um. s ist aber bereits ein String. :zwinker:
// EDIT: Äh, dachte ich... Ich ergänze: s muss ein String sein. :mrgreen: |
Re: Ausgabe eines Dynamischen Arrays in ein Memofeld?
Dankeschön. Klappt auch!
Nun ist nur noch das Problem da: Es zeigt zwar die sortierten Zahlen an, nicht aber dahinter die, die noch sortiert werden sollen. Hab einiges ausprobiert, komme aber irgendwie nicht auf die Lösung?! s:=s+IntToStr(feld[i]) + ???; |
Re: Ausgabe eines Dynamischen Arrays in ein Memofeld?
Du sollest ja auch nicht pro Sortierschritt das aktuelle Feld ausgeben,
sonder das ganze Array in einer eigenen Schleife durchlaufen und in dieser Schleife die Felder ausgeben. Grüße Klaus |
Re: Ausgabe eines Dynamischen Arrays in ein Memofeld?
Zitat:
|
Re: Ausgabe eines Dynamischen Arrays in ein Memofeld?
Du gehst doch bereits mit der äußeren for-Schleife (i) das Feld durch. Genau das selbe machst du einfach noch einmal mit j. Vorher setzt du s auf einen leeren String und nach der Schleife gibst du ihn aus.
|
Re: Ausgabe eines Dynamischen Arrays in ein Memofeld?
Aber das geht auch nich richtig :(
Delphi-Quellcode:
{ MinSort: }
procedure TForm1.BitBtnMinSortClick(Sender: TObject); var i,j: Integer; //Zaehlvariablen s: String; Temp,Min: Integer; //Zwischenspeicher, Minimum ZeitAnfang,ZeitEnde: real; CounterVertauschungen: Integer; begin CounterVertauschungen:=0; Buttons_Verstecken; ZeitAnfang := Time; s:=' '; for i := 0 to High(Feld) do begin Min := i; for j := i + 1 to High(Feld) do if Feld[j] < Feld[Min] then Min := j; Temp := Feld[Min]; Feld[Min] := Feld[i]; Feld[i] := Temp; If CheckBoxZwischenschritte.Checked=true then <---so? for j:=0 to High(Feld) do s:=s+IntToStr(feld[j]); MemoZwischenschritte.lines.add(s); CounterVertauschungen:=CounterVertauschungen + 1; ListboxSortiert.Items.Add(IntToStr(Temp)); //Ausgabe end; LblAuswahl.Caption:='Auswahl:'+ #13+#10+'MinSort'; ZeitEnde := Time; LblEdtSortierzeit.Text := FloatToStrF((ZeitEnde-ZeitAnfang)*24*60*60,ffFixed,10,2); Ausgabe_GrafischeDarstellung; If CheckBoxZwischenschritte.Checked=true then LblEdtSortierzeit.Text:='---'; LblEdtVertauschungen.Text:=IntToStr(CounterVertauschungen); LblEdtZuweisungen.Text:=IntToStr(3+(CounterVertauschungen*8)+6); end; |
Re: Ausgabe eines Dynamischen Arrays in ein Memofeld?
Zitat:
|
Re: Ausgabe eines Dynamischen Arrays in ein Memofeld?
Zitat:
|
Re: Ausgabe eines Dynamischen Arrays in ein Memofeld?
Schon, aber du gehst in jedem Sortierschritt das ganze Array durch und gibst es aus, setzt aber nicht jedes Mal vorher s auf den leeren String (der auch gar kein Leerzeichen enthalten muss).
D.h. der String wird in der Schleife i immer länger und länger und der Anfang wird jedes Mal wieder ausgegeben. ;-) |
Re: Ausgabe eines Dynamischen Arrays in ein Memofeld?
Ich habe in Deinem Quelltext mal etwas herumeditiert.
Delphi-Quellcode:
Grüße
{ MinSort: }
procedure TForm1.BitBtnMinSortClick(Sender: TObject); var i,j: Integer; //Zaehlvariablen s: String; Temp,Min: Integer; //Zwischenspeicher, Minimum ZeitAnfang,ZeitEnde: real; CounterVertauschungen: Integer; begin CounterVertauschungen:=0; Buttons_Verstecken; ZeitAnfang := Time; for i := 0 to High(Feld) do begin Min := i; for j := i + 1 to High(Feld) do if Feld[j] < Feld[Min] then Min := j; Temp := Feld[Min]; Feld[Min] := Feld[i]; Feld[i] := Temp; If CheckBoxZwischenschritte.Checked then <---so? begin s:=''; for j:=0 to High(Feld) do s:=s+IntToStr(feld[j]); MemoZwischenschritte.lines.add(s); end; CounterVertauschungen:=CounterVertauschungen + 1; ListboxSortiert.Items.Add(IntToStr(Temp)); //Ausgabe end; LblAuswahl.Caption:='Auswahl:'+ #13+#10+'MinSort'; ZeitEnde := Time; LblEdtSortierzeit.Text := FloatToStrF((ZeitEnde-ZeitAnfang)*24*60*60,ffFixed,10,2); Ausgabe_GrafischeDarstellung; If CheckBoxZwischenschritte.Checked=true then LblEdtSortierzeit.Text:='---'; LblEdtVertauschungen.Text:=IntToStr(CounterVertauschungen); LblEdtZuweisungen.Text:=IntToStr(3+(CounterVertauschungen*8)+6); end; Klaus |
Re: Ausgabe eines Dynamischen Arrays in ein Memofeld?
Boah, Klasse, Danke :) :) :)
Vielen, Vielen Dank an Alle :) |
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:01 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 by Thomas Breitkreuz