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

Discussion: Quiz Access n°7

  1. #1
    Rédacteur

    Avatar de Tofalu
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    octobre 2004
    Messages
    9 501
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Associations - ONG

    Informations forums :
    Inscription : octobre 2004
    Messages : 9 501
    Points : 32 232
    Points
    32 232

    Par défaut Quiz Access n°7

    Bonjour à tous

    Après une période d'absence, nous vous proposons de tester vos connaissances dans un nouveau quiz Access.

    Nul doute qu'il s'agit là d'un moyen rapide et ludique d'enrichir vos connaissances.

    N'hésitez pas à poster vos notes/avis/questions à la suite de ce message.

    Bonne chance !

    Lien : Quiz n°6

  2. #2
    Rédacteur

    Avatar de Tofalu
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    octobre 2004
    Messages
    9 501
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Associations - ONG

    Informations forums :
    Inscription : octobre 2004
    Messages : 9 501
    Points : 32 232
    Points
    32 232

    Par défaut

    Bonsoir,

    Après analyse des statistiques, il s'avère qu'une des questions les plus difficiles est :

    Dans la procédure suivante, combien de messages vont être affichés ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    Sub Quiz()
    Dim i As Integer
    For i = 1 To 1.5
        MsgBox i
    Next i
    End Sub
    Le résultat est pourtant assez logique, mais c'est vrai qu'on se laisserait facilement abuser

  3. #3
    Expert confirmé
    Avatar de vodiem
    Homme Profil pro
    Vivre
    Inscrit en
    avril 2006
    Messages
    2 861
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Vivre
    Secteur : Conseil

    Informations forums :
    Inscription : avril 2006
    Messages : 2 861
    Points : 4 269
    Points
    4 269

    Par défaut

    salut Tofalu,

    Citation Envoyé par Tofalu
    il s'avère qu'une des questions les plus difficiles
    ...
    Le résultat est pourtant assez logique
    visiblement pas assez.

    j'imaginais d'ailleurs pas rencontrer ce genre de ligne de code un jour.
    au besoin je me serais assuré de l'entièreté du nombre à ma convenance et lever ainsi un doute inutile.

    merci pour ces Quiz.

  4. #4
    Rédacteur

    Avatar de Tofalu
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    octobre 2004
    Messages
    9 501
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Associations - ONG

    Informations forums :
    Inscription : octobre 2004
    Messages : 9 501
    Points : 32 232
    Points
    32 232

    Par défaut

    Bonjour à tous

    Vous pouvez découvrir un nouveau quiz. Il s'agit du septième quiz que nous vous proposons depuis le lancement de cette activité.
    Si les précédents demandaient beaucoup d'attention pour ne pas tomber dans les nombreux pièges, celui-ci se veut à priori plus abordable. Lisez attentivement les questions et explosez les records !

    http://access.developpez.com/quiz/quiz.php?page=7


  5. #5
    Membre expérimenté
    Homme Profil pro
    Inscrit en
    juillet 2006
    Messages
    1 219
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 73
    Localisation : France

    Informations professionnelles :
    Secteur : Services à domicile

    Informations forums :
    Inscription : juillet 2006
    Messages : 1 219
    Points : 1 702
    Points
    1 702

    Par défaut

    bonsoir,
    c'est effectivement logique et avec dans le même ordre d'idée:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Sub Quiz()
    Dim i As Integer
    For i = 1 To 0.5
        MsgBox i
    Next i
    End Sub

  6. #6
    Expert confirmé
    Avatar de vodiem
    Homme Profil pro
    Vivre
    Inscrit en
    avril 2006
    Messages
    2 861
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Vivre
    Secteur : Conseil

    Informations forums :
    Inscription : avril 2006
    Messages : 2 861
    Points : 4 269
    Points
    4 269

    Par défaut

    Citation Envoyé par LE VIEUX
    c'est effectivement logique
    permet moi LE VIEUX de ne pas partager cet avis:
    "for i=1 to 1.5" peut être compris comme:
    -dans "ma" logique pur: "une erreur", puisque: "ce qui se conçoit bien s'énonce clairement..."
    -"i = 1: While i <= 1.5: ... : i = i + 1: Wend"
    -"for i=1 to 1" limite arrondie à l'inférieur
    -"for i=1 to 2" limite arrondie au supérieur
    parmi ces deux derniers choix aucune n'est plus logique que l'autre: un arrondi peut se faire en toute logique: à l'inférieur, au supérieur, à l'inférieur en dessous de la moitié de l'unité, au supérieur de la moitié, et je ne parle pas de leur comportement lors de décrémentations dans le négatif... et pour moi la normalisation à la moitié de l'unité n'est qu'une logique parmi d'autre...
    avec tout ca, j'oublie surement encore d'autre interprétation tout aussi logique.

    dans la même logique on pourrait se poser des questions avec:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Dim i As Integer
    For i = 1.2 To -1.5 Step -0.7
    ...
    Next i
    ou
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    For i = 1 To 10 Step i * -1
    i = i + 2
    ...
    Next i

  7. #7
    Rédacteur

    Avatar de Tofalu
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    octobre 2004
    Messages
    9 501
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Associations - ONG

    Informations forums :
    Inscription : octobre 2004
    Messages : 9 501
    Points : 32 232
    Points
    32 232

    Par défaut

    C'est "logique" parce que le cast implicite de 1.5 en integer est 2

    En fait ça devient logique quand on sait que

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Cint(1.0)=1
    Cint(1.1)=1
    Cint(1.4)=1
    Cint(1.5)=2
    Cint(1.9)=2

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Dim i As Integer
    For i = 1.2 To -1.5 Step -0.7
    ...
    Next i
    Le cast de 1.2 en integer est 1
    Le cast de -1.5 en integer est -2
    Le cast de -0.7 en integer est -1

    Ce qui donne

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    For i = 1 to -2 step -1
    Je passe donc dans la boucle pour

    i=1
    i=0
    i=-1
    i=-2

    Soit 4 passages
    ----------------------------------------------

    ----------------------------------------------

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    For i = 1 To 10 Step i * -1
    i = i + 2
    ...
    Next i
    Là c'est plus "tordu".

    D'une part il ne faut pas oublier que :

    Quand step est >=0 la condition d'arret est i>end
    Que step est ajouté à i aprés le passage dans la boucle


    Mais surtout que step n'est calculé qu'une seule fois et que dans cet exemple i*-1 d'un i non déclaré avant donne 0

    Ce qui revient à

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    While i<=10
    i=i+2
    ...
    Wend
    Soit dans les pointillés : i=3,5,7,9,11. 5 passages.

    -------------------------------------
    Encore plus tordu :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    For i = 1 To 10 Step i
        MsgBox i
    Next i
    Affiche 1,2,3,4,5,6,7,8,9,10

    Alors que

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Dim i As Integer
    For i = 1 To 10 Step i
        MsgBox i
    Next i
    Boucle à l'infini.

    En fait, il semblerait dans le premier cas que comme i n'a jamais été déclaré avant il est directement instancié à la borne de départ. Du coup, step est égal à la borne de départ soit 1 . Essayez avec i=2, le pas sera de deux. Alors que dans le second cas, la déclaration force i=0 avant le for.

    Ce qui est marrant c'est que si on met :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    For i = 1 To 10 Step i * 1
        MsgBox i
    Next i
    Et bien on se retrouve de nouveau avec une boucle infinie. L'opération mathématique force la définition de i (non déclaré) à 0.

    Mais c'est beaucoup plus tordu que mes questions de quiz ça, et surtout ce ne sont pas des affirmations 100% sûres. Il faudrait pour ça pouvoir tracer l'exécution et l'évolution de step en mémoire.

  8. #8
    Membre expérimenté
    Homme Profil pro
    Inscrit en
    juillet 2006
    Messages
    1 219
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 73
    Localisation : France

    Informations professionnelles :
    Secteur : Services à domicile

    Informations forums :
    Inscription : juillet 2006
    Messages : 1 219
    Points : 1 702
    Points
    1 702

    Par défaut

    Bonjour à tous,
    Je reprends pour quelques précision sur mon post.
    Vodiem :
    Citation :
    permet moi LE VIEUX de ne pas partager cet avis
    Loin de moi l’idée d’émettre un avis, je ne suis pas assez compétent en la matière, simplement je faisais référence à une des possibilités les plus rependues en arithmétique, qui veut que >= à 0.5 = 1.
    Par contre ayant testé plusieurs possibilités, je me suis rendu compte que sur l’exemple que j’ai donné, 0.5 ne donnant rien je pensais que dans ce cas cela ne se vérifiait pas et j'ai posté un peu trop vite.
    Pourtant en y revenant malgré le fait que le msgbox aussi bien que le debug.print ne donne rien, le débogage fait bien ressortir que i = 1. Donc même si c’est un autre problème, quelle est votre explication.
    c'est vrai aussi pour, 3.5,5.5 ect.. soit pour les impairs, s'agit-il de l'arrondi au pair le plus proche? bizarre car je pensais qu'il s'agissait d'une méthode qui ne s'appliquait qu'aux décimaux.

    Merci de vos lumières, et surtout de votre contribution qui nous fait avancer dans nos connaissances, Tofalu, tes quiz’s, sont effectivement intéressants et même si ce n’est pas l’objectif nous rendent modestes .

  9. #9
    Rédacteur

    Avatar de Tofalu
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    octobre 2004
    Messages
    9 501
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Associations - ONG

    Informations forums :
    Inscription : octobre 2004
    Messages : 9 501
    Points : 32 232
    Points
    32 232

    Par défaut

    En effet, Cint(2.5) retourne 2

    Je sais pas pourquoi

    A mon avis c'est une histoire de virgule flotante ou je ne sais quoi

  10. #10
    Rédacteur

    Avatar de Tofalu
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    octobre 2004
    Messages
    9 501
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Associations - ONG

    Informations forums :
    Inscription : octobre 2004
    Messages : 9 501
    Points : 32 232
    Points
    32 232

    Par défaut

    Bon ce n'est pas considéré comme un bug mais un comprtement normal.

    Quand la partie décimale est inférieure à 0.5 c'est arrondi en bas
    Quand la partie décimale est supérieure à 0.5 c'est arrondi au dessus
    Quand la partie décimale est égale à 0.5 c'est arrondi au pair le plus proche.

    D'où ma remarque, c'est logique quand on connait le comportement de CInt

    Citation Envoyé par moi
    En fait ça devient logique quand on sait que...
    Et pour avouer, quand j'ai rédigé cette question je pensais comme vodiem avoir une erreur de compilation.
    D'ailleurs rien dans la doc ne stipule que les bornes doivent être entière ni même qu'elles seraient castées.

Discussions similaires

  1. Pb migration Access / SQL server
    Par yoyo dans le forum MS SQL-Server
    Réponses: 10
    Dernier message: 25/04/2005, 11h39
  2. Réponses: 3
    Dernier message: 22/05/2002, 10h37

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