Bienvenue visiteur (Inscription |  Connexion)
Qui est en ligne ?
Il y a : 14 utilisateurs en ligne, consultez le détail
Auteur Message
ovni
#0 Message posté le : 14-04-2007 à 13:39:42


Scarabée


Forum : Inscrit
Association :
Arrivé(e) le : 16-01-2003
Nombre de messages : 242
Je deviens fou! j'aimerai savoir si la racine d'un nombre est un nombre entier. je fais donc :
$nb = 4;
if (is_int(sqrt($nb)))
{
echo 'Nb entier';
}

Mais non ca ne marche pas! Pourtant sqrt($nb) renvoi 2 et si je fais if (is_int(2)) ... la ca marche. Je n'y comprends rien

autrement dit quelqu'un peut m'expliquer pourquoi
$string = 256;
if(is_int(sqrt($string)))
echo 'true';
else
echo 'false';
affiche false???

--Message édité par ovni le 14-04-2007 à 14:01:50--


-------------------------------------
jblecanard
#1 Message posté le : 14-04-2007 à 15:17:11


Jedi


Forum : Modérateur
Association : Membre fondateur
Arrivé(e) le : 08-01-2005
Nombre de messages : 4030
Salut

celà est dû au fait que le nombre renvoyé est un float, même s'il est entier.

Pour faire ton test, je te conseille plutôt de calculer la racine, de prendre sa partie entière, puis de calculer le carré de cette partie entière. Si le résultat est le même que le nombre de départ, celà signifie que tu as bien une racine entière.

-------------------------------------
C'est une situation bien inconfortable que d'être assez sensible à la bêtise pour en souffrir et trop intelligent pour s'en indigner. - Gustave Thibon -
ovni
#2 Message posté le : 14-04-2007 à 16:01:43


Scarabée


Forum : Inscrit
Association :
Arrivé(e) le : 16-01-2003
Nombre de messages : 242
ok merci c'est parfait ca marche...
Et juste en passant si qqn connait une fonction php qui compte le nombre de caractère différent dans une chaine :
345 renverrai 3
112 renverrai 2
333 renverrai 1 etc...

-------------------------------------
tamiel
#3 Message posté le : 17-04-2007 à 08:23:20


Hobbit


Forum : Inscrit
Association :
Arrivé(e) le : 17-10-2003
Nombre de messages : 1067
strlen pour le nombre de caractères (comme en C)

et pour savoir si une division renvoie un nombre entier ou pas on peut utiliser modulo :

if( ( DIVIDENDE % DIVISEUR ) == 0 )
{
return true;
}
else
{
return false;
}



-------------------------------------
If you don't know, ask manpage !
jblecanard
#4 Message posté le : 17-04-2007 à 13:18:25


Jedi


Forum : Modérateur
Association : Membre fondateur
Arrivé(e) le : 08-01-2005
Nombre de messages : 4030
tamiel a écrit :


strlen pour le nombre de caractères (comme en C)

et pour savoir si une division renvoie un nombre entier ou pas on peut utiliser modulo :

if( ( DIVIDENDE % DIVISEUR ) == 0 )
{
return true;
}
else
{
return false;
}



Je crains tamiel, que tu n'ais lu un peu vite. Il s'agit d'une racine carrée et pas d'une division.
Quant aux nombre de caractères, ovni cherche le nombre de caractères différents.
ovni, vu que c'est un besoin peu courant, j'ai peur que tu ne doives coder toi même cette fonction.

-------------------------------------
C'est une situation bien inconfortable que d'être assez sensible à la bêtise pour en souffrir et trop intelligent pour s'en indigner. - Gustave Thibon -
tamiel
#5 Message posté le : 17-04-2007 à 14:25:26


Hobbit


Forum : Inscrit
Association :
Arrivé(e) le : 17-10-2003
Nombre de messages : 1067
Bon ok je sors

-------------------------------------
If you don't know, ask manpage !
ovni
#6 Message posté le : 18-04-2007 à 20:11:11


Scarabée


Forum : Inscrit
Association :
Arrivé(e) le : 16-01-2003
Nombre de messages : 242
jblecanard a écrit :


ovni, vu que c'est un besoin peu courant, j'ai peur que tu ne doives coder toi même cette fonction.


ok oui j'ai pu faire ca assez simplement :
	$nb = strlen($chaine); //nb de chiffre de la chaine

	$num[$n] = 0; 

		for ($n=0; $n<10; $n++) // boucle pr chaque chiffre (de 0 a 9)

		{

			for ($i=0; $i!=$nb; $i++) //boucle pr chaque chiffre de la chaine

			{

				if ($chaine{$i} == $n)

				{

					$num[$n] = 1;

				}

			}

		}

	$total = $num[0]+$num[1]+$num[2]+$num[3]+$num[4]+$num[5]+$num[6]+$num[7]+$num[8]+$num[9];


-------------------------------------
Azollyx
#7 Message posté le : 18-04-2007 à 21:35:14


Naboo


Forum : Modérateur
Association : Président
Arrivé(e) le : 09-04-2006
Nombre de messages : 2085
Si ta chaîne est un nombre et que tu veux savoir quels chiffres elle contient, tu dois pouvoir éviter le déca-parcours.
Regarde ça :
strlength=strlength(str);

for(int i=0; i<strlength; i++)

   num[$str{$i}] = 1;

for(int i=0; i<10; i++)

   total += num[$i];

tu devrais même pouvoir faire ça avec des booleans :
strlength=strlength(str);

for(int i=0; i<strlength; i++)

   estpresent[$str{$i}] = true;

for(int i=0; i<10; i++)

   if(estpresent[$i]) total++;


PS : ça fait longtemps que je n'ai pas fait de PHP.

--Message édité par Azollyx le 18-04-2007 à 21:38:12--


-------------------------------------
toto