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

Prolog Discussion :

Verifier qu'une valeur est comprise dans un intervalle


Sujet :

Prolog

  1. #1
    Candidat au Club
    Inscrit en
    Janvier 2009
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Janvier 2009
    Messages : 6
    Points : 4
    Points
    4
    Par défaut Verifier qu'une valeur est comprise dans un intervalle
    Salut!
    Je suis un débutant en prolog et mon problème c'est que je ne sais pas comment vérifier qu'une valeur (récupérée d'un formulaire de saisi utilisateur) se trouve dans un intervalle de valeurs donné. En fait j'ai un lot de valeurs dans une base de données et je récupère une valeur saisie par l'utilisateur que je vérifie si elle est bien dans mon lot avant d'affecter un traitement. Merci de m'apporter des idées!

  2. #2
    Rédacteur/Modérateur
    Avatar de Trap D
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    4 942
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 4 942
    Points : 6 498
    Points
    6 498
    Par défaut
    Un peu plus de détails SVP,
    Valeur numériques, float...
    Sinon tu as le test
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    bonne_valeur(Min, Max, X) :-
      Min =< X,
      X =< Max.
    "La haine seule fait des choix" - Koan Zen
    "Il ne faut pas être meilleur que les autres, il faut être meilleur que soi." Albert Jacquard
    "Ceux qui savent où ils ont posé leur parapluie ne sont pas alcooliques." - pgibonne.
    Faites du Prolog, ça vous changera les idées !
    Ma page Prolog
    Mes codes sources commentés

    Mon avatar : La Madeleine à la veilleuse de Georges de La Tour

  3. #3
    Candidat au Club
    Inscrit en
    Janvier 2009
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Janvier 2009
    Messages : 6
    Points : 4
    Points
    4
    Par défaut
    Bonjour!
    Merci Trap_D pour cet éclairage cependant vous avez raison de me dire d'être beaucoup plus explicite car je me rend compte que j'avais pas poser clairement mon problème.

    En fait j'ai une base de données contenant une table 'Pluie' avec les champs id_pluie, mois.
    Je doit vérifier que le mois renseigné par l'utilisateur est un mois pluvieux ou pas. les 12 mois
    sont notés 01, 02, ..., 12. Un mois est pluvieux lorsqu'il est entre 05 et 10 (saison pluvieuse).

    Mon problème c'est au niveau de la formulation prolog de la requête SQL de vérification,
    je fais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    % vérifier que le mois fourni par le user est bien entre 05 et 10
     
    sformat(Str, 'select * FROM Pluie where ''~w'' >= 05 and ''~w'' <= 10', [Mois]).
    comme transcription d'un 'select * From Pluie where mois >= 05 and mois <= 10' mais ça ne
    marche pas. Je crois que cette fois ci je suis un peu plu clair!
    Merci encore

  4. #4
    Rédacteur/Modérateur
    Avatar de Trap D
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    4 942
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 4 942
    Points : 6 498
    Points
    6 498
    Par défaut
    J'avoue que je ne comprend pas très bien ta question, ni donc cette requête :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    % vérifier que le mois fourni par le user est bien entre 05 et 10
     
    sformat(Str, 'select * FROM Pluie where ''~w'' >= 05 and ''~w'' <= 10', [Mois]).
    elle devrait tout simplement être
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    % vérifier que le mois fourni par le user est bien entre 05 et 10
     
    sformat(Str, 'select * FROM Pluie where mois >= 05 and mois <= 10', [Mois]).
    Là, tu vas récupérer tous les éléments de ta base de données qui correspondent à l'intervalle donné, mais celà ne correspond pas du tout à ton commentaire, "% vérifier que le mois fourni par le user est bien entre 05 et 10" !

    Pour ce qui est des connections avec SQL, peut-être as-tu déjà vu cette discussion.
    "La haine seule fait des choix" - Koan Zen
    "Il ne faut pas être meilleur que les autres, il faut être meilleur que soi." Albert Jacquard
    "Ceux qui savent où ils ont posé leur parapluie ne sont pas alcooliques." - pgibonne.
    Faites du Prolog, ça vous changera les idées !
    Ma page Prolog
    Mes codes sources commentés

    Mon avatar : La Madeleine à la veilleuse de Georges de La Tour

  5. #5
    Candidat au Club
    Inscrit en
    Janvier 2009
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Janvier 2009
    Messages : 6
    Points : 4
    Points
    4
    Par défaut
    Bonjour!
    Trap_D le sujet de discution que tu m'as conseillé m'a beaucoup aidé merci encore.

    J'ai une table pluie avec les champs id_pluie, mois, région. On donne un mois et je choisi toutes les régions où il est susceptible de pleuvoir (d'ou un moi compris entre 5 et dit correspondant à la saison pluvieuse)
    quelque valeurs de la table `pluie`

    (1, 1, ' bassin'),
    (2, 7, 'bassin'),
    (3, 5, ' bassin'),
    (4, 12, 'centre'),
    (5, 8, 'centre'),
    (6, 2, 'bassin'),
    (7, 1, 'Cascades'),
    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
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
     
    dialog('Prevision2',
           [ object        :=
    	   Prevision2,
    	 parts         :=
    	   [ Prevision2    :=
    	       dialog('Prevision2'),
    	     Name          :=
    	       label(name, 'mois pluvieux'),
    	     Mois          :=
    	       menu(mois, cycle),
    	     ButtonOk      :=
    	       button(buttonOk),
    	     ButtonAnnuler :=
    	       button(buttonAnnuler),
    	     Resultat      :=
    	       label(resultat, 'Resultat :')
    	   ],
    	 modifications :=
    	   [ Name          :=
    	       [ font := @helvetica_bold_18
    	       ],
    	     Mois          :=
    	       [ value_font :=
    		   @helvetica_roman_14,
    		 reference  :=
    		   point(0, 19),
    		 append     :=
    		   [ menu_item('01', @default, '01', @off, @nil, '\\e0'),
    		     menu_item('02', @default, '02', @off, @nil, '\\e2'),
    		     menu_item('03', @default, '03', @off, @nil, '\\e3'),
    		     menu_item('04', @default, '04', @off, @nil, '\\e4'),
    		     menu_item('05', @default, '05', @off, @nil, '\\e5'),
    		     menu_item('06', @default, '06', @off, @nil, '\\e6'),
    		     menu_item('07', @default, '07', @off, @nil, '\\e7'),
    		     menu_item('08', @default, '08', @off, @nil, '\\e8'),
    		     menu_item('09', @default, '09', @off, @nil, '\\e9'),
    		     menu_item('10', @default, '10', @off, @nil, '\\e1'),
    		     '11',
    		     '12'
    		   ]
    	       ],
     
    	     ButtonOk      :=
    	       [ label := 'Ok'
    	       ],
    	     ButtonAnnuler :=
    	       [ label := 'Annuler'
    	       ],
    	     Resultat      :=
    	       [ font := @helvetica_bold_12
    	       ]
    	   ],
    	 layout        :=
    	   [ area(Name,
    		  area(91, 13, 314, 27)),
    	     area(Mois,
    		  area(58, 62, 93, 28)),
    	     area(ButtonOk,
    		  area(78, 120, 80, 24)),
    	     area(ButtonAnnuler,
    		  area(197, 116, 80, 24)),
    	     area(Resultat,
    		  area(66, 176, 210, 18))
    	   ],
    	 behaviour     :=
    	   [
    	     ButtonOk := [ message := message(@prolog,
    					 lance_recherche1,
    					 Mois?selection ,
                                              Resultat)
    			 ],
     
    	     ButtonAnnuler := [ message := message(Prevision2,
    					 destroy)
    			 ]
    	   ],
             initialise    :=
    	   [
    	     send(Resultat, colour, red),
    	     send(Resultat, font, font(times, bold, 18))
    	   ]
     
           ]).
     
     
    prevision2 :-
           make_dialog(D, 'Prevision2'),
           send(D,open).
     
    :-prevision2.
     
     
    prevision(Expr1,Resultat) :-
            odbc_connect('Prolog',_,
                         [ user(wizo),
                           password('prolog'),
                           alias(data),
                           open(once)
                         ]),
    interro2(data,Expr1 ,Res),
     
    	sformat(Str, '~w = ~w', [Expr1, Res]),
            send(Resultat, selection, Str).
     
     
    interro2(Data,Mois, Noms) :-
    	writeln('Liste des region concerné dans la bdd'),
            % C'est ici je veux recuperer le mois choisi pour verifier s'il est entre 05 et 10
            % et selectionner les regions correspondantes.
            mois= ''~w'', % Je veux recuperer ici le mois choisi par le user pour la verification dans la requete
                          % c'est là mon problème!
            sformat(Str, 'select region FROM Pluie where mois >= 05 and mois <= 10, [Mois]),
    	string_to_atom(Str, Atom),
    writeln(Atom), nl,
     
            findall(Region,
                    odbc_query(Data,
                               Atom,Region
                               ),
                   Noms),
     
    	%writeln(Noms), nl.
        maplist(writeln, Noms),nl.

  6. #6
    Rédacteur/Modérateur
    Avatar de Trap D
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    4 942
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 4 942
    Points : 6 498
    Points
    6 498
    Par défaut
    Salut

    je ne sais pas si j'ai bien compris ce que tu voulais, toujours est-il que j'ai modifié interro2, et voilà ce que j'obtiens :
    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
    % modification pour le menu
    		   [ menu_item(1,  @default, ' 1', @off, @nil, '\\e0'),
    		     menu_item(2,  @default, ' 2', @off, @nil, '\\e2'),
    		     menu_item(3,  @default, ' 3', @off, @nil, '\\e3'),
    		     menu_item(4,  @default, ' 4', @off, @nil, '\\e4'),
    		     menu_item(5,  @default, ' 5', @off, @nil, '\\e5'),
    		     menu_item(6,  @default, ' 6', @off, @nil, '\\e6'),
    		     menu_item(7,  @default, ' 7', @off, @nil, '\\e7'),
    		     menu_item(8,  @default, ' 8', @off, @nil, '\\e8'),
    		     menu_item(9,  @default, ' 9', @off, @nil, '\\e9'),
    		     menu_item(10, @default, '10', @off, @nil, '\\e10'),
    		     menu_item(11, @default, '11', @off, @nil, '\\e11'),
    		     menu_item(12, @default, '12', @off, @nil, '\\e12')
     
     
    % modification pour le bouton OK
    	     ButtonOk := [ message := message(@prolog,
    					 prevision,
    					 Mois?selection ,
                                             Resultat)
     
     
    interro2(Data,Mois, Noms) :-
    	writeln('Liste des region concerné dans la bdd'),
            % et selectionner les regions correspondantes.
            sformat(Str, 'select region FROM pluie where mois = ''~w''', [Mois]),
    	string_to_atom(Str, Atom),
            writeln(Atom), nl,
     
            findall(Region,
                    odbc_query(Data,
                               Atom,
    			   row(Region)),
                   Noms),
     
    	maplist(writeln, Noms),nl.
    Lorsque je sélectionne 1 et que je clique sur Ok, j'obtiens 1 = [bassin, Cascades]
    Lorsque je sélectionne 6 et que je clique sur Ok, j'obtiens 6 = []
    "La haine seule fait des choix" - Koan Zen
    "Il ne faut pas être meilleur que les autres, il faut être meilleur que soi." Albert Jacquard
    "Ceux qui savent où ils ont posé leur parapluie ne sont pas alcooliques." - pgibonne.
    Faites du Prolog, ça vous changera les idées !
    Ma page Prolog
    Mes codes sources commentés

    Mon avatar : La Madeleine à la veilleuse de Georges de La Tour

  7. #7
    Candidat au Club
    Inscrit en
    Janvier 2009
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Janvier 2009
    Messages : 6
    Points : 4
    Points
    4
    Par défaut
    Bonjour! Trap_D c'est exacte tu ne m'as pas compris, tu dis

    Lorsque je sélectionne 1 et que je clique sur Ok, j'obtiens 1 = [bassin, Cascades]
    Lorsque je sélectionne 6 et que je clique sur Ok, j'obtiens 6 = []
    Ce que je veux c'est : lorsque je sélectionne 1 et que je clique sur Ok, je n'obtienne aucune région dans la liste car je ne sélectionne une région que lorsque le mois indiqué est entre 05 et 10!
    Dans notre cas ici (dans la bdd exemple) lorsque je sélectionne 7, j'obtiens [bassin]; si je sélectionne 8, j'obtiens [centre] et pour tous les autres mois je ne doit pas avoir de région dans ma liste la condition de sélection n'étant pas vérifier. Merci!

  8. #8
    Rédacteur/Modérateur
    Avatar de Trap D
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    4 942
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 4 942
    Points : 6 498
    Points
    6 498
    Par défaut
    Donc on en revient à ce ue je disais au tout début :
    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
    bonne_valeur(Min, Max, X) :-
      Min =< X,
      X =< Max.
    prevision(Expr1,Resultat) :-
    	(   bonne_valeur(5, 10, Expr1),
                odbc_connect('pluie',_,
                         [ user(root),
                           password(''),
                           alias(data),
                           open(once)
                         ]),
    	    interro2(data, Expr1 ,Res),
    	    sformat(Str, '~w = ~w', [Expr1, Res]);
    	    sformat(Str, 'Mois incorrect ~w', [Expr1])
    	) ,
            send(Resultat, selection, Str).
    A noter que suite aux modifications faites pour les menu_item, la valeur renvoyée lorsqu'on clique est un entier et non plus un atom.

    PS au lieu d'envoyer 'Mois incorrect' on peut envoyer simplement ' '.
    "La haine seule fait des choix" - Koan Zen
    "Il ne faut pas être meilleur que les autres, il faut être meilleur que soi." Albert Jacquard
    "Ceux qui savent où ils ont posé leur parapluie ne sont pas alcooliques." - pgibonne.
    Faites du Prolog, ça vous changera les idées !
    Ma page Prolog
    Mes codes sources commentés

    Mon avatar : La Madeleine à la veilleuse de Georges de La Tour

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

Discussions similaires

  1. Réponses: 3
    Dernier message: 21/05/2017, 00h52
  2. plantage quand une valeur est nulle dans une requete
    Par vinze60 dans le forum Requêtes et SQL.
    Réponses: 15
    Dernier message: 29/04/2013, 21h55
  3. Comment vérifier si une valeur est incluse dans un tableau
    Par hornetbzz dans le forum Contribuez
    Réponses: 2
    Dernier message: 01/03/2011, 01h32
  4. verifier qu'une valeur est un nombre
    Par alexlevenere dans le forum C#
    Réponses: 11
    Dernier message: 20/02/2008, 16h47
  5. Réponses: 2
    Dernier message: 17/08/2005, 14h40

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