TEST SI MULTIPLE : VRAI OU FAUX ?

chaibat05 Messages postés 1883 Date d'inscription samedi 1 avril 2006 Statut Membre Dernière intervention 20 novembre 2007 - 9 avril 2007 à 22:56
draluorg Messages postés 625 Date d'inscription vendredi 23 avril 2004 Statut Membre Dernière intervention 25 novembre 2010 - 29 mai 2007 à 20:26
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/42152-test-si-multiple-vrai-ou-faux

draluorg Messages postés 625 Date d'inscription vendredi 23 avril 2004 Statut Membre Dernière intervention 25 novembre 2010
29 mai 2007 à 20:26
Salut a tous,

Erf c'etait long!...

juste une petite remarque pour chaibat05

"Si 2 est multiple de 2 alors combien de 2 je dois ajouter à 2
pour arriver à 2 ?"
c'est nawak! la question est :
Combien de fois va 2 dans 2 ? reponse = 1!

++
cs_Exploreur Messages postés 4821 Date d'inscription lundi 11 novembre 2002 Statut Membre Dernière intervention 15 novembre 2016 15
18 avril 2007 à 23:45
Bonsoir,

Moi j'ai rien compris de tout ces multiples de multiples, mais je me suis régalé à lire(30 minutes) tout les commentaires de chacun d'une discussion fort bien mathématicienne, et passionnante...

A+
Exploreur
chaibat05 Messages postés 1883 Date d'inscription samedi 1 avril 2006 Statut Membre Dernière intervention 20 novembre 2007 2
16 avril 2007 à 15:52
Salut,
eh beh dis donc...ils sont drolement petits tes doublons alors...!
Tellement petits que leur partie entière tienderait toujours dans
un entier...
violent_ken Messages postés 1812 Date d'inscription mardi 31 mai 2005 Statut Membre Dernière intervention 26 octobre 2010 2
15 avril 2007 à 11:24
Bonjour,
alors oui, ce n'est pas très esthétique comme résultat^^, mais bon il semblerait que ce soit la définition mathématique rigoureuse.


Voilà maintenant une fonction IsMultiple mathématiquement juste !

@+ ;)
us_30 Messages postés 2065 Date d'inscription lundi 11 avril 2005 Statut Membre Dernière intervention 14 mars 2016 10
15 avril 2007 à 11:19
Bonjour,

Okay, violent_ken la défintion mahématique est comme tu le dis. JE te remercie d'avoir insisté. (Mais je ne suis pas sur que d'un point pratique se soit très agréable, mais c'est une autre histoire...)

JE modifie le code de la façon suivante :

=

Private Function IsMultiple(ByVal nb1 As Double, ByVal nb2 As Double) As Boolean
If nb2 0 Then IsMultiple True: Exit Function
IsMultiple ((Int(nb1 / nb2) nb1 / nb2) And nb1 <> 0)
End Function

'..................................................

Sub test()
Debug.Print IsMultiple(125, 25)
End Sub

=

Ainsi, il sera renvoyé VRAI, pour chaque nombre, dès qu'on rentre 0.

Amicalement,
Us.
violent_ken Messages postés 1812 Date d'inscription mardi 31 mai 2005 Statut Membre Dernière intervention 26 octobre 2010 2
14 avril 2007 à 20:03
Et au passage, le cours que je donne règle le cas 0 multiple de 0.

"0 n'a qu'un multiple : 0 lui-même"




Donc si je résume :
- 0 n'a qu'un multiple, c'est 0 lui même
- tout nombre entier relatif (-2,-1,0,1,2,....) a 0 comme multiple

Sommes nous d'accord ??
@+
violent_ken Messages postés 1812 Date d'inscription mardi 31 mai 2005 Statut Membre Dernière intervention 26 octobre 2010 2
14 avril 2007 à 20:00
lol ;)

PPCM veut dire plus petit commun multiple (j'apprend rien à personne ^^).
Donc si m=PPCM(a,b), forcément m est un multiple de a et aussi un multiple de b !

Alors si 0=PPCM(1,0), 0 est multiple de 1 et aussi de 0 !
(note au passage : Maple donne PPCM(0,0)=0)





Tentons de trancher ! Regardons ce cours d'arithmétique de base : http://membres.lycos.fr/masclejp/Arit/aritm1.pdf

> AUCUNE hypothèse sur k<>0

> ET l'exemple suprême : "Les multiples de 6 sont les entiers de la forme 6k, c'est-à-dire 0, 6, 12," ==> DONC k=0 EST POSSIBLE.


Donc 0 est bien multiple de tout entier relatif (excepté peut être de 0).



Chaibat ==> 2 est multiple de 2 car 2 est un diviseur de 2 (la propriété a|a étant TOUJOURS vraie).

Je pense qu'il faut oublier la conception "par récurrence" de la multiplicité.


(et de 73^^)
@+
chaibat05 Messages postés 1883 Date d'inscription samedi 1 avril 2006 Statut Membre Dernière intervention 20 novembre 2007 2
14 avril 2007 à 19:52
si tu ajoutes une fois 2 à 2 tu arrives à 4 .
Moi je veux arriver à 2 pour que 2 soit multiple de 2
us_30 Messages postés 2065 Date d'inscription lundi 11 avril 2005 Statut Membre Dernière intervention 14 mars 2016 10
14 avril 2007 à 19:44
Entre nous, on est en train de battre le record de la multiplicité des posts ! A combien le record ? -:);

A demain.
Amicalement,
Us.
us_30 Messages postés 2065 Date d'inscription lundi 11 avril 2005 Statut Membre Dernière intervention 14 mars 2016 10
14 avril 2007 à 19:42
chaibat, je viens de voir ton post. Je faisais de l'humour... La réponse est une fois 2, c'est donc le cas trivial... (relire plus haut si ce n'est pas de l'humour)

Amicalement,
Us.
us_30 Messages postés 2065 Date d'inscription lundi 11 avril 2005 Statut Membre Dernière intervention 14 mars 2016 10
14 avril 2007 à 19:36
"J'avoue que çà avait un gout de vielliot ;)" => donc tu en as pris ! vite au centre anti-poison !

Ben, quand tu lis :

"Définition 1. Soit a, b appartenant à Z. On dit que a divise b lorsqu'il existe k appartenant à Z tel que b = ka."

tu lis la définition de la division, et non de la notion de multiplicité. C'est toi qui dit que c'est strictement la même chose... moi, je t'ai dit de faire attention à uiliser la division euclidienne, ce n'est pas complètement transposable des cas particuliers avec zéro.

La 2ième definition est donc identique dans le principe à la 1er, mais sans précision... Là encore et toujours, c'est la même remarque...

Donc tout n<>0 divise 0 donc 0 est multiple (=NON !) de tout n différent de 0 !!
Le raccourcis que tu fais, c'est véritablement une association entre multiplicité et division ! mais faut-il que je reprenne toutes mes remarques... Aspro, aspro !! même les vieux... -);

Pour le PPCM c'est normal : 1x0=0 et 0x0=0 ! mais cela ne dit rien sur la multiplicité... sinon tu étais d'accord que 0 est multiple de 0, alors que dit le PPCM de 0 et 0 => BUG ?!
(et note que pour calculer le PPCM on utilise la division, donc on tourne en rond avec ces remarques...)

Amicalement,
Us.

Bon arrêtons là un instant, si tu veux bien...
violent_ken Messages postés 1812 Date d'inscription mardi 31 mai 2005 Statut Membre Dernière intervention 26 octobre 2010 2
14 avril 2007 à 19:21
Et d'ailleurs : Maple m'annonce que le plus petit commun multiple de 0 et 1 est 0... donc c'est bien que 0 est multiple et de 0, et de 1 !

@+
violent_ken Messages postés 1812 Date d'inscription mardi 31 mai 2005 Statut Membre Dernière intervention 26 octobre 2010 2
14 avril 2007 à 19:16
Il faut bien sur lire "1 and -1 divide..." (dsl pour le bug lors du copier/coller)
@+
violent_ken Messages postés 1812 Date d'inscription mardi 31 mai 2005 Statut Membre Dernière intervention 26 octobre 2010 2
14 avril 2007 à 19:11
J'avoue que çà avait un gout de vielliot ;)


