Les membres ayant 30 points peuvent parler sur les canaux annonces, projets et hs du chat.
La shoutbox n'est pas chargée par défaut pour des raisons de performances. Cliquez pour charger.

Forum Casio - Discussions


Index du Forum » Discussions » [Java] Un petit moteur de calcul.
Smashmaster Hors ligne Ancien modérateur Points: 4561 Défis: 253 Message

[Java] Un petit moteur de calcul.

Posté le 20/01/2015 18:49

Salut à tous

Aujourd'hui j'ai programmer en Java un petit moteur de calcul qui est capable de calculer :

Addition
Multiplication
Soustraction
Exposant
Cos
Sin
Variable
Constant

Exemple :
Cliquez pour découvrir
Cliquez pour recouvrir



public class Main2 {
    public static void main(String[] args)
    {
        Expression expression =
                new Multiplication(
                    new Addition(
                        new Constant(3)
                        ,
                        new Sinus(
                            new Exposant(
                                new Multiplication(
                                    new Constant(3)
                                    ,
                                    new Variable()
                                )
                                ,
                                new Constant(2)
                            )
                        )
                    )
                    ,
                    new Constant(2)
                );
        
        System.out.println(expression.ToString() + " = " + new Double (expression.calculer(0)).toString() );
        //résultat : ((3.0+sin(((3.0*x)^2.0)))*2.0) = 6.0
    }
}





Ce programme utilise le Design Pattern Composite, il est donc très facile à rajouter d'autres opérateurs.

Comment rajouter d'autres opérateurs ?
Cliquez pour découvrir
Cliquez pour recouvrir

Je veux que ce programme soit capable de calculer des modulo, l'opérateur modulo est un opérateur binaire (contrairement à tan() qui est un opérateur unaire), donc je crée une classe "Modulo" qui hérite de la classe "OperateurBinaire" et qui implémente la classe "Expression", on obtient :


public class Modulo extends OperateurBinaire implements Expression {

    Modulo( Expression fg, Expression fd) { //constructeur, ne rien changer
        super(fg,fd);
    }
    
    @Override
    public double calculer(int var) {
        
    }

    @Override
    public String ToString() {
        
    }    
}

Maintenant il suffit juste de compléter les méthodes calculer() et ToString() :


//fg représente l'expression à gauche de l'opérateur %
//fd représente l'expression à droite de l'opérateur %
public double calculer(int var) {
    return getFg().calculer(var) % getFd().calculer(var);//on reconnait que cette méthode calcule de manière récursive
}

[code]
public String ToString() {
    String chaine = "(" + getFg().ToString() + " mod " + getFd().ToString() + ")";
    return chaine;
}
[/code]


Voilà, la classe Modulo est maintenant implémenté, on peut maintenant l'utiliser :)
[code]
public static void main(String[] args)
{
    Expression expression = new Modulo ( new Constant(2) , new Constant(3) )
    expression.calculer(0); //retourne 2 mod 3, càd 2
}
[/code]
Le paramètre de la méthode "calculer" représente la valeur de la variable, exemple :
[code]
public static void main(String[] args)
{
    Expression expression = new Modulo ( new Variable() , new Constant(3) )
    expression.calculer(0); //retourne x mod 3 = 0 mod 3 = 0
    expression.calculer(2); //retourne x mod 3 = 2 mod 3 = 2
}
[/code]

[/spoiler]
[/spoiler]
[b][u]Pourquoi publier ce code sur P-C ?[/u][/b]
[spoiler]
Ce code a été programmé en Java, il est donc très facile à adapter ce code en C++, vous pouvez donc vous en servir pour vos projets sur calculatrice (par exemple pour un moteur CAS). :)
[/spoiler]

[b][u]Licence[/u][/b]
[spoiler]
Pas de licence, faite ce que vous voulez avec. ^^
[/spoiler]


Fichier joint


Lephenixnoir En ligne Administrateur Points: 24673 Défis: 170 Message

Citer : Posté le 22/01/2015 16:14 | #


