IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Autres éditeurs Discussion :

parses les fonctions mathématiques cos, sin, tan?


Sujet :

Autres éditeurs

  1. #1
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2016
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 25
    Localisation : Maroc

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2016
    Messages : 5
    Points : 3
    Points
    3
    Par défaut parses les fonctions mathématiques cos, sin, tan?
    Bonjour !

    J'ais reussi a coder un programme qui est en fait une calculatrice (en C avec shuntant-yard algorithme):


    Nom : 2 Prof.PNG
Affichages : 832
Taille : 22,3 Ko

    Comment puis-je parses des expressions mathématiques comme sin, cos, tan, sqrt etc...

    meri d'avance

  2. #2
    Modérateur
    Avatar de dinobogan
    Homme Profil pro
    ingénieur
    Inscrit en
    Juin 2007
    Messages
    4 073
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France

    Informations professionnelles :
    Activité : ingénieur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 4 073
    Points : 7 163
    Points
    7 163
    Par défaut
    Ta difficulté est d'analyser une fonction qui est unaire ? Alors que jusqu'à maintenant, tous tes opérateurs sont binaires ?

  3. #3
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2016
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 25
    Localisation : Maroc

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2016
    Messages : 5
    Points : 3
    Points
    3
    Par défaut
    quelle est la priorité de les fonctions et est-ce qu'ils sont associatives à gauche ou à droite ?

  4. #4
    Modérateur
    Avatar de dinobogan
    Homme Profil pro
    ingénieur
    Inscrit en
    Juin 2007
    Messages
    4 073
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France

    Informations professionnelles :
    Activité : ingénieur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 4 073
    Points : 7 163
    Points
    7 163
    Par défaut
    Citation Envoyé par geek56 Voir le message
    quelle est la priorité de les fonctions et est-ce qu'ils sont associatives à gauche ou à droite ?
    On parle d'associativité pour un opérateur binaire.
    L'associativité pour l'opérateur binaire "+" se définit ainsi :
    (a + b) + c = a + (b + c)

    Un opérateur unaire n'a pas de propriété d'associativité.

    Par contre, tu vas tomber sur le problème de la priorité.
    En effet, comment interpréter ça : S = sin a + b
    Est-ce que c'est : S = (sin a) + b
    ou : S = sin (a + b)
    Bien sûr, c'est la première proposition. Mais tu doit prendre en compte la priorité de tous tes opérateurs dans ton code.

  5. #5
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2016
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 25
    Localisation : Maroc

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2016
    Messages : 5
    Points : 3
    Points
    3
    Par défaut
    comme cet exemple : S = 4*8-6/5 * sin(90) + 5

  6. #6
    Modérateur
    Avatar de dinobogan
    Homme Profil pro
    ingénieur
    Inscrit en
    Juin 2007
    Messages
    4 073
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France

    Informations professionnelles :
    Activité : ingénieur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 4 073
    Points : 7 163
    Points
    7 163
    Par défaut
    Citation Envoyé par geek56 Voir le message
    comme cet exemple : S = 4*8-6/5 * sin(90) + 5
    Cette expression en notation suffixe devient (en tenant compte des priorités) :
    S = 4 8 * 6 5 / 90 sin * - 5 +

  7. #7
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2016
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 25
    Localisation : Maroc

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2016
    Messages : 5
    Points : 3
    Points
    3
    Par défaut
    salut j'ai terminer la fonction shunting-yard :

    Nom : Shunting yard.PNG
Affichages : 651
Taille : 15,8 Ko

    mais comment je peux evaluer la fonction "sin" par exemple ?
    voilà la fonction Eval que j'utilisé pour évaluer les notation fixes :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
     
    double Eval(char** str, int size)
    {
        int i;
        pile p = creer_pile();
        for(i=0;i<size;i++)
        {
            double operand1, operand2;
            double nbr;
            if(sscanf(str[i], "%lf", &nbr)==1)
            {
                empiler(p, nbr);
            }
            else if( is_operator_s(str[i]) )
            {
                operand1 = sommet(p);
                depiler(p);
                operand2 = sommet(p);
                depiler(p);
                switch (str[i][0])
                {
                    case '+' :
                        empiler(p, operand2+operand1);
                        break;
                    case '-' :
                        empiler(p, operand2-operand1);
                        break;
                    case '*' :
                        empiler(p, operand2*operand1);
                        break;
                    case '/' :
                        empiler(p, operand2/operand1);
                        break;
                    case '^' :
                        empiler(p, pow(operand2,operand1));
                        break;
                    case 's' :/* s pour sin c pour cos et t pour tan ...*/
                        /*  */
                        break;
                }
            }
        }
        return sommet(p);
    }

  8. #8
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2016
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 25
    Localisation : Maroc

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2016
    Messages : 5
    Points : 3
    Points
    3
    Par défaut
    salut merci c'est resolut

    Nom : en fin.PNG
Affichages : 665
Taille : 80,4 Ko



    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
     
    double Eval(char** str, int size)
    {
        int i;
        pile p = creer_pile();
        for(i=0;i<size;i++)
        {
            double operand1, operand2;
            double nbr;
            if(sscanf(str[i], "%lf", &nbr)==1)
            {
                empiler(p, nbr);
            }
            else if( is_operator_s(str[i]) )
            {
                operand1 = sommet(p);
                depiler(p);
                operand2 = sommet(p);
                depiler(p);
                switch (str[i][0])
                {
                    case '+' :
                        empiler(p, operand2+operand1);
                        break;
                    case '-' :
                        empiler(p, operand2-operand1);
                        break;
                    case '*' :
                        empiler(p, operand2*operand1);
                        break;
                    case '/' :
                        empiler(p, operand2/operand1);
                        break;
                    case '^' :
                        empiler(p, pow(operand2,operand1));
                        break;
                    case 's' :/* s pour sin c pour cos et t pour tan ...*/
                        /*  */
                        break;
                }
            }
            else if (is_function(str[i][0]))
            {
                operand1 = sommet(p);
                depiler(p);
                switch (str[i][0])
                {   /* s pour sin c pour cos et t pour tan ...*/
                    case 'c':
                        empiler(p, cos(operand1));
                        break;
                    case 's':
                        empiler(p, sin(operand1));
                        break;
                    case 't':
                        empiler(p, tan(operand1));
                        break;
                }
            }
        }
        return sommet(p);
    }

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Les fonctions mathématiques
    Par hamelum dans le forum x86 16-bits
    Réponses: 5
    Dernier message: 01/11/2015, 20h42
  2. les fonctions mathématique de VB.Net
    Par vb.net.2008 dans le forum Windows Forms
    Réponses: 2
    Dernier message: 07/11/2008, 23h43
  3. [Débutant] Les fonctions mathématiques en Fortran
    Par feynman dans le forum Fortran
    Réponses: 1
    Dernier message: 17/07/2007, 10h21
  4. Réponses: 24
    Dernier message: 30/05/2007, 18h29

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo