OVH Cloud OVH Cloud

Énigmes

20 réponses
Avatar
andre.araste
Bonjour

J'anime une rubrique Visual Basic parmi un club de retraités.

Chaque trimestre je propose un petit programme VB5 & VB6 qui comporte une
erreur de programmation simple mais subtile l'empêchant de fonctionner
correctement.

Il faut bien entendu trouver l'erreur et redresser le programme.

Je manque d'idées.

Pouvez-vous me proposer quelques cas issus de votre expérience personnelle ?

Merci et ...
--
Bonne réception.
andre.araste@wanadoo.fr
http://perso.orange.fr/andre.araste/
Membre du Club Win's: http://www.clubwins.org
Avertissement: Je ne vends rien.

10 réponses

1 2
Avatar
LE TROLL
Ah, un classique de classique:

dim d as date
d = "05/10/2008"
if d = "05/10/2008" then d = "03/10/2008"
if d <> "05/10/2008" then d = d - 4

Impossibilité de tester la date si elle est au
5/10/8, car on aurait dû faire:

if d = "05/10/2008" then
d = "03/10/2008"
goto suite
endif
if d <> "05/10/2008" then d = d - 4
suite:


--
Romans, logiciels, email, site personnel
http://irolog.free.fr/joe.htm
------------------------------------------------------------------------------------
"andre.araste" a écrit
dans le message de news:
47ac4409$0$852$
| Bonjour
|
| J'anime une rubrique Visual Basic parmi un club
de retraités.
|
| Chaque trimestre je propose un petit programme
VB5 & VB6 qui comporte une
| erreur de programmation simple mais subtile
l'empêchant de fonctionner
| correctement.
|
| Il faut bien entendu trouver l'erreur et
redresser le programme.
|
| Je manque d'idées.
|
| Pouvez-vous me proposer quelques cas issus de
votre expérience personnelle ?
|
| Merci et ...
| --
| Bonne réception.
|
| http://perso.orange.fr/andre.araste/
| Membre du Club Win's: http://www.clubwins.org
| Avertissement: Je ne vends rien.
|
|
Avatar
LE TROLL
Avec une date = plantage !

dim d as date
d = "02/03/2007"
d = d - 2

--
Romans, logiciels, email, site personnel
http://irolog.free.fr/joe.htm
------------------------------------------------------------------------------------
"andre.araste" a écrit
dans le message de news:
47ac4409$0$852$
| Bonjour
|
| J'anime une rubrique Visual Basic parmi un club
de retraités.
|
| Chaque trimestre je propose un petit programme
VB5 & VB6 qui comporte une
| erreur de programmation simple mais subtile
l'empêchant de fonctionner
| correctement.
|
| Il faut bien entendu trouver l'erreur et
redresser le programme.
|
| Je manque d'idées.
|
| Pouvez-vous me proposer quelques cas issus de
votre expérience personnelle ?
|
| Merci et ...
| --
| Bonne réception.
|
| http://perso.orange.fr/andre.araste/
| Membre du Club Win's: http://www.clubwins.org
| Avertissement: Je ne vends rien.
|
|
Avatar
Jean-marc
LE TROLL wrote:
Avec une date = plantage !

dim d as date
d = "02/03/2007"
d = d - 2



Heu, non, ça ne "plante" pas.

Ca fait que d = "28/02/2007" (ce qui est exact, mais
plus par hasard qu'autre chose).

En fait ça ne plante pas, c'est juste mal écrit.

Pour faire de "l'arithmétique" sur les dates, il
faut employer la fonction DateAdd qui est faite pour ça,
et on doit alors écrire pour ce cas particulier:

d = DateAdd("d", -2, d)

Qui donne aussi "28/02/2007", ce qui est tout aussi exact,
mais valable sémantiquement, cette fois.

Je précise pour la petite histoire que tout ceci est
parfaitement décrit et expliqué avec un luxe de détails
dans le (bel) article de la FAQ :
http://faq.vb.free.fr/index.php?question4


Il n'y a rien ici qu'y soit une énigme, je pense ?

--
Jean-marc Noury (jean_marc_n2)
Microsoft MVP - Visual Basic
FAQ VB: http://faq.vb.free.fr/
mailto: remove '_no_spam_' ;
Avatar
Jean-marc
LE TROLL wrote:
Ah, un classique de classique:

dim d as date
d = "05/10/2008"
if d = "05/10/2008" then d = "03/10/2008"
if d <> "05/10/2008" then d = d - 4

Impossibilité de tester la date si elle est au
5/10/8, car on aurait dû faire:

if d = "05/10/2008" then
d = "03/10/2008"
goto suite
endif
if d <> "05/10/2008" then d = d - 4
suite:



La encore, je me permet d'ajouter une petite remarque:

quand on teste si un objet A (quel qu'il soit) est ègal
à un objet B, et bien 2 cas (Et UNIQUEMENT) 2 cas sont possibles :
1 - Ils sont égaux
2 - Ils ne sont pas égaux

Les cas 1) et 2) sont mutuellement exclusifs, et l'union
des cas 1) et 2) représente l'ensemble des possibles.

