Autor Beitrag
delphianer5
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 30



BeitragVerfasst: So 02.01.11 23:26 
Hi,
ich habe Probleme mit dem Projekt an dem ich gerade arbeite.
Es ist ein Programm, dass Zahlen mit der Karazuba-Methode multipliziert.
Das ist allerdings nicht wichtig der Programmteil funktioniert.
Probleme bereiten mir, dass ich die Ergebnisse und Zahlen die eingegeben wurden auf der Festplatte gespeichert werden sollen.
Dabei ist mir ein unbekannter Fehler aufgetaucht:"[Fehler] UProduktgrosserZahlen.pas(67): Typ 'Zahlen' benötigt Finalization - nicht im Dateityp erlaubt" .
Ich hoffe ihr könnt mir helfen diesen Fehler auszumerzen.

Quellcode:
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:
153:
154:
155:
156:
157:
158:
159:
160:
161:
162:
163:
164:
165:
166:
167:
168:
169:
170:
171:
172:
173:
174:
175:
176:
177:
178:
179:
180:
181:
182:
183:
184:
185:
186:
187:
188:
189:
unit UProduktgrosserZahlen;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, Menus, jpeg, ExtCtrls;

type
  TForm1 = class(TForm)
    GroupBox: TGroupBox;
    EP: TEdit;
    EQ: TEdit;
    ER: TEdit;
    ES: TEdit;
    AE: TEdit;
    Lmal: TLabel;
    Lx: TLabel;
    Ly: TLabel;
    Lgleich: TLabel;
    Label1: TLabel;
    bt_calculate: TButton;
    Background: TImage;
    MainMenu1: TMainMenu;
    Hauptmen1: TMenuItem;
    Speichern1: TMenuItem;
    Beenden1: TMenuItem;
    Button1: TButton;
    Button2: TButton;
    Button3: TButton;
    Button4: TButton;
    procedure bt_calculateClick(Sender: TObject);
    procedure Pruefe;
    procedure Beenden1Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure FormDestroy(Sender: TObject);
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure Button3Click(Sender: TObject);
    procedure Button4Click(Sender: TObject);
    procedure Speichern1Click(Sender: TObject);
    procedure positionieren(datensatz: integer);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

uses math;

type Zahlen = record
     X: string;
     XX: string;
     Y: string;
     YY: string;
end;



{$R *.dfm}

var datei: file of Zahlen;

//Es folgt eine Überprüfung, ob der Anwender alle Felder ausgefüllt hat.
procedure TForm1.Pruefe;
begin
  if (EP.Text=''or (EQ.Text=''or (ER.Text=''or (ES.Text=''then
    begin
     ShowMessage('Fülle bitte alle Felder (gleichmäßig) aus!');
    end;
end;

procedure TForm1.positionieren(datensatz: integer);
var aktdatensatz: Zahlen;
begin
if (datensatz<0or (datensatz>=FileSize(datei)) then exit
else
begin
  Seek(datei, datensatz);
  Read(datei, aktdatensatz);
  EP.Text:=aktdatensatz.X;
  EQ.Text:=aktdatensatz.XX;
  ER.Text:=aktdatensatz.Y;
  ES.Text:=aktdatensatz.YY;
end;
end;

procedure TForm1.bt_calculateClick(Sender: TObject);
var p,q,r,s,n,y,x,Basis,Exponent1,Exponent2,Ergebnis,a,b,c:integer;
begin
  Pruefe;

  //Die Länge der Edit-Felder wird bestimmt und den Variablen zugewiesen.
  n:=Length(EP.Text);
  a:=Length(EQ.Text);
  b:=Length(ER.Text);
  c:=Length(ES.Text);

  //Die Sonderfälle werden behandelt.
  if (n<>a) or (b<>c) or (n<>b) or (a<>c) then
    begin
      ShowMessage('Fülle bitte alle Felder gleichmäßig aus bzw. füge gegebenenfalls Nullen hinzu!');
      AE.Text:='';
      end
  else
    begin
      // Den Variablen werden die eingegeben Zahlenwerte zugewiesen.
      p:= StrToInt(EP.Text);
      q:= StrToInt(EQ.Text);
      r:= StrToInt(ER.Text);
      s:= StrToInt(ES.Text);

      //Die Berechnung des Ergebnisses wird durchgeführt.
      Basis:= 10;
      Exponent1:=Round(n);
      Exponent2:=Round((2*n));
      y:=Round(Power(basis, Exponent1));
      x:=Round(Power(basis, Exponent2));
      Ergebnis:=p*r*x+(p*r+q*s-(q-p)*(s-r))*y+q*s;

      //Das Ergebnis wird ausgegeben.
      AE.Text:= IntToStr (Ergebnis);
    end;

end;

procedure TForm1.Beenden1Click(Sender: TObject);
begin
Close
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
AssignFile(datei,'Zahlen.dat');
if FileExists('Zahlen.dat'then ReSet(datei)
else ReWrite(datei);
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
CloseFile(datei);
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
positionieren(0);
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
positionieren(FilePos(datei)-2);
end;

procedure TForm1.Button3Click(Sender: TObject);
begin
positionieren(FilePos(datei));
end;

procedure TForm1.Button4Click(Sender: TObject);
begin
positionieren(FileSize(datei)-1);
end;

procedure TForm1.Speichern1Click(Sender: TObject);
var datensatz: Zahlen;
begin
if EP.text <> '' then begin
// Namenseingabe ist immer erforderlich
seek(datei, FileSize(datei));
// Positioniere hinter den letzen Datensatz
datensatz.X:=EP.text;
datensatz.XX:=EQ.text;
datensatz.Y:=ER.Text;
// Default ist -1
datensatz.YY:=ES.text;
write(datei,datensatz);
// Füge einen neuen Datensatz am Ende ein
end
else
showmessage('Bitte geben Sie einen Namen ein');

end;

end.



lg delphianer5


Moderiert von user profile iconNarses: Topic aus Sonstiges (Delphi) verschoben am So 02.01.2011 um 23:06
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19315
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: So 02.01.11 23:34 
In dem Record an sich sind immer nur die Pointer auf die Strings gespeichert. Was würde es dir also auch bringen die zu speichern?

Wenn das aber ohnehin Zahlen sind, warum nimmst du dann nicht auch einen Zahlentyp als Typ für die Felder des Records? :gruebel:

Theoretisch wären auch noch ShortStrings möglich, aber das würde ich nicht empfehlen. Wenn, dann nimm besser Klassen und speichere das ganze gleich richtig selbst.

Für diesen Beitrag haben gedankt: delphianer5
delphianer5 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 30



BeitragVerfasst: Mo 03.01.11 18:41 
Schande über mein Haupt - wie blöd.
Wenn man zu faul ist und einfach aus alten Projekten kopiert und nicht mitdenkt.

Danke für deine Hilfe!