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 :

Tableau à deux dimensions trop complexe


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2012
    Messages
    48
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Allemagne

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Service public

    Informations forums :
    Inscription : Mars 2012
    Messages : 48
    Par défaut Tableau à deux dimensions trop complexe
    Salut à tous!
    Je suis confronté à un problème sétrieux avec un tableau à deux dimensions bien complexes. Le but de ce tableau en fait est de l'utiliser pour calculer une sétie de nombres.Considérons le tableau en pièce-jointe:

    Jetons un coup d'oeil rapide sur le tableau.
    - La premiére ligne n'est remplie qu'à partir de la colonne 3.
    - La première colonne n'est remplie qu'à partir de la ligne 3.
    - Le tableau comporte un nombre clé (0), inscrit à l'insection de la ligne 2 et de la colonne 2.
    - Le tableau a été initialisé à la ligne 2 et à la colonne 2.
    Ainsi présenté, le but du code est d'obtenir dans les autres cellules un nombre correspondant à la somme de la cellule en haut à gauche plus 2 (dans le sens horizontal OU vertical)
    Je vous présente mon code:
    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
    QString str1, str2;
    str1 = "ABCDEF";
    str2 = "ß§$%?";
    double diagScore;
     
    //    Initialisation du tableau
        tableau[1][str2.size()] = 0;
     
        for(int i = 1; i<str1.size()+1; i++)
        {
            tableau[i][0] = tableau[i-1][0] + 1;
            out<<tableau[i][0]<<" ";
        }
        out<<endl;
     
        for(int j = 1; j<str2.size()+1; j++)
        {
            tableau[j][0] = tableau[j-1][0] + 1;        
        }
        out<<endl;
     
    double tableau[str1.size()+2][str2.size()+2];
     
    // Le remplissage du tableau
    for(int i = 1; i<str1.size()+1; i++)
        {
            for(int j = 1; j<str2.size()+1; j++)
            {
                if(i == 1 && j == 1)
                {
                    tableau[i-1][j-1] = 0;
     
                    diagScore = 0 + 1;                
                }
     
                if(i > 1 && j > 1)
                {
     
                    diagScore = tableau[i-1][j-1] + 2;
     
                }
     
                out<<diagScore<<"  ";
            }
        }
    J'ai utilsé la ligne 7 pour affecter le nombre 0 à l'intersection de la ligne 2 et de la colonne 2.
    À la ligne 22, j'ai fixé la taille du tableau + 2, puisque les calculs commencent à partir de la ligne et colonne 3 du tableau. Donc les deux premières colonnes et les deux premières lignes ne sont pas prises en compte dans les calculs.
    La compilation de ce code me donne des nombres du genre: 3.49633e-297 3.49633e-297 0 0 0, ce qui n'est pas normal. Par exemple, la ligne ß devrait avoir les nombres suivants: 1, 2, 3, 4, 5, 6.
    Pouvez-vous tester et m'aider à détecter l'erreur?

    Je vous serai reconnaissant si vous m'aidiez à résoudre cette énigme.
    Merci d'avance.
    Images attachées Images attachées  

  2. #2
    Expert éminent

    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    5 202
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

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

    Informations forums :
    Inscription : Juin 2007
    Messages : 5 202
    Par défaut
    Un nombre tel que 3.9825e-297 est un "zéro flottant".

    Les nombres flottants ne sont pas précis. C'est intrinsèque au fonctionnement des processeurs.

    cette imprécision ne change pas l'ordre de grandeur des nombres

    typiquement, 1.0 + 0.1 != 1.1 (sauf dans les rares cas où le compileur précalcule la valeur)

  3. #3
    Inactif  


    Homme Profil pro
    Inscrit en
    Novembre 2008
    Messages
    5 288
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Secteur : Santé

    Informations forums :
    Inscription : Novembre 2008
    Messages : 5 288
    Par défaut
    C'est intrinsèque au fonctionnement des processeurs.
    Et au type de représentation des nombres flottant (IEEE-xxx je sais plus)

    @stanfillirenfro
    Tu es sur d'avoir besoin de réel ? Dans ton code, tu fais juste des +1, tu peux pas travailler avec des entiers ?
    Sinon des nombres à virgules fixes ?
    Ou arrondir les flottants à l'affichage ? "(3.49633e-297" serait affiché "0")

  4. #4
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2012
    Messages
    48
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Allemagne

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Service public

    Informations forums :
    Inscription : Mars 2012
    Messages : 48
    Par défaut
    Salut!
    Mon probléme est que j'obtiens ces zéros flottants avec des entiers. Tel que j'ai codé, tous les résultats devraient être des entiers. Les résultats obtenus sont d'ailleurs faux, comme si les cellules du tableau n'étaient pas prises en comptes.

  5. #5
    Inactif  


    Homme Profil pro
    Inscrit en
    Novembre 2008
    Messages
    5 288
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Secteur : Santé

    Informations forums :
    Inscription : Novembre 2008
    Messages : 5 288
    Par défaut
    Pourtant, tu déclares bien un tableau de double, non ? Pas d'entier.
    Comme le dit leternel, la représentation d'un nombre n'est pas précise avec des flottants (bien que si tu as réellement que des entiers, leurs représentation est exacte)

    Comment déclare tu ton tableau ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    //    Initialisation du tableau
    tableau[1][str2.size()] = 0;
    J'avais pas vu le commentaire. On est bien d'accord que tu initialises pas le tableau là, juste une cellule

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    double tableau[str1.size()+2][str2.size()+2];
    Ca, c'est une déclaration de la variable tableau alors qu'elle est utilisée avant...
    Manifestement, c'est pas le code réel, tu l'as modifié ?

    je pense que ce calcul est faisable de tête...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    if(i == 1 && j == 1)
    ...
    if(i > 1 && j > 1)
    ...
    c'est volontaire de ne pas remplir si aucune de ces 2 conditions n'est valide ?

  6. #6
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2012
    Messages
    48
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Allemagne

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Service public

    Informations forums :
    Inscription : Mars 2012
    Messages : 48
    Par défaut
    J'ai déclaré le tableau comme suit:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    double tableau[str1.size()+2][str2.size()+2];
    Il est vrai que cette ligne ne devrait pas se trouver ici. Mais j'ai modifié le code de telle sorte qu ela ligne se trouve avant toute utulisation de la variable tableau.
    En initialisant le tableau avec 0, ce n'est pas vraiment ce que je veux. Le but est d'avoir la deuième colonne et la deuième ligne du tableau remplies comme représenté sur le fichier joint de mon premier post. Le calcul se fait á partir de ces deux là. J'utilise ici l'addition, mais il peut aussi s'agir d'un autre signe arithmétique.
    Je ne trouve toujours pas ce que le tableau devrait donner normalement comme réponse.
    Le fichier que je viens de joindre indique sur le tablea en rouge ce que je voulais obtenir comme réponse, mais mon code ne fonctionne pas.
    Je serai reconnaissant pour toute aide.

    Merci d'avance
    Images attachées Images attachées  

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

Discussions similaires

  1. [Tableaux] tri de tableau deux dimensions
    Par oursquetaire dans le forum Langage
    Réponses: 8
    Dernier message: 27/12/2005, 14h27
  2. Affichage d'un tableau à deux dimensions.
    Par Allan dans le forum C
    Réponses: 3
    Dernier message: 11/12/2005, 18h29
  3. Réponses: 1
    Dernier message: 18/11/2005, 11h38
  4. tri alphabétique dans un tableau deux dimensions
    Par *!!cocco!!* dans le forum Algorithmes et structures de données
    Réponses: 7
    Dernier message: 06/12/2004, 21h38
  5. Passage d'un tableau à deux dimensions
    Par karl3i dans le forum C
    Réponses: 3
    Dernier message: 20/10/2003, 14h50

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