Function als Parameter einer anderen Function übergeben

Für Fragen von Einsteigern und Programmieranfängern...
Antworten
Geronimo
Beiträge: 24
Registriert: Sa 1. Feb 2025, 23:22
OS, Lazarus, FPC: Winux (L 3.6.0 FPC 3.2.2)
CPU-Target: 64Bit
Wohnort: Hamburg

Function als Parameter einer anderen Function übergeben

Beitrag von Geronimo »

Moin allerseits,

ich hätte gern eine Funktion als Parameter einer anderen Function übergeben, die dann damit etwas machen soll.
Beispiel:

Code: Alles auswählen

function BerechneWas(x: Extended): Extended;
begin
   //...Berechnungen in Abhängigkeit von x
  result := ...;
end;
Von dieser Funktion möchte ich numerisch die Nullstelle berechnen, z.B. indem ich das Bisektionsverfahren o.ä. auf
die Funktion loslasse.

Code: Alles auswählen

function Nullstelle(BerechneWas): Extended;
begin
   //suche die Nullstelle von BerechneWas
  result := ...;
end;
Die Funktion Nullstelle soll so allgemein formuliert sein, dass ich auch andere Funktionen (falls erf. mit der gleichen Signatur) als BerechneWas
unterschieben kann.

Das geht bestimmt! Aber wie?
Ich bitte um Hilfe. Weiß auch nicht so recht wonach ich suchen soll.

Gruß
Geronimo
Die Welt ist linear, rechteckig und gaussverteilt.

wp_xyz
Beiträge: 5163
Registriert: Fr 8. Apr 2011, 09:01

Re: Function als Parameter einer anderen Function übergeben

Beitrag von wp_xyz »

Deklariere die Funktion einfach als eigenen Typ mit der Signatur "function(x: Double): Double"

Code: Alles auswählen

type
  TCalcFunc = function(x: Double): Double;

function NullStelle(f:TCalcFunc; min, max: Double; AValue: Double): Boolean;
begin
  // hier das Bisektionsverfahren implementieren
end;

// Aufruf
var
  x0: Double;
begin
  if NullStelle(@sin, -0.1, 0.1, x0)) then
    WriteLn('Nullstelle von sin(x) zwischen -0.1 und 0.1 ist bei x=', x)
  else
    WriteLn('Im Bereich zwischen -0.1 und 0.1 hat sin(x) keine Nullstelle.');
 


Geronimo
Beiträge: 24
Registriert: Sa 1. Feb 2025, 23:22
OS, Lazarus, FPC: Winux (L 3.6.0 FPC 3.2.2)
CPU-Target: 64Bit
Wohnort: Hamburg

Re: Function als Parameter einer anderen Function übergeben

Beitrag von Geronimo »

...
vielen Dank für die schnellen Antworten.

Manchmal sieht man den Wald vor lauter Bäumen nicht.
:D
Die Welt ist linear, rechteckig und gaussverteilt.

Antworten