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++Builder Discussion :

Erreur aléatoire lors de l'ajout d'un ShowMessage


Sujet :

C++Builder

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Mars 2007
    Messages
    148
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Mars 2007
    Messages : 148
    Par défaut Erreur aléatoire lors de l'ajout d'un ShowMessage
    Bonsoir à tous,

    J'ai une erreur dans les résultats, mais que je n'arrive pas à la détecter. Je m'explique :
    Je suis en train de programmer la méthode hongroise, j'ai dans mon application un Edit pour la taille de la matrice, un Speedbutton pour fixer les lignes et les colonnes des matrices, et un autre pour l'exécution. J'ai trois StringGrid en tout. Bon, le code marche très bien, j'obtiens le résultat escompté, mais quand je rajoute les instructions suivantes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    if(sol==true)                     
    {
    for(i=1;i<=n;i++)                 
    if(StringGrid3->Cells[0][i]=="1")
    {
    ShowMessage("coucou");           // Comme exemple
    }
    }
    ça me donne n'importe quoi !!! En fait, c'est les valeurs du StringGrid2 qui changent alors que je ne le mentionne même pas dans le précédent code .

    Voici le code complet :
    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
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
     
    //---------------------------------------------------------------------------
     
    #include <vcl.h>
    #pragma hdrstop
     
    #include "Unit1.h"
    //---------------------------------------------------------------------------
    #pragma package(smart_init)
    #pragma resource "*.dfm"
    TForm1 *Form1;
    int n;
     
     
    //---------------------------------------------------------------------------
    __fastcall TForm1::TForm1(TComponent* Owner)
            : TForm(Owner)
    {
    }
    //---------------------------------------------------------------------------
     
    void __fastcall TForm1::SpeedButton1Click(TObject *Sender)
    {
    n=StrToInt(Edit1->Text);
    StringGrid1->RowCount=n;
    StringGrid1->ColCount=n;
    StringGrid2->RowCount=n;
    StringGrid2->ColCount=n;
    StringGrid3->RowCount=n+1;
    StringGrid3->ColCount=n+1;
    }
    //---------------------------------------------------------------------------
     
    void __fastcall TForm1::SpeedButton2Click(TObject *Sender)
    {
    int i,j;
    float min;
    for(i=0;i<=n-1;i++)
    {
    min=StrToFloat(StringGrid1->Cells[0][i]);
    for(j=1;j<=n-1;j++)                                      //Je cherche le min dans chaque ligne
    if (StrToFloat(StringGrid1->Cells[j][i])<min)      //et je soustrais à toute la ligne cette valeur
    min=StrToFloat(StringGrid1->Cells[j][i]);
    for(j=0;j<=n-1;j++)
    StringGrid1->Cells[j][i]=FloatToStr(StrToFloat(StringGrid1->Cells[j][i])-min);
    }
    for(j=0;j<=n-1;j++)
    {
    min=StrToFloat(StringGrid1->Cells[j][0]);         //Je cherche le min dans chaque colonne
    for(i=1;i<=n-1;i++)                                      //et je le soustrais à toute la colonne cette valeur
    if (StrToFloat(StringGrid1->Cells[j][i])<min)
    min=StrToFloat(StringGrid1->Cells[j][i]);
    for(i=0;i<=n-1;i++)
    StringGrid1->Cells[j][i]=FloatToStr(StrToFloat(StringGrid1->Cells[j][i])-min);
    }
     
    //Programme 2
     
    int s,k,l;
    bool sol;
    s=0;
    for(i=0;i<=n-1;i++)
    {
    sol=true;
    if(s==0)
    {
    for(j=0;j<=n-1;j++)
    {
    if(StringGrid1->Cells[j][i]=="0")
    for(k=0;k<=i-1;k++)
    if(StringGrid2->Cells[j][k]=="0")
    break;
    if(k==i)
    {
    sol=false;
    break;
    }
    }
    s=1;
    }
    else
    {
    for(j=n-1;j>=0;j--)                            //Je cherche une affactation possible
    {                                                   // Cad si je peux trouver un ensemble de zéros
    if(StringGrid1->Cells[j][i]=="0")            //tels que un zéro est affecté dans chaque ligne et dans chaque colonne,
    for(k=0;k<=i-1;k++)                          //si c'est le cas sol=true
    if(StringGrid2->Cells[j][k]=="0")
    break;
    if(k==i)
    {
    sol=false;
    break;
    }
    }
    s=0;
    }
    if(sol==false)
    StringGrid2->Cells[j][i]="0";
    }
     
    sol=false;
     
    for(i=0;i<=n-1;i++)                    //Si on trouve une ligne non affectée
    {                                            //StringGrid3 prend des valeurs égales "1"
    for(j=0;j<=n-1;j++)
    if(StringGrid2->Cells[j][i]=="0")
    break;
    if(j==n)
    {
    sol=true;
    for (k=0;k<=n;k++)
    StringGrid3->Cells[k][i+1]="1";
    }
    }
     
     
    if(sol==true)                                         //c'est là où le problème se pose
    {                                                        //Vous remarquez que je n'ai pas touché au StrinGrid2
    for(i=1;i<=n;i++)                                   //alors que ses valeurs changent ???!!!
    if(StringGrid3->Cells[0][i]=="1")
    {
    ShowMessage("coucou");
    }
    }
     
    }
    Essayez cet exemple et vous verrez mieux de quoi je parle :
    une matrice de dimension 5 :
    100/45/34/45/51
    45/100/5/10/20/15
    34/5/100/20/26
    40/10/20/100/29
    51/15/26/29/100

    Si vous exécutez sans le premier code vous obtiendrez un StringGrid2 différent de celui obtenu avec le code !!!

    Je n'arrive pas à voir où se situe le problème .

    Si quelqu'un à une idée ...

    En attente de vos suggestions.

  2. #2
    Membre Expert
    Avatar de Crayon
    Inscrit en
    Avril 2005
    Messages
    1 811
    Détails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : Avril 2005
    Messages : 1 811
    Par défaut
    Salut, si je comprend bien la séquence, il faut appuyer sur le Bouton 1 en premier et sur le Bouton 2 en second. Sinon si on commence par le deuxième, la variable n n'est pas inintialisé!

  3. #3
    Membre confirmé
    Inscrit en
    Mars 2007
    Messages
    148
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Mars 2007
    Messages : 148
    Par défaut
    Bonjour Crayon,

    Exactement, je dois d'abord donner le "n". Ce code est juste un test, sinon ça s'initialisera tout seul dans mon programme complet.

    Bonne journée.

  4. #4
    Membre confirmé
    Inscrit en
    Mars 2007
    Messages
    148
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Mars 2007
    Messages : 148
    Par défaut
    Bonsoir Crayon,

    Je viens juste de reconstruire un nouveau projet en gardant le même code et cette fois ci tout marche nickel . Par contre, je ne vois pas trop pourquoi ça coinçait avant. L'essentiel c'est que maintenant ça roule comme sur des roulettes .

    A bientôt.

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

Discussions similaires

  1. [WD-2003] erreur 462 lors d'un ajout tabulation
    Par electrosat03 dans le forum VBA Word
    Réponses: 9
    Dernier message: 21/04/2010, 20h53
  2. Réponses: 4
    Dernier message: 06/01/2007, 23h11
  3. [INSERT] Erreur lors de l'ajout d'un objet
    Par bouchette63 dans le forum DB2
    Réponses: 3
    Dernier message: 30/08/2006, 09h32
  4. Réponses: 3
    Dernier message: 08/10/2005, 14h57
  5. Erreur lors de l'ajout d'une table
    Par FredMines dans le forum SQL Procédural
    Réponses: 1
    Dernier message: 27/07/2005, 13h13

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