k dans Z* ?

Bah, je viens de voir plusieurs définitions (exemple : Si a et b sont deux entiers naturels, b n'étant pas nul, on dit que b divise a ou que b est un diviseur de a ou que a est un multiple de b s'il existe un entier q tel que a = bq) et c'est nul part précisé.


Oublions un instant cette définition et regardons celle ci :
(Wikipedia) "1 and −1 divide (are divisors of) every integer, every integer is a divisor of itself, and every integer is a divisor of 0, except by convention 0 itself "

Donc tout n<>0 divise 0 donc 0 est multiple de tout n différent de 0 !!

@+
chaibat05 Messages postés 1883 Date d'inscription samedi 1 avril 2006 Statut Membre Dernière intervention 20 novembre 2007 2
14 avril 2007 à 19:09
je reviens quand même...
non non non..us_ ,.ça marche pas comme ça

M=2
N=2

je dois ajouter N autant de fois pour arriver à M
et donc exactement 2 et pas 2 fois rien ...*
ça ne suffit pas !
us_30 Messages postés 2065 Date d'inscription lundi 11 avril 2005 Statut Membre Dernière intervention 14 mars 2016 10
14 avril 2007 à 18:57
Je comprends maintenant ! C'est périmé !! N'avale pas ça !

Savoir si un nb est multiple d'un autre, signifie qu'il existe un K dans Z*, mais les nb peuvent être dans l'ensemble qu'on veut (ou que l'on veut travailler)...

Amicalement,
Us.
violent_ken Messages postés 1812 Date d'inscription mardi 31 mai 2005 Statut Membre Dernière intervention 26 octobre 2010 2
14 avril 2007 à 18:45
Ben, quand je lis :

"Définition 1. Soit a, b appartenant à Z. On dit que a divise b lorsqu'il existe k appartenant à Z tel que b = ka."

je ne vois aucun Z*, que des Z. Donc pourquoi devrait on avoir k<>0 ?


Et puis, soyons logiques :
- sommes nous d'accord que "chaque entier est un diviseur de 0" ? (c'est une propriété)
- sommes nous d'accord que si a divise b, b est un multiple de a ?
- si oui aux deux points, alors nécessairement 0 est un multiple de chaque entier !



Pour le i, impossible pour moi d'accepter çà puisque je n'ai jamais entendu parler de divisibilité sur autre chose que l'anneau Z ^^ (R à la rigueur, en tout cas dans ta source tu le suggères).


Sinon, je viens d'acheter çà ;) http://cgi.ebay.fr/tube-aspirine-du-rhone_W0QQitemZ150107993479QQcategoryZ151QQcmdZViewItem

^_- @+
us_30 Messages postés 2065 Date d'inscription lundi 11 avril 2005 Statut Membre Dernière intervention 14 mars 2016 10
14 avril 2007 à 18:38
si cela ne suffit pas : http://www.cosmoslac.com/products/AsproPlus.jpg

-);
Us.
us_30 Messages postés 2065 Date d'inscription lundi 11 avril 2005 Statut Membre Dernière intervention 14 mars 2016 10
14 avril 2007 à 18:35
oui. mais pas une confusion de sens. K doit être un entier non nul ici ! sinon la définition de multiplicité n'a plus de sens... tu pourrais tout dire autrement, même que 0 est multiple de i (i^2=-1) ...

Bref, j'vais enrichir le pharmacien avec mes aspro. Tiens, t'en veux un ? http://www.studiosept.com/commercial_aspro.htm

A+
Amicalement,
Us.
violent_ken Messages postés 1812 Date d'inscription mardi 31 mai 2005 Statut Membre Dernière intervention 26 octobre 2010 2
14 avril 2007 à 18:22
Relis çà :

"2 divise 16, donc 16 multiple de 2
donc il existe un nb entier K, qui donnera : 2*K=16 !

tu dis : "n divise 0, donc 0 multiple de n "
donc il existe un nb entier K, qui donnera : 0*k=n !"



16 multiple de 2.....2*K=16
0 multiple de n....0*k=n



N'aurais tu pas fait une inversion ?
Dans le deuxième exemple, (substitution) c'est n<==>2 et 0<==>16
Donc 2k=16 <==> nk=0 (donc avec k=0)
@+
us_30 Messages postés 2065 Date d'inscription lundi 11 avril 2005 Statut Membre Dernière intervention 14 mars 2016 10
14 avril 2007 à 18:18
chaibat, non pas 0 sinon tu te trouveras à dire comme violent_ken, mais deux fois rien devrit suffire, tout simplement... -:);

Violent_ken, si tu dis vrai, regarde à quoi mène ton raisonnement :

regarde avec ton premier exemple :
2 divise 16, donc 16 multiple de 2
donc il existe un nb entier K, qui donnera : 2*K=16 !

tu dis : "n divise 0, donc 0 multiple de n "
donc il existe un nb entier K, qui donnera : 0*k=n !

Chez moi zéro fois un nb donne zéro ! pas "n"...

Pour prouver que je n'ai pas 106 ans, je ne sais pas si la multicité servira à quelque chose... mais bon, essayes toujours... -:);

Amicalement,
Us.
chaibat05 Messages postés 1883 Date d'inscription samedi 1 avril 2006 Statut Membre Dernière intervention 20 novembre 2007 2
14 avril 2007 à 18:05
Rebonjour tout le monde,
Us_
Si 2 est multiple de 2 alors combien de 2 je dois ajouter à 2
pour arriver à 2 ?
si tu me répond 0 je m' en vais...:-)

Non blague à part, mais encore une blague..
je suis maintenant entrain de tenter de prouver
que tu n'as pas 106 ans
violent_ken Messages postés 1812 Date d'inscription mardi 31 mai 2005 Statut Membre Dernière intervention 26 octobre 2010 2
14 avril 2007 à 18:04
Mais quel est le problème à çà :



"Définition 1. Soit a, b appartenant à Z. On dit que a divise b lorsqu’il existe k appartenant à Z tel que b = ka."
Admettons qu'il faille a<>0 (pour éviter le k=b/a impossible)


Donc a divise b ssi il existe k de Z tel que b=ka.

Exemple : 2 divise 16 car 16=8*2 (k=8, a=2 et b=16)
Exemple : n (n<>0, n relatif) divise 0 car 0=0*n (k=0, a=n, b=0)

