Autor Beitrag
Bblackhawk
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 18



BeitragVerfasst: Mi 11.03.09 17:18 
hi...

kann mir bitte wer eine einfach verkettete liste posten, die für ihre kettenelemente ziffern von 0-9 annehmen kann ??

vielen dank im vorraus :)

MfG
Bblackhawk
Gausi
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 8554
Erhaltene Danke: 481

Windows 7, Windows 10
D7 PE, Delphi XE3 Prof, Delphi 10.3 CE
BeitragVerfasst: Mi 11.03.09 17:21 
Wie sieht denn dein Ansatz aus? Was hast du probiert, woran hapert es? Fertige Quelltexte werden hier oft nur ungern gepostet, und etwas Eigeninitiative solltest du schon zeigen, wenn du dir eine eigene BigInt-Klasse schreiben willst.

_________________
We are, we were and will not be.
Bblackhawk Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 18



BeitragVerfasst: Mi 11.03.09 17:30 
user profile iconGausi hat folgendes geschrieben Zum zitierten Posting springen:
Wie sieht denn dein Ansatz aus? Was hast du probiert, woran hapert es? Fertige Quelltexte werden hier oft nur ungern gepostet, und etwas Eigeninitiative solltest du schon zeigen, wenn du dir eine eigene BigInt-Klasse schreiben willst.


so hier der quelltext:

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:
unit TList;

interface

type

TNode = class
         private
           kContent:TObject;
           kNext:TNode;
         public
           constructor create(pContent:TObject; pNext:TNode);
           procedure setContent (pContent:TObject);
           function content:TObject;
           procedure setNext(pNext:TNode);
           function next:TNode;
       end;

List = class
           private
             hHead, kCurrent,kTail :TNode;
           public
             constructor create;
             function isEmpty:boolean;
             procedure next;
             function getItem:TObject;
             private
          end;

implementation

  constructor  TNode.create(pContent:TObject; pNext:TNode);
  begin
    kContent := pContent;
    kNext := pNext;
  end;

  procedure TNode.setContent (pContent:TObject);
  begin
    kContent := pContent;
  end;

  function TNode.content:TObject;
  begin
    result:=kContent;
  end;

  procedure TNode.setNext(pNext:TNode);
  begin
    kNext:=pNext;
  end;

  function TNode.next:TNode;
  begin
    result:=kNext;
  end;

   constructor List.create;
   begin
     hHead:=TNode.create(nil,nil);
     kCurrent:=hHead;
   end;

   function List.isEmpty:boolean;
   begin
     result:=hHead.next= kTail;
   end;


   function List.getItem:TObject;
   begin
     result:=kCurrent.content;
   end;

end.


Fehlerneldung: [DCC Fehler] TList.pas(25): E2065 Ungenügende Forward- oder External-Deklaration: 'List.next'


Zuletzt bearbeitet von Bblackhawk am Mi 11.03.09 17:53, insgesamt 2-mal bearbeitet
Marc.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 1876
Erhaltene Danke: 129

Win 8.1, Xubuntu 15.10

BeitragVerfasst: Mi 11.03.09 17:34 
user profile iconBblackhawk hat folgendes geschrieben Zum zitierten Posting springen:
Fehlerneldung: [DCC Fehler] TList.pas(25): E2065 Ungenügende Forward- oder External-Deklaration: 'List.next'

Du hast die Methode Next auch nirgendswo definiert bzw. implementiert und mit der Klasse verknüpft. ;)
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
  implementation
  ...
  procedure List.Next;
  begin
     ...
  end;

Übrigens, schreibe am besten vor jegliche Arten von Typen den Präfix "T", um diese als solche zu kennzeichnen. Das verhindert hinterher Verwechselung und steigert die Übersicht. ;)


Zuletzt bearbeitet von Marc. am Mi 11.03.09 17:36, insgesamt 1-mal bearbeitet
elundril
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 3747
Erhaltene Danke: 123

Windows Vista, Ubuntu
Delphi 7 PE "Codename: Aurora", Eclipse Ganymede
BeitragVerfasst: Mi 11.03.09 17:34 
ganz klar. du hast oben bei List eine procedure next deklariert aber dann unten im quelltext nicht implementiert. dadurch meckert der compiler.

lg elundril

_________________
This Signature-Space is intentionally left blank.
Bei Beschwerden, bitte den Beschwerdebutton (gekennzeichnet mit PN) verwenden.
Bblackhawk Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 18



BeitragVerfasst: Mi 11.03.09 17:37 
dann müsste doch eigentlich eine einfach verkettete liste erstellt sein...
oder sehe ich das falsch ?
elundril
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 3747
Erhaltene Danke: 123

