Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Lazarus (IDE) (https://www.delphipraxis.net/81-lazarus-ide/)
-   -   Wie bekomm ich das mit dem sortieren hin? (https://www.delphipraxis.net/187142-wie-bekomm-ich-das-mit-dem-sortieren-hin.html)

PaulMaler 30. Okt 2015 17:34

Wie bekomm ich das mit dem sortieren hin?
 
Code:
unit Unit1;

{$mode objfpc}{$H+}

interface

uses
  Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, StdCtrls;

type

  { TForm1 }

  TForm1 = class(TForm)
    Button1: TButton;
    Edit1: TEdit;
    Edit2: TEdit;
    ListBox1: TListBox;
    ListBox2: TListBox;
    Memo1: TMemo;
    procedure Button1Click(Sender: TObject);
    procedure Memo1Change(Sender: TObject);
  private
    { private declarations }
  public
    { public declarations }
  end;

var
  Form1: TForm1;
  wor,s:string;
  l,x,i,c,k,e,j,n,merke:integer;

implementation

{$R *.lfm}

{ TForm1 }

procedure TForm1.Button1Click(Sender: TObject);
begin
  listbox1.Clear;
  wor:=upcase(memo1.text);
  s:=wor;
  l:=1;



  for i:=1 to length(s) do
  begin
     x:=ord(s[i]);
     begin
        If x>=65 Then If x<=90 Then
        listbox1.items.Add(inttostr(x));
     end;
  end;



  begin
  c:=listbox1.Count;
  edit2.text:=inttostr(c);
  end;

  begin
  //Hier muss etwas wie ein sortieralgorithmus hin. Aber es will nicht klappen.
  end;


  for j:=1 to c do
  begin
  if s[j]<s[j+1] Then l:=l Else
  if s[j]<s[j+1] Then l:=l+1;
  end;
  edit1.text:=inttostr(l);
end;

procedure TForm1.Memo1Change(Sender: TObject);
begin

end;

end.
Wie ihr vllt seht, habe ich versucht ein Programm zu schreiben, welches die Anzahl verschiedener Buchstaben ausgibt. Also wie viele verschiedene Bucstaben vorkommen. Ich hatte mir das so überlegt, dass die Buchstaben in ASCII-Code umgewandelt werden, dann in eine Listbox geschrieben werden, dort sortiert werden und dann die Zahlen verglichen werden. Jedoch will es mit dem Sortieren einfach nicht so wirklich hinhaun. Gibt es da ne Möglichkeit? Ich hab BubbleSort versucht, aber irgendwie haperts da vollkommen. Oder habt ihr ne ganz andere Idee?

Perlsau 30. Okt 2015 18:20

AW: Wie bekomm ich das mit dem sortieren hin?
 
Wie wär's mit dem Property Sorted? Listbox.Sorted auf True setzen könnte eventuell ganz nützlich sein :lol:

nahpets 30. Okt 2015 18:39

AW: Wie bekomm ich das mit dem sortieren hin?
 
Zitat:

Zitat von Perlsau (Beitrag 1320244)
Wie wär's mit dem Property Sorted? Listbox.Sorted auf True setzen könnte eventuell ganz nützlich sein :lol:

Prinzipiell ja, da aber Zahlen als Strings gespeichert werden, wird das keine numerische Sortierung werden.
Das sieht dann eher so aus:
Code:
1
10
100
2
20
200
...
Der Teil müsste dann verändert werden:
Delphi-Quellcode:
for i:=1 to length(s) do
  begin
     x:=ord(s[i]);
     begin
        If (x>=65) and (x<=90) Then      listbox1.items.Add(s[i]);
     end;
  end;

frankyboy1974 30. Okt 2015 19:06

AW: Wie bekomm ich das mit dem sortieren hin?
 
hallo,

ich würde das Problem mit einer Schleife lösen. Du ermittelt das erste Zeichen deiner Zeichenkette, erhöhst deinen Zähler um eins und entfernst anschliessend alle Vorkommen des ersten Zeichen aus deiner Zeichenkette. Dies wiederholst du solange bis die Zeichenkette leer ist.

Delphi-Quellcode:
zaehler:=0;
While zeichenkette<>'' do begin
h:=midstr(zeichenkette,1,1);
inc(zaehler);
zeichenkette:=stringreplace(zeichenkette,h,'', [rfReplaceAll, rfIgnoreCase]);
end;
Quellcode Freihand programmiert, nicht getestet.


mfg

Perlsau 30. Okt 2015 19:54

AW: Wie bekomm ich das mit dem sortieren hin?
 
Zitat:

Zitat von nahpets (Beitrag 1320247)
Prinzipiell ja, da aber Zahlen als Strings gespeichert werden, wird das keine numerische Sortierung werden.

Nichts einfacher als das: Fülle die Strings vorne mit Nullen oder Leerzeichen auf, so daß alle Strings gleich lang sind:
Delphi-Quellcode:
// ---------- Fügt vor den String Zeile das Zeichen so oft an, bis die Länge Zahl erreicht ist ----------
Function Plus_String(Zeile: String; Zeichen: Char; Zahl: Integer): String;
Var
  Aus : String;

begin
  If Length(Zeile) > Zahl - 1 Then
     Result := Zeile         Else
     Begin
       Aus := Zeile;
       Repeat
         Aus := Zeichen + Aus;
       Until Length(Aus) = Zahl;
       Result := Aus;
     End;
end;

Luckie 30. Okt 2015 20:00

AW: Wie bekomm ich das mit dem sortieren hin?
 
Wie wäre es mit einem simplen Bubble Sort?

HolgerX 31. Okt 2015 04:05

AW: Wie bekomm ich das mit dem sortieren hin?
 
Hmm...

Gibt es da bei dei TStringList nicht CustomSort?

Dort in der Vergleichsroutine einfach mit StrToInt arbeiten und dann direkt die Zahlenwerte vergleichen, statt die Strings...

p80286 31. Okt 2015 08:44

AW: Wie bekomm ich das mit dem sortieren hin?
 
Zitat:

Zitat von PaulMaler (Beitrag 1320238)
Wie ihr vllt seht, habe ich versucht ein Programm zu schreiben, welches die Anzahl verschiedener Buchstaben ausgibt. Also wie viele verschiedene Bucstaben vorkommen.

Dann würde ich an deiner Stelle einen Record definieren
Delphi-Quellcode:
type
 tMyRecord = record
     bstb:char;
     Count:integer;
 end;
und diesen in eine Liste packen.
Nachdem Du die Buchstaben gezählt hast, kannst Du sortieren soviel und wie Du willst, und dann die Listbox befüllen.

Gruß
K-H

Bernhard Geyer 31. Okt 2015 08:54

AW: Wie bekomm ich das mit dem sortieren hin?
 
Dein Problem ist das du ein natürliche Sortierung willst.

Lösungsansätze mit Quellcode findest du z.B.

http://stackoverflow.com/questions/5...ndows-explorer
http://www.delphipraxis.net/29910-na...n-strings.html


Alle Zeitangaben in WEZ +1. Es ist jetzt 13:35 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