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 :

problème d'indice tableau


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Avatar de exe2bin
    Profil pro
    Passionné de programmation
    Inscrit en
    Mars 2009
    Messages
    537
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Passionné de programmation

    Informations forums :
    Inscription : Mars 2009
    Messages : 537
    Billets dans le blog
    3
    Par défaut problème d'indice tableau
    Bonjour à tous ;
    voici mon tableau :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    char *tableAdd[10][10] = {{"00","01","02","03","04","05","06","07","08","09"},
                               {"01","02","03","04","05","06","07","08","09","10"},
                               {"02","03","04","05","06","07","08","09","10","11"},
                               {"03","04","05","06","07","08","09","10","11","12"},
                               {"04","05","06","07","08","09","10","11","12","13"},
                               {"05","06","07","08","09","10","11","12","13","14"},
                               {"06","07","08","09","10","11","12","13","14","15"},
                               {"07","08","09","10","11","12","13","14","15","16"},
                               {"08","09","10","11","12","13","14","15","16","17"},
                               {"09","10","11","12","13","14","15","16","17","18"}};
    puis plus loin ...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    multipliHaut = (tableMul[x][atoi(&multiplicande[--maxLength])])[1];
                resultatHaut = (tableAdd[atoi(&multipliHaut)][atoi(&retenueHaut)])[1];
                printf("retenueHaut = %c\n",retenueHaut);
                printf("multipliHaut = %c\tresultatHaut = %c\n",multipliHaut,resultatHaut);
                return resultat;
    l'affichage me donne les valeurs attendues qui sont '0' pour retenueHaut et '6' pour multipliHaut que je récolte dans une autre table.
    Là où ça coince c'est que resultatHaut = '2' alors que selon les coordonnées (6,0)[1] ou (0,6)[1] de la table je devrais recevoir '6' et non pas '2' ??
    Qui pourra m'aider à y voir plus clair ?

  2. #2
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 832
    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 832
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par exe2bin Voir le message
    l'affichage me donne les valeurs attendues qui sont '0' pour retenueHaut et '6' pour multipliHaut que je récolte dans une autre table.
    Là où ça coince c'est que resultatHaut = '2' alors que selon les coordonnées (6,0)[1] ou (0,6)[1] de la table je devrais recevoir '6' et non pas '2' ??
    Qui pourra m'aider à y voir plus clair ?
    Bonjour

    Le caractère '0' ne vaut pas 0. Et le caractère '6' ne vaut pas 6.

    De plus, la fonction "atoi()" veut impérativement une chaine en paramètre. Or un seul caractère ce n'est pas une chaine (enfin ça peut l'être s'il contient '\0' mais ça serait alors une chaine de longueur nulle n'ayant alors que fort peu d'intérêt)...
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  3. #3
    Membre éclairé
    Avatar de exe2bin
    Profil pro
    Passionné de programmation
    Inscrit en
    Mars 2009
    Messages
    537
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Passionné de programmation

    Informations forums :
    Inscription : Mars 2009
    Messages : 537
    Billets dans le blog
    3
    Par défaut
    Citation Envoyé par Sve@r Voir le message
    De plus, la fonction "atoi()" veut impérativement une chaine en paramètre. Or un seul caractère ce n'est pas une chaine (enfin ça peut l'être s'il contient '\0' mais ça serait alors une chaine de longueur nulle n'ayant alors que fort peu d'intérêt)...
    Le compilateur n'a pas l'air de s'en plaindre.

    Veux-tu dire que je devrais faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    char *resultatHaut,*multipliHaut,*retenueHaut = "0",retenueBas = "0";
    ?

  4. #4
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 832
    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 832
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par exe2bin Voir le message
    Le compilateur n'a pas l'air de s'en plaindre.
    Parce que la fonction "atoi()" veut une adresse (sensée être l'adresse d'un tableau) et qu'en lui passant "&multipliHaut" tu lui passes bien une adresse (sauf que c'est l'adresse d'un simple caractère mais le compilo n'est pas assez développé pour s'en rendre compte).

    Citation Envoyé par exe2bin Voir le message
    Veux-tu dire que je devrais faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    char *resultatHaut,*multipliHaut,*retenueHaut = "0",retenueBas = "0";
    ?
    Euh oui pour "retenueHaut" et "retenueBas". En revanche, "resultatHaut" et "multipliHaut" recevant le résultat de "atoi()" (donc un entier) doivent rester des entiers...
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  5. #5
    Membre éclairé
    Avatar de exe2bin
    Profil pro
    Passionné de programmation
    Inscrit en
    Mars 2009
    Messages
    537
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Passionné de programmation

    Informations forums :
    Inscription : Mars 2009
    Messages : 537
    Billets dans le blog
    3
    Par défaut
    ça y est presque !!
    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
     
    while(minLength)
        {
            tmp = --resultatLength;
            x = atoi(&multiplicateur[--minLength]);
            printf("x=%d\n",x);
            while(maxLength)
            {
                maxLength--;
                multipliHaut = &(tableMul[x][atoi(&multiplicande[maxLength])])[1];
                printf("%d X %c = %s\n",x,multiplicande[maxLength],multipliHaut);
                resultatHaut = &(tableAdd[atoi(multipliHaut)][atoi(retenueHaut)])[1];
                printf("retenueHaut = %s\n",retenueHaut);
                printf("resultatHaut = %s\n",resultatHaut);
                resultat[tmp] = (tableAdd[atoi(&(tableAdd[atoi(&resultat[tmp])][atoi(resultatHaut)])[1])][atoi(retenueBas)])[1];
     
                tmp--;
            }
        }
        return resultat;
    mais j'ai toujours :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    x=3
    3 X 2 = 6
    retenueHaut = 0
    resultatHaut = 6
    3 X 1 = 8
    retenueHaut = 0
    resultatHaut = 8
    12 x 3 = 046

  6. #6
    Modérateur

    Avatar de Bktero
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2009
    Messages
    4 493
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2009
    Messages : 4 493
    Billets dans le blog
    1
    Par défaut
    Qui pourra m'aider à y voir plus clair ?
    Pourquoi ne pas utiliser quelques variables intermédiaires pour y voir plus clair ? Par exemple cette ligne resultatHaut = (tableAdd[atoi(&multipliHaut)][atoi(&retenueHaut)])[1]; serait plus lisible comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    y = atoi(&multiplicande[--maxLength]);
    multipliHaut = (tableMul[x][y])[1];
    Il te sera ainsi plus simple de faire du débogage et vérifier chaque étape.

Discussions similaires

  1. Problème limite d'indice tableau
    Par Thyyb dans le forum VB.NET
    Réponses: 12
    Dernier message: 11/12/2013, 15h47
  2. Problème avec un tableau de tableau
    Par SubZero2 dans le forum Langage
    Réponses: 4
    Dernier message: 07/12/2005, 15h25
  3. problème avec un tableau dans un insert ...
    Par vbcasimir dans le forum Langage
    Réponses: 3
    Dernier message: 02/11/2005, 14h31
  4. [PERL] problème tri de tableau
    Par LE NEINDRE dans le forum Langage
    Réponses: 2
    Dernier message: 31/08/2005, 15h42
  5. [HTML/CSS] problème bordure de tableau
    Par LE NEINDRE dans le forum Mise en page CSS
    Réponses: 2
    Dernier message: 18/08/2005, 11h42

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