![]() |
edits sortier darstellen?
Hey,
Ich möchte diese Edit´s sortieren. Bzw beim kleinsten anfangen und dann fortlaufen. z.B. 12 15 16 10 12,5 13,1 18 sind die edits und die sollen dann so angezeigt werden: 10 12,5 13,1 18 12 15 16 (angefangen beim kleinsten)
Delphi-Quellcode:
begin
inc(n_wert); if n_wert=1 then Edit3.Text:= FormatFloat('0.00',y_wert); if n_wert=2 then Edit4.Text:= FormatFloat('0.00',y_wert); if n_wert=3 then Edit5.Text:= FormatFloat('0.00',y_wert); if n_wert=4 then Edit6.Text:= FormatFloat('0.00',y_wert); if n_wert=5 then Edit7.Text:= FormatFloat('0.00',y_wert); if n_wert=6 then Edit8.Text:= FormatFloat('0.00',y_wert); if n_wert=7 then Edit9.Text:= FormatFloat('0.00',y_wert); if n_wert=8 then Edit10.Text:=FormatFloat('0.00',y_wert); if n_wert=9 then Edit15.Text:=FormatFloat('0.00',y_wert); if n_wert=9 then |
AW: edits sortier darstellen?
Ich glaube kaum, dass Du Edits sortieren möchtest. Überleg Dir einmal, was genau Du willst, dann bist Du der Lösung schon ein ganzes Stück näher.
|
AW: edits sortier darstellen?
Das Forum quillt nahe zu über mit Fragen nach "Zahlen sortieren". Hast du die schon alle durchgeackert und bist auf kein verwendbares Ergebnis gestoßen?
|
AW: edits sortier darstellen?
ich finde immer nur etwas zum thema memo sortieren.
ok edits sortieren ist evtl. falsch ausgedrückt. ich möchte die Werte die in den Edits eingetragen werden sortieren. |
AW: edits sortier darstellen?
Man sortiert keine VCL-Controls, sondern höchstens deren dargestellte Inhalte *WinkMitDemZaunpfahl*
|
AW: edits sortier darstellen?
ah wie schon geschrieben eben:
Edits sortieren ist evtl. falsch ausgedrückt ich möchte die Werte in den Edits sortieren. Also nehmen wir an ich habe die Werte: Edit1:12 Edit2:15 Edit3:16 Edit4:10 Edit5:12,5 Edit6:13,1 Edit7:18 in je einem Edit stehen dann möchte ich das sie beim kleinsten angefangen in den Edit angezeigt werden. Aber ihre Reihenfolge beibehalten. Edit110 Edit112,5 Edit113,1 Edit118 Edit112 Edit115 Edit116 Ist das möglich so? |
AW: edits sortier darstellen?
OK, scheinbar hab ich eine bessere Suchfunktion.
Hier ein Beispiel mit Integer-Werten, das lässt sich aber ganz einfach auch auf Real-Werte abbilden: ![]() |
AW: edits sortier darstellen?
Ja, wandle die Inhalte in Zahlen um und pack diese in ein Array oder eine Liste. Dieses Array/diese Liste sortierst Du dann und gibst es wieder aus... fertig.
|
AW: edits sortier darstellen?
was auf der Seite steht sortiert doch alle Werte, aber ich möchte doch nur den kleinsten haben und dann die reihenfolge beibehalten?
oder ich versteh das was da steht nicht =/ |
AW: edits sortier darstellen?
:?::gruebel: Willst Du nun sortieren oder nicht?
|
AW: edits sortier darstellen?
Also möchtest Du so etwas:
22,44,12,28,85,67 => 12,22,44,28,85,67 ? Dann nimm eine Liste, trage die Werte ein, suchen den kleinsten Eintrag, gib ihn aus, entferne ihn aus der Liste, gib die restlichen Listeninhalte aus. Gruß K-H |
AW: edits sortier darstellen?
nein ich möchte nur den kleinesten Wert heraussuchen. Und von dort die Werte anzeigen lassen.
also: 6 / 3 / 1 / 4 / 11 / 14 und das dann angefangen bei 1 => 1 / 4 / 11 / 14 / 6 / 3 |
AW: edits sortier darstellen?
Auch kein Problem: Liste erstellen, Werte eintragen, Minimum ermitteln und dessen Index merken, ab diesem Index alle Werte ausgeben, wenn Index > 0, dann ab 0 bis ausschließlich Index alle restlichen Werte ausgeben.
|
AW: edits sortier darstellen?
Es gibt im Delphi eine Funktion Namens MinValue.
|
AW: edits sortier darstellen?
ähh ok. (<- Für Angänger bitte)
also ich erstelle eine Listbox. und wie bekomm ich die dann da nochmal rein? listbox1.add(Edit1); geht irgendwie nicht und wenn ich sie dann drin habe muss ich mit Min(.... |
AW: edits sortier darstellen?
Ich habe Liste gesagt, nicht ListBox. Statt einer Liste kannst Du aber auch ein Array nehmen.
|
AW: edits sortier darstellen?
ähm kann es sein das (*räusper* benutze lazarus) keine Liste gibt?
|
AW: edits sortier darstellen?
Hier mal ein kleiner Test:
Delphi-Quellcode:
Liefert Ergebnis : 10
uses Math;
.... ShowMessage(FloatToStr(MinValue([12, 15, 16, 10, 12.5, 13.1, 18]))); |
AW: edits sortier darstellen?
Du musst noch weiter zurück zum Anfang und erklären was das Ganze eigentlich soll.
Bislang lässt sich nur erkennen dass du mehrere Flieskommazahlen in Edit-Felder hast und diese auf unlogische Art und Weise umsortieren willst. Allein schon die Tatsache, dass du für mehrere gleich wichtige Zahlen jeweils ein eigenes Editfeld benützt ist eigentlich schon unlogisch. Es widerspricht der normalen Denkweise eines Programmierers. Wenn man einen Sortieralgorithmus anwendet, dann ist es egal wie viele Dinge man sortiert. Ob 10, 100 oder 1000 - der Sortieralgorithmus (üblicherweise ![]() Da aber die Anzahl der zu sortierenden Elemente offen ist, ist es für uns unverständlich warum die Daten in Editfeldern vorliegen. |
AW: edits sortier darstellen?
Schön, was soll man aber damit nun anfangen? Ich habe das eben Gesagte einmal grob skizziert (wieder ungetestet):
Delphi-Quellcode:
Danach solltest Du wissen, an welcher Stelle im Array die kleinste Zahl steht. Nun musst Du nur noch in maximal 2 Schleifen die Werte wieder ausgeben.
var
(* Array mit 10 ganzen Zahlen *) Arr: array[1..10] of integer; (* Variable für die kleinste Zahl im Array *) Minimum: integer; (* Variable für den Index der kleinsten Zahl innerhalb des Array *) IndexOfMinimum: integer; (* Laufvariable für die Schleife *) i: integer; begin (* Initial setzen wir Minimum sowie dessen Index auf das erste Element im Array *) Minimum := Arr[Low(Arr)]; IndexOfMinimum := Low(Arr); (* Nun den Rest des Array durchgehen, vergleichen und Variablen ggf. anpassen *) for i := IndexOfMinimum + 1 to High(Arr) do if Arr[i] < Minimum then begin Minimum := Arr[i]; IndexOfMinimum := i; end; end; |
AW: edits sortier darstellen?
@ sx2008: Also ich habe ein Messgerät und machte 8 Messungen wo ich jede Messung in ein Edit anzeigen lasse.
Nun kommen Werte wie z.B. 3 / 5 / 11 / 15 / 2 / 5 / 9 / 12 raus und und die Darstellung ist dann später für ein Diagramm nicht so schön. Da soll es mit der 2 anfangen (dem kleinsten Wert) also 2 / 5 / 9 / 12 / 3 / 5 / 11 / 15 ... und danach wollte ich es erst in ein Memo anzeigen lassen um dort alle Messungen die ich mit einem Bauteil mache untereinander bekomme. evtl versteht ihr jetzt besser was ich habem möchte. @DeddyH: versuche mal ob ich das was du mir da geschrieben hast hinbekomme. |
AW: edits sortier darstellen?
Zitat:
Das Stringgrid könnte z.B. 9 Zeilen haben wobei die oberste Zeile für die Beschriftung verwendet wird. Du kannst auch mehr als eine Spalte vorsehen (Spalte 1=Nummer der Messung, Spalte 2=Meßwert). |
AW: edits sortier darstellen?
ok. wäre eine überlegung es so zu ändern. Ich habe ein Programm von meinem Betreuer bekommen und soll das weiter ausbauen und da ist es schon so gegeben. Deshalb hab ich noch nicht drüber nachgedacht es allzusehr umzubauen.
Wie füge ich Edits in ein Stringgrid ein? Hab gerade gedacht ich baue um =/ @DeddyH und auch andere: kann es sein das es bei Lazarus kein Minimum befehl gibt? Da sagt er mir Fehler. |
AW: edits sortier darstellen?
Zitat:
Lazarus kennt davon gar nichts, denn Lazarus ist eine IDE, wenn kennt der Compiler das. Der Compiler (Lazarus bemüht FPC aka FreePascalCompiler) kennt den Befehl auch nicht nativ. Streng genommen kennt der recht wenig. Komplexere Funktionen finden sich in Units (Bibliotheken), die man einfach bei
Delphi-Quellcode:
einträgt, um diese in der eigenen Unit zu benutzen.
uses
BTW: ![]() ![]() und hier der Link zur FPC Math-Unit-Referenz ![]() OK, Mütze wieder ab :mrgreen: |
AW: edits sortier darstellen?
Außerdem war Minimum als lokale Variable deklariert, das kann der Compiler gar nicht kennen, wenn man es ihm nicht sagt.
|
AW: edits sortier darstellen?
@DeddyH: Ahh hatte es kopiert und da war ein Tippfehler: bei var Minimimum und unten Minimum =)
Ich habe es jetzt umgebaut und ein Stringgrid erstellt wo ich die Werte einlese. Wie kann ich dort die Reihenfolge so ändern? if n_wert=1 then stringgrid1.cells[0,1]:= FormatFloat('0.00',y_wert); if n_wert=2 then stringgrid1.cells[1,1]:= FormatFloat('0.00',y_wert); if n_wert=3 then stringgrid1.cells[2,1]:= FormatFloat('0.00',y_wert); if n_wert=4 then stringgrid1.cells[3,1]:= FormatFloat('0.00',y_wert); if n_wert=5 then stringgrid1.cells[4,1]:= FormatFloat('0.00',y_wert); if n_wert=6 then stringgrid1.cells[5,1]:= FormatFloat('0.00',y_wert); if n_wert=7 then stringgrid1.cells[6,1]:= FormatFloat('0.00',y_wert); if n_wert=8 then stringgrid1.cells[7,1]:= FormatFloat('0.00',y_wert); if n_wert=9 then stringgrid1.cells[8,1]:= FormatFloat('0.00',y_wert); if n_wert=9 then |
AW: edits sortier darstellen?
Du könntest dir jetzt die zahlreichen if's sparen:
Delphi-Quellcode:
stringgrid1.cells[n-1,1]:= FormatFloat('0.00',y_wert);
Zeilen verschieben geht mit MoveRow |
AW: edits sortier darstellen?
Ob das ein TStringGrid, eine TListbox oder TSchießMichTot ist, spielt doch für die Logik gar keine Rolle. Erweitern wir meinen Code von gestern mal dahingehend, dass die Zahlen in der gewünschten Reihenfolge in ein weiteres Array geschrieben werden (den Tippfehler habe ich übrigens mittlerweile korrigiert):
Delphi-Quellcode:
Ein kurzer Test mit einer Listbox, damit man auch etwas sieht:
type
TIntArray = array[1..10] of integer; procedure MinimumFirst(const Src: TIntArray; out Dest: TIntArray); var (* Variable für die kleinste Zahl im Array *) Minimum: integer; (* Variable für den Index der kleinsten Zahl innerhalb des Array *) IndexOfMinimum: integer; (* Laufvariable für die Schleife *) i: integer; (* aktueller Index im Zielarray *) DestIndex: integer; begin (* Initial setzen wir Minimum sowie dessen Index auf das erste Element im Array *) Minimum := Src[Low(Src)]; IndexOfMinimum := Low(Src); (* Nun den Rest des Array durchgehen, vergleichen und Variablen ggf. anpassen *) for i := Low(Src) + 1 to High(Src) do if Src[i] < Minimum then begin Minimum := Src[i]; IndexOfMinimum := i; end; DestIndex := Low(Dest); (* Nun in das Ausgabe-Array schreiben *) (* Zuerst ab der kleinsten Zahl bis zum Ende *) for i := IndexOfMinimum to High(Src) do begin Dest[DestIndex] := Src[i]; inc(DestIndex); end; (* Nun noch die ggf. verbliebenen *) for i := Low(Src) to IndexOfMinimum - 1 do begin Dest[DestIndex] := Src[i]; inc(DestIndex); end; end;
Delphi-Quellcode:
procedure TFormTest.FormCreate(Sender: TObject);
const Input: TIntArray = (5, 34, 23, 12, 8, 3, 42, 1, 98, 3); var Output: TIntArray; i: integer; begin MinimumFirst(Input, Output); for i := Low(Output) to High(Output) do ListBox1.Items.Add(IntToStr(Output[i])); end; |
AW: edits sortier darstellen?
ich was ist dieses src? (source?)
|
AW: edits sortier darstellen?
Das ist der Name des Parameters der Prozedur (bei mir steht Src immer für Source und Dest für Destination).
|
AW: edits sortier darstellen?
ok, und was muss ich da jetzt für einfügen?
ich habe jetzt statt dem TIntArray ein TStringGrid eingefügt und alle anderen varianten die mir einfallen würden =/ (mir Fehlen eindeutig zu viele Grundlagen :? ) Ah, hab es hinbekommen. DANKE für die Mühe mit mir =) ... hoffenltich bekomme ich den Rest auch noch hin. |
AW: edits sortier darstellen?
[OT]
Zitat:
Zitat:
Alles Ansichtssache Gruß K-H [/OT] |
AW: edits sortier darstellen?
Wenn ich irgendwo Src und Dest sehe (auch in Fremdcode), weiß ich gleich, was damit gemeint ist, von daher ist das für mich aussagefähig genug.
|
AW: edits sortier darstellen?
Du und ich und ..
aber eben nicht alle. Gruß K-H |
AW: edits sortier darstellen?
Zitat:
Delphi-Quellcode:
,
Source
Delphi-Quellcode:
oder
Quelle
Delphi-Quellcode:
verstehen ;)
DasIstDasVonWoWirDieAktionStarten
|
AW: edits sortier darstellen?
Eben, und wer den Parameter nicht sieht, der weiß auch mit QuellArrayDasVonAussenKommt nicht anzufangen.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:40 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