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 :

probleme avec les tableaux


Sujet :

C

  1. #1
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2014
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2014
    Messages : 4
    Points : 3
    Points
    3
    Par défaut probleme avec les tableaux
    salut, j'ai ce code (pour l'arbre binaire) mais j'ai un problème avec le tableau ; je veux que la personne rentre une expression et la stocke dans le tableau qui est de type char, sauf que quand je rentre "123", ça me retourne des valeurs bizarres. Est-ce que quelqu'un pourra m'aider svp ?

    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
    78
    79
    80
    #include<stdio.h>
    #include<stdlib.h>
     
    typedef struct treeNode
    {
        int data;
        struct treeNode *left;
        struct treeNode *right;
     
    } treeNode;
     
    treeNode * Insert(treeNode *node,int data)
    {
        if(node==NULL)
        {
            treeNode *temp;
            temp = (treeNode *)malloc(sizeof(treeNode));
            temp -> data = data;
            temp -> left = temp -> right = NULL;
            return temp;
        }
     
        if(data >(node->data))
        {
            node->right = Insert(node->right,data);
        }
        else if(data < (node->data))
        {
            node->left = Insert(node->left,data);
        }
        /* Else there is nothing to do as the data is already in the tree. */
        return node;
     
    }
     
    void PrintInorder(treeNode *node)
    {
        if(node==NULL)
        {
            return;
        }
        printf("%d ",node->data);
        PrintPreorder(node->left);
        PrintPreorder(node->right);
    }
     
    void PrintPreorder(treeNode *node)
    {
        if(node==NULL)
        {
            return;
        }
        PrintInorder(node->left);
        printf("%d ",node->data);
        PrintInorder(node->right);
     
    }
     
    int main()
    {
        treeNode *root = NULL;
     
        //char tableau[4+1] = { 3,4,5,6};
        int i=0;
        char tableau[4+1];
        printf(("donner une expression: "));
        scanf("%s",tableau);
        for(i=0; i<4; i++)
        {
            root = Insert(root, tableau[i]);
        }
     
        printf("infixe: \n");
        PrintInorder(root);
        printf("\n");
        printf("prefixe: \n");
        PrintPreorder(root);
        printf("\n");
        treeNode * temp;
    }

  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 : 42
    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
    Le fonctionnement est normal : tu insères les codes ASCII de ton entrée clavier. De plus, tu ne t'arrêtes pas au caractère NULL, donc un quatrième caractère à zéro s'affiche.
    Le code ASCII Pour 1 est 49, je te laisse deviner pour les autres

    Au passage, lorsque tu poses une question, donne aussi les "valeurs bizarres", ça peut faire gagner du temps au contributeur bénévole qui souhaite donner un coup de main.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java
    Que la force de la puissance soit avec le courage de ta sagesse.

  3. #3
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2014
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2014
    Messages : 4
    Points : 3
    Points
    3
    Par défaut
    Citation Envoyé par dinobogan Voir le message
    Le fonctionnement est normal : tu insères les codes ASCII de ton entrée clavier. De plus, tu ne t'arrêtes pas au caractère NULL, donc un quatrième caractère à zéro s'affiche.
    Le code ASCII Pour 1 est 49, je te laisse deviner pour les autres

    Au passage, lorsque tu poses une question, donne aussi les "valeurs bizarres", ça peut faire gagner du temps au contributeur bénévole qui souhaite donner un coup de main.
    Merci beaucoup. Comment est-ce que je peux eviter le code ASCII?
    desolé :p

  4. #4
    Membre actif Avatar de zaza576
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Août 2013
    Messages
    175
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Août 2013
    Messages : 175
    Points : 275
    Points
    275
    Par défaut
    Hello,

    si j'ai bien compris, c'est dans le champ data (de type int soit dit en passant) que tu stockes la chaîne de ta structure ?

    Tu mets donc une chaîne de caractères dans un tableau d'entiers, c'est donc un peu normal d'avoir du code ASCII, non ?

    Si tu veux avoir purement une chaîne de caractère stockée, change le type de data[] en char* ou char[] si tu veux une chaîne de taille fixe.
    Fais bien attention à allouer et désallouer CORRECTEMENT ton tableau car tu pointes en mémoire.

    Si tu veux vraiment être sûr de ne pas avoir de fuite mémoire après avoir codé cela, utilise un outil comme Valgrind ou gdb pour checker que ton code ne produira pas de segfault ou autres conneries du genre !
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    function googleIsYourF*ck*ngFriend(String url, String maQuestion){
        goTo(url);
        reponse = find(maQuestion);
        if(isAcceptable(reponse)){
            clickOn(By.xpath("//button[@id='resolvedButton']"));
        }
        sendMessage("Merci");
    }
    
    googleIsYourF*ck*ingFriend("http://www.google.fr", "ma question");

  5. #5
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2014
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2014
    Messages : 4
    Points : 3
    Points
    3
    Par défaut
    merci pour ton aide .

    là j'ai changé tout le code de nouveau , est-ce que vous pourriez m'aider afin de faire le parcours Infixe, Prefixe et Postfixe ? Parce que ça me donne une réponse bizarre comme "845145865613544513258" (parcours Infixe) pour l'expression "12 4 +".

    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
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    #include<stdio.h>
    #include<stdlib.h>
    #include<string.h>
     
    typedef struct treeNode
    {
        char * data;
        char operation;
        struct treeNode *left;
        struct treeNode *right;
     
    } treeNode;
    treeNode *creerNoeud(char op, char * val, treeNode * gauche, treeNode * droite){
        treeNode *n = malloc(sizeof(treeNode *));
        n->left = gauche;
        n->right= droite;
        n->data = val;
        n->operation=op;
        return n;
    }
     
    char *lirechaine(){
        int tableauSize = 5;
        int i=0;
        char *tableau= malloc(tableauSize);
        printf("donner une expression: ");
        char c;
        while((c=getchar()) != '\n')
        {
            tableau[i++]=c;
            if(i>=tableauSize){
                tableau = realloc(tableau, tableauSize*=2);
                if(tableau == 0){
                    exit(0);
                }
            }
        }
        tableau[i]='\0';
        return tableau;
    }
     
    treeNode *creerASA(char *tab){
        char *data = malloc(10);
        treeNode *left = malloc(sizeof(treeNode*));
        treeNode *right = malloc(sizeof(treeNode*));
        treeNode **arbrePile = malloc(10*sizeof(treeNode));
     
        char c;
        int j=0; int i = 0; int k = 0;
    boucle:
        while((c=tab[i++])!='\n'){
            if(c>='0' && c<='9'){
                data[j++] = c;
            }
     
            else if(c=='/' || c=='+'){
                if(k>=2){
                    right = arbrePile[--k];
                    left = arbrePile[--k];
                    arbrePile[k++] = creerNoeud(c, NULL, left, right);
                }else{
                    exit(0);
                }
            }
            else if(c=' ' && j!=0 ){
                data[j]='\0';
                j=0;
                arbrePile[k++] = creerNoeud(0, data, NULL, NULL);
                data = malloc(10);
     
            }
            else if(c= ' ' && tab[i+1]!=EOF){
                goto fin;
            }
            else if((c=tab[i++])=='\n')
                exit(0);
            else{
                 exit(0);
            }
        }
        if(k!=1) exit(0);
    fin:
        return arbrePile[0];
    }
     
    void Infixe(treeNode *Node){
        if(Node!=NULL){
            Infixe(Node->left);
            printf("%d", Node->data);
            Infixe(Node->right);
        }
        return;
    }
     
    int main()
    {
        char *tab;
        char *tableau =tableau+ '\n';
        tableau = lirechaine();
        //tableau = "66 33 / 9 10 +'\n'";
        treeNode *racine = creerASA(tableau);
        Infixe(creerASA(tableau));
       // printf("nkfgk");
    }

  6. #6
    Membre actif Avatar de zaza576
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Août 2013
    Messages
    175
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Août 2013
    Messages : 175
    Points : 275
    Points
    275
    Par défaut
    Relis la partie concernant les préfixes, suffixes et infixes :
    http://fr.wikipedia.org/wiki/Arbre_binaire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    function googleIsYourF*ck*ngFriend(String url, String maQuestion){
        goTo(url);
        reponse = find(maQuestion);
        if(isAcceptable(reponse)){
            clickOn(By.xpath("//button[@id='resolvedButton']"));
        }
        sendMessage("Merci");
    }
    
    googleIsYourF*ck*ingFriend("http://www.google.fr", "ma question");

  7. #7
    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 : 42
    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 Ahmad1994 Voir le message
    Merci beaucoup. Comment est-ce que je peux eviter le code ASCII?
    desolé :p
    On n'évite pas le code ASCII. Lorsque tu entres des caractères au clavier, c'est du code ASCII. Chaque touche du clavier correspond à un entier.
    Une valeur entre simple quote comme par exemple le caractère '0' est un caractère ASCII qui vaut 48 en entier.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java
    Que la force de la puissance soit avec le courage de ta sagesse.

Discussions similaires

  1. problemes avec les tableaux et macros
    Par Aniss00 dans le forum C
    Réponses: 4
    Dernier message: 15/10/2014, 19h53
  2. probleme avec les tableaux
    Par heeedi dans le forum Débuter avec Java
    Réponses: 2
    Dernier message: 22/05/2009, 10h17
  3. [Langage] Probleme avec les tableaux dynamiques
    Par wawa84 dans le forum Langage
    Réponses: 7
    Dernier message: 19/11/2008, 17h18
  4. Problemes de memoires avec les tableaux: outOfMemoryError
    Par Battosaiii dans le forum Langage
    Réponses: 7
    Dernier message: 16/07/2006, 16h50
  5. [Tableaux] Probleme avec les switch
    Par grumly22 dans le forum Langage
    Réponses: 9
    Dernier message: 10/04/2006, 10h51

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