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

Défis Discussion :

Principe de ce sous-forum


Sujet :

Défis

  1. #1
    Membre chevronné

    Profil pro
    Inscrit en
    Avril 2006
    Messages
    1 399
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 1 399
    Points : 2 221
    Points
    2 221
    Par défaut Philben : Swap de 2 entiers
    Bonjour,

    Quel est le principe de ce sous-forum ?

    Le 1er défi est-il de le deviner ?

    Le suivant en est-il un ?
    Comment swapper 2 entiers sans utiliser une autre variable ?
    Amicalement,

    Philippe

  2. #2
    Expert éminent

    Avatar de Maxence HUBICHE
    Homme Profil pro
    Développeur SQLServer/Access
    Inscrit en
    Juin 2002
    Messages
    3 842
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Développeur SQLServer/Access

    Informations forums :
    Inscription : Juin 2002
    Messages : 3 842
    Points : 9 197
    Points
    9 197
    Par défaut
    Le principe de ce sous-forum est de proposer des défis à ceux qui ont envie de les relever.

    L'équipe Office est en train de vous en préparer un.

    Afin que ce sous forum ne devienne pas un gros ****** sans nom, si vous avez des défis à proposer, il faudra que ce soit selon les règles que nous finissons d'élaborer.

    Cordialement,

  3. #3
    Expert confirmé

    Profil pro
    Inscrit en
    Mai 2005
    Messages
    3 419
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 419
    Points : 4 297
    Points
    4 297
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    Sub swap()
    Dim a As Variant
    Dim b As Variant
    a = 10
    b = 20
    a = a + b
    b = a - b
    a = a - b
    MsgBox ("a" & a & "b" & b)
    End Sub
    c'est juste pour le fun
    à l'utilisation c'est moins rapide
    amicalement
    Elle est pas belle la vie ?

  4. #4
    Membre chevronné

    Profil pro
    Inscrit en
    Avril 2006
    Messages
    1 399
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 1 399
    Points : 2 221
    Points
    2 221
    Par défaut
    Bonjour Random,

    Une solution alternative pour des entiers (ne pas utiliser en production !):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    Sub swap()
    Dim a As Variant
    Dim b As Variant
    a = 10
    b = 20
    a = a Xor b
    b = a Xor b
    a = a Xor b
    MsgBox ("a" & a & "b" & b)
    End Sub
    A bientôt, je pense...

    Amicalement,

    Philippe

  5. #5
    Expert confirmé
    Avatar de vodiem
    Homme Profil pro
    Vivre
    Inscrit en
    Avril 2006
    Messages
    2 895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    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 895
    Points : 4 325
    Points
    4 325
    Par défaut
    bravo, effectivement c'est mieux que l'addition qui pose le pb du débordement.

  6. #6
    Expert confirmé

    Profil pro
    Inscrit en
    Mai 2005
    Messages
    3 419
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 419
    Points : 4 297
    Points
    4 297
    Par défaut
    d'un autre côté le débordement sur des variants c'est assez rare
    Elle est pas belle la vie ?

  7. #7
    Expert confirmé
    Avatar de vodiem
    Homme Profil pro
    Vivre
    Inscrit en
    Avril 2006
    Messages
    2 895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    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 895
    Points : 4 325
    Points
    4 325
    Par défaut
    oui tu as raison random, mais rare n'est pas impossible
    ta proposition reste encore de toute facon la meilleur.

    moi j'aurais encore proposé un truc du genre:
    ben je met a dans une table, b dans a puis récupérer a de ma table pour le mettre dans b.
    puisque a dans la table n'est pas une variable mais un champ! lol

  8. #8
    Expert éminent sénior

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

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

    Informations forums :
    Inscription : Octobre 2004
    Messages : 9 501
    Points : 32 311
    Points
    32 311
    Par défaut
    Citation Envoyé par vodiem
    oui tu as raison random, mais rare n'est pas impossible
    ta proposition reste encore de toute facon la meilleur.

    moi j'aurais encore proposé un truc du genre:
    ben je met a dans une table, b dans a puis récupérer a de ma table pour le mettre dans b.
    puisque a dans la table n'est pas une variable mais un champ! lol

    sauf que pour récupérer a tu seras obliger d'utiliser un recordset, donc une variable !

  9. #9
    Expert confirmé
    Avatar de vodiem
    Homme Profil pro
    Vivre
    Inscrit en
    Avril 2006
    Messages
    2 895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    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 895
    Points : 4 325
    Points
    4 325
    Par défaut
    es tu sur que c'est le seul moyen?

  10. #10
    Expert confirmé
    Avatar de vodiem
    Homme Profil pro
    Vivre
    Inscrit en
    Avril 2006
    Messages
    2 895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    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 895
    Points : 4 325
    Points
    4 325
    Par défaut
    remarque je me demandais, avec mes idées tordues:
    philben parle d'entier et vous utilisez des variants, dans ce cas:
    un entier Long occupant 4 octect et un Variant 16 (si je me souviens bien du quizz tofalu) il reste de la place dans le Variant...
    voici ma question:
    il est pas possible d'obtenir @ mémoire d'un variant? avoir un pointeur, lire, copier directement en mémoire dans access? je parle de ca pour les manipulations de tableau.
    ?

  11. #11
    Expert éminent

    Avatar de Maxence HUBICHE
    Homme Profil pro
    Développeur SQLServer/Access
    Inscrit en
    Juin 2002
    Messages
    3 842
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Développeur SQLServer/Access

    Informations forums :
    Inscription : Juin 2002
    Messages : 3 842
    Points : 9 197
    Points
    9 197
    Par défaut
    Allez hop !
    Je fais mon bourrin !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
        SaveSetting "MySwap", "Swapping", "Key_A", CStr(a)
        SaveSetting "MySwap", "Swapping", "Key_B", CStr(b)
        a = CLng(Trim(GetSetting("MySwap", "Swapping", "Key_B")))
        b = CLng(Trim(GetSetting("MySwap", "Swapping", "Key_A")))
        DeleteSetting "MySwap"

  12. #12
    Membre expérimenté
    Avatar de Papy Turbo
    Homme Profil pro
    Développeur Office/VBA
    Inscrit en
    Mars 2004
    Messages
    822
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Office/VBA
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2004
    Messages : 822
    Points : 1 709
    Points
    1 709
    Par défaut
    Ben, si on a droit aux variant, trop fastoche.
    Allez, encore moins efficace :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Sub swap()
    Dim a As Variant
    Dim b As Variant
        a = 10
        b = 20
        a = a & "|" & b
        b = Val(a)
        a = Val(Mid(a, InStr(1, a, "|") + 1))
        MsgBox ("a" & a & "b" & b)
    End Sub
    Développement Office, support technique, assistance, sur place (Loire atlantique, Vendée, Maine et Loire) ou à distance.

  13. #13
    Expert confirmé

    Profil pro
    Inscrit en
    Mai 2005
    Messages
    3 419
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 419
    Points : 4 297
    Points
    4 297
    Par défaut
    si on définit a et b comme des integer, et non comme le contenu de variant
    la seule solution que je trouve est celle de philben qui reste la plus élégante

    ceci me semble un bon exemple de la difficulté à trouver un énoncé non équivoque des défis
    Elle est pas belle la vie ?

  14. #14
    Expert éminent

    Avatar de Maxence HUBICHE
    Homme Profil pro
    Développeur SQLServer/Access
    Inscrit en
    Juin 2002
    Messages
    3 842
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Développeur SQLServer/Access

    Informations forums :
    Inscription : Juin 2002
    Messages : 3 842
    Points : 9 197
    Points
    9 197
    Par défaut
    Citation Envoyé par random
    si on définit a et b comme des integer, et non comme le contenu de variant
    ...
    ceci me semble un bon exemple de la difficulté à trouver un énoncé non équivoque des défis
    Euh... il a parlé d'entier, pas d'integer !
    Ca pourrait être des Long ou des Byte !


    Citation Envoyé par random
    la seule solution que je trouve est celle de philben qui reste la plus élégante
    Kwâââââ !
    t'aimes pas ma méthode !!!???

  15. #15
    Expert confirmé

    Profil pro
    Inscrit en
    Mai 2005
    Messages
    3 419
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 419
    Points : 4 297
    Points
    4 297
    Par défaut
    j'adore ta méthode
    mais elle utilise 10 variables dont 8 ne sont pas en mémoire vive
    Elle est pas belle la vie ?

  16. #16
    Expert éminent

    Avatar de Maxence HUBICHE
    Homme Profil pro
    Développeur SQLServer/Access
    Inscrit en
    Juin 2002
    Messages
    3 842
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Développeur SQLServer/Access

    Informations forums :
    Inscription : Juin 2002
    Messages : 3 842
    Points : 9 197
    Points
    9 197
    Par défaut
    10 "variables pas en mémoire vive" ????
    Ca veut pas dire grand chose ça !





  17. #17
    Expert confirmé

    Profil pro
    Inscrit en
    Mai 2005
    Messages
    3 419
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 419
    Points : 4 297
    Points
    4 297
    Par défaut
    tu dis ça non seulement parceque c'est vrai
    mais parceque je n'ai pas accordé à la beauté de ta solution incomparable
    l'émerveillement qui lui était du^.
    Elle est pas belle la vie ?

  18. #18
    Expert éminent

    Avatar de Maxence HUBICHE
    Homme Profil pro
    Développeur SQLServer/Access
    Inscrit en
    Juin 2002
    Messages
    3 842
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Développeur SQLServer/Access

    Informations forums :
    Inscription : Juin 2002
    Messages : 3 842
    Points : 9 197
    Points
    9 197
    Par défaut
    ben oui quoi !
    C'est moi le roi !
    où est l'horreur qui m'est dû (non non ! je n'ai pas fait de faute de frappe )

    Bon, allez, ca tourne au troll !
    La solution de Philben est très intéressante.

    Je pense qu'on peut sans conteste lui attribuer la palme pour cette solution.

  19. #19
    Membre chevronné

    Profil pro
    Inscrit en
    Avril 2006
    Messages
    1 399
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 1 399
    Points : 2 221
    Points
    2 221
    Par défaut
    merci, mais le coup du <savesetting>, il fallait aller le chercher celui-là !

    Amicalement,

    Philippe

  20. #20
    Expert éminent

    Avatar de Maxence HUBICHE
    Homme Profil pro
    Développeur SQLServer/Access
    Inscrit en
    Juin 2002
    Messages
    3 842
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Développeur SQLServer/Access

    Informations forums :
    Inscription : Juin 2002
    Messages : 3 842
    Points : 9 197
    Points
    9 197
    Par défaut
    Pour sûr qu'il fallait aller la chercher !
    C'est sûr que si tu ne cherches pas la performance, c'est le bon choix !

    Tiens, pour rigoler, essaye ce code :

    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
    Option Explicit
    Sub testeur()
        Dim n0 As Double
        Dim n1 As Double
        Dim i As Long
        n0 = Timer
        For i = 0 To 1000
            swapphilben
        Next
        n1 = Timer
        Debug.Print "Philben : " & n1 - n0
        n0 = Timer
        For i = 0 To 1000
            swapmaxence
        Next
        n1 = Timer
        Debug.Print "Maxence : " & n1 - n0
        n0 = Timer
        For i = 0 To 1000
            swappapy
        Next
        n1 = Timer
        Debug.Print "Papy : " & n1 - n0
     
    End Sub
     
    Sub swapphilben()
        Dim a As Variant
        Dim b As Variant
        a = 10
        b = 20
        a = a Xor b
        b = a Xor b
        a = a Xor b
    End Sub
     
    Sub swapmaxence()
        Dim a As Variant
        Dim b As Variant
        a = 10
        b = 20
        SaveSetting "MySwap", "Swapping", "Key_A", CStr(a)
        SaveSetting "MySwap", "Swapping", "Key_B", CStr(b)
        a = CLng(Trim(GetSetting("MySwap", "Swapping", "Key_B")))
        b = CLng(Trim(GetSetting("MySwap", "Swapping", "Key_A")))
        DeleteSetting "MySwap"
    End Sub
    Sub swappapy()
    Dim a As Variant
    Dim b As Variant
        a = 10
        b = 20
        a = a & "|" & b
        b = Val(a)
        a = Val(Mid(a, InStr(1, a, "|") + 1))
        'MsgBox ("a" & a & "b" & b)
    End Sub
    Tu verras les resultats !
    Chez moi, ca donne :
    Philben : 0
    Maxence : 5,671875
    Papy : 0,0078125
    tu comprends le côté "bourrin" du code !


    allez, la palme t'es dûe !
    fais pas de chichis !


Discussions similaires

  1. Nouveautés sur les TAGs dans les sous-forums et le forum principal
    Par FrancoisJehl dans le forum Microsoft BI
    Réponses: 0
    Dernier message: 30/01/2012, 17h12
  2. Menu principal et click sous menu
    Par angiosfr dans le forum Agents de placement/Fenêtres
    Réponses: 3
    Dernier message: 22/11/2005, 21h38

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