| Autor |
Beitrag |
Bblackhawk
      
Beiträge: 18
|
Verfasst: 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
      
Beiträge: 8554
Erhaltene Danke: 481
Windows 7, Windows 10
D7 PE, Delphi XE3 Prof, Delphi 10.3 CE
|
Verfasst: 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 
      
Beiträge: 18
|
Verfasst: Mi 11.03.09 17:30
Gausi hat folgendes geschrieben : | | 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:
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.
      
Beiträge: 1876
Erhaltene Danke: 129
Win 8.1, Xubuntu 15.10
|
Verfasst: Mi 11.03.09 17:34
Zuletzt bearbeitet von Marc. am Mi 11.03.09 17:36, insgesamt 1-mal bearbeitet
|
|
elundril
      
Beiträge: 3747
Erhaltene Danke: 123
Windows Vista, Ubuntu
Delphi 7 PE "Codename: Aurora", Eclipse Ganymede
|
Verfasst: 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 
      
Beiträge: 18
|
Verfasst: Mi 11.03.09 17:37
dann müsste doch eigentlich eine einfach verkettete liste erstellt sein...
oder sehe ich das falsch ?
|
|
elundril
      
Beiträge: 3747
Erhaltene Danke: 123
Windows Vista, Ubuntu
Delphi 7 PE "Codename: Aurora", Eclipse Ganymede
|
Verfasst: 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 
      
Beiträge: 18
|
Verfasst: Mi 11.03.09 17:40
und genau da sitzt das problem, ich weiß nicht genau, wie ich die bastele... ^^
|
|
elundril
      
Beiträge: 3747
Erhaltene Danke: 123
Windows Vista, Ubuntu
Delphi 7 PE "Codename: Aurora", Eclipse Ganymede
|
Verfasst: 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.
      
Beiträge: 1876
Erhaltene Danke: 129
Win 8.1, Xubuntu 15.10
|
Verfasst: 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 
      
Beiträge: 18
|
Verfasst: 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...
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
      
Beiträge: 3747
Erhaltene Danke: 123
Windows Vista, Ubuntu
Delphi 7 PE "Codename: Aurora", Eclipse Ganymede
|
Verfasst: 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 
      
Beiträge: 18
|
Verfasst: Mi 11.03.09 18:00
alles klar...
Dankeschön
MfG
Bblackhawk
|
|
Bblackhawk 
      
Beiträge: 18
|
Verfasst: 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...
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; for i := length (ENumber1.Text) to i = 0 do begin zahl.content := length (ENumber1.Text)-i ; i := i-1; end; |
|
|
jaenicke
      
Beiträge: 19346
Erhaltene Danke: 1754
W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Mi 11.03.09 18:19
Bblackhawk hat folgendes geschrieben : | Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8:
| zahl.create; zahl2.create; 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: Delphi-Quelltext 1: 2: 3: 4:
| zahl := TIrgendwas.Create; 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
      
Beiträge: 3747
Erhaltene Danke: 123
Windows Vista, Ubuntu
Delphi 7 PE "Codename: Aurora", Eclipse Ganymede
|
Verfasst: 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
      
Beiträge: 19346
Erhaltene Danke: 1754
W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: 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.
@ Bblackhawk: Die Listenimplementierung ist nicht von dir, oder?
|
|
Bblackhawk 
      
Beiträge: 18
|
Verfasst: Mi 11.03.09 18:51
also....
hier das komplette...
in der unit:
Delphi-Quelltext 1: 2:
| zahl : list; zahl2 : list; |
im bei create der unit:
Delphi-Quelltext 1: 2:
| zahl := list.create; zahl2 := list.create; |
in der procedure:
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 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
      
Beiträge: 19346
Erhaltene Danke: 1754
W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Mi 11.03.09 18:55
Die meisten Fehler hast du aber nicht behoben... Bblackhawk hat folgendes geschrieben : | 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 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 
      
Beiträge: 18
|
Verfasst: Mi 11.03.09 19:00
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)
|
|