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

Eléphant du PHP | 88 Messages

28 mai 2007, 17:09

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...
Cordialement zaknaou

Modérateur PHPfrance
Modérateur PHPfrance | 6373 Messages

28 mai 2007, 18:22

Si tu indentais déjà ?

Mammouth du PHP | 1966 Messages

28 mai 2007, 18:31

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";}
?>
Spols
pour les fan de rubik's cube ou pour les curieux ==> le portail francophone du rubik's cube

zaknaou.
Invité n'ayant pas de compte PHPfrance

28 mai 2007, 20:54

Est-ce possible avec un nombre indéterminé de nombre à comparer du genre
$chiffre1
$chiffre2
$chiffre3
$chiffre4
... (indéterminé)
par rapport à
$chiffre_comparaison

Mammouth du PHP | 693 Messages

28 mai 2007, 21:08

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

Mammouth du PHP | 1966 Messages

29 mai 2007, 14:53

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
Spols
pour les fan de rubik's cube ou pour les curieux ==> le portail francophone du rubik's cube