Polynom einlesen und berechnen



  • Hallo,

    ich bin recht neu was C-Programmierung angeht und habe deshalb ein Problem bei dem ich Hilfe brauche.

    Ich brauchc eine Möglichkeit ein beliebiges Polynom einlesen zu können, und dann davon Funktionswerte zu berechnen. Das Einlesen ist ja nicht das Problem, nur wie kann man dann die Funktionswerte berechnen?

    Kennt da jemand ein Tutorial oder kann mir das "for Dummies" erklären? 😉

    MfG Mephi



  • Hi,

    google mal nach: Horner Schema c code

    1. Treffer scheint das zu sein was du suchst.

    Gruß,

    Andreas



  • Woah super danke. Genau sowas hatte ich gesucht. 🙂 Aufs Horner-Schema bin ich beim googln allerdings nicht gekommen. xD



  • Hattes nur kurz überflogen weil ich in Eile war und muss jetzt feststellen das mir das doch nicht hilft. 😕
    In dem Beispiel wird auch eine codierte Funktion berechnet, ich bräuchte aber eine Möglichkeit die Funktion vom Nutzer eingeben zu lassen.



  • Ich verstehe Dein Problem nicht ganz, ist das jetzt das Eingeben oder das Berechnen?
    Im Prinzip solltest Du ein Array für die Koeffizienten aufziehen (muß ja nicht unbedingt dynamisch sein), mit Nullen vorbelegen und den Benutzer per scanf() füllen lassen.
    Schlauerweise bringst Du das konstante Glied auf array[0] unter, das lineare auf array[1], das quadratische auf array[2] usw.

    Dann brauchst Du noch einen x- Wert und die Rechnerei kann losgehen:
    Du addierst alle Teilsummen, die sich aus (x hoch Index) mal array[Index] ergeben zu einer Gesamtsumme, kann man schön in einer for- Schleife machen.

    Ist keine Hexerei, wozu brauchst Du da was Vorgekautes? 😕



  • Naja ich soll ein Programm schreiben das die die Näherung eines Intervalls anhand der Simpsonschen Regel berechnet. Dabei sollen die Intervallgrenzen sowie die Funktion f(x) vom Benutzer eingebbar sein.

    Für die Funktion sind keine Einschränkungen getroffen, das kann also f(x)=sin²(x) oder f(x)=x²+4/5x-8.

    Wenn ich die Formel mit scanf() in eine Zeichenkette auslese (hab ich mir einfach mal so gedacht), dann hab ich das problem das ich die Eingabe ja irgendwie in Rechenanweisungen übersetzen muss. Wenn also formel[3]== '+' ist, wie sag ich meinem Programm dann, dass er das, was vor dem Plus kommt und das, was danach kommt addieren muss, wobei da dann ja wieder eine Teilformel stehen kann.

    Mein Problem ist also quasi, wie kann ich aus dem Zeichen '+' die Funktion machen?



  • Mephi schrieb:

    Mein Problem ist also quasi, wie kann ich aus dem Zeichen '+' die Funktion machen?

    Hi,
    das ist mit C nicht so einfach zu lösen, denn das ganze läuft auf einen Parser hinaus und ist recht umfangreich zu programmieren ( Entwicklungszeit selbst für fortgeschrittene Programmierer mehrere Wochen/Monate ).

    Du hast die Möglichkeiten:
    - Parser selber schreiben.
    - Eine Bibliothek benutzen ( MuParser, etc. für C fällt mir gerade keiner ein).
    - Einen Compiler benutzen, der dir dynamisch eine Exe mit dem Funktionsausdruck erzeugt.

    Gruß,
    w.s.



  • Mephi schrieb:

    Mein Problem ist also quasi, wie kann ich aus dem Zeichen '+' die Funktion machen?

    na, mit 'nem if. im prinzip so

    if (op == '+')
      zwischenergebnis = a + b;
    

    🙂



  • Mephi schrieb:

    Für die Funktion sind keine Einschränkungen getroffen, das kann also f(x)=sin²(x)

    Das ist aber kein Polynom, dafür ein irreführender Titel des Posts ... 🙄

    Mephi schrieb:

    Wenn ich die Formel mit scanf() in eine Zeichenkette auslese (hab ich mir einfach mal so gedacht), dann hab ich das problem das ich die Eingabe ja irgendwie in Rechenanweisungen übersetzen muss. ... Mein Problem ist also quasi, wie kann ich aus dem Zeichen '+' die Funktion machen?

    Dafür ist C nicht ausgelegt, bei allen Compilersprachen wird Dir nichts außer Parsing überbleiben und auch die meisten Inter/Compretersprachen bieten nur recht holprige Wege an, das auswertbar als ausführbaren Code reinzumogeln.
    Sorry ... 😞



  • pointercrash() schrieb:

    Dafür ist C nicht ausgelegt

    aber sowas haben schon legionen von c-programmierern vorher gecodet. hier z.b.: https://svn.blender.org/svnroot/bf-blender/trunk/blender/extern/ffmpeg/libavcodec/eval.c
    🙂


Log in to reply