Sortierverfahren

Für Fragen von Einsteigern und Programmieranfängern...
Antworten
Eradikator
Beiträge: 33
Registriert: Sa 8. Jun 2013, 19:45

Sortierverfahren

Beitrag von Eradikator »

Moin,
ich soll für ein Projekt Sortierverfahren vergleichen und hab mit Selectionsort angefangen.
Dabei soll das Programm die Zeilen von Memo1 sortieren und in Memo2 ausgeben.
Folgendes Problem: Das Programm gibt die Liste richtig sortiert in Memo2 aus, hängt aber noch eine Zeile dran. Also die
erste Zeile ist leer, dann folgt die sortierte Liste.

Code: Alles auswählen

function indmax (var n:integer; var feld : tstrings) : integer;
var
  ind, i : integer;
begin
  ind:=0;
  for i:=0 to n do
  begin
    if feld[i]>feld[ind] then
      ind := i;
  end;
  result := ind;
end;
 
procedure selectionsort(moin: tstrings);
var
  n : integer;
begin
  n:=moin.Count;
  repeat
  begin
       moin.Exchange(indmax(n, moin), n);
       n:=n-1;
  end;
  until (n>0)
 
end;
 
procedure TForm1.Button1Click(Sender: TObject);
begin
 memo2.lines.Clear;
 memo2.Lines.AddStrings(memo1.lines);
 selectionsort(memo2.lines);
 showmessage ('Größe Memo2 = ' + inttostr(memo2.Lines.Count));
end;
Warum wird noch ne Zeile drangehängt?

Mit freundlichen Grüßen
Zuletzt geändert von Lori am Di 16. Jul 2013, 19:15, insgesamt 1-mal geändert.
Grund: Highlighter

irq
Beiträge: 25
Registriert: Mi 3. Jul 2013, 02:32
OS, Lazarus, FPC: Linux (L 0.9.30 FPC 2.6.0)
CPU-Target: 32Bit, 64Bit

Re: Sortierverfahren

Beitrag von irq »

hi,

Code: Alles auswählen

 
begin
 n:=moin.Count; // -->(1)
 repeat
 begin
  moin.Exchange(indmax(n, moin), n);
  n:=n-1;
 end;
 until (n>0) // -->(2)
end;
 
(1) n:=moin.Count - 1
(2) until (n>0) ???
Zuletzt geändert von irq am Mo 15. Jul 2013, 13:35, insgesamt 5-mal geändert.
viele grüße
-- irq

Eradikator
Beiträge: 33
Registriert: Sa 8. Jun 2013, 19:45

Re: Sortierverfahren

Beitrag von Eradikator »

irq hat geschrieben:hi,

begin
n:=moin.Count; -->(1)
repeat
begin
moin.Exchange(indmax(n, moin), n);
n:=n-1;
end;
until (n>0) -->(2)


(1) n:=moin.Count - 1
(2) until (n>0) ???
Hallo,

mit n:= moin.Count-1 und until (n<1) funktioniert es.
Danke schön!

irq
Beiträge: 25
Registriert: Mi 3. Jul 2013, 02:32
OS, Lazarus, FPC: Linux (L 0.9.30 FPC 2.6.0)
CPU-Target: 32Bit, 64Bit

Re: Sortierverfahren

Beitrag von irq »

nix zu danken.
viele grüße
-- irq

Komoluna
Beiträge: 565
Registriert: So 26. Aug 2012, 09:03
OS, Lazarus, FPC: Windows(10), Linux(Arch)
CPU-Target: 64Bit

Re: Sortierverfahren

Beitrag von Komoluna »

benutzt bitte das nächste mal die Code Highligther:

Code: Alles auswählen

begin
  beispielinteger:=5;
end;
MFG
Komoluna
Programmer: A device to convert coffee into software.

Rekursion: siehe Rekursion.

irq
Beiträge: 25
Registriert: Mi 3. Jul 2013, 02:32
OS, Lazarus, FPC: Linux (L 0.9.30 FPC 2.6.0)
CPU-Target: 32Bit, 64Bit

Re: Sortierverfahren

Beitrag von irq »

@komoluna: das ist gar nicht so einfach mit dem highlighter. v.a. die indents.
viele grüße
-- irq

Antworten