Getsuyodev, Programming is mainly used when constructing an application. Programming requires knowledge of application domains, algorithms, and programming language expertise. Programming can be developed in different logic based on developer knowledge.

POO – TAD de complexe à coefficients rationnels avec exception

Programmez en orienté objet en C Sharp



Objectif : Construire une classe de nombres complexes à partir de la traduction en diagramme UML du TAD de nombre complexe; les coefficients sont des nombres rationnels implémentés par la classe Rationnel de l’exercice précédent.

La classe Complexe :

Les  2 propriétés Imag et Reel représente respectivement la partie imaginaire et la partie réelle du nombre complexe, elles sont rangées dans les champs privés FImag et FReel.



operator  +, -, /, * :  opérations classiques sur les nombres complexes.


ToString (  ) :  renvoie le complexe sous sa forme habituelle ( ex : 3+ i5 )
 

La classe RComplexe sera rendue robuste par l’utilisation d’une classe d’exception complexeException :

Une exception du type complexeExceptionsera lancé dans le cas suivant :

La création d’un complexe  dont l’un des coefficients rationnels possède un dénominateur nul new Complexe ( 5 , 0 , 8, 6 ) déclenchera une complexeExceptionavec comme message :

using System;

class rationnelException : Exception
{
public rationnelException(string mess): base(mess)
{
}
}

interface IRatio
{
void Reduire();
}

class Rationnel : IRatio
{
private int FNum, FDenom;

//-- méthodes privées
private static int ppcm(int a, int b)
{
int max = Math.Max(a, b);
int min = Math.Min(a, b);
int p = min;
for (int k = 1; (k <= max) & (p % max != 0); k++, p = min * k) ;
return p;
}

private static int pgcd(int a, int b)
{
int r;
int n = Math.Max(a, b);
int p = Math.Min(a, b);
try
{
do
{
r = n % p;
n = p;
p = r;
}
while (r != 0);
}
catch (DivideByZeroException)
{
/* On désécurise la méthode pgcd :
* on laisse le module des rationnels
* s'occuper du problème de la division
* par zéro.
* 
*/
}
return n;
}
private void Normalise()
{
if (FDenom < 0)
{
FDenom *= -1;
FNum *= -1;
}
Reduire();
}

//-- constructeur
public Rationnel(int a, int b)
{
FNum = a;
FDenom = b;
this.Normalise();
}

//-- propriétés publiques
public virtual int Num
{
get 
{
return FNum; 
}
set 
{
FNum = value; 
}
}

public virtual int Denom
{
get 
{
return FDenom; 
}
set
{
if (value != 0)
FDenom = value;
else
{
FDenom = 1;
throw new rationnelException("Dénominateur nul (valeur 1 par défaut).");
}
}
}
//-- méthodes publiques
public void Reduire()
{
if (FDenom != 0)
{
int pgc = pgcd(Math.Abs(FNum), Math.Abs(FDenom));
FNum /= pgc;
FDenom /= pgc;
}
else
throw new rationnelException("Dénominateur nul (poursuite du calcul impossible).");
}

public override string ToString()
{
return this.FNum.ToString() + '/' + this.FDenom.ToString();
}

// opérateurs :
public static Rationnel operator +(Rationnel a, Rationnel b)
{
int divcom, coeff_a, coeff_b, num, denom;
a.Reduire();
b.Reduire();
divcom = ppcm(a.Denom, b.Denom);
coeff_a = divcom / a.Denom;
coeff_b = divcom / b.Denom;
num = a.Num * coeff_a + b.Num * coeff_b;
denom = divcom;
return new Rationnel(num, denom);
}
public static Rationnel operator -(Rationnel a, Rationnel b)
{
int divcom, coeff_a, coeff_b, num, denom;
a.Reduire();
b.Reduire();
divcom = ppcm(a.Denom, b.Denom);
coeff_a = divcom / a.Denom;
coeff_b = divcom / b.Denom;
num = a.Num * coeff_a - b.Num * coeff_b;
denom = divcom;
return new Rationnel(num, denom);
}
public static Rationnel operator *(Rationnel a, Rationnel b)
{
int num, denom;
a.Reduire();
b.Reduire();
num = a.Num * b.Num;
denom = a.Denom * b.Denom;
return new Rationnel(num, denom);
}
public static Rationnel operator /(Rationnel a, Rationnel b)
{
int num = a.Num, denom = b.Denom;
//if (b.Num != 0)
//{
a.Reduire();
b.Reduire();
num = a.Num * b.Denom;
denom = a.Denom * b.Num;
//}
return new Rationnel(num, denom);
}
}
//----------- Fin classe Rationnel --------------    

    class complexeException : Exception
    {
    }

    class Complexe
    {
        private Rationnel Freel, Fimag;

        //-- constructeurs
        public Complexe(Rationnel x, Rationnel y)
        {
        }

        public Complexe(int x1, int y1, int x2, int y2)
        {
        }
        //-- propriétés publiques
        public virtual Rationnel Reel
        {
        }

        public virtual Rationnel Imag
        {
        }

        //-- méthodes publiques
        public override string ToString()
        {
        }

        // opérateurs :
        public static Complexe operator +(Complexe a, Complexe b)
        {
        }

        public static Complexe operator -(Complexe a, Complexe b)
        {
        }

        public static Complexe operator *(Complexe a, Complexe b)
        {
        }
    }
class Application
{
  public static void Main(string[] args)
  {
            Complexe z1, z2, z3;
            try
            {
                z1 = new Complexe(new Rationnel(12, 15), new Rationnel(6, 9));
                //z1 = new Complexe(new Rationnel(12, 0), new Rationnel(6, 9));
                //z1.Reel.Denom = 0;
                //z1 = new Complexe(12, 0, 6, 9);
                Console.WriteLine("z1 = " + z1.ToString());
                z2 = new Complexe(new Rationnel(3, 5), new Rationnel(3, 4));
                Console.WriteLine("z2 = " + z2.ToString());
                z3 = z1 + z2;
                Console.WriteLine("z3 = z1+z2 : " + z3.ToString());
                z3 = z1 - z2;
                Console.WriteLine("z3 = z1-z2 : " + z3.ToString());
                z3 = z2 - z1;
                Console.WriteLine("z3 = z2-z1 : " + z3.ToString());
                z3 = z1 * z1;
                Console.WriteLine("z3 = z1*z2 : " + z3.ToString());
            }
            catch(Exception e)
            {
                Console.WriteLine(e.Message);
            }
            Console.ReadLine();
     }
 }

Comments are closed, but trackbacks and pingbacks are open.

This website uses cookies to improve your experience. We'll assume you're ok with this, but you can opt-out if you wish. Accept Read More