AGB  ·  Datenschutz  ·  Impressum  







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

function->tfunction

Ein Thema von vsilverlord · begonnen am 1. Nov 2009 · letzter Beitrag vom 8. Nov 2009
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von vsilverlord
vsilverlord

Registriert seit: 7. Jan 2008
Ort: Baden Württemberg- Hohenlohekreis
174 Beiträge
 
RAD-Studio 2009 Arc
 
#1

function->tfunction

  Alt 1. Nov 2009, 11:14
hallo, ich möchte eine variable function nutzen.
Diese soll als parameter für eine procedure dienen, sodass ich funktionen einsetzen kann .
so soll es funktionen (tut es aber nicht), es ist aber nicht der orginal quelltext, sondern nur das wesentliche:
Delphi-Quellcode:
uses (...)math;
(...)
type
 tfunction= function(a:extended):extended;
(...)
var
zahlen:array of extended;
(...)
procedure trape(parameterfunction: tfunction);
var
i:integer;
begin
  for i:=0 to length(zahlen)-1 do
  begin
   zahlen[i]:=parameterfunction(zahlen[i]);
  end;
end;
(...)
procedure sintrape;
begin
trape(sin)
end;
ach ja, was ich noch sagen wollte: bitte sagt mir nicht, dass das blöde ist, und dass das viel zu umständlich ist; ich hab das total durchgedacht, so ist der beste Weg!
//edit: integer in extended verändert
Volker
~beware
Wizards First Rule:
People are stupid; given proper motivation, almost anyone will believe almost anything. Because people are stupid, they will believe a lie because they want to believe it’s true, or because they are afraid it might be true
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#2

Re: function->tfunction

  Alt 1. Nov 2009, 11:16
Wie äussert sich das Nichtfunktionieren? Fehlermeldung?
Markus Kinzler
  Mit Zitat antworten Zitat
Benutzerbild von vsilverlord
vsilverlord

Registriert seit: 7. Jan 2008
Ort: Baden Württemberg- Hohenlohekreis
174 Beiträge
 
RAD-Studio 2009 Arc
 
#3

Re: function->tfunction

  Alt 1. Nov 2009, 11:18
-> inkompatible typen
ich hab es sogar mal so gemacht, dass ich die sin-function umgeschrieben habe, hat aber auch nicht geklappt:
Delphi-Quellcode:
function newsin(a:extended):extended;
begin
result:=sin(a);
end;
Volker
~beware
Wizards First Rule:
People are stupid; given proper motivation, almost anyone will believe almost anything. Because people are stupid, they will believe a lie because they want to believe it’s true, or because they are afraid it might be true
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#4

Re: function->tfunction

  Alt 1. Nov 2009, 11:21
In welcher zeile?
Ich vermute es liegt an sin
Markus Kinzler
  Mit Zitat antworten Zitat
Benutzerbild von vsilverlord
vsilverlord

Registriert seit: 7. Jan 2008
Ort: Baden Württemberg- Hohenlohekreis
174 Beiträge
 
RAD-Studio 2009 Arc
 
#5

Re: function->tfunction

  Alt 1. Nov 2009, 11:24
ja, es funktioniert aber mit keiner mathematischen funktion (z.b ln)
Volker
~beware
Wizards First Rule:
People are stupid; given proper motivation, almost anyone will believe almost anything. Because people are stupid, they will believe a lie because they want to believe it’s true, or because they are afraid it might be true
  Mit Zitat antworten Zitat
guidok

Registriert seit: 28. Jun 2007
417 Beiträge
 
#6

Re: function->tfunction

  Alt 1. Nov 2009, 11:25
Zitat von vsilverlord:
type
tfunction= function(a:extended):extended;

var
zahlen:array of integer;

[/delphi]
Liegt es vielleicht daran das die Funktion als Ergebnis extended zurückgibt und deine Zahlen vom Typ integer sind?
  Mit Zitat antworten Zitat
Benutzerbild von vsilverlord
vsilverlord

Registriert seit: 7. Jan 2008
Ort: Baden Württemberg- Hohenlohekreis
174 Beiträge
 
RAD-Studio 2009 Arc
 
#7

Re: function->tfunction

  Alt 1. Nov 2009, 12:47
ah nein, das war nur in diesem beispiel falsch! im richtigen quelltext ist das schon extended, es funktioniert trotzdem nicht!
Volker
~beware
Wizards First Rule:
People are stupid; given proper motivation, almost anyone will believe almost anything. Because people are stupid, they will believe a lie because they want to believe it’s true, or because they are afraid it might be true
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.132 Beiträge
 
Delphi 12 Athens
 
#8

Re: function->tfunction

  Alt 1. Nov 2009, 13:07
also bei mir funktioniert dein Beispiel aus der #1

und zwar mit nur einer kleinen Änderung
tfunction = function(const a: extended): extended; in der OH steht es zwar anders, aber da du ja die Delphi-Quellcodes hast, hättest du da auch selber mal genauer nachsehn können.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Benutzerbild von sx2008
sx2008

Registriert seit: 15. Feb 2008
Ort: Baden-Württemberg
2.332 Beiträge
 
Delphi 2007 Professional
 
#9

Re: function->tfunction

  Alt 1. Nov 2009, 13:14
Zitat von vsilverlord:
ach ja, was ich noch sagen wollte: bitte sagt mir nicht, dass das blöde ist, und dass das viel zu umständlich ist; ich hab das total durchgedacht, so ist der beste Weg!
Du kennst wahrscheinlich das Strategie-Design-Pattern noch nicht.
Anstelle eines Funktionszeigers wird ein Objekt einer Klasse übergeben.
Das eröffnet völlig neue Möglichkeiten.

Angenommen du möchtest einer Funktionsplotter schreiben und die Funktionen dynamisch übergeben.
Wenn du aber eine ganze Kurvenschar anzeigen möchtest ergibt sich ein Problem:
Für jede Funktion muss ein anderer Funktionszeiger übergeben werden.
Delphi-Quellcode:
TMatheFunktion = class(TObject) // allgemeine Basisklasse
public
  function CalcY(x:extended):extended;virtual;abstract;
end;

TSinusFunktion = class(TMatheFunktion)
public
  Omega : extended;
  Phi : extended;
  function CalcY(x:extended):extended;override;
  constructor Create;
end;

function TSinusFunktion.CalcY(x:extended):extended;
begin
  Result := sin(Omega*x + Phi);
end;

constructor Create;
begin
  inherited;
  Omega := 1.0; Phi := 0.0; // defaultwerte setzen
end;
Man könnte jetzt z.B. 5 Objekte der Klasse TSinusFunktion erzeugen, wobei jedes Objekt andere Werte
für Omega und Phi hat.
Diese Objekte übergibt man dem Funktionsplotter der dann alle X-Werte von -10 bis +10 durchläuft
und den Y-Wert durch Aufruf der CalcY()-Funktion für jedes der Objekte ermittelt.
Dadurch erhält man 5 verschiedene Kurven.
fork me on Github
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.132 Beiträge
 
Delphi 12 Athens
 
#10

Re: function->tfunction

  Alt 1. Nov 2009, 13:21
@sx2008: dein Strategie-Design-Pattern entspricht einem bekannten Verhalten, welches man schon seit Jahren selbst von der WinAPI her kennt.

Delphi-Quellcode:
// Einzelfunktion
tfunction = function({params}; private: Integer): result;

// Methode
tmethod = function({params}): result of object;
nur daß bei dem Objekt die Funktion intern eigentlich so aussieht
tmethod = function(self: TObject; {params}): result;
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 01:56 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz