Bonjour,

Je suis débutant en C# et j'essaie de faire ce TP en entier.

Nom : t9c#.jpg
Affichages : 920
Taille : 305,6 Ko

Là où je sèche totalement, c'est sur l'approximation selon la méthode indiquée dans le TP:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
 
        public double Approximation(int d)
        {
 
            string resultat;
            double[] y = new double [d];
            resultat = (BigInteger.Pow(10, -d) * numerateur / denominateur).ToString();
            double a = double.Parse((numerateur).ToString());
            double b = double.Parse((denominateur).ToString());
            int i = 1;
            do
            {
                y[0] = Math.Sqrt(a) / Math.Sqrt(b);
                y[i] = y[i - 1] * (3 - (a / b) * Math.Pow(y[i - 1], 2)) / 2;
                i++;
            }while( (Math.Pow(y[i],-2)-(a/b))/Math.Pow(y[i],-1) >= Math.Pow(10,-d) );
        }
    }
Ensuite, j'ai quelques incompréhensions quand j'ai souligé après ce code, je vous le mets en entier pour avoir toute aide possible, comme une autre solution envisageable ...

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
 
 
 
class Fraction
    {
 
        BigInteger num;
        BigInteger den;
 
       public BigInteger numerateur
       {
            get {return num;}
            set {num = value;}
        }
       public BigInteger denominateur
       {
            get {return den;}
            set {if (den != 0)
                    den = value;}
        }
 
        public Fraction(long n, long d)
        {
            num = n;
            den = d;
        }
 
        public Fraction(string n, string d)
        {
            num = BigInteger.Parse(n);
            den = BigInteger.Parse(d);
        }
 
        public string DevFraction(int p)
        {
 
            String resultat;
            resultat = ((BigInteger.Pow(10, p) * numerateur) / denominateur).ToString();
            int len = resultat.Length;
            //int reste = (p + 1) - len;
            //String res = new String ('0', p);
            resultat = new string('0', p) + resultat;
            //return f;
            return resultat.Substring(len - 1, 1) + "," + resultat.Substring(len, p);
        }
 
        public static Fraction operator +(Fraction f1, Fraction f2)
        {
            string n = (f1.num * f2.den + f1.den * f2.num).ToString();
            return new Fraction(long.Parse((f1.num * f2.den + f1.den * f2.num).ToString()), long.Parse((f1.den*f2.den).ToString()));
        }
 
        public static Fraction Facteurs_Premiers(Fraction f)
        {
            BigInteger p;
 
            p= BigInteger.GreatestCommonDivisor(f.num, f.den);
            if (p == 1)
                return f;
            else
                return new Fraction(long.Parse((f.num / p).ToString()), long.Parse((f.den / p).ToString()));
 
        }
Je ne comprends pas notemment pourquoi je dois écrire ça pour l'opérateur + :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
 return new Fraction(long.Parse((f1.num * f2.den + f1.den * f2.num).ToString()), long.Parse((f1.den*f2.den).ToString()));
je me dis que cela vient du fait qu'il y a 2 constructeurs, et je pense aussi que je peux utiliser qu'un seul constructeur, en gros, pourquoi quand je fais ça :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
 return new Fraction((f1.num * f2.den + f1.den * f2.num).ToString(), (f1.den*f2.den).ToString());
C# me signale un erreur, de même que quand je les convertis seulement en long.

Merci d'avance pour votre aide

Cordialement