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

Pascal Discussion :

Peut-on trier des dates avec le quiksort ?


Sujet :

Pascal

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    64
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 64
    Points : 42
    Points
    42
    Par défaut Peut-on trier des dates avec le quiksort ?
    Bonjour, est-ce-que l'on peut trier des dates avec le quicksort???

  2. #2
    Expert confirmé

    Inscrit en
    Août 2006
    Messages
    3 951
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 3 951
    Points : 5 671
    Points
    5 671
    Par défaut
    Foa,

    On peut trier n'importe quoi avec un algorithme de tri.

    Il faut bien évidemment que tu saches comparer 2 dates, en disant si l'une est plus grande, égale, ou supérieure à l'autre, ce qui dépend de la manière dont tu définis tes dates.

  3. #3
    Expert confirmé
    Avatar de krachik
    Inscrit en
    Décembre 2004
    Messages
    1 964
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 964
    Points : 4 015
    Points
    4 015
    Par défaut
    Citation Envoyé par relena93
    Bonjour, est-ce-que l'on peut trier des dates avec le quicksort???
    oui

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    64
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 64
    Points : 42
    Points
    42
    Par défaut
    Bonjour

    Citation Envoyé par droggo
    Il faut bien évidemment que tu saches comparer 2 dates, en disant si l'une est plus grande, égale, ou supérieure à l'autre, ce qui dépend de la manière dont tu définis tes dates.
    je ne sais pas trop comment comparer mes 2 dates, actuelement je les ai stocké dans un tableau à une dimension de 3 colonnes (jj, mm, aaaa), declarer en word.

  5. #5
    Expert confirmé

    Inscrit en
    Août 2006
    Messages
    3 951
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 3 951
    Points : 5 671
    Points
    5 671
    Par défaut
    Doe,
    Citation Envoyé par relena93
    je ne sais pas trop comment comparer mes 2 dates, actuelement je les ai stocké dans un tableau à une dimension de 3 colonnes (jj, mm, aaaa), declarer en word.
    Manière que je trouve compliquée.

    ici, édité --------------

    Il faut commencer par définir un type pour stocker les dates, ce qui permet de gérer une seule variable par date.

    -------------- fin édition


    Deux manières principales :

    - un enregistrement:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    type
      date = record
        an, mois, jour : integer;
      end;
    et faire tableau de date.
    Pour comparer, d'abord sur an, puis mois, puis jour.

    - stocker le tout dans une seule variable, en se donnant la manière de faire,
    par exemple
    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
    35
     
    { pour éviter les trop grandes valeurs dues à l'année, on peut décaler,
      par exemple de doffset, en considérant qu'on va stocker 0 pour l'année
      valant doffset }
     
    const
      doffset = 1980;
     
    type
      date = longint;
     
    { pour stocker on va mettre les différentes valeurs avec des facteurs
      de multiplication différents, en prenant soin qu'il ne puisse pas y avoir
      recouvrement des valeurs après multiplication }
     
    const
      an_mult = 10000;
      mois_mult = 100;
      { pour le jour, 1, donc pas besoin de définir }
     
    { et pour stocker la date au bon format }
     
    function date_genere(a,m,j : integer) : longint;
    var
      res : longint;
    begin
      res := (a - doffset) * an_mult;
      res := res + m * mois_mult;
      res := res + j;
      date_genere := res;
    end;
     
    { pour extraire les valeurs de l'année, mois et jour, il suffira de
      faire l'inverse }
    ...
    Ainsi encodée, pour comparer les dates, il suffit de comparer directement leur valeur.

  6. #6
    Rédacteur/Modérateur
    Avatar de M.Dlb
    Inscrit en
    Avril 2002
    Messages
    2 465
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Avril 2002
    Messages : 2 465
    Points : 4 312
    Points
    4 312
    Par défaut
    Oué ca marche comme ça, mais dans ce cas, on ne peut pas faire d'opération sur les dates (ajout, soustraction). Pour cela il faut effectivement compter les jours avec les années bissextiles et tout. En général, dans le monde UNIX, on prend le 1er janvier 1970 comme référence.

  7. #7
    Expert confirmé

    Inscrit en
    Août 2006
    Messages
    3 951
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 3 951
    Points : 5 671
    Points
    5 671
    Par défaut
    Gae,
    Citation Envoyé par wormful_sickfoot
    Oué ca marche comme ça, mais dans ce cas, on ne peut pas faire d'opération sur les dates (ajout, soustraction). Pour cela il faut effectivement compter les jours avec les années bissextiles et tout. En général, dans le monde UNIX, on prend le 1er janvier 1970 comme référence.
    La demande est "trier des dates", pas faire des opérations avec.

    Et la référence que j'ai mise à 1980, ce n'était qu'un exemple.
    De toute manière, si référence il y a, elle est variable selon les systèmes, les implémentations différentes pour les langages, etc...
    Le tout est de savoir ce qu'on fait, et de bien documenter.

  8. #8
    Rédacteur/Modérateur
    Avatar de M.Dlb
    Inscrit en
    Avril 2002
    Messages
    2 465
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Avril 2002
    Messages : 2 465
    Points : 4 312
    Points
    4 312
    Par défaut
    Certes la demande est pour comparer, mais je trouve que la solution que tu proposes risque de donner de mauvaises habitudes. Ce n'est pas une programmation propre à mon goût. Si on doit gérer des dates, autant le faire proprement, car cette fonction pourra être réutilisable dans d'autres cas, et compatibles avec d'autres opérations comme l'addition et la soustraction de dates. C'est pour ça que je préconise une "vraie" conversion en respectant année bissextile, nombre de jours par mois, etc...

    Quand à la référence, UNIX prend le 1er janvier 1970, mais on peut prendre le 1er janvier de l'an 0, ou le 24 août 1972 si ca nous chante

  9. #9
    Expert confirmé

    Inscrit en
    Août 2006
    Messages
    3 951
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 3 951
    Points : 5 671
    Points
    5 671
    Par défaut
    Jao,

    Je sais bien, et ce n'est pas ainsi que je stocke les dates.

    De toute manière, quelle que soit la représentation choisie, on peut toujours implémenter les fonctions qui font les calculs nécessaires, ce qui n'est pas forcément un mauvais exercice au début, et permet justement de réfléchir à une éventuelle meilleure implémentation.

  10. #10
    Membre habitué

    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    192
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 192
    Points : 176
    Points
    176
    Par défaut
    Bonjour,

    petit point de digression...

    wormful_sickfoot
    Quand à la référence, UNIX prend le 1er janvier 1970, mais on peut prendre le 1er janvier de l'an 0, ou le 24 août 1972 si ca nous chante
    les dates depuis l'an zéro pas facile à gérer je pense vu qu'on a changé de système entre le calendrier julian et grégorien et que dix jours on été "supprimé" mais si Unix le fait alors super !

  11. #11
    Rédacteur/Modérateur
    Avatar de M.Dlb
    Inscrit en
    Avril 2002
    Messages
    2 465
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Avril 2002
    Messages : 2 465
    Points : 4 312
    Points
    4 312
    Par défaut
    Unix ne fait qu'à partir du 1er janvier 1970 à ma connaissance, je ne pense pas qu'on puisse le changer.

  12. #12
    Expert confirmé

    Inscrit en
    Août 2006
    Messages
    3 951
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 3 951
    Points : 5 671
    Points
    5 671
    Par défaut
    Deo,
    Citation Envoyé par wormful_sickfoot
    Quand à la référence, UNIX prend le 1er janvier 1970, mais on peut prendre le 1er janvier de l'an 0, ou le 24 août 1972 si ca nous chante
    [troll]

    Tiens, ça m'avait échappé à la 1ère lecture.

    Il n'y a pas d'année 0 dans le calendrier.

    [/troll]



  13. #13
    Rédacteur/Modérateur
    Avatar de M.Dlb
    Inscrit en
    Avril 2002
    Messages
    2 465
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Avril 2002
    Messages : 2 465
    Points : 4 312
    Points
    4 312
    Par défaut
    Citation Envoyé par droggo
    Deo,

    [troll]

    Tiens, ça m'avait échappé à la 1ère lecture.

    Il n'y a pas d'année 0 dans le calendrier.

    [/troll]


    Je sais, c'était de l'humour...

  14. #14
    Expert confirmé

    Inscrit en
    Août 2006
    Messages
    3 951
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 3 951
    Points : 5 671
    Points
    5 671
    Par défaut
    Mei,
    Citation Envoyé par wormful_sickfoot
    Je sais, c'était de l'humour...
    Et la réponse aussi.

  15. #15
    Rédacteur/Modérateur
    Avatar de M.Dlb
    Inscrit en
    Avril 2002
    Messages
    2 465
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Avril 2002
    Messages : 2 465
    Points : 4 312
    Points
    4 312
    Par défaut
    Citation Envoyé par droggo
    Mei,

    Et la réponse aussi.
    Bien entendu

  16. #16
    Expert confirmé

    Inscrit en
    Août 2006
    Messages
    3 951
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 3 951
    Points : 5 671
    Points
    5 671
    Par défaut
    Gio,

    Brisons-là, sinon ça risque de durer longtemps.

  17. #17
    Membre habitué

    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    192
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 192
    Points : 176
    Points
    176
    Par défaut
    Bonjour,

    de toute façon ça aide à se poser des questions les dates à zéro....
    entre les calendriers comme nous le connaissons, ceux des autres civilisations, les calendriers astronomiques etc...., on s'aperçoit qu'un petit problème peut soulever bien des questions...

    Pour revenir à cela j'ai du travailler sur le bug de l'an 2000 et après on nous disait "tu vois c'était un truc médiatique il ne s'est rien passé..."

    Les personnes ne savent pas toutes les centaines d'heures qui ont été passées pour remettre au format date (propre) les anciennes dates qui étaient stockées sur 6 caractères (sous la forme AAMMDD), et qui maintenant sont stockées en vrai format date sur lesquels on peut faire des calculs directs.

    Alors c'est vrai on veut aller vite pour programmer mais après quand il faut revenir dessus, que de temps perdu juste pour de la maintenance.

  18. #18
    Membre habitué

    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    192
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 192
    Points : 176
    Points
    176
    Par défaut
    droggo a écrit :
    Brisons-là, sinon ça risque de durer longtemps.
    désolé j'avais pas vu la réponse pour mon post précédent...

  19. #19
    Expert confirmé

    Inscrit en
    Août 2006
    Messages
    3 951
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 3 951
    Points : 5 671
    Points
    5 671
    Par défaut
    Moe,
    Citation Envoyé par JoseF
    désolé j'avais pas vu la réponse pour mon post précédent...
    Ça s'adressait à wormful_sickfoot, j'aurais dû le préciser.

    Et pour ta remarque sur le format des dates : à l'époque, chaque octet, que dis-je, chaque bit de mémoire était précieux (j'ai commencé dans les années 70, où le "gros" ordinateur régional disposait de 32 Koctets au total[oui, 32 Kilo octets]), il fallait donc faire avec.
    Mes logiciels n'ont jamais souffert de ce problème, car je n'ai eu besoin de gérer des dates que plus tard, quand je suis passé à la programmation sur micro ordi. Au début, la mémoire était également précieuse, mais comme je ne gérais que quelques dates en simultané, je stockais l'année avec sa valeur réelle, ce que je n'aurais peut-être pas pu faire si j'avais dû en gérer des centaines ou milliers en même temps.

    Et c'est vrai qu'il y a eu pas mal de travail effectué pour ce fameux "bug" (entre guillemets, car pour moi ce n'était pas un bug, mais un manque d'anticipation sur la pérenité de certains logiciels, et de certaines habitudes aussi).

  20. #20
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    64
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 64
    Points : 42
    Points
    42
    Par défaut
    bonjour
    j'ai utiliser ta methode drogoo.
    Sa marche nikel
    Merci

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [JTABLE] Peut-on utiliser des autoFilters avec une JTable
    Par Nico+10) dans le forum Composants
    Réponses: 3
    Dernier message: 18/09/2006, 20h53
  2. Peut-on faire des colonnes avec "div"
    Par lodan dans le forum Balisage (X)HTML et validation W3C
    Réponses: 8
    Dernier message: 30/07/2006, 07h56
  3. Peut on creer des routines avec SQL
    Par Jamal_71 dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 30/01/2006, 11h37
  4. trier des fichiers avec un tableau flexgrid
    Par digger dans le forum VB 6 et antérieur
    Réponses: 1
    Dernier message: 08/12/2005, 16h20
  5. Peut-on retracer des dates manquantes ?
    Par samlepiratepaddy dans le forum Access
    Réponses: 1
    Dernier message: 30/11/2005, 13h41

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