Windows Vista, Ubuntu
Delphi 7 PE "Codename: Aurora", Eclipse Ganymede
BeitragVerfasst: Mi 11.03.09 17:39 
wenn du noch die methode next einbaust hast du die klasse einer einfach verketteten liste erstellt. aber davor noch das List.next einbauen und ausprogrammieren.

_________________
This Signature-Space is intentionally left blank.
Bei Beschwerden, bitte den Beschwerdebutton (gekennzeichnet mit PN) verwenden.
Bblackhawk Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 18



BeitragVerfasst: Mi 11.03.09 17:40 
und genau da sitzt das problem, ich weiß nicht genau, wie ich die bastele... ^^
elundril
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 3747
Erhaltene Danke: 123

Windows Vista, Ubuntu
Delphi 7 PE "Codename: Aurora", Eclipse Ganymede
BeitragVerfasst: Mi 11.03.09 17:42 
naja, überleg mal. was soll das List.Next machen?

List.next soll ja zum nächsten knoten springen, oder?

_________________
This Signature-Space is intentionally left blank.
Bei Beschwerden, bitte den Beschwerdebutton (gekennzeichnet mit PN) verwenden.
Marc.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 1876
Erhaltene Danke: 129

Win 8.1, Xubuntu 15.10

BeitragVerfasst: Mi 11.03.09 17:49 
Mir ist gerade eingefallen, dass ich vor gut drei Jahren, bei meinen Anfängen, ein mehr oder minder gutes Tutorial (oder eine Art Kommentar) zu verketten Listen hier im Forum veröffentlicht habe.
Siehe hier.
Kannst ja mal schaun, wie ich das damals gemacht habe und versuchen nachzuvollziehen.


Grüße,
Marc

PS: Bitte setz deinen Code künftig in Delphi-Tags. [delphi] Code [/delphi]
Bblackhawk Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 18



BeitragVerfasst: Mi 11.03.09 17:52 
will ja das nächste... also in meinem fall das vorherige element haben... da ich ja mit zahlen arbeite...

also...
ausblenden Delphi-Quelltext
1:
2:
3:
4:
   procedure List.next;
   begin
    kCurrent:=kCurrent.next;
   end;


dann müsste es doch klappen oder ?


sry wegen tags... dachte das sei hier auch [CODE]...
elundril
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 3747
Erhaltene Danke: 123

Windows Vista, Ubuntu
Delphi 7 PE "Codename: Aurora", Eclipse Ganymede
BeitragVerfasst: Mi 11.03.09 18:00 
eigentlich müsste es jetzt dann klappen.

lg elundril

P.S.: vorher, nachher, is eigentlich vollkommen egal, es kommt ja eigentlich nur drauf an ob mans von links nach rechts zeichnet oder rechts nach links. ;-)

_________________
This Signature-Space is intentionally left blank.
Bei Beschwerden, bitte den Beschwerdebutton (gekennzeichnet mit PN) verwenden.
Bblackhawk Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 18



BeitragVerfasst: Mi 11.03.09 18:00 
alles klar...

Dankeschön :)

MfG
Bblackhawk
Bblackhawk Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 18



BeitragVerfasst: Mi 11.03.09 18:07 
so, jetz möchte ich eine zahl in meine Liste einfügen...

dann muss ich doch folgendes tun...

ich muss die liste createn... einen node createn und dann ein element einfügen ???

--> dass heißt...
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
procedure TForm2.BAdditionClick(Sender: TObject);
var i : integer ;
begin
  zahl.create;
  zahl2.create;
  // Die eingegebenen Zahlen werden in die Listen geschrieben
  for i := length (ENumber1.Text) to i = 0 do
  begin
    zahl.content := length (ENumber1.Text)-i ;
    i := i-1;
  end;
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19346
Erhaltene Danke: 1754

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Mi 11.03.09 18:19 
user profile iconBblackhawk hat folgendes geschrieben Zum zitierten Posting springen:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
  zahl.create;
  zahl2.create;
  // Die eingegebenen Zahlen werden in die Listen geschrieben
  for i := length (ENumber1.Text) to i = 0 do
  begin
    zahl.content := length (ENumber1.Text)-i ;
    i := i-1;
  end;
