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

C Discussion :

Notation Polonais Inversé (NPI)


Sujet :

C

  1. #1
    Futur Membre du Club Avatar de Croixpizza
    Homme Profil pro
    Programmeur
    Inscrit en
    Septembre 2018
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 23
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Programmeur
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Septembre 2018
    Messages : 7
    Points : 6
    Points
    6
    Par défaut Notation Polonais Inversé (NPI)
    Bonjour , je sais que plusieurs postes ont deja été fait mais j'ai l'impression de passer a cote de quelque choses ...

    En effet je cherche a convertir un expression tel que : 3 + 4 * 2 == 3 4 + 2 *

    j'ai actuellement ce programme (non complet car il manque la conversion ainsi que le systeme de parenthèse)
    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
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
     
    #include <unistd.h>
    #include <stdlib.h>
    #include <stdio.h>
    #include "miniLib/my.h"
     
    typedef struct Element Element;
    struct Element
    {
        int nombre;
        Element *suivant;
    };
     
    typedef struct Pile Pile;
    struct Pile
    {
        Element *premier;
    };
     
    void pile_push(Pile *pile, int nvNombre)
    {
        Element *nouveau = malloc(sizeof(*nouveau));
        if (pile == NULL || nouveau == NULL) {
            exit(EXIT_FAILURE);
        }
     
        nouveau->nombre = nvNombre;
        nouveau->suivant = pile->premier;
        pile->premier = nouveau;
    }
     
    int pile_down(Pile *pile)
    {
        if (pile == NULL) {
            exit(EXIT_FAILURE);
        }
     
        int nombreDepile = 0;
        Element *elementDepile = pile->premier;
        if (pile != NULL && pile->premier != NULL) {
            nombreDepile = elementDepile->nombre;
            pile->premier = elementDepile->suivant;
            free(elementDepile);
        }
     
        return nombreDepile;
    }
     
    char polonais(Pile *pile, char const *str)
    {
        int nombre;
        int i = 0;
     
        str = my_strlen(str);
        while (str[i] >= '0' && str[i] <= '9') {
            i++;
            pile_down(pile);
            if (str[i] == "+") {
                pile_down(pile);
            }
            else if (str[i] == '-') {
                pile_down(pile);
            }
            if (str[i] == '*') {
                pile_down(pile);
            }
            else if (str[i] == '\\') {
                pile_down(pile);
            }
            if (str[i] == '%') {
                pile_down(pile);
            }
            else if (str[i] == '\0') {
                return (0);
            }
        }
    }
    J'aimerais savoir si quelq'un pouvait me donner une piste sur comment gerer cet algorithme de conversion ou alors du moins un piste pour finir ce programme

    Ca peut paraitre un peu vague , j'en suis désolé par avance.

    Merci

  2. #2
    Expert confirmé

    Inscrit en
    Août 2006
    Messages
    3 950
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 3 950
    Points : 5 667
    Points
    5 667
    Par défaut
    Bonjour,

    Tu n'a pas dû chercher bien longtemps avant de venir poser ta question.

    Ton problème a si souvent servi d'exercice ...

  3. #3
    Futur Membre du Club Avatar de Croixpizza
    Homme Profil pro
    Programmeur
    Inscrit en
    Septembre 2018
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 23
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Programmeur
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Septembre 2018
    Messages : 7
    Points : 6
    Points
    6
    Par défaut
    J'ai bien cherché et c'est pour ca que je pose ca ici , j'ai bien compris le but l'objectif c'est pour cela que j'ai commencer a faire mon bout de code cependant je ne saisi pas la transcription de l'algo en C voila tout.

  4. #4
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 721
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 721
    Points : 31 044
    Points
    31 044
    Billets dans le blog
    1
    Par défaut
    Bonjour
    Citation Envoyé par Croixpizza Voir le message
    En effet je cherche a convertir un expression tel que : 3 + 4 * 2 == 3 4 + 2 *
    Ben déjà t'as pas de bol car 3 + 4 * 2 (qui vaut 11) n'est pas du tout équivalent à 3 4 + 2 * (qui, lui, vaut 14). Hé oui, la multiplication est prioritaire sur l'addition (tu te souviens au CM les petits dessins des voitures "+" et "-" qui laissaient la place à l'ambulance "*" ? probablement pas).
    3 + 4 * 2 se traduit en NPI par 3 4 2 * +.

    Citation Envoyé par Croixpizza Voir le message
    J'aimerais savoir si quelq'un pouvait me donner une piste sur comment gerer cet algorithme de conversion ou alors du moins un piste pour finir ce programme
    https://fr.wikipedia.org/wiki/Algorithme_Shunting-yard
    https://rosettacode.org/wiki/Parsing...yard_algorithm
    https://rosettacode.org/wiki/Parsing...rd_algorithm#C

Discussions similaires

  1. Pb de formatage de texte... Vertical, inversé...
    Par Grammaton dans le forum Access
    Réponses: 4
    Dernier message: 01/03/2007, 13h54
  2. [Jointure réflexive] problème en notation pointée
    Par Kraz dans le forum Langage SQL
    Réponses: 2
    Dernier message: 18/01/2005, 13h30
  3. commande mysql pour inversé 2 infos ?
    Par netwebzone dans le forum SQL Procédural
    Réponses: 4
    Dernier message: 11/12/2004, 16h49
  4. Conversion fpu -> notation scientifique décimale
    Par Alucard_Math dans le forum Assembleur
    Réponses: 4
    Dernier message: 13/05/2004, 16h44
  5. [Flash MX 2004]Notation par point
    Par willowII dans le forum Flash
    Réponses: 4
    Dernier message: 28/04/2004, 13h23

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