Entwickler-Ecke

Sonstiges (Delphi) - Nullstellen rechner


Nippey - Do 14.09.06 21:28
Titel: Nullstellen rechner
hi leute meine bisheriger versuch sieht so aus:

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:
var
  Form1: TForm1;
  vObergrenze : ReAl;
  vUntergrenze : rEaL;
  vSchrittweite : integer;
implementation

{$R *.dfm}

procedure TForm1.btn_GOClick(Sender: TObject);
var
vX, vY : real;
begin
vObergrenze := strtofloat (edt_1.text);
vUntergrenze := strtofloat(edt_2.text);
vschrittWeite := strtoint(edt_3.text);
vX := vUntergrenze;
repeat
 begin
 vY := vX + vSchrittweite;
if vX > (vObergrenze - vSchrittweite)
then (if vY = 0 then lbl_0.caption := strtofloat (vY) else lbl_0.Caption := strtofloat ( 'Keine nullstelle'))
else  vX := vX + vSchrittweite;
end
until
vY = 0 ;
end;

end.



ich kapier nicht warum es nicht funktioniert.

Moderiert von user profile iconAXMD: Delphi-Tags hinzugefügt
Moderiert von user profile iconChristian S.: Topic aus VCL (Visual Component Library) verschoben am Do 14.09.2006 um 21:44


Allesquarks - Do 14.09.06 21:44

Schau dir doch mal an, was du tust:

Du erhöhst vx immer um ne schrittweite. Und wenn vx größer als die Obergrenze - eine Schrittweite ist dann guckst du ob vy=0 ist, wobei vy immer vx+Schrittweite ist und erst dann gibst du was aus in deinem Label???

Dann könntest du auch immer schauen ob vx= obergrenze-schrittweite ist. Das ist einfach kein Kriterium für eine Nullstelle.

Desweiterenist das ganze Konzept überhaupt nicht klar: du willst offenbar überprüfen ob zwischen obergrenze und untergrenze eine Nullstelle liegt?? =>


Delphi-Quelltext
1:
2:
3:
4:
function zerobetween(oben,unten:real):boolean;
begin
   result:=(oben>0and (unten<0);
end;


Christian S. - Do 14.09.06 21:45

Hallo!

Bitte beschreibe, was Du überhaupt machen willst und was daran nicht funktioniert. Wenn Du möchtest, dass andere Zeit für Dich aufwenden, indem sie Dir antworten, solltest auch Du Zeit aufwenden, um Deine Frage möglichst präzise und klar zu stellen.

Grüße
Christian


Nippey - Fr 15.09.06 07:28

user profile iconChristian S. hat folgendes geschrieben:
Hallo!

Bitte beschreibe, was Du überhaupt machen willst und was daran nicht funktioniert. Wenn Du möchtest, dass andere Zeit für Dich aufwenden, indem sie Dir antworten, solltest auch Du Zeit aufwenden, um Deine Frage möglichst präzise und klar zu stellen.

Grüße
Christian


jA ich hab den auftrag (von der schule) dass ich die nullstlle der funktin Y=X mit einem delphi programm erechnen soll aber es läuft bei mir immer ins unendliche und dann hängt er sich auf.


Allesquarks - Fr 15.09.06 13:51

Die Nullstelle einer Funktion Y=X liegt bei x=0 Was kann man denn daran berechnen? Irgendwie dumm aber nun mal allgemein. Nullstellen kann man auf verschiedene Arten berechnen Intervallschachtelung Newtonverfahren etc.

Für eine auf [a,b] stetige Funktion f ex. eine Nullstelle zwischen c und d mit a <= c < d <= b wenn (f(c)<0 und f(d)>0) oder (f(c)>0 und f(d)<0) (OK die konstante Funktion f(x)=0 ist hierin nicht inbegriffen machts aber nur komplizierter)

Algorithmus:

nimm a und b und untennähernd obennähernd

if (meinefunktion(untennähernd)<0) and (meinefunktion(obennähernd)>0) or umgekehrt
then begin
//dazwischen ist Nullstelle grenzen neu setzen.
end;


Xion - Fr 15.09.06 14:17

machs doch einfach algebraisch, wie mans in der Schule lernt: bei f(x)=y ists natürlich doof, aber die Bedingung für ne Nullstelle ist doch, das f(x)=0 ist, oder. also musst du nur kucken, wann y=0 ist. natürlich wenn y 0 ist *g* aber bei einer anderen Funktion hast du z.B. f(x)=120x+10
aaalso: 120x+10=0 => 120x=-10 => *grübel* hmmm, y=-0.8333333...

Als Code würde ich das so machen:


(Bei einer einfachen Gleichung im Beispiel mit + also z.B. y=120x+10)

1) Position von + finden => einzelne Teile (120x und 10) in Variablen schreiben (dynamisches array?) im Bsp als a=120x und b=10

2) "Alles mit x auf eine Seite" => ein minus vor der variable mit einem x drin => a:=-a => a=-120x.

3) x aus a rauschneiden (a=-120) und dann b durch a teilen => ergebnis.


(Bei einer einfachen Gleichung im Beispiel y=3x)

nur schritt 3) aus obigem beispiel

bei quadratischen gleichungen natürlich schwerer, aber man muss einfach so vorgehen, wie man es auf einem Zettel tun würde.