On doit donc écrire :

Dim d As Date

If d = "05/10/2008" Then
d = "03/10/2008"
Else
d = DateAdd("d", -4, d)
End If

Note que même si on imaginait un langage dans lequel ELSE
n'existe pas, le second test serait inutile et il faudrait écrire:

If d = "05/10/2008" then
d = "03/10/2008"
goto suite
Endif
' Ici d est FORCEMENT différent de 05/10/2008
d = d - 4
suite:


Mais la encore, ou est l'énigme ? Il s'agit juste de
simple logique, sans même un rapport avec la programmation.


--
Jean-marc Noury (jean_marc_n2)
Microsoft MVP - Visual Basic
FAQ VB: http://faq.vb.free.fr/
mailto: remove '_no_spam_' ;
Avatar
LE TROLL
Oui, autant pour moi, erreur, désolé, merci :o)

--
Romans, logiciels, email, site personnel
http://irolog.free.fr/joe.htm
------------------------------------------------------------------------------------
"Jean-marc"
a écrit
dans le message de news:
47af1d0f$0$2992$
| LE TROLL wrote:
| > Avec une date = plantage !
| >
| > dim d as date
| > d = "02/03/2007"
| > d = d - 2
|
| Heu, non, ça ne "plante" pas.
|
| Ca fait que d = "28/02/2007" (ce qui est exact,
mais
| plus par hasard qu'autre chose).
|
| En fait ça ne plante pas, c'est juste mal écrit.
|
| Pour faire de "l'arithmétique" sur les dates, il
| faut employer la fonction DateAdd qui est faite
pour ça,
| et on doit alors écrire pour ce cas particulier:
|
| d = DateAdd("d", -2, d)
|
| Qui donne aussi "28/02/2007", ce qui est tout
aussi exact,
| mais valable sémantiquement, cette fois.
|
| Je précise pour la petite histoire que tout ceci
est
| parfaitement décrit et expliqué avec un luxe de
détails
| dans le (bel) article de la FAQ :
| http://faq.vb.free.fr/index.php?question4
|
|
| Il n'y a rien ici qu'y soit une énigme, je pense
?
|
| --
| Jean-marc Noury (jean_marc_n2)
| Microsoft MVP - Visual Basic
| FAQ VB: http://faq.vb.free.fr/
| mailto: remove '_no_spam_' ;

|
|
|
|
Avatar
LE TROLL
Bonjour, merci, mais là... moins d'accord,
je venais de faire l'erreur, et justement je
cherchais partout... avant de trouver... Et
d'ailleurs, c'est souvent sur des trucs bêtes
comme ça, qu'on se plante, des détails, un
oubli...

Enigme, énigme, c'est beaucoup dire, on ne
peut pas faire un roman policier avec le code,
disons que c'est: "Pourquoi il est impossible de
tester cette date"...
Moi, j'ai compris énigme, dans le sens, "pourquoi,
ça ne marche pas" ?

--
Romans, logiciels, email, site personnel
http://irolog.free.fr/joe.htm
------------------------------------------------------------------------------------
"Jean-marc"
a écrit
dans le message de news:
47af2143$0$2998$
| LE TROLL wrote:
| > Ah, un classique de classique:
| >
| > dim d as date
| > d = "05/10/2008"
| > if d = "05/10/2008" then d = "03/10/2008"
| > if d <> "05/10/2008" then d = d - 4
| >
| > Impossibilité de tester la date si elle est au
| > 5/10/8, car on aurait dû faire:
| >
| > if d = "05/10/2008" then
| > d = "03/10/2008"
| > goto suite
| > endif
| > if d <> "05/10/2008" then d = d - 4
| > suite:
|
| La encore, je me permet d'ajouter une petite
remarque:
|
| quand on teste si un objet A (quel qu'il soit)
est ègal
| à un objet B, et bien 2 cas (Et UNIQUEMENT) 2
cas sont possibles :
| 1 - Ils sont égaux
| 2 - Ils ne sont pas égaux
|
| Les cas 1) et 2) sont mutuellement exclusifs, et
l'union
| des cas 1) et 2) représente l'ensemble des
possibles.
|
| On doit donc écrire :
|
| Dim d As Date
|
| If d = "05/10/2008" Then
| d = "03/10/2008"
| Else
| d = DateAdd("d", -4, d)
| End If
|
| Note que même si on imaginait un langage dans
lequel ELSE
| n'existe pas, le second test serait inutile et
il faudrait écrire:
|
| If d = "05/10/2008" then
| d = "03/10/2008"
| goto suite
| Endif
| ' Ici d est FORCEMENT différent de 05/10/2008
| d = d - 4
| suite:
|
|
| Mais la encore, ou est l'énigme ? Il s'agit
juste de
| simple logique, sans même un rapport avec la
programmation.
|
|
| --
| Jean-marc Noury (jean_marc_n2)
| Microsoft MVP - Visual Basic
| FAQ VB: http://faq.vb.free.fr/
| mailto: remove '_no_spam_' ;

