Forum |  HardWare.fr | News | Articles | PC | Prix | S'identifier | S'inscrire | Aide | Shop Recherche
337 connectés 

  FORUM HardWare.fr
  Programmation
  C++

  selectionner une suite de chiffres dans une routine de tri C++

 



 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

selectionner une suite de chiffres dans une routine de tri C++

n°2340247
magdani
Posté le 14-10-2019 à 21:01:05  profilanswer
 

   Bonsoir,
 
    Soit la routine de tri suivante :
   
   

Code :
  1. int nombre[13];
  2.     int i, j;
  3.    
  4.     for (i = 1; i <14 ; ++i)
  5.        {
  6.         int elem = nombre[i];
  7.    
  8.         for (j = i; j > 0 && nombre[j-1] > elem; j--)
  9.    
  10.          nombre[j] = nombre[j-1];
  11.    
  12.         nombre[j] = elem;
  13.        }


   
    Admettons que le résultat soit 2,5,8,10, 15, 16 17, 20, 26 ,27 ,28, 31,45 ....
 
    Est-il possible de sélectionner uniquement les séries de chiffres qui se suivent (ex : 15,16,17 et 26,27,28) et d'enregistrer chaque série dans une variable différente ?
 
int variable1[13];
int variable2[13];
 
  for (int i = 1; i <14 ; ++i)
   if (nombre[i] = 15,16,17)
     {
      variable1[0] =15;
      variable1[1] =16;
      variable2[2] =17;
    }
idem pour variable2
 
  Je sais que ma question peut paraître étrange, mais j'aurais besoin de cette routine pour une petite appli
 
    Merci d'avance
 
    Cordialement  
 

mood
Publicité
Posté le 14-10-2019 à 21:01:05  profilanswer
 

n°2340252
MaybeEijOr​Not
but someone at least
Posté le 14-10-2019 à 22:52:31  profilanswer
 

Bonjour,
 

magdani a écrit :

Est-il possible de sélectionner uniquement les séries de chiffres qui se suivent (ex : 15,16,17 et 26,27,28) et d'enregistrer chaque série dans une variable différente ?


Oui, pourquoi tu ne pourrais pas ? :??:  
C'est interdit par la loi ? :o


---------------
C'est en écrivant n'importe quoi qu'on devient n'importe qui.
n°2340268
magdani
Posté le 15-10-2019 à 13:18:56  profilanswer
 

Tant mieux alors. As-tu la solution ?

n°2340304
mathieuu
Posté le 16-10-2019 à 12:13:20  profilanswer
 

Il a une sale tronche ton tri ..  
dans ta boucle la première ligne ne sert a rien :  

Code :
  1. nombre[j] = nombre[j-1];
  2. nombre[j] = elem;


 
 
Si tu veux coder ton tri, tu fais un tri bulle ou un tri par sélection, c'est assez simple.  
 
Exemple pour un tri bulle :  
tu compares tous les éléments du tableau 2 à 2 (0 et 1 puis 1 et 2 puis 2 et 3 etc, donc une boucle qui commence à 0 et s’arrête a la taille du tableau -1 et qui va comparer j et j+1 ) ce qui fait remonter le maximum à la dernière case.
On recommence autant de fois qu'il y a de case pour trier tout le tableau.  
 
Par exemple avec un petit tableau  : 8 5 3 4 9 au départ, on veut arriver a 3 4 5 8 9 à la fin  
Premier tour de boucle :  
9 5 3 4 8 -> 5 9 3 4 8 -> 5 3 9 4 8 -> 5 3 4 9 8 -> 5 3 4 8 9
 
Deuxième tour de boucle :  
5 3 4 8 9 -> 3 5 4 8 9 -> 3 4 5 8 9 -> 3 4 5 8 9 -> 3 4 5 8 9  : on remarque que sur ce tour de boucle on n'a pas besoin d'aller jusqu’à la fin du tableau, on sait déjà que le 9 est en dernière case à la fin de la première boucle, on peut donc optimiser la boucle en s’arrêtant une case plus tôt à chaque tour de boucle.
 
Troisième tour de boucle :  
3 4 5 8 9-> 3 4 5 8 9 -> 3 4 5 8 9 -> 3 4 5 8 9 -> 3 4 5 8 9 on a fait aucun échange, on optimise donc le code pour arrêter une fois que le tableau est trié sans attendre d'avoir fait le 4e tour de boucle.  
 
 
 
et ensuite pour ton problème, si tu ne sais pas faire d'allocation dynamique de variables, tu ne vas pas pouvoir vu que tu ne sais pas en avance combien il y a de variable à déclarer vu que tu ne sais pas combien il y aura de suite.  
 
Sinon il suffit juste de faire une boucle qui va stocker les éléments tant que les éléments sont à une valeur d'écart.
 

n°2340321
magdani
Posté le 16-10-2019 à 20:25:04  profilanswer
 

Merci mathieu pour ta réponse. J'ai pensé aussi à une boucle qui stockera les éléments tant que les éléments sont à une valeur d'écart. Je me demandais si il n'y avait pas un autre moyen

n°2340323
MaybeEijOr​Not
but someone at least
Posté le 16-10-2019 à 21:30:50  profilanswer
 

Tu peux inverser le sens de la recherche pour faire une optimisation statistique. Plutôt que de partir d'entités non groupées et de les regrouper, tu peux partir d'un seul groupe et de le dégrouper mais cela suppose de travailler avec des entiers classés sans possibilité de doublons.
Ainsi tu divises ton groupe à chaque fois que le nombre de la fin moins le nombre du début est différent du nombre de nombres moins un.
 
ex : 1 2 3 4 6 7 8 9
 
9 - 1 = 8
nombre de nombres - 1 = 8 - 1 = 7
8 <> 7
on exclue le 1
 
9 - 2 = 7
nombre de nombres - 1 = 7 - 1 = 6
7 <> 6
on exclue le 2
 
etc.
 
9 - 6 = 3
nombre de nombres - 1 = 4 - 1 = 3
3 = 3
on garde le groupe allant de 6 à 9.
 
On recommence pour le groupe de 1 à 4.


---------------
C'est en écrivant n'importe quoi qu'on devient n'importe qui.
n°2340352
magdani
Posté le 17-10-2019 à 14:21:00  profilanswer
 

Merci MaybeEijOrNo. Non il n'y a pas de doublons. Je vais essayer ta solution.

n°2340358
MaybeEijOr​Not
but someone at least
Posté le 17-10-2019 à 16:24:17  profilanswer
 

Elle n'est pas forcément meilleure, cela dépend du nombre et de la taille des groupes attendue.
Mais comme bien souvent dans les algos de tri, la réponse apportée est statistique.


---------------
C'est en écrivant n'importe quoi qu'on devient n'importe qui.

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C++

  selectionner une suite de chiffres dans une routine de tri C++

 

Sujets relatifs
Exercice de tableau basique en C URGENT !C# - comment faire un algorithme de calcul de parité d'un octet
JQuery: sélectionner sur un contenu[C] Erreurs dans les fonctions
[GSuits] UPDATE :Exporter des tableaux Gsheet dans ... SUITE.Connecteur C / MariaDB
Header C dans prog cpp[MySQL] - Sélectionner enregistrements qui ne sont pas ailleurs
C++ calcul d'un nombre prmier[C#] Charger un combobox plus rapidement
Plus de sujets relatifs à : selectionner une suite de chiffres dans une routine de tri C++


Copyright © 1997-2018 Hardware.fr SARL (Signaler un contenu illicite) / Groupe LDLC / Shop HFR