Autor Beitrag
tah_rul0r Threadstarter
Hält's aus hier
Beiträge: 10



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starofftopic starofftopic starofftopic starofftopic star
Beiträge: 1098
Erhaltene Danke: 13

Win7 geg. WInXP oder sogar Win98
Rad2007
BeitragVerfasst: 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 Threadstarter
Hält's aus hier
Beiträge: 10



BeitragVerfasst: 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 ;-)


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:
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
    { Private declarations }
  public
    { Public declarations }
  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.


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:
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);
    //    procedure lifopush2(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...