Or la notion de multiple est identique à celle de diviseur (c'est juste a et b qui sont permutés).
En reprenant les deux exemples :
2 divise 16, donc 16 multiple de 2
n divise 0, donc 0 multiple de n ==> ZERO EST MULTIPLE DE TOUS LES ENTIERS RELATIFS (excepté zéro dans cette démonstration).

CQFD.



?? Il n'y a pas de division par zéro !

@+
us_30 Messages postés 2065 Date d'inscription lundi 11 avril 2005 Statut Membre Dernière intervention 14 mars 2016 10
14 avril 2007 à 18:00
ouppsss... lire B multiple de 0... dsl, une boite d'aspro, svp !
us_30 Messages postés 2065 Date d'inscription lundi 11 avril 2005 Statut Membre Dernière intervention 14 mars 2016 10
14 avril 2007 à 17:58
ben, tu n'es pas d'accord mais moi c'est l'inverse. Je ne suis pas d'accord de dire que 0 est multiple de tout nombre ! cela me parait une évidence... Ton raisonnement n'est pas cohérent ! (déjà dit, il me semble)...

Bon, déjà en avance qu'à petit pas, mais on avance, puisque à force je suis arrivé à faire admettre qu'on peut dire que "2 est multiple de 2"...

Si 0 est multiple de B (B>0), alors si tu additionne 0 un certain nombre de fois, tu retrouveras B, selon toi ? pour moi, non ! désolé...

Ton problème c'est que tu raisonne qu'avec le principe de la division ! LA division requiert de la prudence avec zéro...

Amicalement,
Us.
violent_ken Messages postés 1812 Date d'inscription mardi 31 mai 2005 Statut Membre Dernière intervention 26 octobre 2010 2
14 avril 2007 à 17:41
0^0 est ce que l'on appelle communément une "indétermination" car on ne peut à priori pas le calculer.

Alors après, il y a plusieurs approches qui mènent pour la plupart (prolongement par continuité, théories ensemblistes...) à montrer que si 0^0 devait exister, sa valeur serait 1.

Donc la convention est "0^0=1" (on le définit) même si apparement on pourrait aussi bien lui donner la valeur 0.



Et pour en revenir à ta source, je suis pas d'accord sur le fait que 0 soit uniquement multiple de lui même ^^

@+
us_30 Messages postés 2065 Date d'inscription lundi 11 avril 2005 Statut Membre Dernière intervention 14 mars 2016 10
14 avril 2007 à 17:27
Pour info, juste en passant, dans le dictionnaire de math "Toutes les mathématiques et les bases de l'informatique" on trouve que 0^0 n'est pas défini... qui finalement est plus logique. Ce n'est pas défini, donc on peut le définir ?...

Amicalement,
Us.
violent_ken Messages postés 1812 Date d'inscription mardi 31 mai 2005 Statut Membre Dernière intervention 26 octobre 2010 2
14 avril 2007 à 15:03
Pour tenter de comprendre le 0^0=1 : http://faq.maths.free.fr/html/node26.html

Convention donc, mais je n'ai jamais vu 0^0<>1.

D'ailleurs les ingénieurs de MapleSoft on également adopté cette convention ^^

@+
chaibat05 Messages postés 1883 Date d'inscription samedi 1 avril 2006 Statut Membre Dernière intervention 20 novembre 2007 2
14 avril 2007 à 14:16
On est donc d'accord ;)

juste pour ".pas une décision arbitraire^^"
oui, mais invérifiable !

à suivre quand même...!
s' il reste encore de la place ...
j' ai l' impression qu' on puise dans les reserves de la page :-)
violent_ken Messages postés 1812 Date d'inscription mardi 31 mai 2005 Statut Membre Dernière intervention 26 octobre 2010 2
14 avril 2007 à 12:16
Ahhhh... je viens de comprendre le problème du "|" ;)

"a divise b" ne s'écrit pas "a/b" mais "a|b" ! Ce n'est pas une barre de division, c'est une barre verticale qui n'a rien à voir avec la division (utilisée uniquement pour la divisibilité).
On est donc d'accord ;)
Relisez donc mes démos en prenant en compte ce fait^^

"0/0 n' est pas une pseudo_division mais c' est une interdiction.
En Algèbre , il est fortement interdit de diviser par 0"
> j'ai écrit "0|0", et pas "0/0" ;) Ce n'est pas une division ;)



"Pour tout nombre élevé à la puissance 0 le résultat est 1" ==> ahah peut être, mais ce n'est pas non plus une décision arbitraire^^


"Pour être multiple il faut être plus grand(à la rigeur égal)" ==> je vois ce que tu veux dire, mais ce critère ne fait pas une démonstration. Je ne fait qu'appliquer la définition de la divisibilité.

@+
chaibat05 Messages postés 1883 Date d'inscription samedi 1 avril 2006 Statut Membre Dernière intervention 20 novembre 2007 2
14 avril 2007 à 12:05
Bonjour Ken,
on voudrait bien que 1 divise b s' écrit a/b,
mais, crois moi, on peut pas :-)
Je te cite :
tel que b = ka
et moi je dis => k=b/a

ensuite
0/0 n' est pas une pseudo_division mais c' est une interdiction.
En Algèbre , il est fortement interdit de diviser par 0

ensuite:
Pour tout nombre élevé à la puissance 0 le résultat est 1 , c' est une convention
et comme toute convention, il ne faut pas chercher à le démontrer.
C' est parce qu' on y a pas parvenu qu' on s' est dit :
"On arrête là.Puisqu' on y arrive pas,à partir de maintenant ça sera comme ça
et puis c' est tout !"

ensuite:
Pour être multiple il faut être plus grand(à la rigeur égal)
or 0 n' est pas plus grand que 2 et donc ne peut pas être le
multiple de 2.
La divisision étant impossible, il ne paut pas être son diviseur non plus

Tu suis ?

crois moi c' est par amitié que je te dis ça, sinon je laissera tomber...:-)
violent_ken Messages postés 1812 Date d'inscription mardi 31 mai 2005 Statut Membre Dernière intervention 26 octobre 2010 2
14 avril 2007 à 11:34
"Juste ! sauf l'entier zéro !!!" ==> certes, sauf l'entier zéro... je veux juste démontrer que est multiple de tous les entiers SAUF zéro


"comme l'a dit Chaibat on note (b/a) et non a/b" ==> NON, NON, NON ! "a DIVISE b" se note a|b !!! C'est une certitude, documentez vous...




Maintenant LA définition de la divisibilité : "Définition 1. Soit a, b appartenant à Z. On dit que a divise b lorsqu'il existe k appartenant à Z tel que b = ka." Je ne vois nulle part de Z*, donc pourquoi enlever le cas b=0 ? A cause d'une pseudo-division 0/0 ? Je rappelle que 0^0=1, et pourtant chacun sait que ln(0) n'existe pas...

Enfin bref, admettons que la définition soit celle citée dessus pour b<>0.
Donc a divise b ssi il existe k de Z tel que b=ka.

Exemple : 2 divise 16 car 16=8*2 (k=8 ici)
Exemple : n (n<>0, n relatif) divise 0 car 0=0*n (k=0 ici)

