WinFuture-Forum.de: Warum Kann Man In Java Keine Funktionen Einlesen? - WinFuture-Forum.de

Zum Inhalt wechseln

Nachrichten zum Thema: Entwicklung
Seite 1 von 1

Warum Kann Man In Java Keine Funktionen Einlesen? ... oder geht es doch?


#1 Mitglied ist offline   du ciel 

  • Gruppe: aktive Mitglieder
  • Beiträge: 148
  • Beigetreten: 03. Dezember 04
  • Reputation: 0

geschrieben 21. Dezember 2005 - 18:03

Hallo,

mein Anliegen: Ich möchte in Java eine Funktion f(x) einlesen:
z.b. 3x²+2x+5, s. d. ich anschl. damit ein paar mathematische Spielereien machen kann, z.b. Differenziale/Integrale/Nullstellen etc. berechnen ... nur wie geht das? ich will natürlich nicht die funktion bereits im quelltext definieren, sondern es soll für jede funktion f(x), die der benutzer eingegeben hat, funktionieren:

ein paar leute, die ich schon fragte, sagten mir nur eins: verwende matlab/scilab ... aber ich möchte doch anwendungen für enduser programmieren und keinen algorithmus testen.

es gibt zwar die möglichkeit, die fkt. als zeichenkette einzulesen und danach auseinander zu friemeln, aber das ist nur eingeschränkt möglich ... z.b. wüsst ich nicht, wie es bei f(x)=cos²x funktionieren würde, abgesehen davon erkennt Java nur Potenzen bis zur Größenordnung 3, wenn man sie als String auseinander flicken möchte - ich suche also eine Klasse, mit der ich Funktionen einlesen und anschl. damit rechnen kann. Falls das nicht möglich ist, dann frage ich mich, wie die ganzen hobbyprogrammierer mit so etwas umgehen (z.b. appomatox, deadline, ...)


bin für jede Hilfe dankbar :-)

LG
Gunnar
0

Anzeige



#2 Mitglied ist offline   tobiasndw 

  • Gruppe: aktive Mitglieder
  • Beiträge: 3.815
  • Beigetreten: 24. September 03
  • Reputation: 0
  • Geschlecht:Männlich

geschrieben 21. Dezember 2005 - 18:16

also ich habe zwar kein Plan von JAVA, allerdings kann man Funktionen doch eigentlich immer nur aufrufen und diese geben dann einen Wert zurück. Also zb.

ergebnis = rechne(wert1,wert2);

Seit wann kann man denn einer funktion einen Wert als "rechne() = wert" übergeben? ^_^
0

#3 Mitglied ist offline   du ciel 

  • Gruppe: aktive Mitglieder
  • Beiträge: 148
  • Beigetreten: 03. Dezember 04
  • Reputation: 0

geschrieben 21. Dezember 2005 - 18:33

entweder ich steh grad total auf dem schlauch, oder ich hab mich wohl zu umständlich ausgedrückt:

ich möchte, dass der benutzer eine mathematische funktion (wie in der schule, also 3x+x+1/x² ...) und z.b. eine stelle 'x' eingeben kann, und das programm dann mit dieser eingegebenen funktion an der stelle 'x' berechnungen durchführt ... das hat erstmal nichts mit dem funktionsaufruf in der informatik zu tun, mein problem ist, wie krieg ich diese funktion, also diese usereingabe, in einen kontext mit einem numerischen algorithmus, d.h. die variable 'x' muss das programm innerhalb des eingebenen userstrings erkennen und damit rechnen können ...

nur wie geht man hier vor?

btw: gruß nach niederwürschnitz, das ist ja fast nur nen katzensprung entfernt ;-)

Dieser Beitrag wurde von du ciel bearbeitet: 21. Dezember 2005 - 18:37

0

#4 Mitglied ist offline   Rika 

  • Gruppe: aktive Mitglieder
  • Beiträge: 11.533
  • Beigetreten: 11. Juni 03
  • Reputation: 2
  • Geschlecht:Männlich

geschrieben 21. Dezember 2005 - 19:37

Parsen und Berechnen, was anderes bleibt dir wohl nicht übrig.
Dank Interfaces und Generics lassen sich ja zumindest funktionale Ausdrücke relativ ordentlich als Aggregationen ausdrücken.

Die andere Möglichkeit wäre, es in eine geeignete Java-Expression in einer Klasse zu überführen, via JVM-Management den Compiler anzuwerfen und dann die kompilierte Klasse zu laden. Sowas geht dann aber nicht in Applets.

Dieser Beitrag wurde von Rika bearbeitet: 21. Dezember 2005 - 19:41

Konnichiwa. Manga wo shitte masu ka? Iie? Gomenne, sonoyouna koto ga tabitabi arimasu. Mangaka ojousan nihongo doujinshi desu wa 'Clamp X', 'Ayashi no Ceres', 'Card Captor Sakura', 'Tsubasa', 'Chobits', 'Sakura Taisen', 'Inuyasha' wo 'Ah! Megamisama'. Hai, mangaka gozaimashita desu ni yuujin yori.
Eingefügtes Bild
Ja, mata ne!

(For sending email please use OpenPGP encryption and signing. KeyID: 0xA0E28D18)
0

