Publicité
+ Répondre à la discussion
Page 1 sur 2 12 DernièreDernière
Affichage des résultats 1 à 20 sur 21
  1. #1
    Membre Expert

    Inscrit en
    avril 2006
    Messages
    1 390
    Détails du profil
    Informations forums :
    Inscription : avril 2006
    Messages : 1 390
    Points : 1 961
    Points
    1 961

    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
    Rédacteur

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

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

    Informations forums :
    Inscription : juin 2002
    Messages : 3 843
    Points : 8 228
    Points
    8 228

    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é
    Inscrit en
    mai 2005
    Messages
    3 419
    Détails du profil
    Informations forums :
    Inscription : mai 2005
    Messages : 3 419
    Points : 3 819
    Points
    3 819

    Par défaut

    Code :
    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 Expert

    Inscrit en
    avril 2006
    Messages
    1 390
    Détails du profil
    Informations forums :
    Inscription : avril 2006
    Messages : 1 390
    Points : 1 961
    Points
    1 961

    Par défaut

    Bonjour Random,

    Une solution alternative pour des entiers (ne pas utiliser en production !):
    Code :
    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é Sénior Avatar de vodiem
    Homme Profil pro Diem VO
    Vivre
    Inscrit en
    avril 2006
    Messages
    2 842
    Détails du profil
    Informations personnelles :
    Nom : Homme Diem VO
    Âge : 42
    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 842
    Points : 4 005
    Points
    4 005

    Par défaut

    bravo, effectivement c'est mieux que l'addition qui pose le pb du débordement.

  6. #6
    Expert Confirmé
    Inscrit en
    mai 2005
    Messages
    3 419
    Détails du profil
    Informations forums :
    Inscription : mai 2005
    Messages : 3 419
    Points : 3 819
    Points
    3 819

    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é Sénior Avatar de vodiem
    Homme Profil pro Diem VO
    Vivre
    Inscrit en
    avril 2006
    Messages
    2 842
    Détails du profil
    Informations personnelles :
    Nom : Homme Diem VO
    Âge : 42
    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 842
    Points : 4 005
    Points
    4 005

    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
    Rédacteur
    Avatar de Tofalu
    Homme Profil pro Christophe Warin
    Technicien maintenance
    Inscrit en
    octobre 2004
    Messages
    9 502
    Détails du profil
    Informations personnelles :
    Nom : Homme Christophe Warin
    Âge : 31
    Localisation : France, Ain (Rhône Alpes)

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

    Informations forums :
    Inscription : octobre 2004
    Messages : 9 502
    Points : 29 623
    Points
    29 623

    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 !
    Ce message vous a été utile ? Si oui, cliquez sur

  9. #9
    Expert Confirmé Sénior Avatar de vodiem
    Homme Profil pro Diem VO
    Vivre
    Inscrit en
    avril 2006
    Messages
    2 842
    Détails du profil
    Informations personnelles :
    Nom : Homme Diem VO
    Âge : 42
    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 842
    Points : 4 005
    Points
    4 005

    Par défaut

    es tu sur que c'est le seul moyen?

  10. #10
    Expert Confirmé Sénior Avatar de vodiem
    Homme Profil pro Diem VO
    Vivre
    Inscrit en
    avril 2006
    Messages
    2 842
    Détails du profil
    Informations personnelles :
    Nom : Homme Diem VO
    Âge : 42
    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 842
    Points : 4 005
    Points
    4 005

    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
    Rédacteur

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

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

    Informations forums :
    Inscription : juin 2002
    Messages : 3 843
    Points : 8 228
    Points
    8 228

    Par défaut

    Allez hop !
    Je fais mon bourrin !

    Code :
    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 Expert
    Avatar de Papy Turbo
    Homme Profil pro Etienne Pailleret
    Développeur Office/VBA
    Inscrit en
    mars 2004
    Messages
    812
    Détails du profil
    Informations personnelles :
    Nom : Homme Etienne Pailleret
    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 : 812
    Points : 1 572
    Points
    1 572

    Par défaut

    Ben, si on a droit aux variant, trop fastoche.
    Allez, encore moins efficace :
    Code :
    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 ou à distance

  13. #13
    Expert Confirmé
    Inscrit en
    mai 2005
    Messages
    3 419
    Détails du profil
    Informations forums :
    Inscription : mai 2005
    Messages : 3 419
    Points : 3 819
    Points
    3 819

    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
    Rédacteur

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

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

    Informations forums :
    Inscription : juin 2002
    Messages : 3 843
    Points : 8 228
    Points
    8 228

    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é
    Inscrit en
    mai 2005
    Messages
    3 419
    Détails du profil
    Informations forums :
    Inscription : mai 2005
    Messages : 3 419
    Points : 3 819
    Points
    3 819

    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
    Rédacteur

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

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

    Informations forums :
    Inscription : juin 2002
    Messages : 3 843
    Points : 8 228
    Points
    8 228

    Par défaut

    10 "variables pas en mémoire vive" ????
    Ca veut pas dire grand chose ça !





  17. #17
    Expert Confirmé
    Inscrit en
    mai 2005
    Messages
    3 419
    Détails du profil
    Informations forums :
    Inscription : mai 2005
    Messages : 3 419
    Points : 3 819
    Points
    3 819

    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
    Rédacteur

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

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

    Informations forums :
    Inscription : juin 2002
    Messages : 3 843
    Points : 8 228
    Points
    8 228

    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 Expert

    Inscrit en
    avril 2006
    Messages
    1 390
    Détails du profil
    Informations forums :
    Inscription : avril 2006
    Messages : 1 390
    Points : 1 961
    Points
    1 961

    Par défaut

    merci, mais le coup du <savesetting>, il fallait aller le chercher celui-là !

    Amicalement,

    Philippe

  20. #20
    Rédacteur

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

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

    Informations forums :
    Inscription : juin 2002
    Messages : 3 843
    Points : 8 228
    Points
    8 228

    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 :
    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 !


Liens sociaux

Règles de messages

  • Vous ne pouvez pas créer de nouvelles discussions
  • Vous ne pouvez pas envoyer des réponses
  • Vous ne pouvez pas envoyer des pièces jointes
  • Vous ne pouvez pas modifier vos messages
  •