Autor |
Beitrag |
FrozenHeart
Hält's aus hier
Beiträge: 3
|
Verfasst: 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:
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 public 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 formPlotter.imgPlot.Canvas.Brush.Color := clWhite; formPlotter.imgPlot.Canvas.rectangle(-1,-1,formPlotter.imgPlot.Width+1, formPlotter.imgPlot.Height+1); formPlotter.imgPlot.canvas.Pen.Color := clBlack;
formPlotter.imgPlot.canvas.MoveTo(0, formPlotter.imgPlot.Height div 2); formPlotter.imgPlot.canvas.LineTo(formPlotter.imgPlot.Width, formPlotter.imgPlot.Height div 2);
formPlotter.imgPlot.canvas.MoveTo(formPlotter.imgPlot.Width div 2, 0); formPlotter.imgPlot.canvas.LineTo(formPlotter.imgPlot.Width div 2, formPlotter.imgPlot.Height);
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; y := formPlotter.imgPlot.Height - y; formPlotter.imgPlot.Canvas.LineTo(i, y); end;
end;
procedure TFormPlotter.ButtonZeichnenClick(Sender: TObject); begin drawFunktion(); end;
end. |
Unit des HypothesentestZeichner:
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
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 formPlotter.imgPlot.Canvas.Brush.Color := clWhite; formPlotter.imgPlot.Canvas.rectangle(-1,-1,formPlotter.imgPlot.Width+1, formPlotter.imgPlot.Height+1); formPlotter.imgPlot.canvas.Pen.Color := clBlack;
formPlotter.imgPlot.canvas.MoveTo(0, formPlotter.imgPlot.Height div 2); formPlotter.imgPlot.canvas.LineTo(formPlotter.imgPlot.Width, formPlotter.imgPlot.Height div 2);
formPlotter.imgPlot.canvas.MoveTo(formPlotter.imgPlot.Width div 2, 0); formPlotter.imgPlot.canvas.LineTo(formPlotter.imgPlot.Width div 2, formPlotter.imgPlot.Height);
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; y := formPlotter.imgPlot.Height - y; formPlotter.imgPlot.Canvas.LineTo(x, y); 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 Narses: Topic aus Freeware Projekte verschoben am Di 25.05.2010 um 20:36
Moderiert von Narses: Titel geändert.
Moderiert von Narses: Delphi-Tags hinzugefügt
|
|
SmileySN
      
Beiträge: 297
WinXP, Win7
Delphi 2010 Professional
|
Verfasst: 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
Delphi-Quelltext 1: 2:
| Implementation uses UnitPlotter; |
Moderiert von Narses: Delphi-Tags hinzugefügt
|
|
FrozenHeart 
Hält's aus hier
Beiträge: 3
|
Verfasst: 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
      
Beiträge: 297
WinXP, Win7
Delphi 2010 Professional
|
Verfasst: Mi 26.05.10 08:14
FrozenHeart hat folgendes geschrieben : | 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 
Hält's aus hier
Beiträge: 3
|
Verfasst: 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:
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 public 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 formPlotter.imgPlot.Canvas.Brush.Color := clWhite; formPlotter.imgPlot.Canvas.rectangle(-1,-1,formPlotter.imgPlot.Width+1, formPlotter.imgPlot.Height+1); formPlotter.imgPlot.canvas.Pen.Color := clBlack;
formPlotter.imgPlot.canvas.MoveTo(0, formPlotter.imgPlot.Height div 2); formPlotter.imgPlot.canvas.LineTo(formPlotter.imgPlot.Width, formPlotter.imgPlot.Height div 2);
formPlotter.imgPlot.canvas.MoveTo(formPlotter.imgPlot.Width div 2, 0); formPlotter.imgPlot.canvas.LineTo(formPlotter.imgPlot.Width div 2, formPlotter.imgPlot.Height);
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; y := formPlotter.imgPlot.Height - y; formPlotter.imgPlot.Canvas.LineTo(i, y); end;
end;
procedure TFormPlotter.ButtonZeichnenClick(Sender: TObject); begin drawFunktion(); end;
end. |
UnitHypo
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
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 formPlotter.imgPlot.Canvas.Brush.Color := clWhite; formPlotter.imgPlot.Canvas.rectangle(-1,-1,formPlotter.imgPlot.Width+1, formPlotter.imgPlot.Height+1); formPlotter.imgPlot.canvas.Pen.Color := clBlack;
formPlotter.imgPlot.canvas.MoveTo(0, formPlotter.imgPlot.Height div 2); formPlotter.imgPlot.canvas.LineTo(formPlotter.imgPlot.Width, formPlotter.imgPlot.Height div 2);
formPlotter.imgPlot.canvas.MoveTo(formPlotter.imgPlot.Width div 2, 0); formPlotter.imgPlot.canvas.LineTo(formPlotter.imgPlot.Width div 2, formPlotter.imgPlot.Height);
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; y := formPlotter.imgPlot.Height - y; formPlotter.imgPlot.Canvas.LineTo(x, y); end;
end;
procedure TFormPlotter.ButtonZeichnen2Click(); begin drawFunktion(); end;
end. |
Hoffe ihr könnt mir auch hier weiterhelfen
Moderiert von Narses: Code- durch Delphi-Tags ersetzt
|
|
elundril
      
Beiträge: 3747
Erhaltene Danke: 123
Windows Vista, Ubuntu
Delphi 7 PE "Codename: Aurora", Eclipse Ganymede
|
Verfasst: 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
      
Beiträge: 297
WinXP, Win7
Delphi 2010 Professional
|
Verfasst: 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.
|
|
|