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

Langage Delphi Discussion :

Union et intersection sur des intervalles de réels


Sujet :

Langage Delphi

  1. #1
    Futur Membre du Club
    Inscrit en
    Mars 2002
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Mars 2002
    Messages : 10
    Points : 6
    Points
    6
    Par défaut Union et intersection sur des intervalles de réels
    Salut !

    Je cherche s'il n'existe pas par hasard de types et de fonctions dans delphi qui me permettraient de faire ce genre d'opérations Union ou Intersection :

    [2,6 ; 3,9] Union [3,1 ; 4,6] = [2,6 ; 4,6]

    ou

    [2,6 ; 3,9] Intersection [3,1 ; 4,6] = [3,1 ; 3,9]

    ça existe ça ?

    merci de votre aide

  2. #2
    Membre chevronné
    Avatar de Archimède
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2005
    Messages
    1 644
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2005
    Messages : 1 644
    Points : 1 975
    Points
    1 975
    Par défaut
    pour l'union, tu peux essayer de faire quelque chose comme ça :
    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
    37
    38
    39
    40
    41
    42
    43
    44
    45
     
    type Tinterval=record
    min,max:extended;
    end;
     
    type
      TForm1 = class(TForm)
        procedure FormCreate(Sender: TObject);
      private
        { Déclarations privées }
        int1,int2:Tinterval;
        function union(i1,i2:Tinterval):Tinterval;
      public
        { Déclarations publiques }
      end;
     
    var
      Form1: TForm1;
     
    implementation
     
    {$R *.dfm}
     
    procedure TForm1.FormCreate(Sender: TObject);
    begin
    with int1 do begin
    min:=2.1;
    max:=4.5;
    end;
     
    with int2 do begin
    min:=1.1;
    max:=3.3;
    end;
     
    caption:='l''intervalle union est['+ floattostr(union(int1,int2).min)+' , '+ floattostr(union(int1,int2).max)+' ]';
    end;
     
    function Tform1.union(i1,i2:Tinterval):Tinterval;
    begin
    if i1.min<i2.min then result.min:=i1.min else result.min:=i2.min;
    if i1.max>i2.max then result.max:=i1.max else result.max:=i2.max;
    end;
     
    end.
    pour l'intersection, je te laisse faire lol

  3. #3
    Futur Membre du Club
    Inscrit en
    Mars 2002
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Mars 2002
    Messages : 10
    Points : 6
    Points
    6
    Par défaut
    lol

    euh oui merci j'aurai pu trouver ça !

    non, l'idée, c'est de retrouver des opérateurs aussi souples que + et * pour des "set of integer". Faire un genre de "set of double" sans être obligé d'en recoder toutes les subtilités...

    Il n'existe donc rien de tout cuit pour faire ça ??

  4. #4
    Membre chevronné
    Avatar de Archimède
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2005
    Messages
    1 644
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2005
    Messages : 1 644
    Points : 1 975
    Points
    1 975
    Par défaut
    désolé,je ne vois pas quelque chose qui peut ressembler à ça. lol

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    16
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 16
    Points : 20
    Points
    20
    Par défaut
    comme tu le dis, le fameux

    Opérateur Opération
    + union
    – différence
    * intersection
    <= sous-ensemble
    >= sur-ensemble
    = égalité
    <> différence
    in inclusion

    dans l'aide de delphi, sous "opérateurs d'ensembles" ne marche pas sur des ensembles de flottants déterminé comme tu le souhaites ( [2,6...3,1]). Donc pas le choix, tu vas devoir te le coltiner par le code... Cela dit si tu es sur une version >= Delphi 2005, tu dois avoir la possibilité de surcharger les opérateurs (enfin il me semble et je ne sais pas trop dans quelles mesures... je suis un ancêtre moi, je bosses sur D7 maximum)

  6. #6
    Membre éprouvé
    Avatar de CapJack
    Homme Profil pro
    Prof, développeur amateur vaguement éclairé...
    Inscrit en
    Mars 2004
    Messages
    624
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Prof, développeur amateur vaguement éclairé...
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2004
    Messages : 624
    Points : 988
    Points
    988
    Par défaut
    Archimède, une réunion d'intervalles n'est pas nécessairement un intervalle ! Il faudrait sans doute créer un objet "union dénombrable d'intervalles" (dérivé de TList ?) pour pouvoir gérer convenablement tous les cas de figure.

  7. #7
    Futur Membre du Club
    Inscrit en
    Mars 2002
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Mars 2002
    Messages : 10
    Points : 6
    Points
    6
    Par défaut
    Effectivement, j'ai du me taper le tout à la main.

    Enfin pas le tout, j'ai développé l'union et la différence, je peux me débrouiller à partir de ces deux opérations.

    Pour info et si ça intéresse qqn, je fais ça avec des objectlist :

    function Union(OL : TObjectList) : TObjectList
    et function Soustraire(OL : TObjectList) : TObjectList
    avec des objets du type intervalle : [Min, Max] (Min et Max double)

    Je tiens mon code à disposition sur demande, et suis tout ouïs (?) pour toutes remarques / idées d'améliorations que vous auriez.

    tcho !

  8. #8
    Membre chevronné
    Avatar de Archimède
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2005
    Messages
    1 644
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2005
    Messages : 1 644
    Points : 1 975
    Points
    1 975
    Par défaut
    Citation Envoyé par CapJack Voir le message
    Archimède, une réunion d'intervalles n'est pas nécessairement un intervalle !
    autant pour moi, c'est tout à fait vrai...j'avais répondu dans l'urgence sans approfondir le truc.

  9. #9
    Modérateur

    Homme Profil pro
    Ingénieur retraité
    Inscrit en
    Octobre 2005
    Messages
    2 396
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur retraité

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 396
    Points : 3 266
    Points
    3 266
    Par défaut
    Bonjour,

    Je vous signale à toutres fins utiles que dans cette discussion :http://www.developpez.net/forums/sho...D7Older&page=4
    vous pourrez trouver en pièces jointes les fichiers des codes de Sjrd nommés BigSetD7Older.pas (page 4) et de IntSetD7Older.pas (page suivante) qui permettent de faire des opérations d'union, d'intersection, etc, sur des grands ensembles de valeurs entières et qui sont hyper-rapides à l'exécution (testé sous Win98 + Delphi-5). En les modifiant pour les faire fonctionner avec des valeurs du type Real ou Extended le problème devrait être résolu.

    A+

    P.S : je n'ai pas testé le code nommé dyBigSet.pas que Tourlourou a ajouté après un silence de 4 mois à la fin de cette discussion.

    EDIT même jour, 13h17 : vu que les réels cités au début en exemple par Juan :
    [2,6 ; 3,9] Union [3,1 ; 4,6] = [2,6 ; 4,6]

    ou

    [2,6 ; 3,9] Intersection [3,1 ; 4,6] = [3,1 ; 3,9]
    sont des réels avec un seul chiffre après la virgule il suffit de multiplier ces valeurs par 10 et d'utiliser BigSetD7Older.pas ou IntSetD7Older.pas sans avoir à en modifier le code.
    ... et idem s'il s'agit de réels avec kmax chiffres après la vigule : suffit de multiplier par 10Puissancekmax.
    N'oubliez pas de consulter les FAQ Delphi et les cours et tutoriels Delphi

  10. #10
    Modérateur
    Avatar de tourlourou
    Homme Profil pro
    Biologiste ; Progr(amateur)
    Inscrit en
    Mars 2005
    Messages
    3 862
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Biologiste ; Progr(amateur)

    Informations forums :
    Inscription : Mars 2005
    Messages : 3 862
    Points : 11 321
    Points
    11 321
    Billets dans le blog
    6
    Par défaut
    P.S : je n'ai pas testé le code nommé dyBigSet.pas que Tourlourou a ajouté après un silence de 4 mois à la fin de cette discussion.
    on pourrait croire que je ne code pas très vite !!!
    ce n'est pas faux...

    pour le post en cours, je l'ai suivi avec intérêt
    Delphi 5 Pro - Delphi 11.3 Alexandria Community Edition - CodeTyphon 6.90 sous Windows 10 ; CT 6.40 sous Ubuntu 18.04 (VM)
    . Ignorer la FAQ Delphi et les Cours et Tutoriels Delphi nuit gravement à notre code !

  11. #11
    Modérateur

    Homme Profil pro
    Ingénieur retraité
    Inscrit en
    Octobre 2005
    Messages
    2 396
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur retraité

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 396
    Points : 3 266
    Points
    3 266
    Par défaut
    Bonjour,

    A Tourlourou :
    on pourrait croire que je ne code pas très vite !!!
    ... à chacun son rythme, qui va piano va sano.

    A+
    N'oubliez pas de consulter les FAQ Delphi et les cours et tutoriels Delphi

Discussions similaires

  1. Réponses: 3
    Dernier message: 04/04/2013, 21h02
  2. Problème sur des intervalles
    Par jamibt dans le forum C
    Réponses: 2
    Dernier message: 11/05/2011, 23h23
  3. Requêtes sur des intervalles de dates
    Par Tidus159 dans le forum Langage SQL
    Réponses: 4
    Dernier message: 09/05/2011, 16h43
  4. Filtrage de bruits sur des signaux temps réel
    Par sitalebs dans le forum API, COM et SDKs
    Réponses: 0
    Dernier message: 29/06/2009, 09h43
  5. requête basée sur des intervalles d'heures
    Par lieselotte02 dans le forum Requêtes et SQL.
    Réponses: 1
    Dernier message: 02/06/2007, 21h23

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