Précédent   Forum du club des développeurs et IT Pro > Logiciels > Microsoft Office > Défis
Défis Ce forum est celui des défis et challenges Office. Prêts à relever le gant ? C'est parti !
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse
 
Outils de la discussion
Publicité
'
Vieux 13/04/2007, 07h26   #1
philben
Membre Expert
 
Inscription : avril 2006
Messages : 1 387
Détails du profil
Informations forums :
Inscription : avril 2006
Messages : 1 387
Points : 1 903
Points : 1 903
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 ?
Citation:
Comment swapper 2 entiers sans utiliser une autre variable ?
Amicalement,

Philippe
philben est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/04/2007, 07h31   #2
Maxence HUBICHE
Rédacteur

 
Avatar de Maxence HUBICHE
 
Homme Maxence HUBICHE
Développeur SQLServer/Access
Inscription : juin 2002
Messages : 3 768
Détails du profil
Informations personnelles :
Nom : Homme Maxence HUBICHE
Âge : 43
Localisation : France, Val d'Oise (Île de France)

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

Informations forums :
Inscription : juin 2002
Messages : 3 768
Points : 8 720
Points : 8 720
Envoyer un message via MSN à Maxence HUBICHE Envoyer un message via Skype™ à Maxence HUBICHE
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,
__________________
Mes tutoriels et vidéos :
Tableaux croisés dynamiques, Access les Bases, et les autres !
Maxence HUBICHE est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/04/2007, 11h34   #3
random
Expert Confirmé
 
Inscription : mai 2005
Messages : 3 419
Détails du profil
Informations forums :
Inscription : mai 2005
Messages : 3 419
Points : 3 817
Points : 3 817
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 ?
random est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/04/2007, 16h53   #4
philben
Membre Expert
 
Inscription : avril 2006
Messages : 1 387
Détails du profil
Informations forums :
Inscription : avril 2006
Messages : 1 387
Points : 1 903
Points : 1 903
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
philben est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/04/2007, 17h23   #5
vodiem
Expert Confirmé Sénior
 
Avatar de vodiem
 
Homme Diem VO
Vivre
Inscription : avril 2006
Messages : 2 772
Détails du profil
Informations personnelles :
Nom : Homme Diem VO
Âge : 40
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 772
Points : 4 337
Points : 4 337
bravo, effectivement c'est mieux que l'addition qui pose le pb du débordement.
vodiem est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/04/2007, 16h27   #6
random
Expert Confirmé
 
Inscription : mai 2005
Messages : 3 419
Détails du profil
Informations forums :
Inscription : mai 2005
Messages : 3 419
Points : 3 817
Points : 3 817
d'un autre côté le débordement sur des variants c'est assez rare
__________________
Elle est pas belle la vie ?
random est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/04/2007, 19h48   #7
vodiem
Expert Confirmé Sénior
 
Avatar de vodiem
 
Homme Diem VO
Vivre
Inscription : avril 2006
Messages : 2 772
Détails du profil
Informations personnelles :
Nom : Homme Diem VO
Âge : 40
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 772
Points : 4 337
Points : 4 337
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
vodiem est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/04/2007, 13h08   #8
Tofalu
Rédacteur

 
Avatar de Tofalu
 
Christophe Warin
Inscription : octobre 2004
Messages : 8 633
Détails du profil
Informations personnelles :
Nom : Christophe Warin
Âge : 29

Informations forums :
Inscription : octobre 2004
Messages : 8 633
Points : 24 307
Points : 24 307
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 !
Tofalu est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/04/2007, 14h50   #9
vodiem
Expert Confirmé Sénior
 
Avatar de vodiem
 
Homme Diem VO
Vivre
Inscription : avril 2006
Messages : 2 772
Détails du profil
Informations personnelles :
Nom : Homme Diem VO
Âge : 40
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 772
Points : 4 337
Points : 4 337
es tu sur que c'est le seul moyen?
vodiem est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/04/2007, 16h10   #10
vodiem
Expert Confirmé Sénior
 
Avatar de vodiem
 
Homme Diem VO
Vivre
Inscription : avril 2006
Messages : 2 772
Détails du profil
Informations personnelles :
Nom : Homme Diem VO
Âge : 40
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 772
Points : 4 337
Points : 4 337
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.
?
vodiem est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/04/2007, 22h59   #11
Maxence HUBICHE
Rédacteur

 
Avatar de Maxence HUBICHE
 
Homme Maxence HUBICHE
Développeur SQLServer/Access
Inscription : juin 2002
Messages : 3 768
Détails du profil
Informations personnelles :
Nom : Homme Maxence HUBICHE
Âge : 43
Localisation : France, Val d'Oise (Île de France)

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

Informations forums :
Inscription : juin 2002
Messages : 3 768
Points : 8 720
Points : 8 720
Envoyer un message via MSN à Maxence HUBICHE Envoyer un message via Skype™ à Maxence HUBICHE
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"
__________________
Mes tutoriels et vidéos :
Tableaux croisés dynamiques, Access les Bases, et les autres !
Maxence HUBICHE est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/04/2007, 16h54   #12
Papy Turbo
Membre Expert
 
