Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Lazarus (IDE) (https://www.delphipraxis.net/81-lazarus-ide/)
-   -   edits sortier darstellen? (https://www.delphipraxis.net/175565-edits-sortier-darstellen.html)

Foxi1896 1. Jul 2013 14:29

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

DeddyH 1. Jul 2013 14:33

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.

baumina 1. Jul 2013 14:35

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?

Foxi1896 1. Jul 2013 14:39

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.

DeddyH 1. Jul 2013 14:41

AW: edits sortier darstellen?
 
Man sortiert keine VCL-Controls, sondern höchstens deren dargestellte Inhalte *WinkMitDemZaunpfahl*

Foxi1896 1. Jul 2013 14:48

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?

baumina 1. Jul 2013 14:53

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:

http://www.delphipraxis.net/13247-za...sortieren.html

DeddyH 1. Jul 2013 14:59

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.

Foxi1896 1. Jul 2013 15:00

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 =/

DeddyH 1. Jul 2013 15:09

AW: edits sortier darstellen?
 
:?::gruebel: Willst Du nun sortieren oder nicht?

p80286 1. Jul 2013 15:12

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

Foxi1896 1. Jul 2013 15:12

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

DeddyH 1. Jul 2013 15:14

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.

baumina 1. Jul 2013 15:23

AW: edits sortier darstellen?
 
Es gibt im Delphi eine Funktion Namens MinValue.

Foxi1896 1. Jul 2013 15:25

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(....

DeddyH 1. Jul 2013 15:27

AW: edits sortier darstellen?
 
Ich habe Liste gesagt, nicht ListBox. Statt einer Liste kannst Du aber auch ein Array nehmen.

Foxi1896 1. Jul 2013 15:31

AW: edits sortier darstellen?
 
ähm kann es sein das (*räusper* benutze lazarus) keine Liste gibt?

baumina 1. Jul 2013 15:33

AW: edits sortier darstellen?
 
Hier mal ein kleiner Test:

Delphi-Quellcode:
uses Math;

....

ShowMessage(FloatToStr(MinValue([12, 15, 16, 10, 12.5, 13.1, 18])));
Liefert Ergebnis : 10

sx2008 1. Jul 2013 15:34

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 Quicksort) bleibt gleich.
Da aber die Anzahl der zu sortierenden Elemente offen ist, ist es für uns unverständlich warum die Daten in Editfeldern vorliegen.

DeddyH 1. Jul 2013 15:36

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:
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;
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.

Foxi1896 1. Jul 2013 15:46

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.

sx2008 1. Jul 2013 15:55

AW: edits sortier darstellen?
 
Zitat:

Zitat von Foxi1896 (Beitrag 1220291)
@ sx2008: Also ich habe ein Messgerät und machte 8 Messungen wo ich jede Messung in ein Edit anzeigen lasse.

Ok. Aber warum verwendest du statt den 8 Edits nicht ein StringGrid?
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).

Foxi1896 1. Jul 2013 16:02

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.

Sir Rufo 1. Jul 2013 16:16

AW: edits sortier darstellen?
 
Zitat:

Zitat von Foxi1896 (Beitrag 1220296)
@DeddyH und auch andere: kann es sein das es bei Lazarus kein Minimum befehl gibt? Da sagt er mir Fehler.

Ich setze mir jetzt mal kurz die Oberlehrermütze auf ... Achtung ...

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:
uses
einträgt, um diese in der eigenen Unit zu benutzen.

BTW: Delphi-Referenz durchsuchenSystem.Math.Min und Delphi-Referenz durchsuchenSystem.Math.Max (Achtung, das gilt so für Delphi, sollte aber bei FPC sehr ähnlich sein)

und hier der Link zur FPC Math-Unit-Referenz
http://www.freepascal.org/docs-html/...h/index-5.html

OK, Mütze wieder ab :mrgreen:

DeddyH 1. Jul 2013 16:22

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.

Foxi1896 2. Jul 2013 08:36

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

baumina 2. Jul 2013 08:43

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

DeddyH 2. Jul 2013 08:55

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:
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;
Ein kurzer Test mit einer Listbox, damit man auch etwas sieht:
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;

Foxi1896 2. Jul 2013 10:51

AW: edits sortier darstellen?
 
ich was ist dieses src? (source?)

DeddyH 2. Jul 2013 10:53

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).

Foxi1896 2. Jul 2013 11:05

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.

p80286 2. Jul 2013 11:18

AW: edits sortier darstellen?
 
[OT]
Zitat:

Zitat von Foxi1896 (Beitrag 1220379)
ich was ist dieses src? (source?)

Zitat:

Zitat von DeddyH (Beitrag 1220380)
Das ist der Name des Parameters der Prozedur (bei mir steht Src immer für Source und Dest für Destination).

Aussagekräftige Namen?:zwinker:
Alles Ansichtssache
Gruß
K-H
[/OT]

DeddyH 2. Jul 2013 11:56

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.

p80286 2. Jul 2013 13:25

AW: edits sortier darstellen?
 
Du und ich und ..
aber eben nicht alle.

Gruß
K-H

Sir Rufo 2. Jul 2013 13:29

AW: edits sortier darstellen?
 
Zitat:

Zitat von p80286 (Beitrag 1220404)
Du und ich und ..
aber eben nicht alle.

Gruß
K-H

Aber alle die das nicht verstehen, würden auch nicht
Delphi-Quellcode:
Source
,
Delphi-Quellcode:
Quelle
oder
Delphi-Quellcode:
DasIstDasVonWoWirDieAktionStarten
verstehen ;)

DeddyH 2. Jul 2013 13:33

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 17:18 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz