| Autor |
Beitrag |
jsbach
      
Beiträge: 53
Win XP
D5 Ent
|
Verfasst: Di 09.11.10 22:28
Hallo,
ich hätte da eine Anfängerfrage. Ich möchte große Zahlen (Extended) in einem zweidimensionalen Array speichern. Dephi verlangt jedoch Integer Zahlen. Geht das überhaupt?
Gruß, Mike
|
|
Narses
      

Beiträge: 10183
Erhaltene Danke: 1256
W10ent
TP3 .. D7pro .. D10.2CE
|
Verfasst: Di 09.11.10 22:33
Moin!
Warum nicht. Zeig mal deinen Code.
cu
Narses
_________________ There are 10 types of people - those who understand binary and those who don´t.
|
|
jsbach 
      
Beiträge: 53
Win XP
D5 Ent
|
Verfasst: Di 09.11.10 22:46
Hallo das ging ja schnell,
ich habe versucht den array und die anderen Variablen als extended zu deklarieren und bekam die Fehlermeldung in Zeile 39: Inkompatible Typen: 'Integer' und 'Extended'
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:
| var Form1: TForm1;
k,p,q,n,j,l,a: variant; u,r,i,y,Gg,Sg,Tg: integer;
M: array[0..500, 0..500] of integer;
Tupel: TStringList;
implementation
{$R *.DFM}
procedure TForm1.Button1Click(Sender: TObject); begin
Tupel:=TStringList.Create;
M[1,0]:=1; M[1,1]:=1; M[1,2]:=1; M[2,0]:=1; M[2,1]:=1; M[2,2]:=1; M[3,0]:=2; M[3,1]:=1; M[3,2]:=1; M[4,0]:=3; M[4,1]:=1; M[4,2]:=1; M[5,0]:=7; M[5,1]:=2; M[5,2]:=1; M[6,0]:=12; M[6,1]:=3; M[6,2]:=1;
u:=7;
repeat
i:=0; j:=0; k:=0; p:=0; a:=0;
if u>17 then a:=M[u-17,0];
repeat
if i>3 then j:=j+1; if i>6 then k:=k+1;
if i>8 then begin l:=1; p:=0; repeat q:=l*(l+1)/2; r:=i-3-l; p:=p+q*(M[u-5,r]-a*M[12,r]); l:=l+1; until l=i-7; end;
M[u,4+i]:= M[u-5,0]-a*M[12,0]-i*(M[u-5,1]-a*M[12,1])+j*(j+1)/2*(M[u-5,2]-a*M[12,2])-k*k*(M[u-5,4]-a*M[12,4])-p;
i:=i+1;
until i=u-6;
M[u,3]:=M[u,4];
Gg:=0; Tg:=0; Sg:=0; y:=2; repeat y:=y+1; n:=y*(y+5)/2; Gg:=Gg+M[u,y]; Sg:=Sg+y*M[u,y]; Tg:=Tg+n*M[u,y]; until y=u-3;
M[u,0]:=Tg; M[u,1]:=Sg; M[u,2]:=Gg;
Tupel.Add(Format('%d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d', [ M[u,3], M[u,4], M[u,5], M[u,6], M[u,7], M[u,8], M[u,9], M[u,10], M[u,11], M[u,12], M[u,13], M[u,14], M[u,15], M[u,16], M[u,17], M[u,18], M[u,19], M[u,20], M[u,21], M[u,22], M[u,23], M[u,24], M[u,25], M[u,26], M[u,27], M[u,28], M[u,29], M[u,30], M[u,31] ]));
Tupel.Add(Format('%d %d %d %d', [ u, Tg, Sg, Gg ]));
Tupel.SaveToFile('F:\Algorithmus.txt');
u:=u+1;
until u>30; end; |
|
|
bummi
      
Beiträge: 1248
Erhaltene Danke: 187
XP - Server 2008R2
D2 - Delphi XE
|
Verfasst: Mi 10.11.10 00:25
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:
| unit Unit2;
interface
uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls;
type TForm2 = class(TForm) Button1: TButton; procedure Button1Click(Sender: TObject); private public end;
var Form2: TForm2;
implementation
var k,p,q,n,j,l,a: Variant; u,r,i,y:Integer; Gg,Sg,Tg: Extended;
M: array[0..500, 0..500] of Extended;
Tupel: TStringList; {$R *.dfm}
procedure TForm2.Button1Click(Sender: TObject); begin
Tupel:=TStringList.Create;
M[1,0]:=1; M[1,1]:=1; M[1,2]:=1; M[2,0]:=1; M[2,1]:=1; M[2,2]:=1; M[3,0]:=2; M[3,1]:=1; M[3,2]:=1; M[4,0]:=3; M[4,1]:=1; M[4,2]:=1; M[5,0]:=7; M[5,1]:=2; M[5,2]:=1; M[6,0]:=12; M[6,1]:=3; M[6,2]:=1;
u:=7;
repeat
i:=0; j:=0; k:=0; p:=0; a:=0;
if u>17 then a:=M[u-17,0];
repeat
if i>3 then j:=j+1; if i>6 then k:=k+1;
if i>8 then begin l:=1; p:=0; repeat q:=l*(l+1)/2; r:=i-3-l; p:=p+q*(M[u-5,r]-a*M[12,r]); l:=l+1; until l=i-7; end;
M[u,4+i]:= M[u-5,0]-a*M[12,0]-i*(M[u-5,1]-a*M[12,1])+j*(j+1)/2*(M[u-5,2]-a*M[12,2])-k*k*(M[u-5,4]-a*M[12,4])-p;
i:=i+1;
until i=u-6;
M[u,3]:=M[u,4];
Gg:=0; Tg:=0; Sg:=0; y:=2; repeat y:=y+1; n:=y*(y+5)/2; Gg:=Gg+M[u,y]; Sg:=Sg+y*M[u,y]; Tg:=Tg+n*M[u,y]; until y=u-3;
M[u,0]:=Tg; M[u,1]:=Sg; M[u,2]:=Gg;
Tupel.Add(Format('%.0f %.0f %.0f %.0f %.0f %.0f %.0f %.0f %.0f %.0f %.0f %.0f %.0f %.0f %.0f %.0f %.0f %.0f %.0f %.0f %.0f %.0f %.0f %.0f', [ M[u,3], M[u,4], M[u,5], M[u,6], M[u,7], M[u,8], M[u,9], M[u,10], M[u,11], M[u,12], M[u,13], M[u,14], M[u,15], M[u,16], M[u,17], M[u,18], M[u,19], M[u,20], M[u,21], M[u,22], M[u,23], M[u,24], M[u,25], M[u,26], M[u,27], M[u,28], M[u,29], M[u,30], M[u,31] ]));
Tupel.Add(Format('%d %.0f %.0f %.0f', [u, Extended(Tg), Extended(Sg), Extended(Gg) ]));
u:=u+1;
until u>30; Tupel.SaveToFile('c:\temp\Algorithmus.txt'); end; end. } |
_________________ Das Problem liegt üblicherweise zwischen den Ohren H₂♂
DRY DRY KISS
|
|
jsbach 
      
Beiträge: 53
Win XP
D5 Ent
|
Verfasst: Mi 10.11.10 01:33
super, danke!
da wäre ich ja nie drauf gekommen.
gruß, mike
|
|
jsbach 
      
