Autor Beitrag
Alishaa
Hält's aus hier
Beiträge: 1

Windows XP
Delphi und C++
BeitragVerfasst: Do 29.09.05 16:02 
Guten Tag ich bin neu hier an dem Board angemeldet und ich hoffe sehr das ich wenigstens hier kompetente Hilfe finde :) . Mein Problem ist das ich einfach nicht weiter komme in Sachen Beliebiges Löschen und einem Sortierten Aufbau der ausgegebenen Dateien.
Ich habe das Programm heute komplett neu geschrieben ...da alte Entwürfe einfach zu undurchsichtig waren.
Ich würde nun gern wissen wie man

a) Beliebige Dateien aus der Listbox löschen kann..
( Möchte eine Zahl in einem Editfeld eingeben und die Löschen , komplett , nicht nur aus der Listbox )
b) Wie man die Datein Sortiert bekommt.. also nicht die Listbox..
( Im Moment habe ich Randomzahlen die ich bei der Eingabe schon sortieren möchte )


Das Programm bis hier hin funktioniert , soweit ich das sehe , einwandfrei...nur wie gesagt versuch schon seit einer Woche eine Lösung zu finden ohne Erfolg.

Vielen Dank :)

au revoir








ausblenden volle Höhe Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
71:
72:
73:
74:
75:
76:
77:
78:
79:
80:
81:
82:
83:
84:
85:
86:
87:
88:
89:
90:
91:
92:
93:
94:
95:
96:
97:
98:
99:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  StdCtrls;

