Autor Beitrag
FrozenHeart
Hält's aus hier
Beiträge: 3



BeitragVerfasst: Di 25.05.10 20:12 
Hallo habe folgendes Problem wenn ich haben einen hypothesentestzeichner programmiert der von einem Funktionsplotter abgeleitet wird
beim starten des Programms erscheint die Fehler Meldung Exception EReadError Meldung: 'Ungültiger Eigenschaftswert' Prozeß wurde angehalten...

Hier meine zwei Units

Unit des Plotter:
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:
unit UnitPlotter;

interface

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

type
  TFormPlotter = class(TForm)
    LabelFunk: TLabel;
    LabelM: TLabel;
    LabelZ: TLabel;
    LabelC: TLabel;
    LabelHyp: TLabel;
    LabelN: TLabel;
    LabelP: TLabel;
    LabelA: TLabel;
    EditM: TEdit;
    EditZ: TEdit;
    EditC: TEdit;
    EditN: TEdit;
    EditP: TEdit;
    EditA: TEdit;
    ImgPlot: TImage;
    Label1: TLabel;
    Label2: TLabel;
    Label3: TLabel;
    Label4: TLabel;
    Label5: TLabel;
    Label6: TLabel;
    Label7: TLabel;
    Label8: TLabel;
    ButtonZeichnen: TButton;
    ButtonZeichnen2: TButton;
    Label9: TLabel;
    Label10: TLabel;
    Label11: TLabel;
    Label12: TLabel;
    Label13: TLabel;
    Label14: TLabel;
    Label15: TLabel;
    Label16: TLabel;
    procedure ButtonZeichnenClick(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

function f(x: real): real;
procedure drawFunktion();

var
  FormPlotter: TFormPlotter;

implementation

{$R *.dfm}

function f(x: real): real;
var
m: real; z: real; c: real; d: real;

begin
  m := StrToFloat(FormPlotter.EditM.Text);
  z := StrToFloat(FormPlotter.EditZ.Text);
  c := StrToFloat(FormPlotter.EditC.Text);
  d := power(x,z);
  f := (m/10)*d+c;
end;

procedure drawFunktion();
var i: integer; y: integer;
begin
//Koordinatensystem zeichnen
formPlotter.imgPlot.Canvas.Brush.Color := clWhite; { Farbe setzen }
formPlotter.imgPlot.Canvas.rectangle(-1,-1,formPlotter.imgPlot.Width+1, formPlotter.imgPlot.Height+1); { Image leeren }
formPlotter.imgPlot.canvas.Pen.Color := clBlack; { Farbe des Stifts setzen }

formPlotter.imgPlot.canvas.MoveTo(0, formPlotter.imgPlot.Height div 2); { Stift nach Links in der Mitte setzen }
formPlotter.imgPlot.canvas.LineTo(formPlotter.imgPlot.Width, formPlotter.imgPlot.Height div 2); { Horizontale Linie des Koordinatensystems zeichnen }

formPlotter.imgPlot.canvas.MoveTo(formPlotter.imgPlot.Width div 20); { Stift nach Oben in der Mitte setzen }
formPlotter.imgPlot.canvas.LineTo(formPlotter.imgPlot.Width div 2, formPlotter.imgPlot.Height); { Vertikale Linie des Koordinatensystems zeichnen }

//Funktion zeichnen
formPlotter.imgPlot.Canvas.MoveTo(-1,-1);
for i := 0 to formPlotter.imgPlot.Width do
begin
y := round(f(i-formPlotter.imgPlot.Width div  2))+formPlotter.imgPlot.height div 2;  { Funktionswert ermitteln }
y := formPlotter.imgPlot.Height - y;          { Umdrehen }
formPlotter.imgPlot.Canvas.LineTo(i, y);      { Zeichnen }
end;

end;



procedure TFormPlotter.ButtonZeichnenClick(Sender: TObject);
begin
drawFunktion();
end;

end.


Unit des HypothesentestZeichner:
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:
UNIT UnitHyp;

interface

//--------------------  ggf Uses-Liste anpassen !  --------------------
uses
UnitPlotter, Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ExtCtrls, StdCtrls, Math;

type
  Hyp = class(TFormPlotter);
  TFormPlotter = class(TForm)
    LabelFunk: TLabel;
    LabelM: TLabel;
    LabelZ: TLabel;
    LabelC: TLabel;
    LabelHyp: TLabel;
    LabelN: TLabel;
    LabelP: TLabel;
    LabelA: TLabel;
    EditM: TEdit;
    EditZ: TEdit;
    EditC: TEdit;
    EditN: TEdit;
    EditP: TEdit;
    EditA: TEdit;
    ImgPlot: TImage;
    Label1: TLabel;
    Label2: TLabel;
    Label3: TLabel;
    Label4: TLabel;
    Label5: TLabel;
    Label6: TLabel;
    Label7: TLabel;
    Label8: TLabel;
    ButtonZeichnen: TButton;
    ButtonZeichnen2: TButton;
    Label9: TLabel;
    Label10: TLabel;
    procedure ButtonZeichnen2Click();
end;

function f(k:integer):integer;

var
  yp:  Hyp;

implementation

function f(k:integer):integer;
var n, p, a, f, d, c, cneu, calt, e, h, g : real; i :integer;
begin
calt:=1;
for i := 0 to k-1 do
 begin
   c:=(n-i)/(i+1);
   cneu:=calt+c;
   calt:=cneu;
 end;

n := StrToFloat(FormPlotter.EditM.Text);
p := StrToFloat(FormPlotter.EditC.Text);
a := StrToFloat(FormPlotter.EditA.Text);
d := power(p,k);
h := 1-p;
g := n-k;
e := power(h,g);
f :=calt*d*e;

end;

procedure drawFunktion();
var x: integer; y: integer;
begin
//Koordinatensystem zeichnen
formPlotter.imgPlot.Canvas.Brush.Color := clWhite; { Farbe setzen }
formPlotter.imgPlot.Canvas.rectangle(-1,-1,formPlotter.imgPlot.Width+1, formPlotter.imgPlot.Height+1); { Image leeren }
formPlotter.imgPlot.canvas.Pen.Color := clBlack; { Farbe des Stifts setzen }

formPlotter.imgPlot.canvas.MoveTo(0, formPlotter.imgPlot.Height div 2); { Stift nach Links in der Mitte setzen }
formPlotter.imgPlot.canvas.LineTo(formPlotter.imgPlot.Width, formPlotter.imgPlot.Height div 2); { Horizontale Linie des Koordinatensystems zeichnen }

formPlotter.imgPlot.canvas.MoveTo(formPlotter.imgPlot.Width div 20); { Stift nach Oben in der Mitte setzen }
formPlotter.imgPlot.canvas.LineTo(formPlotter.imgPlot.Width div 2, formPlotter.imgPlot.Height); { Vertikale Linie des Koordinatensystems zeichnen }

//Funktion zeichnen
formPlotter.imgPlot.Canvas.MoveTo(-1,-1);
for x := 0 to formPlotter.imgPlot.Width do
begin
y := round(f(x-formPlotter.imgPlot.Width div  2))+formPlotter.imgPlot.height div 2;  { Funktionswert ermitteln }
y := formPlotter.imgPlot.Height - y;          { Umdrehen }
formPlotter.imgPlot.Canvas.LineTo(x, y);      { Zeichnen }
end;

end;

procedure TFormPlotter.ButtonZeichnen2Click();
begin
drawFunktion();
end;

end.

Hinweis: Das ist ein Programm und soll nur eine Form nutzen

Ich Hoffe ihr könnt mir weiter helfen


Moderiert von user profile iconNarses: Topic aus Freeware Projekte verschoben am Di 25.05.2010 um 20:36
Moderiert von user profile iconNarses: Titel geändert.
Moderiert von user profile iconNarses: Delphi-Tags hinzugefügt
SmileySN
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 297

WinXP, Win7
Delphi 2010 Professional
BeitragVerfasst: Di 25.05.10 20:28 
Du hast in beiden Units den funktionsaufruf DrawFunktion definiert.
Setze die UnitPlotter aus dem oberen Uses mal unter das Implementation
ausblenden Delphi-Quelltext
1:
2:
Implementation
  uses UnitPlotter;


Moderiert von user profile iconNarses: Delphi-Tags hinzugefügt
FrozenHeart Threadstarter
Hält's aus hier
Beiträge: 3



BeitragVerfasst: Mi 26.05.10 07:57 
Danke für den Hinweise aber wenn ich die UnitPlotter aus den uses oben rausnehme und unter die implementation setze dann erkennt er nicht mehr den teil

type
Hyp = class(TFormPlotter);
SmileySN
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 297

WinXP, Win7
Delphi 2010 Professional
BeitragVerfasst: Mi 26.05.10 08:14 
user profile iconFrozenHeart hat folgendes geschrieben Zum zitierten Posting springen:
Danke für den Hinweise aber wenn ich die UnitPlotter aus den uses oben rausnehme und unter die implementation setze dann erkennt er nicht mehr den teil

type
Hyp = class(TFormPlotter);


Dann setze die Definition der Klasse Hyp doch in die Unit Plotter
FrozenHeart Threadstarter
Hält's aus hier
Beiträge: 3



BeitragVerfasst: Mi 26.05.10 09:18 
Danke für deine Hilfe habe das Programm jetzt aber umgeschrieben und benutze nun zwei Forms die zweite wird beim buttonClick geöffnet und dort soll der hypothesentest gezeichnet werden nun habe ich das Problem, dass entweder der graph nicht richtig gezeichnet wird oder der Fehler Meldung 'Ungültige Gleitkommaoperation' auftritt

Hier wieder der Quellcode

UnitPlotter:

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:
unit UnitPlotter;

interface

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

type
  TFormPlotter = class(TForm)
    LabelFunk: TLabel;
    LabelM: TLabel;
    LabelZ: TLabel;
    LabelC: TLabel;
    LabelHyp: TLabel;
    LabelN: TLabel;
    LabelP: TLabel;
    LabelA: TLabel;
    EditM: TEdit;
    EditZ: TEdit;
    EditC: TEdit;
    EditN: TEdit;
    EditP: TEdit;
    EditA: TEdit;
    ImgPlot: TImage;
    Label1: TLabel;
    Label2: TLabel;
    Label3: TLabel;
    Label4: TLabel;
    Label5: TLabel;
    Label6: TLabel;
    Label7: TLabel;
    Label8: TLabel;
    ButtonZeichnen: TButton;
    ButtonZeichnen2: TButton;
    Label9: TLabel;
    Label10: TLabel;
    Label11: TLabel;
    Label12: TLabel;
    Label13: TLabel;
    Label14: TLabel;
    Label15: TLabel;
    Label16: TLabel;
    procedure ButtonZeichnenClick(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

function f(x: real): real;
procedure drawFunktion();

var
  FormPlotter: TFormPlotter;

implementation

{$R *.dfm}

function f(x: real): real;
var
m: real; z: real; c: real; d: real;

begin
  m := StrToFloat(FormPlotter.EditM.Text);
  z := StrToFloat(FormPlotter.EditZ.Text);
  c := StrToFloat(FormPlotter.EditC.Text);
  d := power(x,z);
  f := (m/10)*d+c;
end;

procedure drawFunktion();
var i: integer; y: integer;
begin
//Koordinatensystem zeichnen
formPlotter.imgPlot.Canvas.Brush.Color := clWhite; { Farbe setzen }
formPlotter.imgPlot.Canvas.rectangle(-1,-1,formPlotter.imgPlot.Width+1, formPlotter.imgPlot.Height+1); { Image leeren }
formPlotter.imgPlot.canvas.Pen.Color := clBlack; { Farbe des Stifts setzen }

formPlotter.imgPlot.canvas.MoveTo(0, formPlotter.imgPlot.Height div 2); { Stift nach Links in der Mitte setzen }
formPlotter.imgPlot.canvas.LineTo(formPlotter.imgPlot.Width, formPlotter.imgPlot.Height div 2); { Horizontale Linie des Koordinatensystems zeichnen }

formPlotter.imgPlot.canvas.MoveTo(formPlotter.imgPlot.Width div 20); { Stift nach Oben in der Mitte setzen }
formPlotter.imgPlot.canvas.LineTo(formPlotter.imgPlot.Width div 2, formPlotter.imgPlot.Height); { Vertikale Linie des Koordinatensystems zeichnen }

//Funktion zeichnen
formPlotter.imgPlot.Canvas.MoveTo(-1,-1);
for i := 0 to formPlotter.imgPlot.Width do
begin
y := round(f(i-formPlotter.imgPlot.Width div  2))+formPlotter.imgPlot.height div 2;  { Funktionswert ermitteln }
y := formPlotter.imgPlot.Height - y;          { Umdrehen }
formPlotter.imgPlot.Canvas.LineTo(i, y);      { Zeichnen }
end;

end;



procedure TFormPlotter.ButtonZeichnenClick(Sender: TObject);
begin
drawFunktion();
end;

end.


UnitHypo

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:
UNIT UnitHyp;

interface

//--------------------  ggf Uses-Liste anpassen !  --------------------
uses
UnitPlotter, Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ExtCtrls, StdCtrls, Math;

type
  Hyp = class(TFormPlotter);
  TFormPlotter = class(TForm)
    LabelFunk: TLabel;
    LabelM: TLabel;
    LabelZ: TLabel;
    LabelC: TLabel;
    LabelHyp: TLabel;
    LabelN: TLabel;
    LabelP: TLabel;
    LabelA: TLabel;
    EditM: TEdit;
    EditZ: TEdit;
    EditC: TEdit;
    EditN: TEdit;
    EditP: TEdit;
    EditA: TEdit;
    ImgPlot: TImage;
    Label1: TLabel;
    Label2: TLabel;
    Label3: TLabel;
    Label4: TLabel;
    Label5: TLabel;
    Label6: TLabel;
    Label7: TLabel;
    Label8: TLabel;
    ButtonZeichnen: TButton;
    ButtonZeichnen2: TButton;
    Label9: TLabel;
    Label10: TLabel;
    procedure ButtonZeichnen2Click();
end;

function f(k:integer):integer;

var
  yp:  Hyp;

implementation

function f(k:integer):integer;
var
n : real; p: real; a: real; f: real; d: real; c: real; cneu: real; calt: real;
e: real; h: real; g : real; i :integer;
begin
calt:=1;
n := StrToFloat(FormPlotter.EditM.Text);
p := StrToFloat(FormPlotter.EditC.Text);
a := StrToFloat(FormPlotter.EditA.Text);
d := power(p,k);
h := 1-p;
g := n-k;
e := power(h,g);

for i := 0 to k-1 do
 begin
   c:=(n-i)/(i+1);
   cneu:=calt+c;
   calt:=cneu;
 end;

f :=calt*d*e;

end;

procedure drawFunktion();
var x: integer; y: integer;
begin
//Koordinatensystem zeichnen
formPlotter.imgPlot.Canvas.Brush.Color := clWhite; { Farbe setzen }
formPlotter.imgPlot.Canvas.rectangle(-1,-1,formPlotter.imgPlot.Width+1, formPlotter.imgPlot.Height+1); { Image leeren }
formPlotter.imgPlot.canvas.Pen.Color := clBlack; { Farbe des Stifts setzen }

formPlotter.imgPlot.canvas.MoveTo(0, formPlotter.imgPlot.Height div 2); { Stift nach Links in der Mitte setzen }
formPlotter.imgPlot.canvas.LineTo(formPlotter.imgPlot.Width, formPlotter.imgPlot.Height div 2); { Horizontale Linie des Koordinatensystems zeichnen }

formPlotter.imgPlot.canvas.MoveTo(formPlotter.imgPlot.Width div 20); { Stift nach Oben in der Mitte setzen }
formPlotter.imgPlot.canvas.LineTo(formPlotter.imgPlot.Width div 2, formPlotter.imgPlot.Height); { Vertikale Linie des Koordinatensystems zeichnen }

//Funktion zeichnen
formPlotter.imgPlot.Canvas.MoveTo(-1,-1);
for x := 0 to formPlotter.imgPlot.Width do
begin
y := round(f(x-formPlotter.imgPlot.Width div  2))+formPlotter.imgPlot.height div 2;  { Funktionswert ermitteln }
y := formPlotter.imgPlot.Height - y;          { Umdrehen }
formPlotter.imgPlot.Canvas.LineTo(x, y);      { Zeichnen }
end;

end;

procedure TFormPlotter.ButtonZeichnen2Click();
begin
drawFunktion();
end;

end.


Hoffe ihr könnt mir auch hier weiterhelfen

Moderiert von user profile iconNarses: Code- durch Delphi-Tags ersetzt
elundril
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 3747
Erhaltene Danke: 123

Windows Vista, Ubuntu
Delphi 7 PE "Codename: Aurora", Eclipse Ganymede
BeitragVerfasst: Mi 26.05.10 12:58 
inhaltlich neue Frage, neues Topic. ;) der übersicht wegen.

lg elundril

_________________
This Signature-Space is intentionally left blank.
Bei Beschwerden, bitte den Beschwerdebutton (gekennzeichnet mit PN) verwenden.
SmileySN
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 297

WinXP, Win7
Delphi 2010 Professional
BeitragVerfasst: Mi 26.05.10 13:28 
Du weißt schon, dass Delphi einen internen Debugger besitzt ?

Schau mal nach an welcher Stelle der Fehler auftritt, dann kann man Dir zu diesem Problem auch helfen.