Avatar de Papy Turbo
 
Homme Etienne Pailleret
Développeur VBA
Inscription : mars 2004
Messages : 799
Détails du profil
Informations personnelles :
Nom : Homme Etienne Pailleret
Localisation : France, Hauts de Seine (Île de France)

Informations professionnelles :
Activité : Développeur VBA

Informations forums :
Inscription : mars 2004
Messages : 799
Points : 1 452
Points : 1 452
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
Papy Turbo est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/04/2007, 17h33   #13
random
Expert Confirmé
 
Inscription : mai 2005
Messages : 3 419
Détails du profil
Informations forums :
Inscription : mai 2005
Messages : 3 419
Points : 3 817
Points : 3 817
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 ?
random est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/04/2007, 19h52   #14
Maxence HUBICHE
Rédacteur

 
Avatar de Maxence HUBICHE
 
Homme Maxence HUBICHE
Développeur SQLServer/Access
Inscription : juin 2002
Messages : 3 768
Détails du profil
Informations personnelles :
Nom : Homme Maxence HUBICHE
Âge : 43
Localisation : France, Val d'Oise (Île de France)

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

Informations forums :
Inscription : juin 2002
Messages : 3 768
Points : 8 720
Points : 8 720
Envoyer un message via MSN à Maxence HUBICHE Envoyer un message via Skype™ à Maxence HUBICHE
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 !!!???
__________________
Mes tutoriels et vidéos :
Tableaux croisés dynamiques, Access les Bases, et les autres !
Maxence HUBICHE est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/04/2007, 08h55   #15
random
Expert Confirmé
 
Inscription : mai 2005
Messages : 3 419
Détails du profil
Informations forums :
Inscription : mai 2005
Messages : 3 419
Points : 3 817
Points : 3 817
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 ?
random est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/04/2007, 10h45   #16
Maxence HUBICHE
Rédacteur

 
Avatar de Maxence HUBICHE
 
Homme Maxence HUBICHE
Développeur SQLServer/Access
Inscription : juin 2002
Messages : 3 768
Détails du profil
Informations personnelles :
Nom : Homme Maxence HUBICHE
Âge : 43
Localisation : France, Val d'Oise (Île de France)

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

Informations forums :
Inscription : juin 2002
Messages : 3 768
Points : 8 720
Points : 8 720
Envoyer un message via MSN à Maxence HUBICHE Envoyer un message via Skype™ à Maxence HUBICHE
10 "variables pas en mémoire vive" ????
Ca veut pas dire grand chose ça !




__________________
Mes tutoriels et vidéos :
Tableaux croisés dynamiques, Access les Bases, et les autres !
Maxence HUBICHE est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/04/2007, 11h37   #17
random
Expert Confirmé
 
Inscription : mai 2005
Messages : 3 419
Détails du profil
Informations forums :
Inscription : mai 2005
Messages : 3 419
Points : 3 817
Points : 3 817
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 ?
random est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/04/2007, 13h22   #18
Maxence HUBICHE
Rédacteur

 
Avatar de Maxence HUBICHE
 
Homme Maxence HUBICHE
Développeur SQLServer/Access
Inscription : juin 2002
Messages : 3 768
Détails du profil
Informations personnelles :
Nom : Homme Maxence HUBICHE
Âge : 43
Localisation : France, Val d'Oise (Île de France)

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

Informations forums :
Inscription : juin 2002
Messages : 3 768
Points : 8 720
Points : 8 720
Envoyer un message via MSN à Maxence HUBICHE Envoyer un message via Skype™ à Maxence HUBICHE
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.
__________________
Mes tutoriels et vidéos :
Tableaux croisés dynamiques, Access les Bases, et les autres !
Maxence HUBICHE est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/04/2007, 18h16   #19
philben
Membre Expert
 
Inscription : avril 2006
Messages : 1 387
Détails du profil
Informations forums :
Inscription : avril 2006
Messages : 1 387
Points : 1 903
Points : 1 903
merci, mais le coup du <savesetting>, il fallait aller le chercher celui-là !

Amicalement,

Philippe
philben est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/04/2007, 22h05   #20
Maxence HUBICHE
Rédacteur

 
Avatar de Maxence HUBICHE
 
Homme Maxence HUBICHE
Développeur SQLServer/Access
Inscription : juin 2002
Messages : 3 768
Détails du profil
Informations personnelles :
Nom : Homme Maxence HUBICHE
Âge : 43
Localisation : France, Val d'Oise (Île de France)

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

Informations forums :
Inscription : juin 2002
Messages : 3 768
Points : 8 720
Points : 8 720
Envoyer un message via MSN à Maxence HUBICHE Envoyer un message via Skype™ à Maxence HUBICHE
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 :
Citation:
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 !

__________________
Mes tutoriels et vidéos :
Tableaux croisés dynamiques, Access les Bases, et les autres !
Maxence HUBICHE est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 12h04.


 
 
 
 
Partenaires

Hébergement Web