Indices et tableaux c++ builder starter 10.1

Indices et tableaux c++ builder starter 10.1 - C++ - Programmation

Marsh Posté le 01-12-2018 à 13:41:46    

Bonjour,
 
Je n'arrive pas à trouver la logique suivante dans une boucle
 
Je saisis par exemple des numéros dans un tableau 10, 40, 2, 60, 4
 
Code :  
 
  int numero[5];  
  int numsup[5]
  int ind[5];  
   
    for (int i = 0; i < 5; i++)
     {
       ind[i]=i;
      numsup[i] = numero[i];
      ListBox1->Items->Add(IntToStr(ind[i]) +"  "+ IntToStr(numero[i]));
     }
Résultat :  
 
  0     10
  1     40
  2     2
  3     60
  4     4
 
J'aimerais renommer chaque ind pour qu'il corresponde à numero en ordre croissant :  
 
Exemple :  
     
   if  (numero[i] ==  numsup[i] )  ind[i] =*?;   // soit si numéro = 2  ind  = 0
   if  (numero[i] ==  numsup[i])   ind[i] =*?;   //      ''*               4  ind  = 1  
   if  (numero[i] ==  numsup[i] )  ind[i] =*?;   //      ''                10 ind  = 2
   if  (numero[i] ==  numsup[i] )  ind[i] =*?;   //      ''                40 ind  = 3
   if  (numero[i] ==  numsup[i])   ind[i] =*?;   //      ''                60 ind  = 4
 
 
Merci d'avance pour votre aide.
 
Cordialement  

Reply

Marsh Posté le 01-12-2018 à 13:41:46   

Reply

Marsh Posté le 04-12-2018 à 15:47:32    

"renommer" les variables c'est pas vraiment un concept de programmation, du coup j'ai un peu de mal à voir ce que tu veux faire.
En fait, tu veux juste trier le tableau (dans un autre tableau) non ?

 

PS: balise [code]


Message édité par Dune_22 le 04-12-2018 à 15:54:21
Reply

Marsh Posté le 04-12-2018 à 21:10:32    

Merci pour ta réponse
Je me suis mal exprimé : si ind = 0 alors numero = 2, si ind = 1 alors numero = 4  etc ...
Je pense avoir trouvé le bon code  
 

Code :
  1. //---------------------------------------------------------------------------
  2.        
  3.         #include <vcl.h>
  4.         #pragma hdrstop
  5.        
  6.         #include "Unit2.h"
  7.         #include <iostream>
  8.         #include <algorithm>    // std::sort
  9.         #include <array>
  10.         #include <numeric>
  11.         #include <vector>
  12.         //---------------------------------------------------------------------------
  13.         #pragma package(smart_init)
  14.         #pragma resource "*.dfm"
  15.         TForm2 *Form2;
  16.          using namespace std;
  17.        
  18.         // ****** solution 1
  19.           struct MyStruct
  20.           {
  21.          int index;
  22.          int value;
  23.           };
  24.        
  25.          std::vector<MyStruct> datas;
  26.        
  27.         void sortByValue(std::vector<MyStruct> & tab){
  28.          std::sort(tab.begin(), tab.end(), [&](MyStruct const & a, MyStruct const & b){return a.value < b.value;});
  29.         }
  30.        
  31.         void sortById(std::vector<MyStruct> & tab){
  32.          std::sort(tab.begin(), tab.end(), [&](MyStruct const & a, MyStruct const & b){return a.index< b.index;});
  33.         }
  34.        
  35.          // ****** solution 2
  36.         std::array<int,5> numero={10,40,2,60,4};
  37.         std::array<int,5>  ind;
  38.        
  39.         //---------------------------------------------------------------------------
  40.         __fastcall TForm2::TForm2(TComponent* Owner)
  41.          : TForm(Owner)
  42.         {
  43.         }
  44.         //---------------------------------------------------------------------------
  45.         void __fastcall TForm2::Button1Click(TObject *Sender)
  46.         {
  47.         //*** solution 1
  48.          int numero[5];
  49.          
  50.          for (int i = 0; i < 5; i++)
  51.         {
  52.          numero[0] = 10;
  53.          numero[1] = 40;
  54.          numero[2] = 2;
  55.          numero[3] = 60;
  56.          numero[4] = 4;
  57.         }
  58.           // tri des numeros
  59.          int i,j;
  60.            for (i = 1; i <5 ; ++i)
  61.            {
  62.             int elem = numero[i];
  63.          
  64.             for (j = i; j > 0 && numero[j-1] > elem; j--)
  65.          
  66.             numero[j] = numero[j-1];
  67.          
  68.             numero[j] = elem;
  69.            }
  70.          
  71.          for(int i=0;i<5;++i) datas.push_back({i, numero[i]});
  72.          
  73.           sortByValue(datas); // Tri par valeur
  74.          
  75.          ListBox1->Items->Add("*** Solution 1" );
  76.          ListBox1->Items->Add("Tri par valeur" );
  77.           for(auto const & d : datas){  ListBox1->Items->Add(IntToStr(d.index) + " " + IntToStr(d.value));
  78.           }
  79.          
  80.          
  81.           sortById(datas); // Tri par index
  82.          
  83.           ListBox1->Items->Add("Tri par index" );
  84.          
  85.           for(auto const & d : datas){  ListBox1->Items->Add(IntToStr(d.index) + " " + IntToStr(d.value));
  86.           }
  87.          
  88.         }
  89.          
  90.         //---------------------------------------------------------------------------
  91.          
  92.          
  93.          
  94.         void __fastcall TForm2::Button2Click(TObject *Sender)
  95.         {
  96.         //*** solution 2
  97.             // tri des numeros
  98.          int i,j;
  99.            for (i = 1; i <5 ; ++i)
  100.            {
  101.             int elem = numero[i];
  102.          
  103.             for (j = i; j > 0 && numero[j-1] > elem; j--)
  104.          
  105.             numero[j] = numero[j-1];
  106.          
  107.             numero[j] = elem;
  108.            }
  109.          
  110.          ListBox2->Items->Add("*** Solution 2" );
  111.          struct {
  112.           bool operator()(int a, int b) const
  113.           {
  114.            return numero[a] < numero[b];
  115.           }
  116.          } customLess;
  117.          
  118.          std::iota(ind.begin(), ind.end(), 0 );  // reçoit 0 1 2 3 4
  119.          std::sort(ind.begin() , ind.end() , customLess);
  120.          for(int i=0;i<5;i++)
  121.          ListBox2->Items->Add(IntToStr(ind[i]) + "  " + IntToStr(numero[i]));
  122.         }
  123.         //---------------------------------------------------------------------------
  124.     Modifier / Supprimer le message Modifier le message   Répondre avec citation Répondre avec citation   Multi-citer ce message    0  0 Créer une entrée Blog

