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

  FORUM HardWare.fr
  Programmation
  Algo

  Tri simultané sur 2 tableaux ?

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Tri simultané sur 2 tableaux ?

n°2477792
davidmarli
Posté le 17-08-2024 à 21:15:30  profilanswer
 

Bonjour,
 
j'ai besoin d'aide car je bloque depuis quelques heures.
 
J'ai 2 tableaux : Start[4] et End[4] qui se correspondent au départ.
Start contient des heures de départ (j'ai  pris HHMM en le prenant comme un nombre)
End contient les heures de fin  
 
MAIS start[0] et End[0] vont de pairs, de même que start[1] avec End[1] ...
 
Evidemment avec un algo de tri, je peux trier Start MAIS je voudrais que les elements de End subissent le même tri.
 
Est-ce possible et si oui comment ?
 
Merci pour votre aide.
 
EXEMPLE :  
Start : 0600   0432    0512
End :   0653   0456    0536
 
Doit devenir
Start : 0432   0512   0600
End :  0456   0536   0512
 
 


---------------
Matheux Fou - https://afficheur-tempo.fr - TEMPO BOX pour abonnés TEMPO EDF
mood
Publicité
Posté le 17-08-2024 à 21:15:30  profilanswer
 

n°2477794
rat de com​bat
attention rongeur méchant!
Posté le 17-08-2024 à 21:34:39  profilanswer
 

Faudrait nous donner le language, car la réponse dépendra fortement de ce point. En principe rien de compliqué.


---------------
matos à vendre
n°2477798
davidmarli
Posté le 17-08-2024 à 21:51:17  profilanswer
 

Je code sous VSC pour un esp 32 en C++


---------------
Matheux Fou - https://afficheur-tempo.fr - TEMPO BOX pour abonnés TEMPO EDF
n°2477799
rat de com​bat
attention rongeur méchant!
Posté le 17-08-2024 à 21:57:15  profilanswer
 

C++ je sais pas faire, ça t'intéresse une sol' en C? Tes tableaux sont déclarés comment?


---------------
matos à vendre
n°2477800
davidmarli
Posté le 17-08-2024 à 22:09:09  profilanswer
 

oui bien sur.
 
Les tableaux sont
 
int Start[70];  
int End[70];
 
Dans ces tableaux je considère qu'il y a 14 tableaux de 5 elements à trier.  
Bref, on juste considérer  
int Strat[5] et int End[5]
 
Car je sais extraire les 5 elements de chaque que je dois classer.
 
Merci.


---------------
Matheux Fou - https://afficheur-tempo.fr - TEMPO BOX pour abonnés TEMPO EDF
n°2477801
rat de com​bat
attention rongeur méchant!
Posté le 17-08-2024 à 22:17:07  profilanswer
 

Tu devrais déjà mettre ça au propre en utilisant un tableau à deux dimensions. La prochaine étape serait de définir un type de données custom (avec typedef struct ... ) pour avoir le temps start et end ensemble directement. Ensuite tu peux trier.
 
De manière générale il faut toujours refléchir comment bien structurer ses données pour se faciliter la vie / faire du code lisible / ...
 
Je peux t'aider mais je veux pas te faire tout, surtout que je dors debout déjà... :sleep:


---------------
matos à vendre
n°2477802
davidmarli
Posté le 17-08-2024 à 22:24:07  profilanswer
 

mince, je pensais me réveiller demain avec ton code tout propre !!! :o  
 
Tu n'es pas gentil ... :o
 
Ok, je vais réfléchir à ton propos sur la structure...


Message édité par davidmarli le 17-08-2024 à 22:24:29

---------------
Matheux Fou - https://afficheur-tempo.fr - TEMPO BOX pour abonnés TEMPO EDF
n°2477803
rat de com​bat
attention rongeur méchant!
Posté le 17-08-2024 à 22:27:53  profilanswer
 

Bon, ça m'aura fait un petit rappel de C (trop fait autre chose ces derniers temps...). Exemple compilable sur PC, à adapter bien sûr à tes besoins.

Code :
  1. #include <stdlib.h>
  2. #include <stdio.h>
  3. typedef struct
  4. {
  5.     unsigned int start;
  6.     unsigned int end;
  7. } start_end_time_t;
  8. int comp_ab(const void *a, const void *b)
  9. {
  10.     if(((start_end_time_t*)a)->start>((start_end_time_t*)b)->start)
  11.         return 1;
  12.     else if(((start_end_time_t*)a)->start<((start_end_time_t*)b)->start)
  13.         return -1;
  14.     else
  15.         return 0;
  16. }
  17. int main(void)
  18. {
  19.     start_end_time_t start_end_times[3];
  20.    
  21.     start_end_times[0].start=600;
  22.     start_end_times[0].end=653;
  23.     start_end_times[1].start=432;
  24.     start_end_times[1].end=456;
  25.     start_end_times[2].start=512;
  26.     start_end_times[2].end=536;
  27.    
  28.     qsort(start_end_times, 3, sizeof(start_end_time_t), &comp_ab);
  29.    
  30.     unsigned short i;
  31.     for(i=0; i<3; i++)
  32.     {
  33.         printf("[%02u] start %03u   end %03u\n", i, start_end_times[i].start, start_end_times[i].end);
  34.     }
  35.    
  36.     return 0;
  37. }


---------------
matos à vendre
n°2477804
rat de com​bat
attention rongeur méchant!
Posté le 17-08-2024 à 22:28:57  profilanswer
 

Ah oui, juste pour t'éviter des maux de tête: Les nombres avec un "0" au début sont considérés comme étant en OCTAL par le compilateur, comme "0x" pour l'hexa!


---------------
matos à vendre
n°2477805
davidmarli
Posté le 18-08-2024 à 10:36:17  profilanswer
 

Merci bp.
Je regarde ça à tête reposée.
 
Déjà j'ai repris la structure en déclarant un tableau à 2 dimensions.


---------------
Matheux Fou - https://afficheur-tempo.fr - TEMPO BOX pour abonnés TEMPO EDF
mood
Publicité
Posté le 18-08-2024 à 10:36:17  profilanswer
 

n°2478463
rat de com​bat
attention rongeur méchant!
Posté le 01-09-2024 à 13:28:17  profilanswer
 

Tu as réussi?


---------------
matos à vendre
n°2478464
dalfab
Posté le 01-09-2024 à 14:04:30  profilanswer
 

En C++, c'est plus concis, le tri se fait en une seule ligne.

Code :
  1. #include <algorithm>
  2. #include <iostream>
  3. struct start_end_time_t {
  4.     unsigned int  start;
  5.     unsigned int  end;
  6. };
  7. int main() {
  8.     start_end_time_t  start_end_times[3]{{600,653},{432,456},{512,536}};
  9.     std::sort( start_end_times.begin(), start_end_times.end(), [](auto&d,auto&e){return d.start<e.start;} );
  10. }

On devrait préférer std::array et depuis le C++20, on peut utiliser les ranges et/ou l'operateur<=>, c'est plus concis

Code :
  1. import std;
  2. struct start_end_time_t {
  3.     unsigned int  start;
  4.     unsigned int  end;
  5.     friend auto operator<=>(start_end_time_t,start_end_time_t) = default; // ordonnable sur 1er champ sinon second
  6. };
  7. int main() {
  8.     std::array  start_end_times{start_end_time_t{600,653},start_end_time_t{432,456},start_end_time_t{512,536}};
  9.     std::ranges::sort( start_end_times );
  10. }


Message édité par dalfab le 01-09-2024 à 14:12:13

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

  Tri simultané sur 2 tableaux ?

 

Sujets relatifs
Tri rapide pour les listes liées Assistance requiseQuestion de noob sur les listes
Problèmes de conversion Java du binaire au décimal (tableaux)Créer une page auteur avec Tri Alphabétique
Fonction qui compare deux tableaux et stocke le résultat dans un trois[GSuits] UPDATE :Exporter des tableaux Gsheet dans ... SUITE.
Plusieurs tableaux mais avec couleurs différentes ?Indices et tableaux c++ builder starter 10.1
[Python] Tableaux qui s'actualisent en même tempsTri d'evénénement sous Microsoft edge
Plus de sujets relatifs à : Tri simultané sur 2 tableaux ?


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR