Page 1 sur 1

Convertir un shéma mathématique en PHP...

Posté : 28 mai 2007, 17:09
par zaknaou
Bonjour...

Un amis à consacré quelques minutes pour m'aider à developper un petit script matématique qui permet de savoir lequels de ces deux chiffre est le plus prés de $c

$a = (un certain chiffre)
$b = (un certain chiffre)
$c = (un certain chiffre)

Le problème est que le script mathématique de mon amis n'est pas en php, et qu'il ne sais pas utiliser ce language...

Je voudrai donc le traduire mais ce n'est pas facile...

Voici l'original (de mon amis)...
si
$a = $b
{
"$c est aussi proche de $b que de $a"
}
sinon
{
si($1 = $a - $c)>0
sinon
{
si($2 = $b - $c)>0
{
si($2 < $1)
{
"$c est plus proche de $b"
}
sinon
{
"$c est plus proche de $a"
}
sinon
{
si(-$2<$1)
{
"$c est plus proche de $b"
}
sinon
{
"$c est plus proche de $a"
}
sinon
{
si($2 = $b - $c)>0
{
si($2 < -$1)
{
"$c est plus proche de $b"
}
sinon
{
"$c est plus proche de $a
}
sinon
{
si(-$2 < -$1)
{
"$c est plus proche de $b"
}
sinon
{
"$c est plus proche de $a"
}
}
}
}
}
}
Il ma dit qu'il falait revoir ça, car il y a peut être quelques erreurs...

Et voici ma traduction vers php un peu raté...
<?php

$a = "254";
$b = "120";
$c = "2000";

if ($a = $b)
{echo "$c est aussi proche de $b que de $a";}
else
{
$un = $a - $c;
if( $un > 0)
// else
{
$deux = $b - $c;
if( $deux > 0 )
{
if($deux < $un)
{echo "$c est plus proche de $b";}
else
{echo "$c est plus proche de $a";}
// else mais pas 2 else dans un if
{
if(-$deux < $un)
{echo "$c est plus proche de $b";}
else
{echo "$c est plus proche de $a";}
// else mais pas 2 else dans un if
{
$deux = $b - $c;
if($deux > 0)
{
if($deux < -$un)
{echo "$c est plus proche de $b";}
else
{"$c est plus proche de $a}
else
{
if(-$deux < -$un)
{echo "$c est plus proche de $b";}
else
{echo "$c est plus proche de $a";}
}
}
}
}
}

?>
Quel serait votre traduction ??

Merci...

Posté : 28 mai 2007, 18:22
par ouckileou
Si tu indentais déjà ?

Posté : 28 mai 2007, 18:31
par Spols
voila ce que moi je ferais, je n'ai pas récuperé le schémas de ton amis, il y a selon moi plus simple comme ceci
<?php
$chiffre1 = 2100;
$chiffre2 = -652;

$chiffre_comparaison = 52;

$dif1 = abs($chiffre1 - $chiffre_comparaison);
$dif2 = abs($chiffre2 - $chiffre_comparaison);
if ($dif1 == $dif2)
{echo "$chiffre_comparaison est aussi proche de $chiffre1 que de $chiffre2";}
elseif ($dif1 < $dif2)
{echo "$chiffre_comparaison est plus proche de $chiffre1 que de $chiffre2";}
elseif ($dif1 > $dif2)
{echo "$chiffre_comparaison est plus proche de $chiffre2 que de $chiffre1";}
?>

Posté : 28 mai 2007, 20:54
par zaknaou.
Est-ce possible avec un nombre indéterminé de nombre à comparer du genre
$chiffre1
$chiffre2
$chiffre3
$chiffre4
... (indéterminé)
par rapport à
$chiffre_comparaison

Posté : 28 mai 2007, 21:08
par orgerix
Je dirais qu'il faut faire un truc de ce style
$chiffre_comparaison=
$chiffre1=
$chiffre2=
$chiffre3=
$chiffre4=
[...]
$compar["$chiffre1"]=abs($chiffre_comparaison-$chiffre1);
$compar["$chiffre2"]=abs($chiffre_comparaison-$chiffre2);
$compar["$chiffre3"]=abs($chiffre_comparaison-$chiffre3);
$compar["$chiffre4"]=abs($chiffre_comparaison-$chiffre4);
[...]
//trie le tableau en fonction de la différence
asort($compar);
//lit la premiere clé du tableau
$nombre = key($compar)
Cependant, je ne suis pas sur de la dernière ligne car je ne suis pas habitué à lire une seul donnée d'un tableau

Posté : 29 mai 2007, 14:53
par Spols
le problème c'est si il y a plusieurs chiffres aussi proche les uns que les autres

?php
$chiffres = array('12','184','1274','13274','1','37','1','64','134','1','16');
$chiffre_comparaison = 3;
comparaison($chiffres,$chiffre_comparaison);

function comparaison($array,$comp)
{
	$diff = abs($comp - $array[0]);
	echo"<pre>";var_dump($diff);echo"</pre>";
	foreach($array as $val)
	{
		$temp = abs($comp - $val);
		if ($diff > $temp)
		{$diff = $temp;$grds = $val;}
		elseif ($diff == $temp)
		{$grds .= " ".$val;}
	}
	$explode = (substr_count($grds,' ')) ? explode(' ',$grds) : $grds;
	if (is_array($explode))
	{
		$echo = "$comp est aussi proche de";
		foreach($explode as $val)
		{
			$echo .= " $val que de";
		}
		echo substr($echo,0,strlen($echo)-7);
	}
	else
	{
		echo "$comp est plus proche de $explode";
	}
	
}
?>
pas terrible pour le message, a voir ce que tu veux vraiment