hi, wie kann ich die rechenoperation selbst an eine funktion übergen? bsp.: void FülleFeld (feld,rechenoperation); //rechenoperation: y=x^2 //oder y=1 //oder y=x gruß, w
In dem du aus den Rechenoperationen eine Funktion machst und die Addresse der Funktion uebergibst. Gruss Helmi
>In dem du aus den Rechenoperationen eine Funktion machst und die >Addresse der Funktion uebergibst. Man könnte es auch einfach mit einer switch-case-Abfrage machen, wenn man sich auf ein Rechen-Operationen-System festlegt.
danke :-) das würde aber voraus setzen das ich für jede mathematische op eine funktion erstellen muss, oder? ich würde die operation gern als define schreiben und über geben: #define exponentiell y=x^2 #define linear y=1
Die Makros kannst Du benutzen aber übergeben wird sich dann wahrscheinlich Dein Compiler, wenn die so übergeben willst...
erstell doch nen enum für deine funktionen typedef enum OPERATIONEN { QUADRATISCH, LINEAR}; und übergib dann beim funktionsaufruf diese: void FuelleFeld (datatyp_feld* feld, OPERATIONEN funktion) { switch (funktion) { case EXPONENTIELL: feld->y = (feld->x) ^ 2; break; case LINEAR: feld->y = (feld->x); break; default: break; } } oder du definierst deine Funktion halt immer als y = (a * x) ^ b + c und übergibts a,b und c einzeln. mfg TheMiB
Ich vermute mal ganz stark, dass das eingentliche Problem ist, dass du etwas einfaches auf eine sehr komplizierte Art und weise lösen möchtest. Denn deine Frage ist eine äußert ungewöhnliche Problemstellung.
Wenn Du trotzdem die Funktion übergeben möchtest, dann such mal nach function pointer .... Grüße, Michael
Die Kollegen haben ja schon ein paar Lösungsmöglichkeiten angegeben. Aber Du solltest vielleicht über die Nachfrage von Klaus doch ein paar Augenblicke nachdenken. Grundsätzlich ist es garnicht so ungewöhnlich, das man Operationen dynamisch gestalten muss. D.h. das die eigentliche Operation erst zur Ausführungszeit festgelegt wird. Welche Lösung Du verwendest hängt im wesentlichen davon ab, "wie" dynamisch das sein soll, oder genauer, welche Varietät von Operationen da auftauchen kann und auf welche Weise sie ausgewählt werden. 1. Jeweils nur eine Operation von etwa 2-3 bis zu 10 oder auch mehr. Die Anzahl ist aber grundsätzlich beschränkt. Die jeweilige Operation ist festgelegt. Es geht nur um eine Auswahl von zur Kompilierzeit schon festgelegten Operationen. Dann machen die Lösungen von Helmi und stk500-besitzer Sinn. 2. Die Operationen lassen sich nicht vorher festlegen. Der Benutzer legt diese fest und beschreibt sie. Dann kannst Du eine Script-Sprache einbinden (etwa FORTH, etc.) in welcher der Benutzer dann eigene "Programme" formuliert. Deine Idee mit den defines geht jedenfalls nicht. Bedenke das #define nur Textersatz zur Kompilierzeit ermöglicht. Keine Dynamische Auswahl zur Laufzeit. Ehrlich gesagt, denke ich das Lösung 2 vielleicht noch ein wenig jenseits Deiner Fähigkeiten liegt (z.B. wegen dem define als Lösungsanzatz). Aber ich kann mich ja auch irren. Wenn Du selbst ähnliche Zweifel hast, empfehle ich Dir erstmal Lösung 1 zu probieren und auszureizen.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.