Reply

Marsh Posté le 05-12-2018 à 11:34:26    

Ça me parait être un gros bloc pour pas grand chose, qui me fait très mal à la tête.
Si ton but est d'avoir un truc bidouillé qui marche, OK.
Si ton but est de comprendre comment résoudre le problème / d'avoir un truc réutilisable... va falloir expliquer le problème


Message édité par Dune_22 le 05-12-2018 à 11:34:47
Reply

Marsh Posté le 07-12-2018 à 09:22:46    

Tu as raison
En fait, j'ai oublié de retirer la routine de tri, une fois les numéros triés, on a perdu le lien avec les indices.
 
Mes résultats sont sont de même faux.
 
int numero[5];   En supposant que numero  ait ces valeurs = 10, 40, 2, 60 ,4
int ind[5]; // indice  
 
Le résultat dans un ListBox donnera :
for (int i = 0; i < 5; i++)
{ ind[i] = i;
ListBox1->Items->Add(IntToStr(numero[i]) + " " +IntToStr(ind)); }
 
10    0
40    1  
2     2
60   3
4     4
 
J'aimerais le résultat suivant
 for (int i = 0; i < 5; i++)
ListBox1->Items->Add(IntToStr(numero[i]) + " " +IntToStr(ind));
2      0
4      1
10    2  
40    3
60    4  
 

Code :
  1. //---------------------------------------------------------------------------
  2. #include <vcl.h>
  3. #pragma hdrstop
  4. #include "Unit2.h"
  5. #include <iostream>
  6. #include <algorithm>    // std::sort
  7. #include <array>
  8. #include <numeric>
  9. #include <vector>
  10. //---------------------------------------------------------------------------
  11. #pragma package(smart_init)
  12. #pragma resource "*.dfm"
  13. TForm2 *Form2;
  14. using namespace std;
  15. // ****** solution 1
  16.   struct MyStruct
  17.   {
  18. int index;
  19. int value;
  20.   };
  21. std::vector<MyStruct> datas;
  22. void sortByValue(std::vector<MyStruct> & tab){
  23. std::sort(tab.begin(), tab.end(), [&](MyStruct const & a, MyStruct const & b){return a.value < b.value;});
  24. }
  25. void sortById(std::vector<MyStruct> & tab){
  26. std::sort(tab.begin(), tab.end(), [&](MyStruct const & a, MyStruct const & b){return a.index< b.index;});
  27. }
  28. // ****** solution 2
  29. std::array<int,5> numero={10,40,2,60,4};
  30. std::array<int,5>  ind;
  31. //---------------------------------------------------------------------------
  32. __fastcall TForm2::TForm2(TComponent* Owner)
  33. : TForm(Owner)
  34. {
  35. }
  36. //---------------------------------------------------------------------------
  37. void __fastcall TForm2::Button1Click(TObject *Sender)
  38. {
  39. //*** solution 1
  40. int numero[5];
  41. for (int i = 0; i < 5; i++)
  42. {
  43. numero[0] = 10;
  44. numero[1] = 40;
  45. numero[2] = 2;
  46. numero[3] = 60;
  47. numero[4] = 4;
  48. }
  49. for(int i=0;i<5;++i) datas.push_back({i, numero[i]});
  50.   sortByValue(datas); // Tri par valeur
  51. ListBox1->Items->Add("*** Solution 1" );
  52. ListBox1->Items->Add("Tri par valeur" );
  53.   for(auto const & d : datas){ListBox1->Items->Add(IntToStr(d.value) +"  " + IntToStr(d.index));
  54.   }
  55.   sortById(datas); // Tri par index
  56.   ListBox1->Items->Add("Tri par index" );
  57.   for(auto const & d : datas){ListBox1->Items->Add(IntToStr(d.value) +"  " +IntToStr(d.index));
  58.   }
  59. }
  60. //---------------------------------------------------------------------------
  61. void __fastcall TForm2::Button2Click(TObject *Sender)
  62. {
  63. //*** solution 2
  64. ListBox2->Items->Add("*** Solution 2" );
  65. struct {
  66.  bool operator()(int a, int b) const
  67.  {
  68.   return numero[a] < numero[b];
  69.  }
  70. } customLess;
  71. std::iota(ind.begin(), ind.end(), 0 );  // reçoit 0 1 2 3 4
  72. std::sort(ind.begin() , ind.end() , customLess);
  73. for(int i=0;i<5;i++)
  74. ListBox2->Items->Add(IntToStr(numero[i]) + " " +IntToStr(ind[i]));
  75. }
  76. //---------------------------------------------------------------------------


Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed