Projet

Signaler
Messages postés
12
Date d'inscription
jeudi 5 février 2009
Statut
Membre
Dernière intervention
16 mai 2010
-
Messages postés
12
Date d'inscription
jeudi 5 février 2009
Statut
Membre
Dernière intervention
16 mai 2010
-
ecrire une application en java avec interface graphique ,permettant de traiter des fonction arithmetique d'une variable( par exemple f(x)= 2(3x^2+log x)ou bien f(x)=sin x -7))
aplication :
de saisie via une zone texte la fonction
de visialiser dans une zone graphique contenant un repére orthonormé ,le tracer sur un intervale choisie par l'utilisateur


mercie de me répondre

6 réponses

Messages postés
15814
Date d'inscription
jeudi 8 août 2002
Statut
Modérateur
Dernière intervention
4 mars 2013
130
Salut,



Et tu veux qu'on te fasse ton projet à ta place c'est cà ? Donc quand
tu travaillera, à chaque programme qu'on te demandera, tu viendras nous
voir pour qu'on fasse le boulot à ta place et ainsi gagner de l'argent
sur notre dos ?



Notre but n'est pas de faire des programmes prêt à l'emploi pour ceux qui le demande, mais de répondre à des problèmes précis.



Donc essaye au moins d'avancer sur ton projet, et lorsque tu butte sur des problèmes, vient nous demander de l'aide.

_____________________________________________________________________
Messages postés
12
Date d'inscription
jeudi 5 février 2009
Statut
Membre
Dernière intervention
16 mai 2010

Bonsoir ,
Non, j'ai pas demandé de me faire mon travail, mais je veux un homme qui mon cadre pour commencer ce projet. C'est la premier projet que je le fais. Je suis un étudiant débutant. Je suis heureux de votre aide.

Dans ce projet :
J'ai commencé a tracer le repère et insérer des boutons des zones textes
??? Mon problème c'est comment calculer f(x) à partir de la zone texte. Je vais t?expliquer par exemple si la zone texte contient 2x^2*(los(x)-2x) comment je calcule f(1) puis f(2) et ainsi de suite. ??
Mon idée c'est de calculer tout les coordonnés des points de l'intervalle puis le tracer point à point en jouant sur le repère .

Mercier de votre attention.
Messages postés
15814
Date d'inscription
jeudi 8 août 2002
Statut
Modérateur
Dernière intervention
4 mars 2013
130
Oui, c'est le plus dur à faire je pense : l'interprêteur de fonction.



J'ai eu à faire un projet similaire cette année, et l'interprêteur nous
étais donné par le prof car assez balaise à faire ! En plus de cà, il
avait simplifier le problème en imposant une saisie non pas naturelle
(3 + X) mais en mettant les opérateurs avant (du style : 3X * cos(X)
donne : * ((* 3 X (cos X)))) comme le lisp en fait...


Le principe : utiliser la récursion pour récupèrer chaque opérations
(avec des StringTokenizer) et construire des fonctions de base
(multiplications, addition, etc.) pour calculer le tout.



Voici le contenu de la classe qui permettait d'interprêter les
fonctions entrées (le code n'est pas de moi mais de mon prof donc) :



package functions;



import java.io.IOException;

import java.io.StreamTokenizer;

import java.io.StringReader;

import java.util.HashMap;

import java.util.Map;



import curves.SyntaxErrorException;





public class Functions {

public static final Function SIN = new Function() {

public double value(double x) {

return Math.sin(x);

}



};



public static final Function COS = new Function() {

public double value(double x) {

return Math.cos(x);

}

};



public static final Function X = new Function() {

public double value(double x) {

return x;

}

};



public static final Function compose(final Function f1, final Function f2) {

return new Function() {

public double value(double x) {

return f1.value(f2.value(x));

}

};

}



public static final Function plus(final Function f1, final Function f2) {

return new Function() {

public double value(double x) {

return f1.value(x) + f2.value(x);

}

};

}



public static final Function minus(final Function f1, final Function f2) {

return new Function() {

public double value(double x) {

return f1.value(x) - f2.value(x);

}

};

}



public static final Function times(final Function f1, final Function f2) {

return new Function() {

public double value(double x) {

return f1.value(x) * f2.value(x);

}

};

}



public static final Function over(final Function f1, final Function f2) {

return new Function() {

public double value(double x) {

return f1.value(x) / f2.value(x);

}

};

}



public static final Function constant(final double c) {

return new Function() {

public double value(double x) {

return c;

}

};

}



public static final Map<String, Operator> operators = new HashMap<String, Operator>();



private static abstract class Operator {

final String name;



final int arity;



public Operator(String name, int arity) {

this.name = name;

this.arity = arity;

}



public abstract Function eval(Function... args);

}



private static Operator[] entries = { new Operator("x", 0) {

public Function eval(Function... functions) {

return X;

}

}, new Operator("sin", 1) {

public Function eval(Function... args) {

return compose(SIN, args[0]);

}

}, new Operator("cos", 1) {

public Function eval(Function... args) {

return compose(COS, args[0]);

}

}, new Operator("+", 2) {

public Function eval(Function... args) {

return plus(args[0], args[1]);

}

}, new Operator("-", 2) {

public Function eval(Function... args) {

return minus(args[0], args[1]);

}

}, new Operator("*", 2) {

public Function eval(Function... args) {

return times(args[0], args[1]);

}

}, new Operator("/", 2) {

public Function eval(Function... args) {

return over(args[0], args[1]);

}

} };



static {

for (Operator e : entries) {

operators.put(e.name, e);

}

}



private static final Function parseFunction(StreamTokenizer st)

throws SyntaxErrorException, IOException {

switch (st.ttype) {

case StreamTokenizer.TT_NUMBER:

return constant(st.nval);

case StreamTokenizer.TT_WORD:

Operator op = operators.get(st.sval);

if (op == null) {


throw new SyntaxErrorException(st, "Unknown
operator");

}

Function[] args = new Function[op.arity];

for (int i = 0; i < op.arity; ++i) {

st.nextToken();

args[i] = parseFunction(st);

}

return op.eval(args);

default:

throw new SyntaxErrorException(st);

}

}



public static final Function parse(String s) throws SyntaxErrorException,

IOException {



StreamTokenizer st = new StreamTokenizer(new StringReader(s));

st.wordChars('!', '~');

st.eolIsSignificant(false);

st.nextToken();

Function f = parseFunction(st);

st.nextToken();

if (st.ttype != StreamTokenizer.TT_EOF) {

throw new SyntaxErrorException(st);

}

return f;

}



}

_____________________________________________________________________
Messages postés
358
Date d'inscription
jeudi 24 octobre 2002
Statut
Membre
Dernière intervention
13 avril 2020

bonjour med_mt, j'ai toujours révé de faire un interpréteur de fonction.
Sur ce site tu peux trouver un code qui montre graphiquement la décompisition d'une fonction par arbre binaire.

Remarque:
pour ceux qui vienne chercher de l'aide sur ce site, si vous précisez vos questions dans votre premier post cela fera gagner du temps à tout le monde et évitera de vous faire passé pour un gros glandeur.
Messages postés
333
Date d'inscription
dimanche 25 mai 2003
Statut
Membre
Dernière intervention
23 novembre 2009
1
Il existe des parsers pour expressions mathématiques libres en Java
https://sourceforge.net/projects/jep/ par exemple. Ça peut faire gagner un peu de temps :)

Dobel
[Une fois rien, c'est rien; deux fois rien, ce n'est pas beaucoup, mais pour trois fois rien, on peut déjà s'acheter quelque chose, et pour pas cher]
Messages postés
12
Date d'inscription
jeudi 5 février 2009
Statut
Membre
Dernière intervention
16 mai 2010

D'abord mercier de votre aide,
Ça fait deux jours que j'essaie à comprendre le code que tu as ma donnée mais je n'ai pas trot compris. Même aussi le principe le principe de récursivité et la transformation de {3X * cos(X) en : * ((* 3 X (cos X)))) }
C'est vrai, c'est la partie la plue dure du projet.
S.V.P Vous pouvez m?expliqué se principe in ci une explication brève sur le code de votre prof

Mercie