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 :

Tableau et indices


Sujet :

C++Builder

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Janvier 2014
    Messages
    132
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2014
    Messages : 132
    Par défaut Tableau et indices
    Bonjour,

    Je n'arrive pas à trouver une logique dans une boucle

    Je saisis par exemple des numéros dans un tableau 10, 40, 2, 60, 4

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    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]));
     }
    Ce qui donne :
      0     10
      1     40
      2     2
      3     60
      4     4
    Je trie les numéros ... (routine de tri 2,4,10,40,60)

    Ensuite j'aimerais renommer chaque ind pour qu'il corresponde par numero par ordre croissant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
       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
    C'est peut-être tarte mais je ne trouve pas.

    Merci d'avance pour votre aide.

    Cordialement

  2. #2
    Expert confirmé
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    Décembre 2015
    Messages
    1 599
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Décembre 2015
    Messages : 1 599
    Par défaut
    Bonjour,

    Une fois les numéros triés, on a perdu le lien avec les indices. Ça n'est pas la bonne méthode.
    Il faut immédiatement trier les indices ind[] sur le critère ind[i] est inférieur à ind[j] qui correspond à numero[ind[i]] < numero[ind[j]]. Et ensuite on peut si veut mettre à jour numsup[i] = numero[ind[i]].

  3. #3
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Janvier 2014
    Messages
    132
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2014
    Messages : 132
    Par défaut
    Bonsoir Dalfab

    Merci pour votre réponse mais je ne comprends toujours pas car les ind[] sont déjà triés en ordre croissant avec i : 0,1,2,3,4.

    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
    void __fastcall TForm2::Button1Click(TObject *Sender)
    {
      int numero[5];
      int numsup[5];
      int ind[5];
     
    for (int i = 0; i < 5; i++)
    {
     numero[0] = 10;
     numero[1] = 40;
     numero[2] = 2;
     numero[3] = 60;
     numero[4] = 4;
    }
     
     
      for (int i = 0; i < 5; i++)
      {
      ind[i]=i;  
      numsup[i] = numero[i];
      ListBox1->Items->Add(IntToStr(ind[i]) +" "+ IntToStr(numero[i]));
      }
    }

  4. #4
    Expert confirmé
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    Décembre 2015
    Messages
    1 599
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Décembre 2015
    Messages : 1 599
    Par défaut
    Il faut trier les ind[] sur le bon critère, pas entre eux mais sur les valeurs dans numero[] :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    std::sort( std::begin(ind) , std::end(ind) , [&numero](int& a,int& b){
            return numero[a] < numero[b];
        });
    std::cout << "le plus petit c'est " << numero[ind[0]] << '\n';
    std::cout << "le plus grand c'est " << numero[ind[std::size(ind)-1]] << '\n';

  5. #5
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Janvier 2014
    Messages
    132
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2014
    Messages : 132
    Par défaut
    Ça marche.

    Encore merci

  6. #6
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Janvier 2014
    Messages
    132
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2014
    Messages : 132
    Par défaut
    Bonjour,

    Un souci car ni CodeBlocks ni C++ Builder Starter ne reconnaissent begin.

    À moins d'utiliser un conteneur ?

    [bcc32 Erreur] Unit2.cpp(25): E2316 'begin' n'est pas un membre de 'std'

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    #include <algorithm>    // std::sort
     
     
    std::sort( std::begin(ind) , std::end(ind) , [&numero](int& a,int& b){
            return numero[a] < numero[b];
        });
    std::cout << "le plus petit c'est " << numero[ind[0]] << '\n';
    std::cout << "le plus grand c'est " << numero[ind[std::size(ind)-1]] << '\n';

Discussions similaires

  1. Réponses: 11
    Dernier message: 01/03/2008, 16h59
  2. [VB6] Pb tableau 2D : indice en dehor de la plage
    Par belfaigore dans le forum VB 6 et antérieur
    Réponses: 4
    Dernier message: 03/10/2006, 17h15
  3. [Debutant] Stocker des objets dans un tableau à plusieurs indices
    Par Invité dans le forum Collection et Stream
    Réponses: 4
    Dernier message: 27/09/2006, 18h04
  4. Tri dans un tableau et indices
    Par size_one_1 dans le forum C
    Réponses: 10
    Dernier message: 16/05/2006, 00h17
  5. Tableau et indice
    Par gendalf37 dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 03/05/2005, 10h23

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