Page 1 sur 1

[PHP5] Classe Poly2

Posté : 12 oct. 2005, 22:53
par Ouaibou
Bonsoir,

Etant donné qu'il y avait rien de mieux que le foot à la télé ce soir, op j'ai fait une p'tite classe PHP5 permettant de calculer un polynôme du second degrè. On sait jamais ça peut tjs être utile :D
<?php
/**
* Classe Poly2
* @author Laurent.P (Ouaibou)
* @version 1.0 - 13/10/2005
*/

class Poly2
{
    /**
     * Coefficients du polynome du second degre
     *
     * @var int
     * @var int
     * @var int
     */
	 
    public $a = null;
    public $b = null;
    public $c = null;
   
    /**
     * Discriminant du polynome du second degre
     *
     * @var int or double
     */
	 
    public $delta = null;

    /**
     * Constructeur de la classe Poly2
     *
     * @param coeficient de x²
     * @param coeficient de x
     * @param constante
     */
	 
    function __construct($a, $b, $c)
    {
        $this->a = $a;
        $this->b = $b;
        $this->c = $c;

        $this->delta = pow($this->b, 2) - (4 * $this->a * $this->c);
    }

    /**
     * Solution du polynome du second degre
	 * Si le discriminant vaut 0
	 * -b/2a
     *
     * @return int or double
     */
   
    private function racineX0()
    {
        return (-$this->b) / (2 * $this->a);
    }

    /**
     * Premiere solution du polynome du second degre
	 * Si le discriminant est strictement positif
     * -b+racine(delta)/2a
	 * 
     * @return int or double
     */
    
	private function racineX1()
    {
        return (-($this->b)+sqrt($this->delta)) / (2 * $this->a);
    }

    /**
     * Deuxieme solution du polynome du second degre
	 * Si le discriminant est strictement positif
     * -b-racine(delta)/2a
	 * 
     * @return int or double
     */
	 
    private function racineX2()
    {
        return (-$this->b-sqrt($this->delta)) / (2 * $this->a);
    }

    /**
     * Renvoie les solutions du polynome selon la valeur
	 * du discriminant
     *
     * @return String
     */
	 
    public function racine()
    {
        if($this->delta < 0)
        {
            return "Aucune solution Réelle !";
        }
        elseif($this->delta == 0)
        {
            $equation  = "Equation: ".$this->a."x²+".$this->b."x+".$this->c."<br />\n";
            $equation .= "--------------------------<br />\n";
            $equation .= "Delta=".$this->delta."<br />\n";
            $equation .= "X0 = ".$this->racineX0();
            
			return $equation;
        }
        else
        {
            $equation  = "Equation: ".$this->a."x²+".$this->b."x+".$this->c."<br />\n";
            $equation .= "--------------------------<br />\n";
            $equation .= "Delta = ". $this->delta."<br />";
            $equation .= "X1 = ". $this->racineX1()."<br />\n";
            $equation .= "X2 = ". $this->racineX2();
            
			return $equation;
        }
    }
}
?>


<?php
/**
* On instancifie la classe avec les paramètres par défauts
* On envoie le résultat
*/

$poly2 = new Poly2("-4", "1", "1");

echo $poly2->racine();
?>
Maj : P'tite mise à jour le 13/10/2005, merci à cyrano ;)

@+

Posté : 13 oct. 2005, 13:57
par pascaltje
on peut avoir une solution complexe si le discrimant est négatif? ;)

A+

Pascal

Posté : 13 oct. 2005, 15:18
par Ouaibou
:lol:

Ca doit être possible, seulement pour gérer i en php tel que i²=-1 et pouvoir calculer une racine négative je suis pas sur que PHP apprécie :D

Posté : 13 oct. 2005, 15:51
par rami
On devrait pouvoir s'en sortir avec une classe Complex du genre:
<?php
//nombre complexe de la forme a+ib
class Complex
{
    public $a;
    public $b;
   
   /**
   *  Constructeur
   *  @param a partie réelle
   *  @param b partie imaginaire
   **/
   public function __construct($a = null, $b = null)
  {
     $this->a = $a;
     $this->b = $b;
  }

  /**
  * Calcule la somme de l'objet courant avec l'objet y
  * @param y objet Complex à additionner
  * @return void
  **/
  public function somme(Complex $y)
  {

  }

  /**
  * Calcule la racine carrée du nombre complexe
  * @return String valeur de la racone carrée
  **/
  public function sqrt()
  {

  }
 ...
}

Posté : 15 oct. 2005, 13:29
par Vaedan
Trouvé sur phpclasses :
<?php

///////////////////////////////////////////////////////////////
// Reza Salehi
// zaalion @ yahoo.com
// free for non-commercial use.
///////////////////////////////////////////////////////////////

	class complex
		{
		function complex($first, $second)
			{
			$this->first['re']=$first['re'];
			$this->first['im']=$first['im'];
			$this->second['re']=$second['re'];
			$this->second['im']=$second['im'];
			}
		function add()
			{
			$result['re']=$this->first['re']+$this->second['re'];
			$result['im']=$this->first['im']+$this->second['im'];
			return($result);
			}
		function sub()
			{
			$result['re']=$this->first['re']-$this->second['re'];
			$result['im']=$this->first['im']-$this->second['im'];
			return($result);
			}
		function mul()
			{
			$result['re']=($this->first['re']*$this->second['re'])-($this->first['im']*$this->second['im']);
			$result['im']=($this->first['re']*$this->second['im'])+($this->second['re']*$this->first['im']);
			return($result);
			}
		function div()
			{
			if(($this->second['re']==0 && $this->second['im']==0))
				retuen(-1);
			$a=$this->first['re'];
			$b=$this->first['im'];
			$c=$this->second['re'];
			$d=$this->second['im'];
			@$result['re']=((a*c+b*d)/(c*c-d*d));
			@$result['im']=((b*c-a*d)/(c*c-d*d));
			return($result);
			}
		}
?>
La classe est très simple et peut facilement être adaptées pour php5 ;)