type
  TForm1 = class(TForm)
    Button1: TButton;
    ListBox1: TListBox;
    Button2: TButton;
    Edit1: TEdit;
    Button3: TButton;
    Button4: TButton;
    procedure FormCreate(Sender: TObject);
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure Button3Click(Sender: TObject);
    procedure Button4Click(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;
  PDaten = ^TDaten;
  TDaten = record
           zahl:integer;
           next:PDaten;
           end;
var
  Form1: TForm1;
var root,last : PDaten ;
implementation

{$R *.DFM}

procedure TForm1.FormCreate(Sender: TObject);
begin
root := nil ;
last:= nil ;
end;

procedure TForm1.Button1Click(Sender: TObject); // 1.Element  ( Einfügen ) 
begin
if root = nil then begin
   new ( root ) ;
   root^.zahl := random (100)+1;
   root^.next:= nil ;
   last:= root ;
   end
   else begin                                  // alle weiteren Elemente
        new ( last^.next);
        last := last^.next ;
        last^.zahl:= random (100)+1 ;
        last^.next := nil ;
        end;
        end;

procedure TForm1.Button2Click(Sender: TObject); // Ausgabe
var hilf : PDaten ;
begin
Listbox1.Clear ;
hilf:=root;
while hilf <> nil do begin
Listbox1.items.add (InttoStr ( hilf^.Zahl));
      hilf:=hilf^.next;

      end;
end;

procedure TForm1.Button3Click(Sender: TObject);  // Suchen
var hilf , gefunden : PDaten ;
begin
hilf:= root ;
gefunden := nil ;
while (hilf <> niland ( gefunden = nil )  do begin
if StrtoInt ( Edit1.Text ) = hilf^.Zahl then
      gefunden := hilf ;
      hilf := hilf^.next ;
      end;
      if gefunden = nil then Showmessage ( 'Nichts gefunden .')
         else showmessage ( 'Die Zahl' + InttoStr(gefunden^.Zahl) + ' wurde gefunden !')
         end;

procedure TForm1.Button4Click(Sender: TObject);  // Löschen 
var hilf : PDaten ;
begin
hilf:= root ;
while hilf^.next <> last do begin
      hilf:=hilf^.next ;
      end;
      dispose(last);
      last:=hilf;
      last^.next:=nil;
end;

end.


Moderiert von user profile iconKlabautermann: Delphi-Tags hinzugefügt.
Moderiert von user profile iconUGrohne: Topic aus Datenbanken verschoben am Do 29.09.2005 um 20:45
Kroko
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 1284

W98 W2k WXP
Turbo D
BeitragVerfasst: Fr 30.09.05 09:48 
Hat es einen Grund, warum Du verkettete Listen aufbaust und kein dynamisches Array nimmst?

Ich würde mir das ganze in eine Klasse basteln und damit dann weiter arbeiten oder zumindestens TList verwenden!

mfg
Klabautermann
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Veteran
Beiträge: 6366
Erhaltene Danke: 60

Windows 7, Ubuntu
Delphi 7 Prof.
BeitragVerfasst: Fr 30.09.05 11:11 
Hallo,

ich wüsste nciht, was an Verketteten Listen auszusetzen ist.

@Alishaa: Da du "doppelte Buchführung" machst (in der Liste und der ListBox) außerdem musst du dir überlegen, was bei mehrfachen auftauchen einer Nummer geschieht. Sollen alle auftauchenden Elemente gelöscht werden oder nicht?
Auf jeden Fall musst du bei der ListBox einfach mit einer Schleife durchgehen und etweder das erste oder jedes Vorkommen der Zahl löschen.

Ber der Verketteten Liste ist es nur in sofern schwieriger, als dass du dir auch das vorhergehende Element merken musst.

Hier eine Variante, die jedes vorkommen löschen sollte, wenn du es in dein Objekt (tForm1) integrierst kannst du den ersten Parameter weg lassen:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
procedure DeleteAllOfNumber(root : pDaten; aNumber : Integer);
  var
    runner, last, ToDel : pDaten;
begin
  runner := root;
  last := root;
  while (runner <> nildo begin 
    if (runner^.Zahl = aNumber) then begin
      ToDel := runner;
      // Sonderfall der Gefundesne Eintrag ist das erste Element
      if (runner = root) then begin
        root := root^.Next;
        last := root;
      end;
      else
        last^.Next := runner^.Next;
      runner := runner^.Next;
      Dispose(ToDel);
    end // Einen passenden Eintrag gefunden
    else begin 
      last := runner;
      runner := runner^.Next;
    end// Dieser Eintrag Passt nicht
  end// Mit jedem element der liste
end;


Das ganze habe ich im Beitragseditor getippt daher bitte ich eventuelle Fehler zu entschuldiegen, das Prinzieb sollte aber stimmen ;).

Hast du für die Sortierung einen bevorzugten Algorithmus? Ansonsten suche mal nach Suche in: Delphi-Forum, Delphi-Library BUBBLESORT und versuche das auf eine Verkettete Liste um zu setzen. Wenn du dazu Fragen hast, kannst du dich ja wieder melden.

Gruß
Klabautermann
Kroko
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 1284

W98 W2k WXP
Turbo D
BeitragVerfasst: Fr 30.09.05 12:40 
user profile iconKlabautermann hat folgendes geschrieben:
Hallo,

ich wüsste nciht, was an Verketteten Listen auszusetzen ist.

...


(1) Ich auch nicht, aber wenn es nicht sein muss, lass ich es lieber
(2) man schleppt je Record 4 Byte mehr mit rum
(3) manche Dinge gehe einfacher/ mache schlechter!

kommt immer darauf an, was man will!

_________________
Die F1-Taste steht nicht unter Naturschutz und darf somit regelmäßig und oft benutzt werden! oder Wer lesen kann, ist klar im Vorteil!
Klabautermann
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Veteran
Beiträge: 6366
Erhaltene Danke: 60

Windows 7, Ubuntu
Delphi 7 Prof.
BeitragVerfasst: Fr 30.09.05 14:26 
Hallo,
user profile iconKroko hat folgendes geschrieben:
(1) Ich auch nicht, aber wenn es nicht sein muss, lass ich es lieber

Ich finde sie schnuckelig, auch wenn ich mir das arbeiten durch unervell nutzbare funktionen (add, remove usw.) gerne vereinfache.

user profile iconKroko hat folgendes geschrieben:
(2) man schleppt je Record 4 Byte mehr mit rum

Und hat keinen ärger mit fehlerhaften Memory Management, welches den Speicherbedarf eines Arrays verdoppelt wenn man es um nur 1 Element vergrößert ;).

Aber natürlich ist das, wie alles andere auch Geschmackssache.

Gruß
Klabautermann