|
|
|
|
Avatar
Jean-Marc
Bonsoir Andre,

Les "énigmes" proposées correspondent elles à ce que vous attendiez ?

Cordialement,

Jean-Marc
Avatar
andre.araste
Bonjour

Énigmes

Merci à tous pour vos propositions. Je vais les étudier une après l'autre et
je vais tenter de réaliser de petites démo pour les mettre en situation et
donner ainsi l'envie aux participants de chercher et de trouver l'erreur ou
l'anomalie.

Merci encore et ...
Bonne réception.

http://perso.orange.fr/andre.araste/
Membre du Club Win's: http://www.clubwins.org
Avertissement: Je ne vends rien.




"andre.araste" a écrit dans le message de news:
47ac4409$0$852$
Bonjour

J'anime une rubrique Visual Basic parmi un club de retraités.

Chaque trimestre je propose un petit programme VB5 & VB6 qui comporte une
erreur de programmation simple mais subtile l'empêchant de fonctionner
correctement.

Il faut bien entendu trouver l'erreur et redresser le programme.

Je manque d'idées.

Pouvez-vous me proposer quelques cas issus de votre expérience personnelle
?

Merci et ...
--
Bonne réception.

http://perso.orange.fr/andre.araste/
Membre du Club Win's: http://www.clubwins.org
Avertissement: Je ne vends rien.




Avatar
LE TROLL
Tiens, viens d'en trouver une autre:
Perte de l'icône en barre de tâche + plantage en
retour

form1 + commandButton1 + form2
*
FORM 1
form1.commandButton1()
form1.hide
form2.show vbModal
end sub

***plus d'icône en barre de tâche***

FORM 2
Sub Form_Unload(Cancel As Integer)
Form1.Show
End Sub
On ferme [X]

*** Ça plante ! erreur 401 ***

--> "vbModal" <--


--
Romans, logiciels, email, site personnel
http://irolog.free.fr/joe.htm
------------------------------------------------------------------------------------
"andre.araste" a écrit
dans le message de news:
47ac4409$0$852$
| Bonjour
|
| J'anime une rubrique Visual Basic parmi un club
de retraités.
|
| Chaque trimestre je propose un petit programme
VB5 & VB6 qui comporte une
| erreur de programmation simple mais subtile
l'empêchant de fonctionner
| correctement.
|
| Il faut bien entendu trouver l'erreur et
redresser le programme.
|
| Je manque d'idées.
|
| Pouvez-vous me proposer quelques cas issus de
votre expérience personnelle ?
|
| Merci et ...
| --
| Bonne réception.
|
| http://perso.orange.fr/andre.araste/
| Membre du Club Win's: http://www.clubwins.org
| Avertissement: Je ne vends rien.
|
|
Avatar
andre.araste
Bonjour

Merci, je l'ajoute au dossier.
--
Bonne réception.

http://perso.orange.fr/andre.araste/
Membre du Club Win's: http://www.clubwins.org
Avertissement: Je ne vends rien.

"LE TROLL" <le a écrit dans le message de news:

Tiens, viens d'en trouver une autre:
Perte de l'icône en barre de tâche + plantage en
retour

form1 + commandButton1 + form2
*
FORM 1
form1.commandButton1()
form1.hide
form2.show vbModal
end sub

***plus d'icône en barre de tâche***

FORM 2
Sub Form_Unload(Cancel As Integer)
Form1.Show
End Sub
On ferme [X]

*** Ça plante ! erreur 401 ***

--> "vbModal" <--


--
Romans, logiciels, email, site personnel
http://irolog.free.fr/joe.htm
------------------------------------------------------------------------------------
"andre.araste" a écrit
dans le message de news:
47ac4409$0$852$
| Bonjour
|
| J'anime une rubrique Visual Basic parmi un club
de retraités.
|
| Chaque trimestre je propose un petit programme
VB5 & VB6 qui comporte une
| erreur de programmation simple mais subtile
l'empêchant de fonctionner
| correctement.
|
| Il faut bien entendu trouver l'erreur et
redresser le programme.
|
| Je manque d'idées.
|
| Pouvez-vous me proposer quelques cas issus de
votre expérience personnelle ?
|
| Merci et ...
| --
| Bonne réception.
|
| http://perso.orange.fr/andre.araste/
| Membre du Club Win's: http://www.clubwins.org
| Avertissement: Je ne vends rien.
|
|




1 2