Or la notion de multiple est identique à celle de diviseur (c'est juste a et b qui sont permutés).
En reprenant les deux exemples :
2 divise 16, donc 16 multiple de 2
n divise 0, donc 0 multiple de n ==> ZERO EST MULTIPLE DE TOUS LES ENTIERS RELATIFS (excepté zéro dans cette démonstration).

CQFD.


Pour le 0|0, ok çà implique une division par zéro, mais c'est peut être une convention que 0|0.
Tu dis tois même que "0 est un multiple de 0" est super trivial, alors pourquoi pas 0|0 ?





""0 n' est pas un multiple de 0
pas plus d'ailleurs que 2 est un multiple de 2 : c'est son égal""
> Mais appliquez donc la définition !! La définition de la divisibilité (et donc de la multiplicité) n'est pas donnée par récurrence, elle est donnée par la division euclidienne....

Comme 2=1*2+0, CQFD : 2|2 et donc 2 est multiple de 2...



Pour l'extension sur R, je ne suis pas convaincu. Je n'ai étudié que la divisibilité sur l'anneau Z. Alors peut être existe t-il une théorie sur R, à vous de me le dire.


@+
us_30 Messages postés 2065 Date d'inscription lundi 11 avril 2005 Statut Membre Dernière intervention 14 mars 2016 10
14 avril 2007 à 10:45
Bonjour,

Relisez-moi ! Relisez-moi ! IL n'y a point d'incohérence !

=

Violent_ken, tu dis : "pourquoi étendre la définition de nombre mutliple aux réels puisque la définition de nombre diviseur ne s'applique qu'aux entiers".
- MAIS qui dit que la définition ne peut pas s'étendre aux nombres décimaux ? ON présente les choses par le plus simple, donc en considérant en premier les nombres entiers positifs, mais le raisonnement s'applique autant aux nombres négatifs qu'aux décimaux... JE ne vois pas de raison pour s'arrêter aux entiers. Sinon on trouverait cette proposition idiote : Dire que 125 est un multiple de 25 est VRAI, mais si on divise les deux par 10, alors on n'aurait plus le droit de dire que 12.5 est multiple de 2.5 ?! ... étrange ?...
- De plus, le nombre diviseur ne s'aplique pas qu'aux entiers ! on a le droit de diviser un nombre par un nombre décimale ?...

=

Violent_ken , tu dis : "chaque entier est un diviseur de 0". Or si a divise b (noté a|b), alors b est un multiple de a. Donc si n|0, 0 est donc un multiple de tout entier. Par conséquent, nous avons la propriété "Zéro est un multiple de tout entier"

- Belle erreur ! très connue dans ceux qui proposent de démontrer que 1=0 ! IL faut toujours se méfier lorsqu'on utilise la division de ne pas faire de confusion...
Point par point : "chaque entier est un diviseur de 0" => Juste ! sauf l'entier zéro !!!
"Or si a divise b (noté a|b)" => comme l'a dit Chaibat on note (b/a) et non a/b... mais tu pensais sûrement : si on divise a par b ... sens inversé... Remarque TRES IMPORTANTE lorsqu'on utilise la division on doit ABSOLUMENT rajouter la condition b différent de zéro !!! et à chaque utilisation de la division on doit le faire systématiquement ! or, on a tendance à l'oublier... ce qui explique que la suite de ton raisonnement est incorrecte... CETTE condition ne non nullité du dénomimateur est fait plus systématiquement lorsqu'on utilise des équations. Par exemple : (2-X)*Y=1 , alors Y=1/(2-X) avec X<>2 ! (on évite de diviser par 2!)

- CETTE erreur explique aussi mon propos, que je recite :
"125 est un multiple de 25 : car si j'additionne un certain nombre de fois 25 je retrouve 125 ! [...] 25+25+25+25+25 = 5*25 [...] on utilise la multiplication [X*25] comme raccourcis de calcul, qu'on peut retourner [...] pour isoler X. [...] NEANMOINS, l'emploi de la division engendre certaines restrictions d'utilisation dans des cas particuliers... notamment avec zéro."

... et explique aussi les raisonnements que je tiens par la suite avec zéro... JE ne me réfère pas à la division pour conclure à la multiplicité d'un nombre, mais à sa définition de base, avec la multiplication ! (ceci évite les erreurs)

=

Chaibat, tu dis : "nb1 0 Then IsMultiple True ...Donnes moi un exemple ou 0 serait le mulitiple de quelque chose."

- ET bien j'aime bien ta remarque "Donnes moi un exemple ou 0 serait le mulitiple de quelque chose." car je suis de ton avis !! et mon code aussi ! et mes propos d'avant aussi ! (à une différence près, après réflexion...)
- En fait, tu as visiblement écrit cela sans tester les choses, mais seulement en regardant de travers (et mal) le code. En effet, cette ligne "If nb1 0 Then IsMultiple True" s'applique uniquement quand nb2=0 aussi. "IF nb2=0 THEN..." C'est la petite différence près...
- C'est "And nb1<>0" qui interdit de renvoyer vrai. DONC nous sommes d'accord sur ce point à la différence près, qui suit :

=
"0 n' est pas un multiple de 0
pas plus d'ailleurs que 2 est un multiple de 2 : c'est son égal"

- C'est discutable. SI on entend par multiple le "sens français", alors je suis d'accord. CAR dans ce cas on suppose que MULTIPLE sous-entend aussi PLUS que le nombre de départ (ou moins si on inverse le sens)... MAIS d'un point de vue mathématique, je suis, en fait, pas d'accord. En effet, dire :
- "6 est un multiple de 2" se traduit par 2+2+2=6
- "4 est un multiple de 2" se traduit par 2+2=4
donc par récurrence :
- "2 est un multiple de 2" se traduit par 2=2
Ce dernier est donc le cas trivial de la multiplicité. (qui est aussi son égalité, bien sur. On a deux propriétés équivalentes.)

Autre argument : Dans un système d'équations linéaires, pour qu'il existe une solution unique, il faut que chaque ligne d'équations ne soit pas multiple d'une autre... sinon les solutions sont multiples... Donc si 2 lignes d'équations sont identiques, j'ai la même conclusion à faire que si elles étaient plusieurs fois multiples... donc exclure le cas trival mène à aucune conclusion différente...

Maintenant, le cas super-trivial que constitue :
"0 est un multiple de 0"
Cette insertion colle encore très bien avec mon illustration ci-dessus sur un système d'équation linéaire, et généralise très bien le raisonnement sur la multiplicité. C'est plutôt dire l'inverse qui me parait être étrange, et amène des complications inutiles...

=

Pour : "-125 n' est pas un sous multiple de 25 , mais un multiple de -25
si tu pars de .125, tu vas vers .250, -375, -400..
si tu pars de -25 c' est -50, -75, -100 et enfin -125.
et le sous multiple de 25 c' est 5
D' ou la condition: ils doivent être du même sens"

etc... je crois que je ne pas faire mieux que mon dernier post pour expliquer mon raisonnement... le relire !

N'empêche que dire : "le sous multiple de 25 c' est 5" ! manque vraiment de claireté... tu confonds multiplicité et multiplication ! tu fais 5*5, donc 5+5+5+5+5=25, donc 25 est multiple de 5, car constitué d'une multiplicité de 5 ! et 25 ne peut pas être un sous-multiple de 5, car si tu parts dans l'autre sens tu as 5,0,-5,-10, etc.

=

Amicalement,
Us.
cs_lermite222 Messages postés 492 Date d'inscription jeudi 5 avril 2007 Statut Membre Dernière intervention 2 juillet 2012 4
14 avril 2007 à 09:20
Réponse à Renfield
Tu le fait exprès ?
Je te ferais remarquer que tu compare 5 à 25 et donc la réponse est bien 5 est un sous-multiple de 25.
je reprandrai ma phrase précédante
Il faut bien qu'à un certain moment l'ont reconnaisse que l'ont est a bout d'argument.
A+
louis
violent_ken Messages postés 1812 Date d'inscription mardi 31 mai 2005 Statut Membre Dernière intervention 26 octobre 2010 2
14 avril 2007 à 01:35
Bonsoir, alors tout d'abord je confirme que "a divise b" s'écrit bien "a|b"^^


Pour le coup du zéro, faisons par étape :

"chaque entier est un diviseur de 0" (c'est une propriété)
<==>
"chaque entier divise 0"
<==>
"0 est divisible par chaque (tous les) entiers"
<==>
"0 est un multiple de chaque (tous les) entiers"


Il ne me semble pas m'être trompé ?

@+
chaibat05 Messages postés 1883 Date d'inscription samedi 1 avril 2006 Statut Membre Dernière intervention 20 novembre 2007 2
14 avril 2007 à 01:04
Bonsoir Ken,

je veux bien que tu expliques le multiple par le diviseur, mais
si n divise 0 en xparties alors xparties=0 car pour arriver à 0
on multiplie n par 0.
o/n=0=>0=n*0 =>n=0/0 (division impossible)

D' ailleurs c' est bizarre ton truc de :"si a divise b (noté a|b),
Donc si n|0" .
Tu ne confonderais pas par hasard :-)
Moi je dirai si a divise b (noté b|a),
violent_ken Messages postés 1812 Date d'inscription mardi 31 mai 2005 Statut Membre Dernière intervention 26 octobre 2010 2
14 avril 2007 à 00:23
"Donnes moi un exemple ou 0 serait le mulitiple de quelque chose."

> si j'applique la définition d'un nombre diviseur :
prop : "chaque entier est un diviseur de 0".
Or si a divise b (noté a|b), alors b est un multiple de a.
Donc si n|0, 0 est donc un multiple de tout entier.
ar conséquent, nous avons la propriété "Zéro est un multiple de tout entier".


Et puis : 0!=0^0=1... Il a parfois des conventions étranges avec le nombre zéro ;)
@+
chaibat05 Messages postés 1883 Date d'inscription samedi 1 avril 2006 Statut Membre Dernière intervention 20 novembre 2007 2
14 avril 2007 à 00:20
Bonsoir,
Bonsoir us,
Incohérences, cher ami...incohérences !

je commence par le bas

>nb1 0 Then IsMultiple True
Donnes moi un exemple ou 0 serait le mulitiple de quelque chose.
A moins que pour toi 0 c' est l' infini (dans les deux sens)
Tu peux multiplier un nb posisitif autant de fois que tu veux=>+infini
Tu peux multiplier un nb négatif autant de fois que tu veux=>-infini

De plus 0 n' est le multiple d' aucun nb.
rien*2 c' est deux fois rien..

0 n' est pas un multiple de 0
pas plus d' ailleur que 2 est un multiple de 2 ' c' est son egal)
ce qui explique :
If (M 0) Or (N 0) Then GoTo EEXIT

