Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Differenzieren?? (https://www.delphipraxis.net/121625-differenzieren.html)

herklotz 1. Okt 2008 14:00


Differenzieren??
 
Hallo ich bin's mal wieder!

Wir sollen uns nun für die Schule die Woche über mit Differnzieren von Gleichungen beschäftigen.
Leider habe ich im Moment überhaupt keinen Ansatz.
Wir sollen das in etwa so machen:
Der Nutzer soll z.B. eine f(x)=mx²+c Funktion eingeben und daraus vom Programm in y:=m*x*x+c;
umgewandelt werden.

Klaus01 1. Okt 2008 14:10

Re: Differenzieren??
 
Zitat:

Zitat von herklotz
Hallo ich bin's mal wieder!

Wir sollen uns nun für die Schule die Woche über mit Differnzieren von Gleichungen beschäftigen.
Leider habe ich im Moment überhaupt keinen Ansatz.
Wir sollen das in etwa so machen:
Der Nutzer soll z.B. eine f(x)=mx²+c Funktion eingeben und daraus vom Programm in y:=m*x*x+c;
umgewandelt werden.

Sollte es nicht so aussehen:

f(x)=mx^2+c -> f'(x)=2mx

Wenn mich meine Mathekenntnis nicht ganz verlassen haben.

Grüße
Klaus

3_of_8 1. Okt 2008 14:12

Re: Differenzieren??
 
Ich glaube, er meint nicht "differenzieren" (was ja ableiten heißen würde), sondern parsen.

Florian H 1. Okt 2008 14:17

Re: Differenzieren??
 
Wie kommt man von "parsen" bzw. "Gleichung auseinanderziehen" zu "differenzieren"? ôO

Chrissi91 1. Okt 2008 14:19

Re: Differenzieren??
 
Ich glaube er meint, er muss eine Funktion parsen, um sie differenzieren zu können.

Ich weiß nicht wie weit ihr seid, aber wenn ihr am Anfang seid würde ich ein paar Edits hinklatschen.

m*x^n+c

Ein Edit für m, ein Edit für n und ein Edit für c.

Oder aber nur ein Edit und du parst es. Musst aber bei bedenken, dass es passieren kann, dass jemand Vorzeichen verwendet, Mal-Zeichen weglässt.

Das wird sicher lustig und ein Haufen Arbeit. :D

herklotz 1. Okt 2008 15:01

Re: Differenzieren??
 
Danke ersteinmal! Ja ich hatte mich wohl ein bisschen falsch ausgedrückt.
So ist's richtig:
1. nur ein Editfeld (z.B. f(x) = x^2 soll rein)
2. dann parsen, damit mit eingesetzten x-Werten rechnen kann
3. dann Ableitungsfunktion (in dem Fall f'(x) = 2x)

Hierbei ist mir eigentlich nur ein Denkanstoß wichtig, um aus 'f(x) = x^2' im Programm etwas rechenbares zu machen.
Schritt 3 kann ich dann alleine.

Chrissi91 1. Okt 2008 15:52

Re: Differenzieren??
 
Zitat:

Zitat von herklotz
Danke ersteinmal! Ja ich hatte mich wohl ein bisschen falsch ausgedrückt.
So ist's richtig:
1. nur ein Editfeld (z.B. f(x) = x^2 soll rein)
2. dann parsen, damit mit eingesetzten x-Werten rechnen kann
3. dann Ableitungsfunktion (in dem Fall f'(x) = 2x)

Hierbei ist mir eigentlich nur ein Denkanstoß wichtig, um aus 'f(x) = x^2' im Programm etwas rechenbares zu machen.
Schritt 3 kann ich dann alleine.

Also ich bin da sicher keine große Hilfe. Aber als Anfang:

Auf Kleinschreibung umstellen LowerCase und Leerzeichen entfernen (Trim?). Dann hast du es erstmal einfacher. *-Zeichen könntest du auch entfernen, wenn nicht jemand eingibt f(x) = 2x + (3 * 2).

Dann suchst du mittels Pos X. Wenn X Pos1 ist, ist m (mx+n) = 1, wenn X An Position 2 ist, dann prüfst du, ob die 1. Position - ist (das wäre dann -x + ...). In dem Falle wäre m - 1. Wenn das alles nicht zutrifft ist m der Wert, der vor dem X steht.

Ganz einfach und umständlich. :D

ThomasNds 2. Okt 2008 22:51

Re: Differenzieren??
 
Mögliche Denkanstöße:

http://www.bestcode.com/html/tbcparser.html
http://www.delphipraxis.net/internal...t.php?p=486614
http://www.efg2.com/Lab/Library/Delp...ns/Parsers.htm
http://www.delphi-forum.de/viewtopic...ht=matheparser (die Antwort)
http://www.delphi-forum.de/viewtopic...onen+auswerten
http://www.heise.de/kiosk/archiv/ct/95/02/234
http://www.jkrieger.de/programming/jkmath/jkmath.html
http://www.flashforum.de/forum/showthread.php?t=246436

Bäume sind berechenbar
Rekursiver Formel-Parser mit Baumstruktur
Harald Lipke
Know-how, Binärbaum
c't 12/89, S. 250 (it)


Suchwörter für Yahoo/Google: Formelparser, Formelauswerter, (mathematical expression parser, Matheparser, Formelparser


Hoffe geholfen zu haben.


Tom

Hador 3. Okt 2008 00:17

Re: Differenzieren??
 
Ich habe auch schon mal irgendwann sowas geschrieben. Vorgegangen bin ich damals in etwa so:
- Operatorenreihenfolge feslgegen
- Operator mit der höchsten Priorität in dem String suchen
- Als Wurzel in einen Baum einfügen
- Reststrings (je nach parameteranzahl des Operators/der Funktion) als Child-Knoten eingefügt
- das ganze für die Kinder und alle anderen Operatoren wiederholen
- Nachdem alles aufgeteilt wurde in der untersten Ebene anfangen zu berechnen

Wesentlich einfacher wird das ganze, wenn du nur wenige Operatoren und möglichst mit gleicher Parameteranzahl nimmst.
Noch einfacher ist es, wenn du PostFix-Schreibweise für Funktionen/Operatoren vorgibst :wink:


Alle Zeitangaben in WEZ +1. Es ist jetzt 02:44 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