#5 Mitglied ist offline   du ciel 

  • Gruppe: aktive Mitglieder
  • Beiträge: 148
  • Beigetreten: 03. Dezember 04
  • Reputation: 0

geschrieben 21. Dezember 2005 - 20:38

thx rika ... hab mich mit diesen methoden zwar noch nicht beschäftigt, aber so weiß ich erstmal, in welche richtung die ganze geschichte geht ... hatte eigentlich auf eine deiner simplen einzeiler gehofft :)
0

#6 Mitglied ist offline   Rika 

  • Gruppe: aktive Mitglieder
  • Beiträge: 11.533
  • Beigetreten: 11. Juni 03
  • Reputation: 2
  • Geschlecht:Männlich

geschrieben 21. Dezember 2005 - 21:02

Eine Evaluationsfunktion gibt es aus Strikt- und Sicherheitsgründen in Java prinzipiell nicht.

Aber es gibt einige Java-Packete, die solch ähnliche Funktionen bereits implementieren. Google hilft.
Konnichiwa. Manga wo shitte masu ka? Iie? Gomenne, sonoyouna koto ga tabitabi arimasu. Mangaka ojousan nihongo doujinshi desu wa 'Clamp X', 'Ayashi no Ceres', 'Card Captor Sakura', 'Tsubasa', 'Chobits', 'Sakura Taisen', 'Inuyasha' wo 'Ah! Megamisama'. Hai, mangaka gozaimashita desu ni yuujin yori.
Eingefügtes Bild
Ja, mata ne!

(For sending email please use OpenPGP encryption and signing. KeyID: 0xA0E28D18)
0

#7 _Newlukai_

  • Gruppe: Gäste

geschrieben 22. Dezember 2005 - 08:27

IMHO macht eine solche API nur dann Sinn, wenn man die Funktionen in einer allgemein bekannten und evtl. standardisierten (Auszeichnungs)Sprache übergeben muß.
Woher sollte die API den Unterschied zwischen 2^3, exp(2, 3) und pow(2, 3) kennen?
Im SKD wird man sowas nicht finden, der Anwendungsfall ist wohl zu spezifisch. Evtl. gibt es eine API, aber am wahrscheinlichsten ist es, das Du selbst implementieren mußt.
0

#8 Mitglied ist offline   [U]nixchecker 

  • Gruppe: aktive Mitglieder
  • Beiträge: 347
  • Beigetreten: 17. Mai 05
  • Reputation: 0
  • Wohnort:Bayern
  • Interessen:Informatik, Linux, Rollerbladen, Bodybuilding, GungFu

geschrieben 23. Dezember 2005 - 15:50

Tja das ist nicht ganz einfach, wenn du alle möglichen Mathematischen Ausdrücke unterstützen willst, aber für die Grundoperationen ziemlich einfach, stell dir folgendes vor:

x + x wird eingeben

dann kann man so vorgehen, du hast eine Klasse, die Addiert zahlen(pseudo code):

int add(a,b)
{
return (a+b);
}


Also kannst du das obige berechnen in dem du seine Eingabe einliest und prüfst :

irgendwas(x) gefolgt von + (okay hier muss ich ein add machen) gefolgt von x, passt ist ne korrekte Formel.
somit rufst du dein add(x,x) auf.

Stünde da nun:

x+x*2

dann musst du beim parsen natürlich das zerlegen, sprich nach Rangfolge, du parst und erkennst * kommt vor +, also wird deine Aufrufkette so aussehen:

result=multi(x,2)
add(x,result)

steht da ein x^3, dann erkennst du, dass du:

result=multi(x,x)
rsult=multi(result,x)

machen musst usw.

Also was du benötigst ist am besten als erstes ein scanner, der drüber läuft und guckt ist es erstmal ein gultiger Ausdruck, danach am besten in einem Bau die Struktur des Ausdrucks aufbauen Stichwort Syntaxbaum, so in etwa:

x*c+x*d

dann sieht dein Baum aus:

+
.. ..
* *

von unten her rufst du dann deine Funktionen mit den entsprechenden Werten auf.

Es reichen ja für die Grundoperationen einfach add,sub,multi... und komplizierte Ausdrücke kannst du ja darauf zurückführen also z.B. X^4

Am einfachsten geht sowas mit nem parser und scanner generator wie bison und flex, die werden beim compilerbau benutzt um selber programmiersprachen zu definieren und da ist die Vorgehensweise identisch.
0

#9 Mitglied ist offline   du ciel 

  • Gruppe: aktive Mitglieder
  • Beiträge: 148
  • Beigetreten: 03. Dezember 04
  • Reputation: 0

geschrieben 23. Dezember 2005 - 17:40

@unixchecker: ... das müsste ja eigentlich auch für die winkelfunktionen und den ganzen rest, was java.math noch so zu bieten hat, gelten: im prinzip gehe ich dann wieder den weg, den ich eigentlich vermeiden wollte aber anders wird es wohl nicht gehen ...

von den genannten scannern hab ich noch nichts gehört aber thx für die infos!


gunnar
0

Thema verteilen:


Seite 1 von 1

1 Besucher lesen dieses Thema
Mitglieder: 0, Gäste: 1, unsichtbare Mitglieder: 0