2)
>IsMultiple ((Int(nb1 / nb2) nb1 / nb2) And nb1 <> 0)
c' est nb1 qui doit être <>0 mais nb2 (division impossible)


-125 n' est pas un sous multiple de 25 , mais un multiple de -25
si tu pars de .125, tu vas vers .250, -375, -400..
si tu pars de -25 c' est -50, -75, -100 et enfin -125.
et le sous multiple de 25 c' est 5
D' ou la condition: ils doivent être du même sens

à suivre...
violent_ken Messages postés 1812 Date d'inscription mardi 31 mai 2005 Statut Membre Dernière intervention 26 octobre 2010 2
14 avril 2007 à 00:05
*quand je dis "entier", je veux parler de N comme de Z (entier relatif).
violent_ken Messages postés 1812 Date d'inscription mardi 31 mai 2005 Statut Membre Dernière intervention 26 octobre 2010 2
14 avril 2007 à 00:04
Salut, j'ai deux remarques :

- prop : "chaque entier est un diviseur de 0". Or si a divise b (noté a|b), alors b est un multiple de a. Donc si n|0, 0 est donc un multiple de tout entier. Par conséquent, nous avons la propriété "Zéro est un multiple de tout entier".

- prop : "a est un diviseur d'un entier n ssi a est entier et si il existe un entier b tel que ab=n". Or "a|b" <==> "b est un multiple de a", donc pourquoi étendre la définition de nombre mutliple aux réels puisque la définition de nombre diviseur ne s'applique qu'aux entiers ?

@+
us_30 Messages postés 2065 Date d'inscription lundi 11 avril 2005 Statut Membre Dernière intervention 14 mars 2016 10
13 avril 2007 à 23:49
Bonsoir à tous,

Ou là là ! Si tard... j'vais prendre un aspro... -:);

Bon, visiblement il faut déjà se mettre d'accord sur certains points. JE pense avoir donné pourtant une explication assez claire (peut-être pas suffisante) de ce que signifie être un Multiple...

Plus concrètement voici quelques exemples... Pour commencer, regardons que le cas de nb positifs :

. 125 est un multiple de 25 : car si j'additionne un certain nombre de fois 25 je retrouve 125 ! en l'occurence 25+25+25+25+25 5*25... bon, tout le monde est d'accord (normalement). C'est trivial et c'est la définition même... Néanmoins, c'est parce que on utilise la multiplication comme raccourcis de calcul, qu'on peut retourner l'égalité : 125 25*X , pour isoler X... et donc si X est un nombre entier, on sait alors qu'on est en présence d'un multiple... C'est le principe de mon code. NEANMOINS, l'emploi de la division engendre certaines restrictions d'utilisation dans des cas particuliers... notamment avec zéro.

. 125 n'est pas un multiple de 0 : car si j'additionne un certain nombre de fois 0 je reste à 0 ! prise de tête pour les totos... -:);

. 0 n'est pas un multiple d'un nombre B non nul : car si j'aditionne un certain nombre de fois B (non nul) je ne pourrais pas retrouver 0 ! (ce qui explique dans mon code nb1<>0)

. 0 est-il un multiple de 0 ? : c'est une question en relation avec la suivante :
. 25 est-il un multiple de 25 ? ... si oui, alors l'insertion juste au-dessus avec les zéros, doit aussi être Oui ! Or, si on utilise la division comme raccourcis de calcul, on vient à diviser par zéro ! et ça vaut pas la tête à toto...

Chaibat, donc ici je ne suis pas certain de ce que tu dis dans ton code :
" 'Constat1: aucun nombre n'est le multiple de zéro
'et zéro ne peut être le multiple d' aucun nombre <= surtout ceci !!! sauf zéro ?
If (M 0) Or (N 0) Then GoTo EEXIT"
car si M=0 et N=0, je suis tenté de penser que ce cas particulier est vrai ! Or, la ligne de code dit "(M = 0) Ou (N = 0)" donc comprend le cas particulier ou les deux sont nuls !

. 25 n'est pas un multiple de 125 ! car si j'additionne un certain nombre de fois 125 je ne suis pas prêt de retrouver 25 ! C'est la longue partie de Ping-Pong entre Rendfiel et Lermite... j'espère que ces explications apporteront un éclaircissement sur la défintion mathématique...

Maintenant, faire les calculs avec des décimaux ne pose aucun problème :
. 12.5 est un multiple de 2.5 ! par exemple...

Pour les nombres négatifs, rien nous empêche d'étendre la notion de multiple, mais en inversant le sens. Nommons alors "sous multiple" ces nombres. Exemple :

. -125 est un sous multiple de 25 : car si je soustrait un certain nombre de fois 25 je retrouve -125 !

Attention :
. -125 est un multiple de -25 : car si j'additionne un certain nombre de fois -25 je retrouve -125 ! puisque (-25)+(-25)+(-25)+(-25)+(-25)=-125 !

=

Bref, mon code n'aurait (d'après ce que j'évoque) encore deux derniers cas particuliers à prendre en compte, lorsque nb1=nb2=0 ! et nb2=0 ! ce qui donne :

=

Private Function IsMultiple(ByVal nb1 As Double, ByVal nb2 As Double) As Boolean
If nb2 = 0 Then
If nb1 0 Then IsMultiple True
Exit Function
Else
IsMultiple ((Int(nb1 / nb2) nb1 / nb2) And nb1 <> 0)
End If
End Function

=

Amicalement,
Us.
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
13 avril 2007 à 14:42
tu te méprend lermitte222...
je ne cherche a énerver personne, je cherches juste a attirer ton attention sur un point précis de ta fonction.

J'ai repris ton dernier exemple, en remplacant les TextBoxes par deux doubles :


Private Sub Form_Load()
Dim Rep As Integer
Dim A As Double
Dim B As Double
A = 5
B = 25

Rep = Multiple(A, B)
Select Case Rep
Case 0
MsgBox "Les valeurs 0 ne sont pas traitées"
Case 1
MsgBox A & " est un multiple de " & B
Case 2
MsgBox A & " est un sous-multiple de " & B
Case 3
MsgBox A & " n'est pas un multiple de " & B
Case 4
MsgBox A & " n'est pas un sous-multiple de " & B
End Select
End Sub

Function Multiple(n1 As Double, n2 As Double) As Integer
Dim R As Double, V As Double
Dim Test1 As Integer, test2 As Integer, e As Integer
'si les valeurs sont inversées
If n2 > n1 Then R n2: n2 n1: n1 = R: test2 = 1
On Error GoTo sortie 'si n1 et n2=0
R n1 / n2: V Round(R)
If (R Like V) Then Test1 1 Else Test1 3


Multiple = Test1 + test2
sortie:
End Function


on obtient : 25 est sous multiple de 5
ce qui n'est pas le cas ! (c'est un MULTIPLE de 5...)
chaibat05 Messages postés 1883 Date d'inscription samedi 1 avril 2006 Statut Membre Dernière intervention 20 novembre 2007 2
13 avril 2007 à 14:19
Bon beh,
bien que personne n' a fait de commentaire sur mon code,
je suis ravi de constater qu' on s' est rendu compte que
"faire mieux n' est pas névéssairement faire plus court",
puisque tout le monde s' accorde à dire qu' une étude de cas
s' impose.Et que ceux qui ont commencé par "Pourquoi faire
compliqué quand on peut faire plus simple..." commencent
à en douter ...
cs_lermite222 Messages postés 492 Date d'inscription jeudi 5 avril 2007 Statut Membre Dernière intervention 2 juillet 2012 4
13 avril 2007 à 14:17
Grrrrrrrrrrr (quand est-ce que le traitement de texte avec tous les petit bonhommes serra disponible partout) j'en met au moins 4 rouge
Il faut bien qu'à un certain moment l'ont reconnaisse que l'ont est a bout d'argument.
de plus je dirait
qu'importe le vin, pourvu que l'ont aies l'ivresse
ou
qui veut la fin met les moyens
si tes propos avait pour but de me faire râler, tu a réussi.
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
13 avril 2007 à 13:53
je faisais plutot reference à :