Überleg einmal was du machst...
  • zahl ist nicht initialisiert, du rufst aber create auf. Das geht schonmal nicht.
  • Danach weist du zahl.content mehrfach neue Werte zu, die ersten werden also einfach wieder überschrieben.
  • Was du da berechnest verstehe ich nicht.
  • content ist eine Funktion, kann also nichts zugewiesen bekommen.
  • Deine for-Schleife hat keine richtige Syntax.
  • Du versuchst in der for-Schleife der Schleifenvariable einen Wert zuzuweisen, das geht nicht.
  • 0 ist bei einem String der falsche Endwert, der erste Buchstabe hat den Index 1. Andernfalls müsste die Schleife auch bis ... - 1 laufen.
Bei dem Quelltext frage ich mich wie du die Listenimplementierung oben hinbekommen haben willst, denn da machst du teilweise das selbe richtig...

Mal eine kleine Korrektur:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
zahl := TIrgendwas.Create; // So erzeugst du ein Objekt

for i := ... downto 0 do
...
Du solltest dir dringend erst einmal die Grundlagen anschauen. Wie du bei deinen Kenntnissen (deinem Quelltext nach zu urteilen) auf die Idee mit der selbst gebastelten Multiplikation in verketteten Listen kommst, das ist mir allerdings schleierhaft...

Einen sehr guten Crashkurs findest du hier:
crashkurs.christian-stelzmann.de
und die neue Version speziell ab Turbo Delphi:
www.christian-stelzm...shkurs_reloaded.html


Zuletzt bearbeitet von jaenicke am Mi 11.03.09 18:33, insgesamt 1-mal bearbeitet
elundril
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 3747
Erhaltene Danke: 123

Windows Vista, Ubuntu
Delphi 7 PE "Codename: Aurora", Eclipse Ganymede
BeitragVerfasst: Mi 11.03.09 18:22 
bin mir nicht sicher ob es stimmt aber kann es sein das kContent vom Typ integer sein sollte und nicht von Typ TObject?

lg elundril

_________________
This Signature-Space is intentionally left blank.
Bei Beschwerden, bitte den Beschwerdebutton (gekennzeichnet mit PN) verwenden.
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19346
Erhaltene Danke: 1754

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Mi 11.03.09 18:34 
Das kommt noch dazu, aber davon abgesehen ist ohnehin bei dem letzten Quelltext so viel falsch... Ich glaube sowas habe ich noch nie gesehen.
@user profile iconBblackhawk: Die Listenimplementierung ist nicht von dir, oder?
Bblackhawk Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 18



BeitragVerfasst: Mi 11.03.09 18:51 
also....

hier das komplette...

in der unit:
ausblenden Delphi-Quelltext
1:
2:
    zahl : list;
    zahl2 : list;


im bei create der unit:
ausblenden Delphi-Quelltext
1:
2:
  zahl := list.create;
  zahl2 := list.create;


in der procedure:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
procedure TForm2.BAdditionClick(Sender: TObject);
var i : integer ;
var help1 : integer;
begin
  // Die eingegebenen Zahlen werden in die Listen geschrieben
  for i := length (ENumber1.Text) to i = 0 do
  begin
    zahl.content := length (ENumber1.Text)-i ;
    zahl.next;
    i := i-1;
  end;
end;


so sieht der rest des quelltextes aus...
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19346
Erhaltene Danke: 1754

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Mi 11.03.09 18:55 
Die meisten Fehler hast du aber nicht behoben...
user profile iconBblackhawk hat folgendes geschrieben Zum zitierten Posting springen:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
procedure TForm2.BAdditionClick(Sender: TObject);
var i : integer ;
var help1 : integer;
begin
  // Die eingegebenen Zahlen werden in die Listen geschrieben
  for i := length (ENumber1.Text) to i = 0 do
  begin
    zahl.content := length (ENumber1.Text)-i ;
    zahl.next;
    i := i-1;
  end;
end;
Du benutzt doch feste Werte abhängig von der Länge des eigegebenen Textes, welche eingegebenen Werte?
Und die anderen 5 Fehler hatte ich ja bereits genannt...
Bblackhawk Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 18



BeitragVerfasst: Mi 11.03.09 19:00 
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
  for i := length (ENumber1.Text) downto 0 do
  begin
    zahl.setcontent := length (ENumber1.Text)-i ;
    zahl.next;
    i := i-1;
  end;


also...
einmal habe ich denke ich nun das to mit downto ersetzt...
da muss so weit ich das gerallt hab ne 0 hin, weil ich ja von der letzten zahl ausgehe -> i hoch
und nun wird durch i := i-1 immer eine abgezogen, wodurch das i zu 0 wird -> ende der schleife...
zahl.setcontent habe ich nun auch behoben.... wie setzte ich denn nun die richige zahl da ein ??

achso... die eingegebenen sachen sind zahlen... die in einem edit stehen... (ENumber1.Text)