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

Algorithmes et structures de données Discussion :

[CALENDRIER] Affichage en semaine


Sujet :

Algorithmes et structures de données

  1. #1
    Membre du Club
    Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Novembre 2007
    Messages
    146
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Novembre 2007
    Messages : 146
    Points : 48
    Points
    48
    Par défaut [CALENDRIER] Affichage en semaine
    Bonjour à tous,

    je réalise actuellement une application iPhone pour un client qui voudrait avoir un affichage du calendrier en semaine.

    Je me demande quels algoritme pourrait me convenir pour avoir une structure de donnée facile a gérer pour l'afficher.

    Le soucis (ce qui est normal) c'est qu'il peut y avoir N événements au même moment donc a afficher dans le même jour ET sur la meme ligne ...

    Il faut je pense utiliser un graphe d'intervalle, mais j'en suis pas sur ... C'est pour ca que je suis là.

    Avez vous des idées ? Merci à tous

  2. #2
    Membre émérite
    Avatar de prgasp77
    Homme Profil pro
    Ingénieur en systèmes embarqués
    Inscrit en
    Juin 2004
    Messages
    1 306
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Eure (Haute Normandie)

    Informations professionnelles :
    Activité : Ingénieur en systèmes embarqués
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Juin 2004
    Messages : 1 306
    Points : 2 466
    Points
    2 466
    Par défaut
    Bonjour,
    je ne suis pas sûr de comprendre si le problème est un soucis d'ergonomie, de représentation des données, d'algorithmie ou des trois à la fois. Pourrais-tu épurer ta question stp ?

  3. #3
    Membre du Club
    Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Novembre 2007
    Messages
    146
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Novembre 2007
    Messages : 146
    Points : 48
    Points
    48
    Par défaut
    Je ne sais pas comment représenter mes données selon l'affichage que je veux. Et il me manque donc l'algorithme pour faire en sorte que l'affichage ne soit pas d'une complexité monstrueuse.

    Vois tu déjà ce que je veux dire au niveau de l'affichage ? Si oui, et bien j'ai en claire juste la visio, du résultat final, mais le reste j'y réfléchi mais je ne l'y connais pas assez pour ce genre de truc ...

  4. #4
    Membre émérite
    Avatar de prgasp77
    Homme Profil pro
    Ingénieur en systèmes embarqués
    Inscrit en
    Juin 2004
    Messages
    1 306
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Eure (Haute Normandie)

    Informations professionnelles :
    Activité : Ingénieur en systèmes embarqués
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Juin 2004
    Messages : 1 306
    Points : 2 466
    Points
    2 466
    Par défaut
    D'un point de vue représentation des données, un événement est défini par un couple de dates (date/heure de début et date/heure de fin). À cela peuvent s'ajouter « priorité », nom, descriptif ...

    Je ne sais que dire de plus.

  5. #5
    Membre du Club
    Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Novembre 2007
    Messages
    146
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Novembre 2007
    Messages : 146
    Points : 48
    Points
    48
    Par défaut
    Merci, ca je l'avais en tête et c'est de ma faute car je me suis mal exprimé est la structure pour les données à utiliser.

    J'ai étudier les graphes d'intervalle, ca pourrais peut-être faire l'affaire non ?

  6. #6
    Rédacteur
    Avatar de pseudocode
    Homme Profil pro
    Architecte système
    Inscrit en
    Décembre 2006
    Messages
    10 062
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Architecte système
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2006
    Messages : 10 062
    Points : 16 081
    Points
    16 081
    Par défaut
    Citation Envoyé par Rian83 Voir le message
    Merci, ca je l'avais en tête et c'est de ma faute car je me suis mal exprimé est la structure pour les données à utiliser.
    ?

    Tu cherches une structure qui te faciliterait quelle genre d'opération ? La recherche des évènements sur une période donnée ? autre chose ?

  7. #7
    Membre du Club
    Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Novembre 2007
    Messages
    146
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Novembre 2007
    Messages : 146
    Points : 48
    Points
    48
    Par défaut
    Je veux faire un affichage de la semaine des événement. Avec, si plusieurs se trouve chevauché, qu'ils soient cote à cote. Tu vois ce que je veux dire?

    Un exemple : http://chronos.epita.net (recherche ing1) et clique sur ing1/grb

  8. #8
    Membre émérite
    Avatar de prgasp77
    Homme Profil pro
    Ingénieur en systèmes embarqués
    Inscrit en
    Juin 2004
    Messages
    1 306
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Eure (Haute Normandie)

    Informations professionnelles :
    Activité : Ingénieur en systèmes embarqués
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Juin 2004
    Messages : 1 306
    Points : 2 466
    Points
    2 466
    Par défaut
    Ta difficulté est-elle de savoir, deux événements donnés, s'ils se chevauchent ? Ou plus large, une liste d'événements donnée, savoir quels sont ceux qui se chevauchent ?

  9. #9
    Membre du Club
    Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Novembre 2007
    Messages
    146
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Novembre 2007
    Messages : 146
    Points : 48
    Points
    48
    Par défaut
    Justement, je ne veux pas qu'ils se chevauchement mais qu'ils soit cote a cote, mais niveau code c'est plus chiant car il faut faire des calcules de largeurs non ?

  10. #10
    Membre émérite
    Avatar de prgasp77
    Homme Profil pro
    Ingénieur en systèmes embarqués
    Inscrit en
    Juin 2004
    Messages
    1 306
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Eure (Haute Normandie)

    Informations professionnelles :
    Activité : Ingénieur en systèmes embarqués
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Juin 2004
    Messages : 1 306
    Points : 2 466
    Points
    2 466
    Par défaut
    Tu confonds donnée, représentation des données et présentation des données.
    Le premier terme désigne quelque chose d'immatériel et de conceptuel. Ex: une date.
    Le second désigne la manière dont tu as décidé de matérialiser cette idée. Ex: le nombre de secondes écoulées entre le 1er Janvier 1970 et ladite date.
    Le troisième désigne la manière dont tu présentes cette idée à l'utilisateur. Ex : une chaine de caractère de la forme jj/mm/yyyy.
    Mon tout désigne ... non je blague.

    Ainsi, ma question est :
    Tu penses rencontrer des difficultés pour représenter tes données ou pour les présenter ? Te semble-t-il difficile de savoir si deux événements ont une durée en commun ou dans le cas précédent comment présenter ces deux événements ?

    Merci de prendre le temps de bien expliquer quel est ton problème.

  11. #11
    Membre du Club
    Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Novembre 2007
    Messages
    146
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Novembre 2007
    Messages : 146
    Points : 48
    Points
    48
    Par défaut
    Super, merci pour cette clarification.

    Je ne sais pas comment implementer la representation des donnees.

    En effet, j'ai un web service qui me retourne un XML. Dans celui-ci, je peux avoir un evenements (ici des cours) tel que Maths 8h30-10h et Algo 8h30-10h.
    Tout ca est dans un tableau de cours, mais la ou es le probleme est de le presenter a l'utilisateur.

    Je veux que ces deux cours soit sur la meme ligne, et non pas un en dessous de l'autre.
    Mais je dois prendre en consideration les autres jours de la semaine pour faire le BON calcule de largeur.

    Si je segmente mon tableau en 700 px de largeur, et que tous les jours de la semaines on un cours (et au'aucun ne DOIT se chevaucher), tous les jours ont 100px de largeur, et le jour dont je parlait avant, il doit etre sur 100px et donc 50 px pour les maths et 50 pour l'algo. Mais ca, je ne le sais pas au moment d'afficher. Do'ou le soucis de savoir coment gerer ca en derriere la presentation des donnees.

    Donc, j'ai une idee precise de l'affichage pour l'user, j'ai mes classes et tableau (jour, et cours), mais je sais pas comment faire cette affichage ...

    Suis-je un peu plus claire ?

    Encore merci de ton aide

  12. #12
    Membre émérite
    Avatar de prgasp77
    Homme Profil pro
    Ingénieur en systèmes embarqués
    Inscrit en
    Juin 2004
    Messages
    1 306
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Eure (Haute Normandie)

    Informations professionnelles :
    Activité : Ingénieur en systèmes embarqués
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Juin 2004
    Messages : 1 306
    Points : 2 466
    Points
    2 466
    Par défaut
    C'est en effet un problème très complexe. Je suis en train d'y réfléchir, mais je ne trouve pour l'instant ni solution analytique ni solution algorithmique.

    J'y réfléchit et je reviens peut être si une solution me vient à l'esprit.

  13. #13
    Membre du Club
    Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Novembre 2007
    Messages
    146
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Novembre 2007
    Messages : 146
    Points : 48
    Points
    48
    Par défaut
    Ah super merci.
    Moi j'essaye aussi de regarder depuis quelques temps.

    J'ai étudier les graphe d'intervalles, et il serai (je pense) possible de connaitre la largeur max de chaque jour. Mais n'ayant pas beaucoup travailler dessus je connais pas trop ^^.

  14. #14
    Rédacteur
    Avatar de pseudocode
    Homme Profil pro
    Architecte système
    Inscrit en
    Décembre 2006
    Messages
    10 062
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Architecte système
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2006
    Messages : 10 062
    Points : 16 081
    Points
    16 081
    Par défaut
    Citation Envoyé par Rian83 Voir le message
    Ah super merci.
    Moi j'essaye aussi de regarder depuis quelques temps.

    J'ai étudier les graphe d'intervalles, et il serai (je pense) possible de connaitre la largeur max de chaque jour. Mais n'ayant pas beaucoup travailler dessus je connais pas trop ^^.
    Je pense qu'il serait plus simple de faire 2 passes sur tes données pour compter le nombre d'intervalles qui se chevauchent. Une simple liste triée et un parcours pour cumuler les chevauchement.

  15. #15
    Membre du Club
    Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Novembre 2007
    Messages
    146
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Novembre 2007
    Messages : 146
    Points : 48
    Points
    48
    Par défaut
    Une liste triée selon quelle information ? leur date ?

    Et la liste contiendrait quoi ? juste le jour ou toute la semaine ?

    Car la je vois pas trop ce que tu veux dire .. Désolé

  16. #16
    Expert éminent sénior

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 610
    Détails du profil
    Informations personnelles :
    Âge : 66
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 610
    Points : 17 916
    Points
    17 916
    Billets dans le blog
    2
    Par défaut
    une liste triée qui contient la date de début (et (un pointeur vers) la date de fin)..

    Tu parcours la liste 1 fois : tu comptes le max des intervalles qui se chevauchent par jour.

    Tu dimensionnes tes subdivisions de jour.

    Tu re-parcours la liste et tu affiches.




    Autre solution :

    tu fais la même première étape.

    Au lieu de subdiviser les jours tu mest un bouton "+" dans les cases qui ont des chevauchement.

    Quand on clique sur "+" un petit popu s'affiche avec les chevauchements..

  17. #17
    Membre émérite
    Avatar de prgasp77
    Homme Profil pro
    Ingénieur en systèmes embarqués
    Inscrit en
    Juin 2004
    Messages
    1 306
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Eure (Haute Normandie)

    Informations professionnelles :
    Activité : Ingénieur en systèmes embarqués
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Juin 2004
    Messages : 1 306
    Points : 2 466
    Points
    2 466
    Par défaut
    Voila, j'ai pris le temps d'y réfléchir.

    En effet, le traitement se fait en plusieurs phases, j'en propose trois. Dans un premier temps, on regroupe les événements en sous-liste d'événements se chevauchant mutuellement (et non deux à deux !). Dans un second temps, pour chaque événement de chaque sous-liste précédemment générée, on assigne à la largeur dudit événement min{l'éventuelle largeur précédente, 1/n} où n est la taille de la sous-liste actuelle. Dans un dernier temps, on comble les trous : pour chaque sous-liste, si la somme des largeurs est inférieure à 1, on ajoute tout ou partie de la différence aux événements si et seulement ceux-ci ne font parti que de sous-listes dont la somme est inférieure à 1.

    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
    36
    A 8-10
    B 8-10
    C 8-10
    E 8-10
    F 8-15
    G 10-12
    H 10-13
    I 10-16
    J 14-16
     
    Passe n°1
    A-B-C-D-E-F
    F-G-H-I
    F-I-J
     
    Passe n°2
    A=B=C=D=E=F=1/6
    F=min(1/6,1/4)=1/6  G=H=I=1/4
    F=min(1/6,1/3)=1/6 I=min(1/4,1/3)=1/4 J=1/3
     
     
    Passe n°3
    lm (Liste des événements modifiables) = vide
    lnm (Liste des événements non modifiables) = vide
     
    Itération 1
    A+B+C+D+E+F = 1 --> lnm=A-B-C-D-E-F
    F+G+H+I = 11/12 = 1-1/12 mais G,H,I pas dans lm --> lm = G-H-I (pas F car € lnm)
    F+I+J = 9/12 = 1-1/4 I dans lm mais J ni dans lm ni dans lnm --> lm = G-H-I-J
     
    Itération 2
    A+B+C+D+E+F = 1 --> rien à faire
    F+G+H+I = 11/12 = 1-1/12, or F dans lnm et G,H,I dans lm --> on ajoute 1/12*1/3=1/36 à G, H et I --> lm = J et lnm = A-B-C-D-E-F-G-H-I
    F+I+J =7/9(on a modifié I) = 1-2/9 F,I dans lnm et J dans lm --> on ajoute 2/9 à J --> lm = vide et lnm = A-B-C-D-E-F-G-H-I-J
     
    Travail fini

  18. #18
    Membre du Club
    Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Novembre 2007
    Messages
    146
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Novembre 2007
    Messages : 146
    Points : 48
    Points
    48
    Par défaut
    Bonjour,

    Super merci pour vos deux réponses !

    @souviron34 : je ne vois pas exactement le truc ... Désolé

    @prgasp77 : Merci pour ce pseudo algo. Je ne comprends pas la passe 3 par contre, surtout avec l'exemple ^^ Et cela ne prends pas en compte les autre jours là ? (sauf si C est dans mardi par ex) Si cela ne prends pas en compte les autres jours, est-ce grave ou en fait c'est inutile ?

    Merci encore.

  19. #19
    Membre émérite
    Avatar de prgasp77
    Homme Profil pro
    Ingénieur en systèmes embarqués
    Inscrit en
    Juin 2004
    Messages
    1 306
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Eure (Haute Normandie)

    Informations professionnelles :
    Activité : Ingénieur en systèmes embarqués
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Juin 2004
    Messages : 1 306
    Points : 2 466
    Points
    2 466
    Par défaut
    J'ai supposé (comme ça ne me semblait pas bien clair) que tu représentais la semaine sous forme d'un emploi du temps où tous les jours sont représentés par la même largeur, qu'ils contiennent des événements ou non. Je me suis trompé ?

  20. #20
    Expert éminent sénior

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 610
    Détails du profil
    Informations personnelles :
    Âge : 66
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 610
    Points : 17 916
    Points
    17 916
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par Rian83 Voir le message
    @souviron34 : je ne vois pas exactement le truc ... Désolé

    2 solutions à mon avis :
    Images attachées Images attachées   

Discussions similaires

  1. Affichage calendrier pour la semaine
    Par fife59 dans le forum Développement Sharepoint
    Réponses: 1
    Dernier message: 22/10/2010, 08h39
  2. Calendrier - Affichage de la date automatique
    Par Gailer dans le forum Excel
    Réponses: 2
    Dernier message: 29/09/2008, 16h07
  3. [VB6] Calendrier - Affichage année complète
    Par ScrewFace dans le forum VB 6 et antérieur
    Réponses: 5
    Dernier message: 21/07/2008, 15h18
  4. [Conception] Calendrier, affichage d'évènement
    Par grunk dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 29/07/2006, 11h34
  5. [Débutant]calendrier: affichage par 3 mois
    Par illyana dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 20/05/2006, 03h07

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