Function Multiple( BYVAL n1 As Double, BYVAL n2 As Double) As Integer
cs_lermite222 Messages postés 492 Date d'inscription jeudi 5 avril 2007 Statut Membre Dernière intervention 2 juillet 2012 4
13 avril 2007 à 13:51
sic:
<j'ignore si c'est se tromper dans la saisie... je me disais que la fonction permet de savoir si le nombre passé en premier parametre est divisible par le deuxieme...>

Mais au départ, la demande faite par us_30 était justement cela.
ont s'est un peu égarer dans le feu de la discution,
pas grave (hi)
louis
cs_lermite222 Messages postés 492 Date d'inscription jeudi 5 avril 2007 Statut Membre Dernière intervention 2 juillet 2012 4
13 avril 2007 à 13:43
okay rendfield, je crois que j'ai enfin compris ta douleur, vois ce petit bout de code rectifié et dit-moi ce que tu en pense

Private Sub Command2_Click()
Dim Rep As Integer
Rep = Multiple(Val(Text1.Text), Val(Text2.Text))
Select Case Rep
Case 0
MsgBox "Les valeurs 0 ne sont pas traitées"
Case 1
MsgBox Text1.Text & " est un multiple de " & Text2.Text
Case 2
MsgBox Text1.Text & " est un sous-multiple de " & Text2.Text
Case 3
MsgBox Text1.Text & " n'est pas un multiple de " & Text2.Text
Case 4
MsgBox Text1.Text & " n'est pas un sous-multiple de " & Text2.Text
End Select
End Sub
Function Multiple(n1 As Double, n2 As Double) As Integer
Dim R As Double, V As Double
Dim Test1 As Integer, test2 As Integer, e As Integer
'si les valeurs sont inversées
If n2 > n1 Then R n2: n2 n1: n1 = R: test2 = 1
On Error GoTo sortie 'si n1 et n2=0
R n1 / n2: V Round(R)
If (R Like V) Then Test1 1 Else Test1 3


Multiple = Test1 + test2
sortie:
End Function

Tu doit bien convenir qu'il est impératif de retourner les valeurs pour éviter les nombres négatif qui ne pourraient êtres traités dans le cadre de cette fonction.
Mais cette fois j'en tient compte..
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
13 avril 2007 à 12:59
mauvaise foi, non, pas mon genre... et je n'ai rien a y gagner, je ne fais que partager mes connaissances, mes impressions... n'est-ce pas la raison d'être de CodeS-SourceS ?

comme je l'ai dit, ma remarque est valable,
"a moins que le but de la fonction ne soit que 'est-ce que l'un des nombres est divisible par l'autre...'"

ce qui est, tu me le confirmes là, bien le cas.

j'ignore si c'est se tromper dans la saisie... je me disais que la fonction permet de savoir si le nombre passé en premier parametre est divisible par le deuxieme...


Non, le point qui me dérange (bis) c'est le passage ByRef de tes arguments...
tu inverses dans ta fonction (sous condition, ok) les parametres. le probleme est qu'il s'inversent du coup dans la fonction appelante...
on peut dire que le numérateur sera alors toujours placé en n1 et le dénominateur en n2...
disons que cela ressemble plus a un effet de bord non désiré qu'a une reelle fonctionnalité de la fonction.
cs_lermite222 Messages postés 492 Date d'inscription jeudi 5 avril 2007 Statut Membre Dernière intervention 2 juillet 2012 4
13 avril 2007 à 11:56
c'est vraiment de la mauvaise foi...
bien sur que cela renvoi true puisqu'il sont inversés si tu te TROMPE DANS LA SAISIE car en effet, tu doit rentrer le plus grand chiffre dans n1 et le plus petit dans n2
si, par hasard tu veux que cela renvoi faux, supprime la ligne d'inversion.!!
et pour être plus clair encore, au dessus de Text1 tu met un label avec "Entrez le plus grand nombre" et un label2 au dessus de text2 "entrez le plus petit nombre"
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
13 avril 2007 à 11:50
reste un cast implicite a réaliser... Like travaille à partir de chaine de caractères
cs_lermite222 Messages postés 492 Date d'inscription jeudi 5 avril 2007 Statut Membre Dernière intervention 2 juillet 2012 4
13 avril 2007 à 11:43
j'oublie encore ceci,
like : Compare une expression chaîne avec un modèle dans une expression SQL. D'accord ?
Mais dans VB6
Le comportement de l'opérateur Like dépend de l'instruction Option Compare. Par défaut, la méthode de comparaison de chaînes de chaquemodule est Option Compare Binary.

une chaine ou un chiffre, n'est-ce pas toujours du binaire ?
la preuve c'est que la fonction... fonctionne
louis
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
13 avril 2007 à 11:27
concernant quel point de ma remarque ? le fait que tu inverses les variables (ce qui n'est pas souhaitable), ou sur le fait que Multiple(3,12) renvoie True ?

euh... c'est bien ce que j'ai fait !

? Multiple(3,12)
Vrai

c'est en debug, ça, dans la fenêtre d'execution (Ctrl+G)...
cs_lermite222 Messages postés 492 Date d'inscription jeudi 5 avril 2007 Statut Membre Dernière intervention 2 juillet 2012 4
13 avril 2007 à 11:19
réponse à rendfield

Fait un copier/coler de la fonction et teste la en debug!
après ont en rediscutera
louis
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
13 avril 2007 à 11:09
juste ce qui me dérange, c'est :

? Multiple(3,12)
Vrai

3 n'est pas un divisible par 12...


a moins que le but de la fonction ne soit que 'est-ce que l'un des nombres est divisible par l'autre...'

reste ce probleme de Byref ^^ :
Dim A As Double
Dim B As Double
A = 3
B = 12

MsgBox "Avant :" & vbNewLine & _
"A = " & A & vbNewLine & _
"B = " & B

If Multiple(A, B) Then
'...
End If

MsgBox "Apres :" & vbNewLine & _
"A = " & A & vbNewLine & _
"B = " & B

donne :
Avant:
A = 3
B = 12

Apres :
A = 12
B = 3

tu as modifié les variables d'entrée...
cs_lermite222 Messages postés 492 Date d'inscription jeudi 5 avril 2007 Statut Membre Dernière intervention 2 juillet 2012 4
13 avril 2007 à 10:44
Renfield,
en te relisant, je croit que tu a mal interprèté la ligne
<Testé dans tout les sens même avec des décimales, mais pas en négatif! ex 12 et 0 retour faux , 25 et 25 retour vrai>
Je n'ai pa voulu dire une division négative 22/44 ce qui bien sur se planterait mais -22/-44
Est-ce que j'ai répondu à toute tes questions ?
cordialement
louis
cs_lermite222 Messages postés 492 Date d'inscription jeudi 5 avril 2007 Statut Membre Dernière intervention 2 juillet 2012 4
13 avril 2007 à 10:36
bonjour,
salut rendfiel, je crois que tu n'à pas bien interprété l'éventuelle invertion, il y à un IF justement pour éviter cela, si l'ont envoi le diviseur plus grand que le dividende ont l'inverse, sinon non.Quand a ralentir, Hummm... peut être bien de 0,000000000001 seconde ?
Est-tu satisfait ?
Salus Sechaud, mais c'est bien pour cela que l'ont est là, c'est pour améliorer.
cordialement
louis
Sechaud Messages postés 288 Date d'inscription jeudi 28 octobre 2004 Statut Membre Dernière intervention 3 janvier 2017
13 avril 2007 à 10:09
LERMITE222 il va bien ton code.
J'ai bidouillé le Command1 pour corriger
Private Sub Command1_Click()
Dim Rep As Boolean
Rep = Multiple(Text1.Text, Text2.Text)
If Rep = False Then MsgBox "N2 et N1 ne sont pas des multiples!": Exit Sub

If Rep = True And Val(Text1.Text) < Val(Text2.Text) Then
Label3.Caption = "N2 est multiple de N1"
Label4.Caption = "Multiplicateur: " & Val(Text2.Text) / Val(Text1.Text)
End If
If Rep = True And Val(Text1.Text) > Val(Text2.Text) Then
Label3.Caption = "N1 est multiple de N2"
Label4.Caption = "Multiplicateur: " & Val(Text1.Text) / Val(Text2.Text)
End If
End Sub
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
13 avril 2007 à 09:06
remarque simple :

Dim A As double
Dim B As Double

A = 25
B = 100
If Multiple (A, B) Then
'# A et B ont été inversés (a cause du ByRef dans le passage de tes parametres)

étrange, ton Like... tu forces un cast de tes double en String, ce qui risque de ralentir... :/

ce qui me dérange encore plus, c'est l'inversion des valeurs en entrée... je ne comprend pas le pourquoi de la chose, qui fausse le résultat.

est-ce que 3 est divisible par 12 ?
tu inverses, tu testes donc 12/3 u tombes sur 4, tu renvoies VRAI.

3 serait donc divisible par 12 ???
cs_lermite222 Messages postés 492 Date d'inscription jeudi 5 avril 2007 Statut Membre Dernière intervention 2 juillet 2012 4
13 avril 2007 à 05:49
bonjour à tous,
je me suis demandé pourquoi faire si compliquer alors que ...
n'empèche, j'ai transpiré pour y arrivé
Testé dans tout les sens même avec des décimales, mais pas en négatif! ex 12 et 0 retour faux , 25 et 25 retour vrai
369327,72 et 156,23 retour vrai
le problème en VB était d'enlever la partie décimale sans la modifié (pas d'arrondi)
j'ai constaté que R=6223 et int(R)=6222 ???
j'ai ensuite essayé avec round c'était impecable
mais.. R=6223 round(R)=6223 ensuite
if R=round(R) then et bien je vous le donne en mille, retourne faux ???
alors voilà ce que j'ai pondu

Private Sub Command1_Click()
MsgBox Multiple(Text1.Text, Text2.Text)'rem attention au virgules ou points (celà dépand des options wondows)
End Sub

Function Multiple(n1 As Double, n2 As Double) As Boolean
Dim R As Double, V As Double
'si les valeurs sont inversées
If n2 > n1 Then R n2: n2 n1: n1 = R
On Error Resume Next 'si n1 et n2=0
R n1 / n2: V Round(R)
Multiple = (R Like V)
End Function
pouvez y aller, cette fois je crois pas que je me suis trompé
Mais si c'est le cas, merci de vos remarques.

cordialement
louis
chaibat05 Messages postés 1883 Date d'inscription samedi 1 avril 2006 Statut Membre Dernière intervention 20 novembre 2007 2
13 avril 2007 à 00:25
Bonsoir tout le monde,
j' ai déjà testé ton système : Additionner jusqu'à..."
ou "soustraire jusqu' à..." avec la récursivité.
Seul problème : dépassement de capacité lorsque
l' écart est grand.

En tout cas voici ce que j' ai , et vu ce problème de capacité
j' ai renoncé à le poster.Mais puisque l' occasion se présente....
A vous d' en juger...

Public Function IsMultiple(M As Double, N As Double) As Double
Static i As Integer
'les tests avant Traitement ne seront éxécutés qu' une fois
If i > 0 Then GoTo Traitement
i = i + 1

'CES TESTS NE SONT PAS Là POUR ADAPTER LA FONCTION,
'MAIS SE SONT DES CONSTATS LOGIQUES...

'
'Constat1: aucun nombre n'est le multiple de zéro
'et zéro ne peut être le multiple d' aucun nombre
If (M 0) Or (N 0) Then GoTo EEXIT


'Constat2: M et N doivent être du même signe, non égaux et :
'1° si tous deux positifs => M doit être strictement supérieur à N : logique
If (M > 0) And (N > 0) And (N >= M) Then GoTo EEXIT
'2° si tous deux négatifs => M doit être strictement inférieur à N : logique
If (M < 0) And (N < 0) And (N <= M) Then GoTo EEXIT

'...
Traitement:
'M étant à chaque fois amputé de N,
'soit on arrive à zéro soit en dessous
'Dans les deux cas on s' arrête
If M < N Then
IsMultiple = M
Else
'il y' a encore quelque chose à soustraire
IsMultiple = IsMultiple - IsMultiple(M - N, N)
End If

Exit Function

EEXIT:
IsMultiple = -1
End Function

'test

Msgbox IsMultiple( nb1,nb2)

A++
us_30 Messages postés 2065 Date d'inscription lundi 11 avril 2005 Statut Membre Dernière intervention 14 mars 2016 10
12 avril 2007 à 22:45
Bonsoir à tous,

Ouppsss, il y en a un qui a été écorné au passage... Pour essayer de répondre aux remarques, déjà ma remarque concernant l'emploi de MOD... MOD ne fonctionne pas dans la plage des DOUBLE, pour preuve ce petit test :

Sub test()
a = 2147483647 ' + 1
Debug.Print a Mod 3
End Sub

2147483647 étant la limite possitive d'un long. Si vous faites +1, il y aura un bug : dépassant de capacité sur la ligne de MOD... ceci réponds à CHAIBAT. Pour être avec une syntaxe correcte, il faudrait dans Function déclarer les variables en LONG... Ces remarques font écho à VIOLENT_KEN. En effet, tout comme MOD, "" est aussi valable que dans la plage d'un LONG. Pour preuve :

Sub test()
a = 2147483647 ' + 1
Debug.Print a \ 3
End Sub

BruNews, je pense que ta remarque sur les problèmes n'est pas fondé ici. JE suis d'accord qu'il faut se méfier des problèmes d'arrondis, mais jusqu'à maintenant j'ai rencontré ce problème uniquement lorsqu'on calcul une succession d'expression... D'ailleurs, le pire que j'ai rencontré, c'est pour le calcul de la dérivé numériquement... où là, on doit se contenter d'une précision de seulement 7 chiffres avec des DOUBLE (calcul sur 16 chiffres)... Bref, je reviens à mon mouton INT... INT extrait uniquement la partie entière. Pour mettre en défaut le couple infernal INT(A/B)=A/B il faudrait en réalité que A/B donne un résultat dont la partie décimale soit inférieur à 1E-17. OR, A/B<1E-17 siginifie que B>A*1E+17 donc que B dépasse la plage des DOUBLE en notation normale (au delà en passera en notation scientifique automatique, qui engendre souvent (cette fois) les arrondis indésirables) ... Ta proposition d'utiliser la multiplication n'apportera que peut davantage (voir aucun, me semble-t-il)...

IL reste deux questions de mathématique : ABS et Zéro...

Que doit-on comprendre quand on dit que 125 est multiple de 25 ? Tout simplement qu'en additionnant un nb entier de fois 25 on retrouvera 125... cela suppose qu'on parte de 25... Donc Ismultiple(0,B) doit toujours renvoyer FAUX, dans le cas où l'on démarre de B non nul. ET si... B=0 ! en additionnant un nb entier de fois 0 on retrouvera 0... et oui ! c'est paradoxale ! car comme on test par division, on n'a pas le droit diviser par zéro ! alors quoi faire dans ce cas ?
Néanmoins, pour tenir compte du cas Ismultiple(0,B)=faux, il suffit de compléter très simplement la fonction proposée avec :

IsMultiple (Int(nb1 / nb2) nb1 / nb2) and nb1<>0

Pour les nb négatifs, on ne parlerait plus de multiple au sens propre du terme... mais on peut étendre la notion de multiple, en son inverse... Ainsi dire que -125 est un "sous-multiple" de 25 est vrai, signifira la même chose que ci-dessus, sauf qu'on soustrait au lieu d'additionner... La fonction proposée ne pose donc pas de problème particulier sur ce point...

Amicalement,
Us.

PS : MORTALINO => Quid du tuto ?
violent_ken Messages postés 1812 Date d'inscription mardi 31 mai 2005 Statut Membre Dernière intervention 26 octobre 2010 2
10 avril 2007 à 10:27
Salut, tant qu'à faire concis, autant le faire en plein !


Public Function IsMultiple(ByVal nb1 As Double, ByVal nb2 As Double) As Boolean
IsMultiple nb1 \ nb2 nb1 / nb2
End Function