Pour ma propre information, qu'est-ce qu'une interface ? Je ne crois pas que ce concept existe en C++.
Mon graphe (11 Avril): ((Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; passe gint 3 ; ...) || (shoutbox v5 ; v5)
Dodormeur Hors ligne Ancien rédacteur Points: 3965 Défis: 84 Message

Citer : Posté le 22/01/2015 16:21 | #


C'est un concept du java, en gros c'est une série de méthode qui ne sont pas implémentée, et que des classes peuvent implémenter pour "implémenter" cette interface. En gros, c'est une sorte d'héritage sauf que la classe mère n'implémente rien et ne possède pas de variable.

Ajouté le 22/01/2015 à 16:23 :
C'est plus ou moins utilisé pour remplacer l'héritage multiple en C++
Pokemon !!!!!! => pokemon stadium/battle

mes meilleurs jeux
Cliquer pour enrouler
un jeu avec des niveaux de gris mais compatible SH4 (mais en monochrome pour les SH4) => bomberman
envie de plonger dans la mer pour ramasser des tresors? => ballon sea
envie de sauver l'univers dans un jeu avec une longue durée de vie? => saviors of the future
un add-in addictif avec plein de secret et de trophées => evasion survival
un shmup bien dur et sadique => saviors 2

projets
Cliquer pour enrouler

pokemon
Cliquer pour enrouler



encodage des données de combat (sprite, attaques et nom)
   100%

systeme de combat
   100%

encodage des données de pokemon (niveau d'apprentisage et evolution)
   100%


moteur de la carte
   50%

level design
   1%

finition de pokemon jade
   42%

merci a tout le monde pour son soutien


projets que je soutiens
Cliquer pour enrouler
minecraft de limachi
zelda prizm de smashmaster (en esperant qu'il puisse le finir)
les tests de marmotti
un RPG de dark storm (dont je connais le nom, mais pas vous ) Arcuz !
Lephenixnoir En ligne Administrateur Points: 24673 Défis: 170 Message

Citer : Posté le 22/01/2015 16:26 | #


C'est des fonctions virtuelle pures quoi. Les fonctions virtuelles sont faites pour qu'on puisse appeler une méthode overloadée à partir d'un pointeur sur une classe parente, et les pures sont celles qui ne sont pas implémentées pour ladite classe parente.
Mon graphe (11 Avril): ((Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; passe gint 3 ; ...) || (shoutbox v5 ; v5)
Dodormeur Hors ligne Ancien rédacteur Points: 3965 Défis: 84 Message

Citer : Posté le 22/01/2015 16:28 | #


C'est pas exactement ça, mais c'est le principe oui
Pokemon !!!!!! => pokemon stadium/battle

mes meilleurs jeux
Cliquer pour enrouler
un jeu avec des niveaux de gris mais compatible SH4 (mais en monochrome pour les SH4) => bomberman
envie de plonger dans la mer pour ramasser des tresors? => ballon sea
envie de sauver l'univers dans un jeu avec une longue durée de vie? => saviors of the future
un add-in addictif avec plein de secret et de trophées => evasion survival
un shmup bien dur et sadique => saviors 2

projets
Cliquer pour enrouler

pokemon
Cliquer pour enrouler



encodage des données de combat (sprite, attaques et nom)
   100%

systeme de combat
   100%

encodage des données de pokemon (niveau d'apprentisage et evolution)
   100%


moteur de la carte
   50%

level design
   1%

finition de pokemon jade
   42%

merci a tout le monde pour son soutien


projets que je soutiens
Cliquer pour enrouler
minecraft de limachi
zelda prizm de smashmaster (en esperant qu'il puisse le finir)
les tests de marmotti
un RPG de dark storm (dont je connais le nom, mais pas vous ) Arcuz !

LienAjouter une imageAjouter une vidéoAjouter un lien vers un profilAjouter du codeCiterAjouter un spoiler(texte affichable/masquable par un clic)Ajouter une barre de progressionItaliqueGrasSoulignéAfficher du texte barréCentréJustifiéPlus petitPlus grandPlus de smileys !
Cliquez pour épingler Cliquez pour détacher Cliquez pour fermer
Alignement de l'image: Redimensionnement de l'image (en pixel):
Afficher la liste des membres
:bow: :cool: :good: :love: ^^
:omg: :fusil: :aie: :argh: :mdr:
:boulet2: :thx: :champ: :whistle: :bounce:
valider
 :)  ;)  :D  :p
 :lol:  8)  :(  :@
 0_0  :oops:  :grr:  :E
 :O  :sry:  :mmm:  :waza:
 :'(  :here:  ^^  >:)

Σ π θ ± α β γ δ Δ σ λ
Veuillez donner la réponse en chiffre
Vous devez activer le Javascript dans votre navigateur pour pouvoir valider ce formulaire.

Si vous n'avez pas volontairement désactivé cette fonctionnalité de votre navigateur, il s'agit probablement d'un bug : contactez l'équipe de Planète Casio.

Planète Casio v4.3 © créé par Neuronix et Muelsaco 2004 - 2024 | Il y a 107 connectés | Nous contacter | Qui sommes-nous ? | Licences et remerciements

Planète Casio est un site communautaire non affilié à Casio. Toute reproduction de Planète Casio, même partielle, est interdite.
Les programmes et autres publications présentes sur Planète Casio restent la propriété de leurs auteurs et peuvent être soumis à des licences ou copyrights.
CASIO est une marque déposée par CASIO Computer Co., Ltd