Autor Beitrag
evofan
Hält's aus hier
Beiträge: 9



BeitragVerfasst: Mo 05.03.07 21:06 
Hallo Leute,
mach grad ein programm,was die nullstellen, polstellen und eine wertetabelle(wenns geht noch definitionsbereich) einer gebrochen rationalen Funktion(ax²+bx+c/dx²+ex+f) ausgeben soll, komm aber im moment net weiter,die nullstellen und polst. gibt es schon aus, aber den sonderfall, das die summe unter der wurzel nicht negativ werden darf, hab ich noch nicht raus!
und der wertebereich geht auch noch net perfekt!(quelltext ist weiter unten!!)
wäre echt nett, wenn ihr mir helfen könntet!!!
Danke im Vorraus!!

Gruß Evofan

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:
var
  Form1: TForm1;
  a,b,c,d,e,f,x,y:real;

  implementation

{$R *.dfm}



{----------------------------------------------------}

function g(a,b,c,d,e,f,x:real):real;
begin
         g:=(a*x*x+b*x+c)/(d*x*x+e*x+f);
    
end;

{----------------------------------------------------}

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

{---------------------------------------------------}

procedure TForm1.Button2Click(Sender: TObject);  //erkennen der funktion
begin
 a:=StrToFloat(Edit1.Text);
 b:=StrToFloat(Edit5.Text);
 c:=StrToFloat(Edit6.Text);

 d:=StrToFloat(Edit7.Text);
 e:=StrToFloat(Edit8.Text);
 f:=StrToFloat(Edit9.Text);

end;

{---------------------------------------------------}

procedure TForm1.Button5Click(Sender: TObject);  //wertetabelle
var x,y:real;
    i:integer;
begin
  for i:=-5 to 5 do
     begin
        x:=i;
        y:=g(a,b,c,d,e,f,x);
        memo1.Lines.add(inttostr(i));
   if d*x*x+e*x+f=0 then memo2.Lines.Add('nicht definiert')
   else
        memo2.Lines.Add(FloatToStrF(y,ffFixed,10,2));

//ende sonst
     end;


end;

{-------------------------------------------------}

procedure TForm1.Button4Click(Sender: TObject); //polstelle
var p1,p2,m,z:real;
begin

    z:=e*e/(4*d*d)-f/d;

    if z<0 then edit3.Text:='keine polstelle'

      else
             begin

                p1:=-e/(2*d)+sqrt(z);
                p2:=-e/(2*d)-sqrt(z);

              end;

          edit3.text:=Floattostr(p1);
          edit10.text:=floattostr(p2);



end;

procedure TForm1.Button3Click(Sender: TObject); //definitionsbereich
begin

  if a*x*x+b*x+c=0
      then edit2.Text:=floattostr(y)

      else edit2.text:='';
end;

procedure TForm1.Button6Click(Sender: TObject);   //nullstelle
var n1,n2,m,z:real;
begin

z:=b*b/(4*a*a)-c/a;
   if z<0 then edit11.Text:='keine nullstelle'
          else

                begin
                   n1:=-b/2*a+sqrt(z);
                   n2:=-b/2*a-sqrt(z);
                end;

           edit11.text:=Floattostr(n1);
           edit12.text:=floattostr(n2);


end;



procedure TForm1.Button7Click(Sender: TObject);
begin
edit1.Clear;
edit2.Clear;
edit3.Clear;
edit5.Clear;
edit6.Clear;
edit7.Clear;
edit8.Clear;
edit9.Clear;
edit10.Clear;
edit11.Clear;
edit12.Clear;
memo1.Clear;
memo2.Clear;


Moderiert von user profile iconChristian S.: Delphi-Tags hinzugefügt
Kroko
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 1284

W98 W2k WXP
Turbo D
BeitragVerfasst: Di 06.03.07 06:27 
(a) Deine Frage verstehe ich nicht ganz, dein Sonderfall erzeugt komplexe Lösungen:
ausblenden 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:
function QuadNull(const A,B,C: Double; var Nr1,Nr2,Ni1,Ni2: Double): Integer;
var
  P,Q,Dis: Double;
const 
  Epsilon = 1E-10;
begin
  P := B/A;
  Q := C/A; //x²+px+q
  Dis := P*P-Q; //Diskriminante
  Nr1 := -P*0.5;
  Nr2 := Nr1;
  if Dis<0 then
    begin
      Ni1 := Sqrt(Abs(Dis));
      Ni2 := -Ni1;  
      Result := 0;
    end
  else
    begin
      if Abs(Dis)<Epsilon then Result := 1
      else
        begin
          Nr1 := Nr1+Sqrt(Dis);
          Nr2 := Nr2-Sqrt(Dis);
          Result := 2;
        end;   
    end;
end;

heißt wenn
(1) Result=0 2 komplexe Nullstellen Nr1+Ni1*i und Nr2+Ni2*i
(2) Result=1 1 reelle Nullstelle Nr1
(3) Result=2 2 reelle Nullstellen Nr1 und Nr2

(b) in deine Quellen sind noch ein paar Fehlerchen
Zeilen 79/80 ; 108/109 gehören ins begin/end davor

(c) die Wertetabelle würde ich mit
ausblenden Delphi-Quelltext
1:
.Add(FloatToStr(X)+#9+floatToStr(Y));					

füllen

_________________
Die F1-Taste steht nicht unter Naturschutz und darf somit regelmäßig und oft benutzt werden! oder Wer lesen kann, ist klar im Vorteil!
evofan Threadstarter
Hält's aus hier
Beiträge: 9



BeitragVerfasst: Di 06.03.07 18:26 
danke erstmal,
weißt du zufällig noch wie man die ableitungen dieser Fkt. macht?
[f(x)=(ax²+bx+c)/(dx²+ex+f)]
das andere geht jetzt alles schon!
Christian S.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 20451
Erhaltene Danke: 2264

Win 10
C# (VS 2019)
BeitragVerfasst: Di 06.03.07 18:30 
user profile iconevofan hat folgendes geschrieben:
danke erstmal,
weißt du zufällig noch wie man die ableitungen dieser Fkt. macht?
[f(x)=(ax²+bx+c)/(dx²+ex+f)]
das andere geht jetzt alles schon!
Daher hier weitermachen, wo Du schon einen Thread erstellt hast: www.delphi-forum.de/...Ableitung_70691.html

Hinweis: Du hast es ganz richtig gemacht, einen neuen Thread zu erstellen, aber bitte dann die Frage nicht auch nochmal woanders stellen :-)

_________________
Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
Dieses Thema ist gesperrt, Du kannst keine Beiträge editieren oder beantworten.

Das Thema wurde von einem Team-Mitglied geschlossen. Wenn du mit der Schließung des Themas nicht einverstanden bist, kontaktiere bitte das Team.