Beiträge: 53
Win XP
D5 Ent
|
Verfasst: So 20.03.11 23:38
Hallo, ich stehe gerade wieder vor demselben Problem wie im Oktober. Ich habe meinen Algorithmus neu programmiert, doch
in Zeile 36 gbit es eine ungültige Gleitkommadivision. Ich weiß nicht warum? Ist der array als integer deklariert funktioniert es (/ durch div ersetzt), aber die Zahlen werden dann zu groß.
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:
| var Form1: TForm1; u,k,i: integer; Liste: TStringList; g: array[1..30, 1..30] of extended;
implementation {$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject); begin
Liste:=TStringList.Create;
g[1,6]:=1; g[2,6]:=1; g[3,6]:=3; g[4,6]:=12; g[1,7]:=1; g[2,7]:=1; g[3,7]:=2; g[4,7]:=7; g[5,7]:=30; g[1,8]:=1; g[2,8]:=2; g[3,8]:=2; g[4,8]:=5; g[5,8]:=19; g[6,8]:=85; g[1,9]:=1; g[2,9]:=2; g[3,9]:=3; g[4,9]:=3; g[5,9]:=9; g[6,9]:=37; g[7,9]:=173; g[1,10]:=1; g[2,10]:=3; g[3,10]:=5; g[4,10]:=7; g[5,10]:=7; g[6,10]:=23; g[7,10]:=99; g[8,10]:=476;
u:=11; repeat g[u-5,u] := g[u-7,u-5]; g[u-6,u] := g[u-5,u];
k:=6; repeat g[u-k-1,u] := g[u-k,u] -g[u-8,u-5]; k:=k+1; until k>8;
k:=8; repeat g[u-k-2,u] := -g[u-k,u] +2*g[u-k-1,u] +g[u-9,u-5]; k:=k+1; until k>10;
k:=10; repeat g[u-k-3,u] := g[u-k,u] -3*g[u-k-1,u] +3*g[u-k-2,u] -g[u-k,u-5]; k:=k+1; until k>13;
i:=1; g[u-4,u]:=0; g[u-3,u]:=0; g[u-2,u]:=0; repeat g[u-4,u]:=g[u-4,u]+g[i,u]; g[u-3,u]:=g[u-3,u]+g[i,u]*(u-i-2); g[u-2,u]:=g[u-2,u]+g[i,u]*(u-i-2)*(u-i+3)/2; i:=i+1; until i>u-5;
u:=u+1; until u>17;
u:=18; repeat g[u-5,u] := g[u-7,u-5] -g[u-17,u-12]*g[10,12]; g[u-6,u] := g[u-5,u];
k:=6; repeat g[u-k-1,u] := g[u-k,u] -g[u-8,u-5] +g[u-17,u-12]*g[9,12]; k:=k+1; until k>8;
k:=8; repeat g[u-k-2,u] := -g[u-k,u] +2*g[u-k-1,u] +g[u-9,u-5] -g[u-17,u-12]*g[8,12]; k:=k+1; until k>10;
k:=10; repeat g[u-k-3,u] := g[u-k,u] -3*g[u-k-1,u] +3*g[u-k-2,u] -g[u-k,u-5] +g[u-17,u-12]*g[17-k,12]; k:=k+1; until k>25;
i:=1; g[u-4,u]:=0; g[u-3,u]:=0; g[u-2,u]:=0; repeat g[u-4,u]:=g[u-4,u]+g[i,u]; g[u-3,u]:=g[u-3,u]+g[i,u]*(u-i-2); g[u-2,u]:=g[u-2,u]+g[i,u]*(u-i-2)*(u-i+3)/2; i:=i+1; until i>u-5;
u:=u+1; until u>29;
u:=11; repeat Liste.Add(Format('%d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d', [u, (g[1,u]), (g[2,u]), (g[3,u]), (g[4,u]), (g[5,u]), (g[6,u]), (g[7,u]), (g[8,u]), (g[9,u]), (g[10,u]), (g[11,u]), (g[12,u]), (g[13,u]), (g[14,u]), (g[15,u]), (g[16,u]), (g[17,u]), (g[18,u]), (g[19,u]), (g[20,u]), (g[21,u]), (g[22,u]), (g[23,u]), (g[24,u]), (g[25,u]), (g[26,u]), (g[27,u]), (g[28,u]), (g[29,u]), (g[30,u])])); u:=u+1; until u>29;
Liste.SaveToFile('F:\MIKES LISTE.txt');
close; end; |
|
|
Gerd Kayser
      
