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 avec un tableau


Sujet :

C++

  1. #1
    Futur Membre du Club
    probléme avec un tableau
    bonsoir tout le monde voila je travaille avec un tableau qui reçoi dans sa premiére et 2éme colonne des noms de villes et dans la troisiéme des entier sachant que le tableau reçoi ces valeurs d'une table paradox.
    mon probléme est le suivant je dois au méme temps affecter ces valeurs de la table au tableau et les trier ds le sens décroissant avec permutation des villes biensur voici mon code ya pas d'erreur mais il me donne en sortie n'importe quoi.
    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
    int l;
    l=Potentiel->TablePotentiel->RecordCount;
    Potentiel->TablePotentiel->First();
    for (i=1;i<=l;i++)
    {
    VOL->E->Cells[0][0]=("Vol1");
    VOL->E->Cells[1][0]=("Vol2");
    VOL->E->Cells[2][0]=("Potentiel");
    VOL->E->Cells[0][i]=Potentiel->TablePotentiel->FieldByName("VOL 1")->AsString;
    VOL->E->Cells[1][i]=Potentiel->TablePotentiel->FieldByName("VOL 2")->AsString;
    VOL->E->Cells[2][i]=Potentiel->TablePotentiel->FieldByName("POTENTIEL")->AsString;
    Potentiel->TablePotentiel->MoveBy(+1);
     
    }
    int j;
    for (i=1;i<=l-1;i++)
     {
         for  ( j=i+1;j<=l;j++)
         {
           if (VOL->E->Cells[2][i]<VOL->E->Cells[2][j])
           {
             VOL->X->Text=VOL->E->Cells[2][i] ;
             VOL->E->Cells[2][i]=VOL->E->Cells[2][j] ;
             VOL->E->Cells[2][j]=VOL->X->Text;
             VOL->Y->Text=VOL->E->Cells[1][i];
             VOL->E->Cells[1][i]=VOL->E->Cells[1][j] ;
             VOL->E->Cells[1][j]=VOL->Y->Text;
             VOL->Z->Text=VOL->E->Cells[0][i];
             VOL->E->Cells[0][i]=VOL->E->Cells[0][j] ;
             VOL->E->Cells[0][j]=VOL->Z->Text;
            }
         }
     
      }


    merci de me répondre vous me sauvriez la vie

  2. #2
    Expert éminent sénior
    Salut,

    Tu devrais envisager, soit de créer une structure reprenant les trois données, soit un tuple correspondant.

    En créant les foncteurs ad-hoc, tu aurais donc beaucoup plus facile à trier le tout

    Par exemple, tu pourrais créer une structure proche de
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    struct Data
    {
        std::string ville1;
        std::string ville2;
        int value;
        /* nous pourrions prévoir un constructeur : */
        Data(std::string const & v1, std::string const & v2, int v):
             ville1(v1),ville2(v2),value(v){}
    };

    Si tu veux avoir la possibilité de trier tes données selon les trois informations, tu pourrais alors envisager de créer les foncteurs suivants:
    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
    struct lessByTown1
    {
        bool operator(Data const & d1, Data const & d2)
        {
            return d1.ville1 <d2.ville1;
        }
    };
    struct lessByTown2
    {
        bool operator(Data const & d1, Data const & d2)
        {
            return d1.ville2 <d2.ville2;
        }
    };
    struct lessByValue
    {
        bool operator(Data const & d1, Data const & d2)
        {
            return d1.value < d2.value;
        }
    };
    Par la suite, tu peux gérer assez facilement un vecteur de Data, et utiliser l'algorithme sort pour trier les éléments:
    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
    int main()
    {
        /* un tableau de données */
        std::vector<Data> tab;
       /* on le remplit */
       tab.push_back("Bruxelles","Anvers",3);
       tab.push_back("Liege","Paris", 5);
       tab.push_back("Londres","Dackar", 6);
       /* on peut trier les données sur "ville1" */
       std::sort(tab.begin(),tab.end(),lessByTown1());
       /* ou sur "ville2" */
       std::sort(tab.begin(),tab.end(),lessByTown2());
       /* ou, enfin, selon la valeur */
       std::sort(tab.begin(),tab.end(), lessByValue());
    }
    Comme ce seront carrément les structure Data qui seront triées, si tu provoques l'affichage de celles-ci, tu verra qu'elles sont bel et bien triées selon les spécifications
    A méditer: La solution la plus simple est toujours la moins compliquée
    Ce qui se conçoit bien s'énonce clairement, et les mots pour le dire vous viennent aisément. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 février 2014
    mon tout nouveau blog

  3. #3
    Membre habitué
    Bonjour,

    Citation Envoyé par koala01
    [...] créer les foncteurs suivants:
    Code C++ :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    [...]
        bool operator(Data const & d1, Data const & d2)
    [...]
    Je crois qu’il manque une paire de parenthèses après operator :
    Code C++ :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    [...]
        bool operator()(Data const & d1, Data const & d2)
    [...]

    Comme tu le dis, je crois que tu es 'achement fatigué, j’espère que tes vacances sont encore devant toi

  4. #4
    Expert éminent sénior
    Effectivement, il manque une paire de parenthèses

    Je reprend donc: créer les foncteurs suivants:
    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
    struct lessByTown1
    {
        bool operator()(Data const & d1, Data const & d2)
        {
            return d1.ville1 <d2.ville1;
        }
    };
    struct lessByTown2
    {
        bool operator()(Data const & d1, Data const & d2)
        {
            return d1.ville2 <d2.ville2;
        }
    };
    struct lessByValue
    {
        bool operator()(Data const & d1, Data const & d2)
        {
            return d1.value < d2.value;
        }
    };


    Je suis 'achement fatigué, mais faut dire que j'ai eu une quinzaine de ouf

    Quant aux vacances, je sais pas trop ce que c'est... La page du dictionnaire où le mot apparait a été arrachée
    A méditer: La solution la plus simple est toujours la moins compliquée
    Ce qui se conçoit bien s'énonce clairement, et les mots pour le dire vous viennent aisément. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 février 2014
    mon tout nouveau blog

  5. #5
    Rédacteur

    Salut,
    Citation Envoyé par sabine-me Voir le message
    ya pas d'erreur mais il me donne en sortie n'importe quoi.
    J'aime beaucoup comme phrase : il n'y a pas d'erreur mais ça ne marche pas

    Plus sérieusement, qu'entends tu par n'importe quoi en sortie ? Des données valides mais non triées ou des données farfelues ?


    Ceci dit, si tu peux l'approche de Koala est probablement la plus lisible.

  6. #6
    Futur Membre du Club
    merci pour vos réponses je vai les essayer . . . ben quant a la sortie quand je met mon ancien code il me donne un tableau semi trier a sa façon et je n'arrive pas a cerner ce qu'il fait exactement
    merci pour votre aide je vais essayer et je vous tien au courant

  7. #7
    Futur Membre du Club
    re bonsoir j'ai essayer ta procedure mais il me dis "string is not a member of std"
    chez pas je ne travaille jamais avec des fonctions j'oppére directement sur mes donner je ne sais pas peut étre que g mal placer les structures merci de m'aider encore une fois

  8. #8
    Expert éminent sénior
    Cela a quelque chose de normal:
    1. Pour pouvoir utiliser la classe string, il faut inclure le fichier d'en-tête <string>
    2. Pour pouvoir utiliser la classe vector, il faut inclure le fichier d'en-tête <vector>
    3. Pour pouvoir utiliser la fonction sort, il faut, enfin, inclure le fichier d'en-tête <algorithm>
    A méditer: La solution la plus simple est toujours la moins compliquée
    Ce qui se conçoit bien s'énonce clairement, et les mots pour le dire vous viennent aisément. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 février 2014
    mon tout nouveau blog

  9. #9
    Membre confirmé
    Citation Envoyé par koala01 Voir le message
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
       tab.push_back("Bruxelles","Anvers",3);
    Ne serait-ce pas plutôt
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
       tab.push_back(Data("Bruxelles","Anvers",3));

  10. #10
    Futur Membre du Club
    merci KOALA1 ça a marcher pr les include mais je t'explique un peu ce que j'ai fais tu m'en dira pourquoi j'ai toujours des messages d'erreurs de type syntaxe et fause terminaison:
    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
    struct Data
    {
     { std::string Vol1;
      std::string Vol2;
      int Potentiel;
      Data(std::string const & v1, std::string const & v2, int v):
             Vol1(v1),Vol2(v2),Potentiel(v){}
      }
      struct LessByTown
       {
          bool operator()
          (Data const & d1,Data const & d2)
          {
           return d1.Potentiel<d2.Potentiel;
          }
       }
    };


    j'ai mis ça en haut de la form sur laquel je travaille et ça ne marche pas il me dit " Declaration terminated incorrectly"
    merci de m'aider je débute en C++ avec une grosse application j'ai pas trop le choix merciiiiiiiiiiiiiiiiiiiii

  11. #11
    Membre actif
    Il manque un ; après l'avant dernière '}'.

  12. #12
    Futur Membre du Club
    merci l'ami la maintenant j'ai un autre probléme dés que j'essaye d'utilisé la fonction comme suit:
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    std::sort(VOL->E->Beging(),VOL->E->End(),lessByTown1());


    il m'écrit que Beging ne fait pas parti de Tstringrid je ne comprend pas comment je pourrais utilisé ma fonction ou bien ou l'utilisé
    merci de m'aider encore

  13. #13
    Membre chevronné
    Au hasard (sans avoir aucune définition de structure sous les yeux, sans savoir de quoi on parle), en remplaçant Beging par Begin?
    "Hardcoded types are to generic code what magic constants are to regular code." --A. Alexandrescu

  14. #14
    Futur Membre du Club
    Citation Envoyé par Goten Voir le message
    Au hasard (sans avoir aucune définition de structure sous les yeux, sans savoir de quoi on parle), en remplaçant Beging par Begin?
    ben peut étre qu'il faudra relire parceque il renvoi le méme message d'erreur merci d'avoir essayé

  15. #15
    Membre éclairé
    On va jouer aux devinettes, vu qu'on a pas un ensemble de code compilable.

    C'est probablement begin() et end() pas Begin et End (la casse est importante en C++). Si E est un vector, il n'y a probablement pas besoin d'utiliser un pointeur dessus.

  16. #16
    Futur Membre du Club
    mais si je ne pointe pas vers le vercteur il ne sais pas vers ou allé . . . ni ou affecté la sortie de la fonction.
    je sais que l'écriture tel que j'ai mise est fausse mais j'arrive pas a l'écrire voila
    merci de votre aideeeeeeeeeeeeee

  17. #17
    Membre éclairé
    Il faut que tu nous montre ton code, nous ne pouvons pas t'aider plus sans savoir le code que tu utilises (la définition de tes structures de données entre autre). Nous ne sommes pas encore devin.

  18. #18
    Futur Membre du Club
    ben j'ai mis tout ça en haut . . . ya les codes et toute la structure du moin sla partie qui me pose probléme voila

###raw>template_hook.ano_emploi###