Précédent   Forum des professionnels en informatique > 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 Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 13/04/2007, 07h26   #1
Membre Expert
 
Inscription : avril 2006
Messages : 1 318
Détails du profil
Informations forums :
Inscription : avril 2006
Messages : 1 318
Points : 1 586
Points : 1 586
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
Rédacteur

 
Avatar de Maxence HUBICHE
 
Homme Maxence HUBICHE
Formateur et Développeur - Conseil en Informatique
Inscription : juin 2002
Messages : 3 687
Détails du profil
Informations personnelles :
Nom : Homme Maxence HUBICHE
Âge : 42
Localisation : France, Val d'Oise (Île de France)

Informations professionnelles :
Activité : Formateur et Développeur - Conseil en Informatique

Informations forums :
Inscription : juin 2002
Messages : 3 687
Points : 6 516
Points : 6 516
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,
__________________
1formaxion, une formation de qualité, des formateurs compétents
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
Expert Confirmé
 
Inscription : mai 2005
Messages : 3 419
Détails du profil
Informations forums :
Inscription : mai 2005
Messages : 3 419
Points : 3 768
Points : 3 768
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
Membre Expert
 
Inscription : avril 2006
Messages : 1 318
Détails du profil
Informations forums :
Inscription : avril 2006
Messages : 1 318
Points : 1 586
Points : 1 586
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
Expert Confirmé
 
Avatar de vodiem
 
Homme Diem VO
Vivre
Inscription : avril 2006
Messages : 2 644
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 644
Points : 3 897
Points : 3 897
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
Expert Confirmé
 
Inscription : mai 2005
Messages : 3 419
Détails du profil
Informations forums :
Inscription : mai 2005
Messages : 3 419
Points : 3 768
Points : 3 768
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
Expert Confirmé
 
Avatar de vodiem
 
Homme Diem VO
Vivre
Inscription : avril 2006
Messages : 2 644
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 644
Points : 3 897
Points : 3 897
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
Rédacteur

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

Informations forums :
Inscription : octobre 2004
Messages : 8 635
Points : 13 718
Points : 13 718
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
Expert Confirmé
 
Avatar de vodiem
 
Homme Diem VO
Vivre
Inscription : avril 2006
Messages : 2 644
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 644
Points : 3 897
Points : 3 897
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
Expert Confirmé
 
Avatar de vodiem
 
Homme Diem VO
Vivre
Inscription : avril 2006
Messages : 2 644
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 644
Points : 3 897
Points : 3 897
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
Rédacteur

 
Avatar de Maxence HUBICHE
 
Homme Maxence HUBICHE
Formateur et Développeur - Conseil en Informatique
Inscription : juin 2002
Messages : 3 687
Détails du profil
Informations personnelles :
Nom : Homme Maxence HUBICHE
Âge : 42
Localisation : France, Val d'Oise (Île de France)

Informations professionnelles :
Activité : Formateur et Développeur - Conseil en Informatique

Informations forums :
Inscription : juin 2002
Messages : 3 687
Points : 6 516
Points : 6 516
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"
__________________
1formaxion, une formation de qualité, des formateurs compétents
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
Membre Expert
 
Avatar de Papy Turbo
 
Homme Etienne Pailleret
Développeur VBA
Inscription : mars 2004
Messages : 751
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 : 751
Points : 1 120
Points : 1 120
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
Expert Confirmé
 
Inscription : mai 2005
Messages : 3 419
Détails du profil
Informations forums :
Inscription : mai 2005
Messages : 3 419
Points : 3 768
Points : 3 768
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
Rédacteur

 
Avatar de Maxence HUBICHE
 
Homme Maxence HUBICHE
Formateur et Développeur - Conseil en Informatique
Inscription : juin 2002
Messages : 3 687
Détails du profil
Informations personnelles :
Nom : Homme Maxence HUBICHE
Âge : 42
Localisation : France, Val d'Oise (Île de France)

Informations professionnelles :
Activité : Formateur et Développeur - Conseil en Informatique

Informations forums :
Inscription : juin 2002
Messages : 3 687
Points : 6 516
Points : 6 516
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 !!!???
__________________
1formaxion, une formation de qualité, des formateurs compétents
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
Expert Confirmé
 
Inscription : mai 2005
Messages : 3 419
Détails du profil
Informations forums :
Inscription : mai 2005
Messages : 3 419
Points : 3 768
Points : 3 768
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
Rédacteur

 
Avatar de Maxence HUBICHE
 
Homme Maxence HUBICHE
Formateur et Développeur - Conseil en Informatique
Inscription : juin 2002
Messages : 3 687
Détails du profil
Informations personnelles :
Nom : Homme Maxence HUBICHE
Âge : 42
Localisation : France, Val d'Oise (Île de France)

Informations professionnelles :
Activité : Formateur et Développeur - Conseil en Informatique

Informations forums :
Inscription : juin 2002
Messages : 3 687
Points : 6 516
Points : 6 516
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 !




__________________
1formaxion, une formation de qualité, des formateurs compétents
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
Expert Confirmé
 
Inscription : mai 2005
Messages : 3 419
Détails du profil
Informations forums :
Inscription : mai 2005
Messages : 3 419
Points : 3 768
Points : 3 768
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
Rédacteur

 
Avatar de Maxence HUBICHE
 
Homme Maxence HUBICHE
Formateur et Développeur - Conseil en Informatique
Inscription : juin 2002
Messages : 3 687
Détails du profil
Informations personnelles :
Nom : Homme Maxence HUBICHE
Âge : 42
Localisation : France, Val d'Oise (Île de France)

Informations professionnelles :
Activité : Formateur et Développeur - Conseil en Informatique

Informations forums :
Inscription : juin 2002
Messages : 3 687
Points : 6 516
Points : 6 516
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.
__________________
1formaxion, une formation de qualité, des formateurs compétents
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
Membre Expert
 
Inscription : avril 2006
Messages : 1 318
Détails du profil
Informations forums :
Inscription : avril 2006
Messages : 1 318
Points : 1 586
Points : 1 586
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
Rédacteur

 
Avatar de Maxence HUBICHE
 
Homme Maxence HUBICHE
Formateur et Développeur - Conseil en Informatique
Inscription : juin 2002
Messages : 3 687
Détails du profil
Informations personnelles :
Nom : Homme Maxence HUBICHE
Âge : 42
Localisation : France, Val d'Oise (Île de France)

Informations professionnelles :
Activité : Formateur et Développeur - Conseil en Informatique

Informations forums :
Inscription : juin 2002
Messages : 3 687
Points : 6 516
Points : 6 516
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 !

__________________
1formaxion, une formation de qualité, des formateurs compétents
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 Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 13h30.


 
 
 
 
Partenaires

Hébergement Web