Bonjour,
Quel est le principe de ce sous-forum ?
Le 1er défi est-il de le deviner ?
Le suivant en est-il un ?
Amicalement,Comment swapper 2 entiers sans utiliser une autre variable ?
Philippe
Bonjour,
Quel est le principe de ce sous-forum ?
Le 1er défi est-il de le deviner ?
Le suivant en est-il un ?
Amicalement,Comment swapper 2 entiers sans utiliser une autre variable ?
Philippe
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,
c'est juste pour le fun
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
à l'utilisation c'est moins rapide
amicalement
Elle est pas belle la vie ?
Bonjour Random,
Une solution alternative pour des entiers (ne pas utiliser en production !):
A bientôt, je pense...
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
Amicalement,
Philippe
bravo, effectivement c'est mieux que l'addition qui pose le pb du débordement.
d'un autre côté le débordement sur des variants c'est assez rare
Elle est pas belle la vie ?
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
Envoyé par vodiem
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
Mes tutoriels Access
La rubrique Microsoft Access
Cours et tutoriels pour apprendre Access
La FAQ Access
Le Forum Access
Offres d'emploi développeur Access
es tu sur que c'est le seul moyen?
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.
?
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"
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.
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 ?
Euh... il a parlé d'entier, pas d'integer !Envoyé par random
Ca pourrait être des Long ou des Byte !
Kwâââââ !Envoyé par random
t'aimes pas ma méthode !!!???
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 ?
10 "variables pas en mémoire vive" ????
Ca veut pas dire grand chose ça !
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 ?
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.
merci, mais le coup du <savesetting>, il fallait aller le chercher celui-là !
Amicalement,
Philippe
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 :
Tu verras les resultats !
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
Chez moi, ca donne :
tu comprends le côté "bourrin" du code !Philben : 0
Maxence : 5,671875
Papy : 0,0078125
allez, la palme t'es dûe !
fais pas de chichis !
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager