AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Übergabe von Zahlen an Prozedur

Ein Thema von Crattely · begonnen am 29. Apr 2013 · letzter Beitrag vom 30. Apr 2013
 
Crattely

Registriert seit: 26. Sep 2012
4 Beiträge
 
#5

AW: Übergabe von Zahlen an Prozedur

  Alt 29. Apr 2013, 19:44
Vielen Dank !!!
Da schreibt man die kompliziertesten Programme und dann so ein dummer Fehler
NST6 ist eigentlich gar keine Nullstelle, sondern da werden Dinge wie "unendlich viele Nullstellen" oder "keine NSTs", also Sonderfälle reingeschrieben und später ausgewertet.
Die Nullstellen Funktion sieht so aus:

Delphi-Quellcode:
//Beginn Prozedur Funktion
function fktn(a,b,c,d,e,f,x:real):real;

             function pot(x:real;n:integer):real;
             var i:integer;
                 y:real;
             begin
                  y:=1;
                  for i:=1 to n do y:=y*x;
                  pot:=y;
             end;

begin
     fktn:=(a*pot(x,5)+b*pot(x,4)+c*pot(x,3)+d*pot(x,2)+e*x+f);
end;
//Ende Prozedur Funktion

//Beginn Prozedur NS_numerisch
procedure NS_numerisch(a,b,c,d,e,f:real; var NULL_1,NULL_2,NULL_3,NULL_4,NULL_5:real;var i:integer);
var //i:integer;
    x_MIN,x_MAX,x:real;

    function BerechneNullstelle_Numerisch(x_MAX,x_MIN:real):real;
    var Mitte:real;
    begin
         repeat
               Mitte:=(x_MAX + x_MIN)/2;
               if fktn(a,b,c,d,e,f,x_MIN)*fktn(a,b,c,d,e,f,Mitte)>0 then x_MIN := Mitte
               else x_MAX := Mitte;
         until x_MAX - x_MIN < 0.0001;
         BerechneNullstelle_Numerisch := (x_MIN + x_MAX)/2;
    end;

begin
x_MIN := -20;
i := 0; //Gefundene Nullstellenanzahl [Index]

While x_MIN < 20 do begin
      x_MAX := x_MIN + 0.1;
      if fktn(a,b,c,d,e,f,x_MIN)*fktn(a,b,c,d,e,f,x_MAX) < 0 then begin
         x := BerechneNullstelle_Numerisch(x_MAX,x_MIN);
         i:=i+1;
         case i of
              1: NULL_1:= x;
              2: NULL_2:= x;
              3: NULL_3:= x;
              4: NULL_4:= x;
              5: NULL_5:= x;
         end;
      end;
      x_MIN := x_MAX;
end;
end;
//Ende Prozedur NS_numerisch


//Beginn Prozedur Nullstellen allgemein
procedure Nullstellen(a,b,c,d,e,f:real; var NST1,NST2,NST3,NST4,NST5:real; var NST6:string; var Anzahl_NST:integer);
var g:real;
begin
NST6:='0';
If (a=0) and (b=0) and (c=0) then begin
   If d=0 then begin
      If e=0 then begin
             If f=0 then NST6:='x beliebig';
                If f<>0 then NST6:='Keine Nullstellen!';
                end
             else begin
                       Anzahl_NST:=1;
                       NST1:=(-f/e);
             end;
      end
   else begin
     g := (e*e) - (4*d*f);
     If g < 0 then NST6:='Keine Nullstellen!'
     else if g = 0 then begin
                             Anzahl_NST:=1;
                             NST1:=(-e/(2*d))
     end
     else begin
        NST1:=((-e + sqrt(g)) / (2*d));
        Anzahl_NST:=1;
        NST2:=((-e - sqrt(g)) / (2*d));
        Anzahl_NST:=2;
     end;
  end;
end
else begin
Anzahl_NST:=0;
NS_numerisch(a,b,c,d,e,f,NST1,NST2,NST3,NST4,NST5,Anzahl_NST);

end;
end;
//Ende Prozedur Nullstellen allgemein

Relativ kompliziert, komischerweise gibt er, wenn die Nullstelle bei x=0 liegt immer 4,8... als Nullstelle aus
Weiß jemand woran das liegen könnte ? Konnte sich auch mein Lehrer nicht erklären
  Mit Zitat antworten Zitat
 


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:46 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz