tester si un chiffre est paire ou impaire - PHP - Programmation
Marsh Posté le 26-10-2005 à 12:27:46
DrWatson a écrit : Bonjour, |
variable%2
Marsh Posté le 26-10-2005 à 12:32:01
merci mais y'a moyen d'avoir la traduction stp ? google n'est pas mon ami sur ce coup.
Le % en php avec la valeur 2 équivaut à voir si le chiffre est divisble par 2 en restant entier et donc paire
Marsh Posté le 26-10-2005 à 12:33:06
un truc du genre
Code :
|
doit donc fonctionner ?
Marsh Posté le 26-10-2005 à 12:35:47
le modulo (% en php) te retourne le reste de la division (par 2 dans ton cas)
si tavariable%2 = 0 ==> tavariable est paire
Marsh Posté le 26-10-2005 à 12:37:08
Non, c'est l'inverse, % c'est l'opérateur modulo
a%b donne le reste de la division de a par b (sur les divisions d'entiers).
Donc n%2 avec n pair donne toujours "0", et n%2 avec n impair donne "1".
Donc
if(n%2) |
Marsh Posté le 26-10-2005 à 12:44:17
en tout cas c'est bien ce dont j'avais besoin merci bcp (en fait c'est pour alterner la couleur de fond de message un sur deux. Est ce que c'est comme ça que font les forums ? un message sur deux change de couleur, ça doit bien se baser sur ce genre de principe ...
Marsh Posté le 26-10-2005 à 12:45:25
Ca dépend, ça c'est la manière la plus propre de le faire, mais certains mettent en place un compteur et le modifient à chaque opération (genre un compteur oscillant entre 1 et -1, négativé à chaque tour de boucle)
Marsh Posté le 26-10-2005 à 12:53:55
DrWatson a écrit : en tout cas c'est bien ce dont j'avais besoin merci bcp (en fait c'est pour alterner la couleur de fond de message un sur deux. Est ce que c'est comme ça que font les forums ? un message sur deux change de couleur, ça doit bien se baser sur ce genre de principe ... |
tout à fait, et en faisant justement ta recherche sur le alterner 1 fois sur 2, je pense que tu tomber direct sur la solouce, déjà abordée sur ce forum
Marsh Posté le 27-10-2005 à 01:24:27
... Putain les autodidactes ils font comment à part avoir 5 neurones en plus ...
Google est ton ami si tu sais t'en servir
Marsh Posté le 08-11-2005 à 17:14:07
leflos5 a écrit : ... Putain les autodidactes ils font comment à part avoir 5 neurones en plus ... |
toi tu vas me sortir que tu n'as jamais rien demandé à personne et que tu es autodidacte dans tous les domaines vieux rabajoie va
Marsh Posté le 08-11-2005 à 20:37:45
DrWatson a écrit : toi tu vas me sortir que tu n'as jamais rien demandé à personne et que tu es autodidacte dans tous les domaines vieux rabajoie va |
Si mais je cherche toujours avant, je me suis toujours pris la tête pendant des heures tant que je comprennais pas ou que ça marchait pas
Donc avant de demander, c'est un problème de maths donc on cherche la solution mathématique avant de la modéliser et de mettre 3s à trouver que modulo en php comme beaucoup de langages c'est %...
La réaction était démesurée je l'accorde, je devais être fatigué
Marsh Posté le 09-11-2005 à 14:11:06
DrWatson a écrit : Bonjour, |
amusant
Code :
|
Marsh Posté le 09-11-2005 à 15:18:41
On peut faire encore pire :
Code :
|
Blague à part, la solution de zapan66 (ET binaire avec 00000001) me parait un petit poil plus efficace que le modulo 2.
Edit (ajout 2° condition arrêt boucle) suite à la pertinente ramrque de omega2
Marsh Posté le 09-11-2005 à 15:32:05
DjMerguez > Marche pas ton truc vu qu'il dire que c'est pas pair sauf si $nombre=2147483646
Le coup du ET binaire me semble le mieux en effet même si j'ai pas fait avec me rapellant jamais quel est l'opérateur qui fait ça.
Marsh Posté le 09-11-2005 à 15:45:37
DjMerguez a écrit : me parait un petit poil plus efficace que le modulo 2. |
En termes de perfs
J'dois dire que si t'en es à comparer les perfs de l'arithmétique booléenne par rapport au modulo, t'es pas censé faire du PHP hein
Marsh Posté le 09-11-2005 à 15:52:15
Hummm j'viens de penser à une autre technique pour trouver ca :
Code :
|
Marsh Posté le 09-11-2005 à 16:50:32
Bah non c'est pas nul, ca veut dire que plutôt que d'utiliser des choses toutes faites tu est capable de trouver une solution avec d'autres outils. Certains dirons que c'est pas "optimisé" mais bon pour ce que ca prend une division et une comparaison....
et puis t'en fait une fonction comme ca t'es tranquile! Genre :
Code :
|
Je sais je sais c'est complétement innutile...
Au fait, même quand on est autodidacte, on peut avoir les bonnes solutions. Mais il faut savoir être patient!
Marsh Posté le 09-11-2005 à 19:53:12
masklinn a écrit : J'dois dire que si t'en es à comparer les perfs de l'arithmétique booléenne par rapport au modulo, t'es pas censé faire du PHP hein |
Je suis bien d'accord que dans la plupart des cas c'est pas très rentable de passer du temps à optimiser du PHP, mais, dans ce cas, si le code sert par exemple à changer la couleur des TR d'une table qui a des milliers de lignes, ça vaut la peine de chercher à gratter un peu de charge processeur.
Marsh Posté le 09-11-2005 à 20:17:05
merci les gars pour le concours, si avec ça j'ai pas ce que je veux
donc pour vous la soluce de zapan reste la meilleure
Marsh Posté le 09-11-2005 à 22:22:44
dwogsi a écrit :
|
Tu te complique la vie !
Code :
|
et donc avec ma solution :
Code :
|
Marsh Posté le 09-11-2005 à 22:27:28
DrWatson a écrit : donc pour vous la soluce de zapan reste la meilleure |
c'est la meilleure pour zapan et DjMerguez ;
moi je prefère la solution que j'ai toujours utilisé :
Code :
|
Marsh Posté le 09-11-2005 à 22:31:17
dwogsi a écrit : Hummm j'viens de penser à une autre technique pour trouver ca :
|
Ouais enfin là on perd en visibilité et on tape des appels de fonctions pour rien (par rapport au modulo ou à l'arithmétique binaire), donc ça n'a vraiment aucun intérêt, que des inconvénients
Marsh Posté le 10-11-2005 à 03:06:08
masklinn a écrit : Ouais enfin là on perd en visibilité et on tape des appels de fonctions pour rien (par rapport au modulo ou à l'arithmétique binaire), donc ça n'a vraiment aucun intérêt, que des inconvénients |
JE pense plus que ce post a dévié pour dire que c'est simplement un problème mathématique qui n'a pas une solution unique en terme de résultat
Une preuve qu'il faut réfléchir mais que la solution n'est pas unique, la classe n'est pas toujours la même, l'efficacité non plus mais preuve est que tout le monde peut trouver un truc qui plus est marant juste en méditant 5 minutes
JE vois ça comme ça moi
Marsh Posté le 11-11-2005 à 18:18:48
si j'ai fais un topic ct pas pour me fabriquer une usine à gaz tu t'en doutes bien. Sachant qu'il existe un opérateur dédié à ça en partie, je suis bien content qu'on me l'ait appris / réappris
Marsh Posté le 11-11-2005 à 23:07:29
masklinn a écrit : Ca dépend, ça c'est la manière la plus propre de le faire, mais certains mettent en place un compteur et le modifient à chaque opération (genre un compteur oscillant entre 1 et -1, négativé à chaque tour de boucle) |
Ou alors $i=1-$i avec $i=0 ou 1 à l'initialisation. $i sera toujours à 1 ou 0.
Marsh Posté le 12-11-2005 à 14:14:52
Au fait, pour deux couleurs, personne n'a pensé à l'utilisation d'un booléen? if ($bool) {couleur1}else{couleur2}.
Aprés, pour passer d'une couleur à l'autre, il suffit de faire $bool = ! $bool;
Je me demande si c'est pas même plus rapide qu'une incrémentation suivit d'un ou booléen.
Marsh Posté le 12-11-2005 à 14:30:09
switch (IsTrue(variable%2)) {
case true: return true;
case false: return false;
default: return FileNotFound;
}
Les connaisseurs apprécieront
Marsh Posté le 12-11-2005 à 14:36:10
omega2 a écrit : Au fait, pour deux couleurs, personne n'a pensé à l'utilisation d'un booléen? if ($bool) {couleur1}else{couleur2}. |
Ouais, c'est ça que je fais quand je dois alterner entre deux états, perso.
Marsh Posté le 12-11-2005 à 14:39:14
Elmoricq a écrit : switch (IsTrue(variable%2)) { |
Code :
|
Marsh Posté le 12-11-2005 à 18:52:04
Ça part pas un peu en couil*** votre truc ?
On peut pas faire ça tout simplement ?
Code :
|
Paracetamol
Marsh Posté le 12-11-2005 à 20:58:50
Paracetamol a écrit : Ça part pas un peu en couil*** votre truc ? |
t'es pas un connaisseur c'est tout
Citation : On peut pas faire ça tout simplement ?
|
Comme suggéré plus haut par zapan, mieux vaut passer par le booléen: n&1 ? "impair" : "pair"
C'est tout aussi lisible et (en python) c'est 20% plus rapide.
(sans compter que ton machin est faut, soit tu utilises if soit tu utilises l'opérateur ternaire, mais pas les deux)à
Marsh Posté le 12-11-2005 à 21:21:46
Moi perso, je ferais :
$compteur=1;
for gningningnin
{
echo '<div class="macss'.$compteur.'">';
$compteur++; if ($compteur>2) {$compteur=1)
}
Marsh Posté le 12-11-2005 à 21:30:27
The-Shadow a écrit : Moi perso, je ferais : |
Code :
|
Marsh Posté le 13-11-2005 à 03:09:23
masklinn a écrit :
|
Yeah!!! It Suks !!!
Marsh Posté le 13-11-2005 à 12:40:13
Bonjour la lisibilité, mais pourquoi pas.
Marsh Posté le 30-03-2006 à 18:00:41
Reply
Marsh Posté le 26-10-2005 à 12:25:28
Bonjour,
Existe t il en php une fonction qui retourne si une variable numérique est paire ou impaire ?
---------------
.:: Feed-Back ::. Choisis un travail que tu aimes, et tu n'auras pas à travailler un seul jour de ta vie.