Beiträge: 632
Erhaltene Danke: 121
Win 7 32-bit
Delphi 2006/XE
|
Verfasst: Mo 21.03.11 01:24
jsbach hat folgendes geschrieben : | | Ist der array als integer deklariert funktioniert es (/ durch div ersetzt), aber die Zahlen werden dann zu groß. |
Geht int64 denn nicht?
|
|
Bergmann89
      
Beiträge: 1742
Erhaltene Danke: 72
Win7 x64, Ubuntu 11.10
Delphi 7 Personal, Lazarus/FPC 2.2.4, C, C++, C# (Visual Studio 2010), PHP, Java (Netbeans, Eclipse)
|
Verfasst: Mo 21.03.11 09:34
Hey,
sicher das es dieser Fehler ist? Weil in Zeile 36 gibt es gar keine Division?! Du kannsts ja auch ma mit Extended probieren, das ist der größte Typ den es gibt (10 Byte).
MfG Bergmann.
_________________ Ich weiß nicht viel, lern aber dafür umso schneller^^
|
|
Gammatester
      
Beiträge: 328
Erhaltene Danke: 101
|
Verfasst: Mo 21.03.11 10:44
Bergmann89 hat folgendes geschrieben : | | sicher das es dieser Fehler ist? Weil in Zeile 36 gibt es gar keine Division?! Du kannsts ja auch ma mit Extended probieren, das ist der größte Typ den es gibt (10 Byte). |
Er benutzt doch schon extended. Mit ziemlicher Sicherheit ist es kein Divisionsfehler (wahrscheinlich ungültige Gleitkomma operation).
Ich denke, es ist ein Index-Bug und Rangecheck ist ausgeschaltet. In Zeile 36 wird u.a. g[u-k-1,u] mit u=11 und k=10 referenziert (es gibt aber auch eine Zuweisung an g[11-13-3,u] d.h. an g[-5,u], wenn nicht schon vorher der Fehler aufgetreten ist) Damit ist der erste Index=0, aber g ist als g: array[1..30, 1..30] of extended deklariert. Ohne Rangecheck wird deshalb Schrott gelesen, der den Fehler produziert.
Also: Rangecheck einschalten und Index-Logik überprüfen.
|
|
jsbach 
      
Beiträge: 53
Win XP
D5 Ent
|
Verfasst: Mo 21.03.11 12:35
Hallo!
Stimmt, es hieß Gleitkommaoperation. Habe jetzt "if k>=u then break;" nach k:=k+1; in Zeile 36 und 63 eingebaut. In Zeile 83 dann %d in %.0f ersetzt. Der Gleitkommafehler scheint damit behoben zu sein, bekomme jetzt allerdings eine Zugriffsverletzung bei 0043A739 angezeigt. Die Stelle im Code wird nicht markiert.
Gruß, Mike
|
|
bummi
      
Beiträge: 1248
Erhaltene Danke: 187
XP - Server 2008R2
D2 - Delphi XE
|
Verfasst: Mo 21.03.11 12:47
g[17-k,12]; k:=k+1; until k>25
_________________ Das Problem liegt üblicherweise zwischen den Ohren H₂♂
DRY DRY KISS
|
|
jsbach 
      
Beiträge: 53
Win XP
D5 Ent
|
Verfasst: Mo 21.03.11 14:06
|
|
jsbach 
      
Beiträge: 53
Win XP
D5 Ent
|
Verfasst: Di 12.04.11 22:11
Hallo,
hat jemand Erfahrung mit der Unit BigNum? Ich würde sie gerne auf meinen Algorithmus anwenden, habe aber keinen Schimmer wie ich da vorgehen muss. Kann mir jemand dabei helfen?
Dank und Gruß,
Mike
|
|
|