Forum: Mikrocontroller und Digitale Elektronik rechenoperation an funktionen übergeben in c/c++


von whitenoise (Gast)


Lesenswert?

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

von Helmut L. (helmi1)


Lesenswert?

In dem du aus den Rechenoperationen eine Funktion machst und die 
Addresse der Funktion uebergibst.

Gruss Helmi

von STK500-Besitzer (Gast)


Lesenswert?

>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.

von whitenoise (Gast)


Lesenswert?

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

von Analog (Gast)


Lesenswert?

Die Makros kannst Du benutzen aber übergeben wird sich dann 
wahrscheinlich Dein Compiler, wenn die so übergeben willst...

von TheMiB (Gast)


Lesenswert?

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

von Klaus (Gast)


Lesenswert?

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.

von Michael K. (mmike)


Lesenswert?

Wenn Du trotzdem die Funktion übergeben möchtest, dann such mal nach 
function pointer ....

Grüße,
Michael

von Klugscheisser (Gast)


Lesenswert?

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
Noch kein Account? Hier anmelden.