@+
chaibat05 Messages postés 1883 Date d'inscription samedi 1 avril 2006 Statut Membre Dernière intervention 20 novembre 2007 2
10 avril 2007 à 01:24
Savament savant...mais on préfère rester sur le plancher des vaches...!

Merci quand même de nous avoir rendu visite...:-)
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
10 avril 2007 à 01:09
Un oeil ici si vous voulez voir ce qui est codé dans un Double:
FLOAT EN HEXA (WIN32, ASM)
http://www.cppfrance.com/code.aspx?ID=41170
chaibat05 Messages postés 1883 Date d'inscription samedi 1 avril 2006 Statut Membre Dernière intervention 20 novembre 2007 2
10 avril 2007 à 01:08
quand même...c' est plus sympa avec des tartes qu' avec patates !
mortalino Messages postés 6786 Date d'inscription vendredi 16 décembre 2005 Statut Membre Dernière intervention 21 décembre 2011 18
10 avril 2007 à 01:05
Bonsoir Chaibat05,

t'inquiète, dans des aventures comme celle-ci, on s'en prends toujours une, mais au final, on en sors plus enrichi qu'avant.
En tout cas, je ne regrette pas de m'en prendre plein la figure :D

++
chaibat05 Messages postés 1883 Date d'inscription samedi 1 avril 2006 Statut Membre Dernière intervention 20 novembre 2007 2
10 avril 2007 à 00:59
Bonsoir mortalino (au grand coeur)

tu sais quoi ...c' est en voulant défendre to code que je me suis lancer
dans cette aventure...
T' inquiètes on trouvera bien, même avec notre niveau "déplorable ...:-)"
mortalino Messages postés 6786 Date d'inscription vendredi 16 décembre 2005 Statut Membre Dernière intervention 21 décembre 2011 18
10 avril 2007 à 00:54
Merci pour ta rime, elle à la privilège de me remonter le moral ;)

Ayant un niveau scolaire déplorable, j'avoue que les calculs mathématiques n'est pas forcémment mon fort, mais j'ai fait comme j'ai pu, et ça fonctionne pour mes besoins.

Je sais, BruNews, que tu es à la recherche de performance et de perfection, et je suis absolument d'accord avec toi, mais il me faudra encore du temps. Et les comparaisons / codages binaires, même si j'essaie d'apprendre, c'est pas forcémment évident sans connaitre les bases.
Sinon, vous me connaissez, je suis pas rancunier (encore heureux) et j'apprends quand même de lire ces codes (et comms).

++ ;)
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
10 avril 2007 à 00:46
et puis à bien y réfléchir, il y a une telle imprécision (by design) dans le codage binaire des Double que "If (t * nb2) = nb1 Then" a bien souvent des chances de ne jamais se vérifier.
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
10 avril 2007 à 00:40
mortalino > le prends pas mal mais ton snippet ne vaut pas tripette (chouette ça rime...). On ne convertit pas du nbr en chaine pour vérifier des calculs alors que les processeurs sont justement faits pour ces calculs, c'est du contre productif absolu.
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
10 avril 2007 à 00:37
C'est même carrément un vieux bug de VB d'accepter de compiler MOD avec des doubles, il ne faut jamais l'employer. Ni la FPU ni la SSE n'ont de calculs modulo intégrés, c'est donc un non sens total. Il n'y a que le CPU qui sort le modulo d'une division sur des entiers.
Faut tout de même se méfier des probs d'arrondis et de conversion de Int() il me semble.
t = nb1 / nb2
If (t * nb2) nb1 Then IsMultiple True
me semble la seule méthode assurée.
mortalino Messages postés 6786 Date d'inscription vendredi 16 décembre 2005 Statut Membre Dernière intervention 21 décembre 2011 18
10 avril 2007 à 00:35
Merci pour mon snippet ^^

Je renvoi VRAI, certe, mais toi aussi..
Pis mon ByRef me permet d'avoir le retour de valeur.

++
chaibat05 Messages postés 1883 Date d'inscription samedi 1 avril 2006 Statut Membre Dernière intervention 20 novembre 2007 2
10 avril 2007 à 00:20
Pour le Abs

IsMultiple(-127,25) renvoie -2

-2 < 0 or on teste sur Case Is > 0
chaibat05 Messages postés 1883 Date d'inscription samedi 1 avril 2006 Statut Membre Dernière intervention 20 novembre 2007 2
10 avril 2007 à 00:13
bien sûr, j' ai raté la déclaration
J' étais tellement sur le corps de la fonction que j' ai copié comme telle.

Private Function IsMultiple(ByVal nb1 As Double, ByVal nb2 As Double) As Double

Dim IReturn As Double


Sur la question Mod, j' étudierais la question...

A+
us_30 Messages postés 2065 Date d'inscription lundi 11 avril 2005 Statut Membre Dernière intervention 14 mars 2016 10
10 avril 2007 à 00:04
les ABS ne sont utiles, enfin à voir...

=

Le sens adopté est porteur de confusion : Par exemple l'emploi naturel :
Sub test()
Debug.Print IsMultiple(125, 25)
End Sub
renvoi Faux (on préféra obtenir Vrai !)

=

L'emploi de MOD n'est pas adapté à toute la plage des DOUBLE ! mais que pour la plage des LONG...

=

Comme quoi...

Amicalement,
Us.
chaibat05 Messages postés 1883 Date d'inscription samedi 1 avril 2006 Statut Membre Dernière intervention 20 novembre 2007 2
9 avril 2007 à 23:40
avec moins de blabla !

Private Function IsMultiple(ByVal nb1 As Double, ByVal nb2 As Double) As Boolean
If nb2=0 Then
IsMultiple=-1
Else
IsMultiple = Abs(nb1 Mod nb2)
End If
End Function

'..................................................

Sub ALLEZ_Y()
Dim iReturn As integer
IReturn=IsMultiple(x,y)
Select Case IReturn
Case -1 : MsgBox "Division impossible !"
Case 0 : MsgBox "C' est bien un multiple !"
Case Is > 0 : MsgBox "C'e n est en aucune façon un multiple ."
End Select
End Sub

'le Abs c' est pour les valeurs négatives car on teste sur > 0
'au cas ou nb2 > nb1 ==> IsMultiple > 0
us_30 Messages postés 2065 Date d'inscription lundi 11 avril 2005 Statut Membre Dernière intervention 14 mars 2016 10
9 avril 2007 à 23:31
Dilemme mathématique ! Est-ce qu'un nombre peut-être un multiple de Zéro ?
C'est en fait, une question incohérente, voir une abération de raisonnement !
... donc il y aura un bug ! et tant mieux !... il suffira d'utiliser, par eemple, ON ERROR RESUME NEXT, ou de tester que le nombre n'est pas nul donc...


C'est tout de même mieux que :

http://www.codyx.org/snippet_savoir-si-nombre-est-multiple-autre_362.aspx
qui renvoi VRAI !

Mieux que :
http://www.vbfrance.com/codes/TROUVER-SI-NOMBRE-EST-MULTIPLE-AUTRE_1027.aspx
qui testé avec :
Debug.Print Calculer(5, 0)
renvoi la phrase : "Le nombre 0 est un multiple du nombre 5"
A oui ! 0 fois un nombre =5 ?
IL est vrai qu'une précaution pour l'inverse a été prise, ainsi
Debug.Print Calculer(0, 5)
renvoi rien... et même pas de message d'erreur donc ! Si cela doit rentrer dans un programme plus important, ne pas savoir qu'on n'a essayé de diviser par zéro, c'est source d'erreur bien caché...

=

toi qui crois tout savoir ... => Qui dit cela ?
que fais tu de la division par zéro ? => RIEN, et c'est tant mieux !

=

Amicalement, mais un peu rebelle ce soir...-:);
Us.
chaibat05 Messages postés 1883 Date d'inscription samedi 1 avril 2006 Statut Membre Dernière intervention 20 novembre 2007 2
9 avril 2007 à 22:56
Salut
,
toi qui crois tout savoir ...
que fais tu de la division par zéro ?
Rejoignez-nous