Ich habe ein Problem in Deinem Programm gefunden.
Es geht um folgende Zeilen:
Quelltext
1: 2: 3: 4: 5: 6: 7: 8:
| if ((extrema[i].Art = 2) and (extrema[i].Y > 0)) or ((extrema[i].Art = 1) and (extrema[i].Y < 0)) or ((extrema[i].Art = 0) and (extrema[i].Y > 0) and (OrdinateBerechnen(Eingabe, extrema[i].X - 1) < extrema[i].Y)) or ((extrema[i].Art = 0) and (extrema[i].Y < 0) and (OrdinateBerechnen(Eingabe, extrema[i].X - 1) > extrema[i].Y)) then begin Ausgabe[j] := Abtasten(Eingabe, extrema[i].X, extrema[i].X); j := j + 1; end; |
Es geht darum, dass Du um 1 nach links gehst. Aber Du weiß nicht, was dazwischen passiert. Dein Programm könnte dort massiv ins Leere laufen und nie mehr wieder kommen!
Besonders zusammen mit diesem Teil aus der Funktion "abtasten":
Quelltext
1: 2: 3: 4:
| if A = Z then begin vorX := Z -1; jetztX := Z; |
Auch hier wieder der Schritt um 1 nach links, der auch in der Nachfolgenden (Endlos-)Schleife gemacht wird. Man kann sicherlich ein Polynom f finden, welches folgende Eigenschaften hat:
1. Sattelpunkt S mit Funktionswert > 0.
2. f(S.x-1) < f(S.x)
3. f(S.x-1) > 0
Bis dahin alles gut. Nun soll am Punkt f(S.x-1) jedoch ein Minimum sein und zwar das letzte dieses Polynoms! Dann wird Dein Algorithmus die Endlosschleife für A=Z in der Funktion "abtasten" nicht mehr verlassen!
Leider kann ich für jeden Schritt nach links (also nicht 1, sondern 0,5 oder 1/Pi oder sonst was) ein solches Polynom finden.
Ich hoffe, ich irre mich, denn wenn ich mich irren würde, könnte ich dieses Vorgehen in meinem Programm verwenden. Bitte zeige mir einen Fehler in meiner Argumentation!
MfG,
Peter
Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".