Entwickler-Ecke
Algorithmen, Optimierung und Assembler - Große Zahlen verknoten...
tah_rul0r - Mi 09.04.08 00:13
Titel: Große Zahlen verknoten...
Hallihallo...
hab über einen freund vom diesem forum erfahren... bin leider ziemlich schlecht im programmieren mit delphi...
jetzt hab ich in der schule ein projekt bekommen... große zahlen...
also:
in einem editfeld soll eine große zahl, bsp. 2947603 eingelesen werden... dann sollen die einzelnen zahlen verknoten werden.. also 2->9->4->7->6->0->3... das ganze soll mit einem constructor objektorientiert gemacht werden...
im endeffekt soll man eine 2. zahl einketten, und die mit der ersten addieren... also die knoten jeweils, und natürlich immer den rest mitgeben, 2. möglichkeit: die lange zahl bzw. kette mit einer zahl von 0-10 multiplizieren...
ich hab halt leider null ahnung davon, mir gehts dabei in der schule nicht so gut^^... würd mich freuen wenn mir jemand helfen könnte... wenns zu wenig info ist, kann ich natürlich noch mehr geben...
danke euch, michael
GericasS - Mi 09.04.08 07:08
Morgen,
du sagt du seiest ziehmlich schlecht, hast du vll. trotzdem einen Lösungsansatz ?
Oder dir vll. schonmal ein paar gedanken gemacht wie man es "vll." umsetzten könnte ?
Unser Lehrer meint immer man kann so ein Projekt auch schon mal vorraus planen bevor man sich überhaupt an den PC setzt.
LG
GericasS
Tilo - Mi 09.04.08 09:25
Titel: Re: Große Zahlen verknoten...
tah_rul0r hat folgendes geschrieben: |
also:
in einem editfeld soll eine große zahl, bsp. 2947603 eingelesen werden... dann sollen die einzelnen zahlen verknoten werden.. also 2->9->4->7->6->0->3... das ganze soll mit einem constructor objektorientiert gemacht werden...
im endeffekt soll man eine 2. zahl einketten, und die mit der ersten addieren... also die knoten jeweils, und natürlich immer den rest mitgeben, 2. möglichkeit: die lange zahl bzw. kette mit einer zahl von 0-10 multiplizieren...
|
besser wäre es die Zahlen andersherum zu "verknoten".
aus 2947603 wird 3>0>6>7>4>9>2.
Das Hat den Vorteil bei Opertionen das der Anfang immer die EinerStelle ist.
Das Schlüsselwort constructor bedeutet Du brauchst eine Klasse. Stichwort: Klassendefinition.
Zum verknoten nihmst Du Pointer bzw ObjektReferenzen.
tah_rul0r - Mi 09.04.08 22:53
Titel: lösungsansatz wenn mans so nennen kann^^
Mein Anfang...
wenn das ein und auslesen mal funktionieren würde, wärs ja mal ein anfang...
aber das schaff ich leider auch noch nicht...
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:
| unit number_unit;
interface uses stdctrls,Dialogs,extctrls,Sysutils;
type TKnoten=class(TObject) nummer:integer; next:TKnoten; constructor Create(s:integer); end;
type TListe=class(TObject) anf:TKnoten; Constructor Create; procedure lifopush; procedure ausgabe; procedure add; procedure multi; end;
implementation
Constructor TKnoten.Create(s:integer); begin nummer:=0;next:=nil; end;
Constructor Tliste.Create; begin anf:=nil; end;
procedure lifopush(zahl:string); var neu: TKnoten; i: integer; begin for i:= 1 to length(zahl) do begin new(neu); neu.nummer:=copy(zahl,i,length(zahl)); neu.next:=anf; anf:=neu; end; end;
procedure ausgabe; begin counter:= 0; while anfang <> nil do zahl:= zahl + inttostr(neu.nummer); end;
procedure add; begin
end;
procedure multi; begin
end;
end. |
Moderiert von
Christian S.: Quote- durch Delphi-Tags ersetzt
Marc. - Do 10.04.08 00:37
Hi!
Verkette Listen, herrlisch. Schreib ich morgen ne Klausur drüber. Wenn Du willst, schreib ich Dir ein halbwegs vernünftiges Tutorial oder erklär es Dir morgen hier nocheinmal genauer. ;)
Oder haben wir bereits eins in der Library?
Cheers,
Marc.
Tilo - Do 10.04.08 06:53
Titel: Re: lösungsansatz wenn mans so nennen kann^^
satt
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12:
| procedure lifopush(zahl:string); var neu: TKnoten; i: integer; begin for i:= 1 to length(zahl) do begin new(neu); neu.nummer:=copy(zahl,i,length(zahl)); neu.next:=anf; anf:=neu; end; end; |
lieber so schreiben:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12:
| procedure lifopush(zahl:string); var neu: TKnoten; i: integer; begin for i:= 1 to length(zahl) do begin new(neu); neu.nummer:=copy(zahl,i,1); neu.next:=anf; anf:=neu; end; end; |
nächster Fehler:
Die Methode Ausgabe besser als Function mit Integer als Rückgabetyp deklarieren, die Variable "Zahl" lokal in der MEthode als String definieren und am Anfang der Methode auf '' setzen(Zahl:='').
weiterer Fehler:
Der Methode lifopush bitte auch in der Klassendefinition die Parameterliste hinzufügen.
noch ein Fehler:
in der Implementation der MEthode immer den Klassennamen vorran schreiben:
Delphi-Quelltext
1:
| procedure TMyClass.MyProd |
letzter fehler Komplex: unvollständige Constructor Methode und Fehlende Destructor MEthode.
Constructoren bitte so:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11:
| Constructor TmyClass.Create; begin inherited Create; end;
destructor TmyClass.destroy; begin inhreited destroy; end; |
Das waren erstmal die Sachen die ich so gefunden habe.
kleines Edit:
highlight durch delphi ersetzt.
tah_rul0r - Do 10.04.08 07:25
Marc. hat folgendes geschrieben: |
Hi!
Verkette Listen, herrlisch. Schreib ich morgen ne Klausur drüber. Wenn Du willst, schreib ich Dir ein halbwegs vernünftiges Tutorial oder erklär es Dir morgen hier nocheinmal genauer. ;)
Oder haben wir bereits eins in der Library?
Cheers,
Marc. |
perfekt!
versteh das leider eher weniger^^
@tilo
puh^^... teilweise versteh ich deine aussagen leider nicht ^^
bzw. das meiste check ich garnicht ;-)
lg, mike
Tilo - Do 10.04.08 08:07
Titel: Re: lösungsansatz wenn mans so nennen kann^^
Ich zeige Dir dann einfach mal was ich meinte:
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:
| unit number_unit;
interface uses stdctrls,Dialogs,extctrls,Sysutils;
type TKnoten=class(TObject) nummer:integer; next:TKnoten; constructor Create(s:integer); end;
type TListe=class(TObject) anf:TKnoten; Constructor Create; destructor destroy; procedure lifopush(zahl:string); function ausgabe:string; procedure add; procedure multi; end;
implementation
Constructor TKnoten.Create(s:integer); begin nummer:=s;next:=nil; end;
Constructor Tliste.Create; begin inherited Create; anf:=nil; end;
procedure Tliste.lifopush(zahl:string); var neu: TKnoten; i: integer; begin for i:= 1 to length(zahl) do begin new(neu); neu:=TKnoten.create(strtoint(zahl[i])); neu.next:=anf; anf:=neu; end; end;
function Tliste.ausgabe:string; var zahl:string;begin zahl:=''; while anfang <> nil do zahl:= zahl + inttostr(neu.nummer); result:=zahl; end;
destructor Tliste.destroy; var alt1,alt2:TKnoten; begin alt1:=neu; while alt1<>nil do begin alt2:=alt1; alt1:=alt1.next; alt2.free; dispose(alt2); end; inherited destroy; end; |
Der Wert den die Variable Result am Ende einer Function hat wird übergeben.
Welchen Compiler verwendest Du? Die Fehlermeldungen die Du beim Compilierungsversuch erhälst sind manchmal recht hilfreich;
Zusätzlich habe ich die Function lifopush umgeändert. da deine TKnoten Klasse im Constructor den Parameter s:integer hat kann man den gleich mitverwenden.
Ich hoffe das hilft.
gruß Tilo
tah_rul0r - Do 10.04.08 16:47
Titel: Re: lösungsansatz wenn mans so nennen kann^^
Habs jetzt auf deine version umgeändert... aber ^^ :
ein paar fehlermeldungen ;-)
[Warning] number_unit.pas(18): Method 'Destroy' hides virtual method of base type 'TObject'
[Error] number_unit.pas(53): Incompatible types
[Error] number_unit.pas(54): Not enough actual parameters
[Error] number_unit.pas(55): Missing operator or semicolon
[Error] number_unit.pas(55): Incompatible types: 'Integer' and 'String'
[Error] number_unit.pas(70): Undeclared identifier: 'neu'
[Error] number_unit.pas(79): Undeclared identifier: 'neu'`
[Error] number_unit.pas(85): Incompatible types
[Error] number_unit.pas(91): Declaration expected but end of file found
[Error] number_unit.pas(21): Unsatisfied forward or external declaration: 'TListe.add'
[Error] number_unit.pas(22): Unsatisfied forward or external declaration: 'TListe.multi'
[Fatal Error] form.pas(7): Could not compile used unit 'number_unit.pas'
Tilo - Do 10.04.08 21:47
Titel: Re: lösungsansatz wenn mans so nennen kann^^
Hab ja nicht behauptet das es fehlerfrei ist.
Dazu meine Bemerkungen:
[Warning] number_unit.pas(18): Method 'Destroy' hides virtual method of base type 'TObject'
Vergess ich ständig. In der Deklaration hinter "destructor destroy;" das Schlüsselwort "override;" anfügen.
[Error] number_unit.pas(53): Incompatible types
[Error] number_unit.pas(85): Incompatible types
Kann passieren. In der Entsprechenden Zeile korreckte Typenumwandlung vornehmen oder die Variablen in kompatiple Typen umdeklarieren.
[Error] number_unit.pas(54): Not enough actual parameters
Da fehlt was
[Error] number_unit.pas(55): Missing operator or semicolon
wahrscheinlich das letztere
[Error] number_unit.pas(55): Incompatible types: 'Integer' and 'String'
entweder strtoint oder inttostr verwenden
[Error] number_unit.pas(70): Undeclared identifier: 'neu'
[Error] number_unit.pas(79): Undeclared identifier: 'neu'
"neu" als den Variablentyp definieren der er sein soll.
[Error] number_unit.pas(91): Declaration expected but end of file found
irgend wo entweder ein "begin" zu viel oder ein "end;" Eventuell hinterdem letzten "end" einen Punkt setzen
[Error] number_unit.pas(21): Unsatisfied forward or external declaration: 'TListe.add'
[Error] number_unit.pas(22): Unsatisfied forward or external declaration: 'TListe.multi'
Entweder schreibst Du die Methode oder löscht sie aus der Deklaration. Da sie ohne Code waren habe ich dort auch nichts gemacht.
[Fatal Error] form.pas(7): Could not compile used unit 'number_unit.pas'[/quote]
Wenn Du die anderen Fehler beseitig hast verschwindet diese Meldung von alleine.
So ich muss jetzt mal Schluss machen ->Kino.
einen schönen Abend noch.
tah_rul0r - Fr 11.04.08 10:08
Titel: Re: lösungsansatz wenn mans so nennen kann^^
so, hab jetzt alles im griff...
ausser:
Tilo hat folgendes geschrieben: |
[Error] number_unit.pas(53): Incompatible types
[Error] number_unit.pas(85): Incompatible types
Kann passieren. In der Entsprechenden Zeile korreckte Typenumwandlung vornehmen oder die Variablen in kompatiple Typen umdeklarieren.
|
da gehts um die "neu"-variable... was da incompatible is, hab ich keine ahnung^^
die procedure selber ist jetzt so: (hoffe es stimmt)
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13:
| procedure Tliste.lifopush(zahl:string); var neu: TKnoten; i: integer; begin for i:= 1 to length(zahl) do begin new(neu); neu:=TKnoten.create(strtoint(zahl[i])); neu.nummer:=strtoint(copy(zahl,i,1)); neu.next:=anf; anf:=neu; end; end; |
dankeschön für hilfe,
lg, mike
Tilo - Fr 11.04.08 10:59
Titel: Re: lösungsansatz wenn mans so nennen kann^^
Wenn es die Stelle ist dann probier mal diese Alternative:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17:
| procedure Tliste.lifopush(zahl:string); var neu: TKnoten; i: integer; buffstr:string; buffint:integer; begin for i:= 1 to length(zahl) do begin new(neu); buffstr:=zahl[i]; buffint:=strtoint(buffstr); neu:=TKnoten.create(buffint); neu.nummer:=strtoint(copy(zahl,i,1)); neu.next:=anf; anf:=neu; end; end; |
tah_rul0r - Fr 11.04.08 13:00
Titel: Re: lösungsansatz wenn mans so nennen kann^^
genau das selbe...
bei der zeile...
new(neu); // ...kommt die Fehlermeldung [Error] number_unit.pas(50): Incompatible types
Danach sagt er immer wenn "neu.*" vorkommt "Undeclared Identifier"
check ich leider überhaupt nicht, was kann bei new(neu) denn falsch sein...
Tilo - Fr 11.04.08 19:41
Dann wirst Du um die Verwendung von Pointern nicht durmher kommen.
Definiere eine Pointerklasse für TKnoten.
z.B. so:
Delphi-Quelltext
1: 2: 3: 4: 5: 6:
| type PKnoten=^TKnoten TKnoten=class(TObject) nummer:integer; next:PKnoten; constructor Create(s:integer); end; |
Überall wo Du TKnoten stehen hast schreibst Du nun PKnoten hin.
zur veranschaulichung:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10:
| procedure someProc; var aknoten:PKnoten; begin new(aknoten); aknoten^:=TKnoten.Create(4); aknoten^.next:=nil; aknoten^.free; dispose(aknoten); end; |
Ich hoffe das löst das Problem.
Hidden - Fr 11.04.08 20:37
Titel: Re: lösungsansatz wenn mans so nennen kann^^
tah_rul0r hat folgendes geschrieben: |
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13:
| procedure Tliste.lifopush(const zahl:string); var neu: TKnoten; i: integer; begin for i:= 1 to length(zahl) do begin new(neu); neu:=TKnoten.create(strtoint(zahl[i])); neu.nummer:=strtoint(copy(zahl,i,1)); neu.next:=anf; anf:=neu; end; end; | |
Hi,
Bitte den String-Parameter als const deklarieren. Ein String wird bei der Übergabe kopiert, damit mit dieser Kopie ohne Beeinträchtigung des Originals gearbeitet werden kann. Im Normalfall willst du das aber garnicht: Du arbeitest entweder mit einer Kopie, untersuchst das Original nur, etc.
Wenn du das Original verändern willst, deklariere den Parameter als var.
mfG,
tah_rul0r - Do 17.04.08 21:38
Titel: Momentaner Stand...
ich brings einfach nicht auf die Reihe^^
Form
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:
| unit form;
interface
uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, Spin, StdCtrls, ExtCtrls, number_unit;
type TForm1 = class(TForm) NumEd: TEdit; Einbtn: TButton; Ausbtn: TButton; addbtn: TButton; multibtn: TButton; SpinEdit1: TSpinEdit; Label1: TLabel; Panel1: TPanel; Panel2: TPanel; Panel3: TPanel; Label2: TLabel; procedure EinbtnClick(Sender: TObject); procedure AusbtnClick(Sender: TObject); procedure addbtnClick(Sender: TObject); procedure multibtnClick(Sender: TObject); procedure FormCreate(Sender: TObject); private public end;
var Form1: TForm1; bignum : Tliste; implementation
{$R *.dfm}
procedure TForm1.EinbtnClick(Sender: TObject); begin bignum.lifopush(numed.text); end;
procedure TForm1.AusbtnClick(Sender: TObject); begin bignum.ausgabe; end;
procedure TForm1.addbtnClick(Sender: TObject); begin end;
procedure TForm1.multibtnClick(Sender: TObject); begin end;
procedure TForm1.FormCreate(Sender: TObject); begin bignum:= Tliste.create; end;
end. |
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:
| unit number_unit;
interface uses stdctrls,Dialogs,extctrls,Sysutils;
type TKnoten=class(TObject) nummer:integer; next:TKnoten; constructor Create(s:integer); end;
type TListe=class(TObject) anf:TKnoten; Constructor Create; destructor destroy;override; procedure lifopush(zahl:string); function ausgabe:string; end; var neu: TKnoten; implementation
Constructor TKnoten.Create(s:integer); begin nummer:=s;next:=nil;
end;
Constructor Tliste.Create; begin inherited Create; anf:=nil; end;
procedure Tliste.lifopush(zahl:string); var i: integer; begin for i:= 1 to length(zahl) do begin neu:=TKnoten.create(strtoint(zahl[i])); neu.nummer:=strtoint(copy(zahl,i,1)); neu.next:=anf; anf:=neu; end; end;
function Tliste.ausgabe:string; var zahlstr:string; begin zahlstr:=''; while anf <> nil do zahlstr:= zahlstr + inttostr(neu.nummer); result:=zahlstr; panel1.caption:=zahlstr; end;
destructor Tliste.destroy; var alt1,alt2:TKnoten; begin alt1:=neu; while alt1<>nil do begin alt2:=alt1; alt1:=alt1.next; alt2.free; end; inherited destroy; end;
end. |
Tilo - Do 17.04.08 22:48
Zitat: |
[Error] number_unit.pas(62): Undeclared identifier: 'panel1';
|
Kann es sein das Du das Panel umbenannt hast?
Ansonsten:
Wo hakt es?
jaenicke - Do 17.04.08 23:28
Er hat es nicht umbenannt, sondern er versucht es aus einer anderen Klasse (TListe) zu erreichen als der in der es deklariert ist (der Formular-Klasse TForm1).
Lösung: Binde unterhalb von implementation die Formular-Unit form per uses ein und greife dann via Form1.Panel1 auf das Panel zu ;-):
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8:
| implementation
uses form;
Form1.Panel1. ... |
tah_rul0r - Fr 18.04.08 09:49
jaenicke hat folgendes geschrieben: |
Er hat es nicht umbenannt, sondern er versucht es aus einer anderen Klasse (TListe) zu erreichen als der in der es deklariert ist (der Formular-Klasse TForm1).
Lösung: Binde unterhalb von implementation die Formular-Unit form per uses ein und greife dann via Form1.Panel1 auf das Panel zu ;-): Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8:
| implementation
uses form;
Form1.Panel1. ... | |
Nein, das Funzt leider nicht ;-)... steht immer noch dasselbe da...
nach implementation hab ich jetzt uses form;
unten form.panel1.caption:= blabla ...
gleiche Fehlermeldung ;-)
aja, kann mir jemand sagen wie ich die addition / multiplikation aufstellen muss??
lg
Tilo - Fr 18.04.08 10:40
Titel: Re: Momentaner Stand...
Ändere mal die markierten Stellen ab:
Form
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:
| unit form;
interface
uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, Spin, StdCtrls, ExtCtrls, number_unit;
type TForm1 = class(TForm) ... end;
var Form1: TForm1; bignum : Tliste; implementation
{$R *.dfm}
...
procedure TForm1.AusbtnClick(Sender: TObject); begin form1.panel1.caption:=bignum.ausgabe; end; ... |
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:
| unit number_unit;
interface uses stdctrls,Dialogs,extctrls,Sysutils;
type TKnoten=class(TObject) ... end;
type TListe=class(TObject) ... end; var neu: TKnoten; implementation
...
function Tliste.ausgabe:string; var zahlstr:string; begin zahlstr:=''; while anf <> nil do zahlstr:= zahlstr + inttostr(neu.nummer); result:=zahlstr; end;
... |
... bedeutet nur das ich die Stellen ausgelassen habe -> nicht löschen!
tah_rul0r - Di 22.04.08 09:46
ok, funzen tuts jetzt mal...
nur hängt er sich komischerweise bei der ausgabe auf, kann mir jmnd. sagen warùm??
lg
Tilo - Di 22.04.08 13:50
Guck Dir mal die Ausgabefunktion an. Das ist eine Endlosschleife.
Du mußt Dich vom Anfang der Kette bis zum Ende "durchhangeln"
Das geht so:
1) Ein Pointer ist der Anfang.
2) Diesen Pointer in einer zwischenvariablen(z.B. aPointer) speichern
3) Solange aPointer nicht ungültig ist(z.B. nil) tue
3.1) Verarbeite Info aus dem Ziel des Pointers,
3.2) PointerZiel enthält einen weiteren Pointer. Dies ist der Verweis auf den nächsten Knoten ->aPointer mit neuer Zieladresse überschreiben.
tah_rul0r - Mo 28.04.08 21:31
edit...
so, ich müssts leider morgen abgeben... :(
jetzt stören mich noch folgende Punkte:
- Ausgabe erfolgt seitenverkehrt (da es auch rückwärts eingelesen wird... wie mach ichs da bei der ausgabe anders???)
- Endlosschleife bei der Addierprozedur
- Endlosschleife bei der Multiplizierprozedur
ich bitte euch noch um verbesserung, wenn alles passt geh ich euch morgen nichtmehr auf die nerven ;-)
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:
| unit form;
interface
uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, Spin, StdCtrls, ExtCtrls, number_unit;
type TForm1 = class(TForm) NumEd: TEdit; Einbtn: TButton; Ausbtn: TButton; addbtn: TButton; multibtn: TButton; spanz: TSpinEdit; Label1: TLabel; Panel1: TPanel; Panel2: TPanel; Panel3: TPanel; Label2: TLabel; procedure EinbtnClick(Sender: TObject); procedure AusbtnClick(Sender: TObject); procedure addbtnClick(Sender: TObject); procedure multibtnClick(Sender: TObject); procedure FormCreate(Sender: TObject); private public end;
var Form1: TForm1; bignum : TListe; bignum1 : Tliste; implementation
{$R *.dfm}
procedure TForm1.EinbtnClick(Sender: TObject); begin bignum.lifopush(numed.text); end;
procedure TForm1.AusbtnClick(Sender: TObject); begin bignum.ausgabe; end;
procedure TForm1.addbtnClick(Sender: TObject); var hilf: string; begin hilf:= numed.Text; bignum1.add(hilf); end;
procedure TForm1.multibtnClick(Sender: TObject); begin bignum.multi(spanz.value); end;
procedure TForm1.FormCreate(Sender: TObject); begin bignum:= TListe.create; bignum1:= TListe.create; end;
end. |
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: 100: 101: 102: 103: 104: 105: 106: 107: 108: 109: 110: 111: 112: 113: 114: 115: 116: 117: 118: 119: 120: 121: 122: 123: 124: 125: 126: 127: 128: 129: 130: 131: 132: 133: 134: 135: 136: 137: 138: 139: 140: 141: 142: 143: 144: 145: 146: 147: 148: 149: 150: 151: 152:
| unit number_unit;
interface uses stdctrls,Dialogs,extctrls,Sysutils;
type TKnoten=class(TObject) nummer:integer; next:TKnoten; constructor Create(s:integer); end;
TListe=class(TObject) anf:TKnoten; Constructor Create; destructor destroy;override; procedure lifopush(zahl:string); function ausgabe:string; function ausgabe2:string; procedure add(zahl:string); procedure multi(koeff:integer); end; var neu: TKnoten;
implementation
uses form; Constructor TKnoten.Create(s:integer); begin nummer:=s;next:=nil;
end;
Constructor Tliste.Create; begin inherited Create; anf:=nil; end;
procedure Tliste.lifopush(zahl:string); var i: integer; begin anf:=nil; for i:= 1 to length(zahl) do begin neu:=TKnoten.create(strtoint(zahl[i])); neu.nummer:=strtoint(copy(zahl,i,1)); neu.next:=anf; anf:=neu; end; end;
procedure Tliste.add(zahl:string); var zahlstr:string; lauf,lauf2: Tknoten; i,h: integer; begin lauf:= bignum.anf; lauf2:= bignum1.anf; anf:=nil; h:= 0; anf:= lauf; zahlstr:= ''; for i:= 1 to length(zahl) do begin neu:=TKnoten.create(strtoint(zahl[i])); neu.nummer:=strtoint(copy(zahl,i,1)); neu.next:=anf; anf:=neu; end; ausgabe2; while lauf <> nil do begin zahlstr:= zahlstr+ inttostr((lauf.nummer+lauf2.nummer) mod 10 + h); h:= (lauf.nummer + lauf2.nummer) div 10; lauf:= lauf.next; end; form1.panel3.Caption:=zahlstr; end;
function Tliste.ausgabe:string; var zahlstr:string; lauf:Tknoten; begin zahlstr:=''; lauf:=anf; while lauf <> nil do begin zahlstr:= zahlstr + inttostr(lauf.nummer); lauf:=lauf.next; end; result:=zahlstr; form1.panel1.caption:=zahlstr; end;
function Tliste.ausgabe2:string; var zahlstr:string; lauf:Tknoten; begin zahlstr:=''; lauf:=anf; while lauf <> nil do begin zahlstr:= zahlstr + inttostr(lauf.nummer); lauf:=lauf.next; end; result:=zahlstr; form1.panel2.caption:=zahlstr; end;
procedure Tliste.multi(koeff:integer); var lauf: Tknoten; h: integer; zahlstr: string; begin h:= 0; lauf:=anf; zahlstr:= ''; form1.panel2.caption:= ' x '+inttostr(koeff)+' '; if koeff= 0 then begin anf:= nil; form1.panel3.caption:= '0'; end else while lauf <> nil do begin zahlstr:=zahlstr + inttostr((lauf.nummer mod 10 * koeff)+h); h:= lauf.nummer div 10; lauf:= lauf.next; end; form1.panel3.caption:= zahlstr; end;
destructor Tliste.destroy; var alt1,alt2:TKnoten; begin alt1:=neu; while alt1<>nil do begin alt2:=alt1; alt1:=alt1.next; alt2.free; end; inherited destroy; end;
end. |
Liebe Grüße, und bitte helft mir noch einmal...
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!