-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathMatrix.cs
More file actions
181 lines (160 loc) · 8.02 KB
/
Matrix.cs
File metadata and controls
181 lines (160 loc) · 8.02 KB
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
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace CalMat
{
[Serializable] // pour dire au programme que la classe Matrix et SquareMatrix sont enregistrable
public class Matrix //defini une classe Matrix qui a comme attribut
{
public int Lines { get; set; }//Lines(nb de ligne)
public int Columns { get; set; }//Columns(nb de colomns)
public double[,] Elements { get; set; }//un tableau a deux dimensions(la matrice)
public string name { get; set; }//name(le nom de la Matrice)
public Matrix(int c, int l) //constructeur de la classe Matrix pour les matrices "de passage"
{
this.Elements = new double[c, l];
this.Lines = l;
this.Columns = c;
}
public Matrix(int c, int l, string nom) //constructeur de la classe Matrix pour les matrices "principales"
{
this.Elements = new double[c, l];
this.Lines = l;
this.Columns = c;
this.name = nom;
Calculatrice.listMatrix.Add(this.name, this); //on ajoute la matrice dans le dictionaire
}
public static Matrix operator +(Matrix a, Matrix b) //operateur '+': defini une methode de calcul avec l'operateur '+' et deux matrices
{
if (a.Lines == b.Lines && a.Columns == b.Columns) //verifie si les matrices sont compatible
{
Matrix c = new Matrix(a.Columns, a.Lines); //crée une matrice de passage de meme dimension que la matrice a et b
for (int i = 0; i < a.Lines; i++)
{
for (int j = 0; j < a.Columns; j++) //parcours la matrice c, a et b
{
c.Elements[j, i] = a.Elements[j, i] + b.Elements[j, i]; //somme des deux termes correspondants
}
}
return c; //retourne la matrice de passage
}
else
{
throw new Exception("Opération impossible : dimensions non compatibles. \n"); //sinon retoune une erreur
}
}
public static Matrix operator -(Matrix a, Matrix b) //operateur '-': defini une méthode de calcul avec l'operateur '-' et deux matrices
{
if (a.Lines == b.Lines && a.Columns == b.Columns) //verifie si les matrices sont compatible
{
Matrix c = new Matrix(a.Columns, a.Lines); //crée une matrice de passage de meme dimension que la matrice a et b
for (int i = 0; i < a.Lines; i++)
{
for (int j = 0; j < a.Columns; j++) //parcours la matrice c, a et b
{
c.Elements[j, i] = a.Elements[j, i] - b.Elements[j, i];//difference des deux termes correspondants
}
}
return c; //retourne la matrice de passage
}
else
{
throw new Exception("Operation impossible: pas les même dimension.\n"); //sinon retoune une erreur
}
}
public static Matrix operator *(Matrix a, Matrix b) //operateur '*': defini une méthode de calcul avec l'operateur '*' et deux matrices
{
if (a.Lines == b.Columns) //verifie si les matrices sont compatible
{
Matrix c = new Matrix(b.Columns, a.Lines); //crée une matrice de passage de dimension juste
for (int i = 0; i < a.Lines; i++)
{
for (int j = 0; j < b.Columns; j++) //parcours la matrice c
{
for (int z = 0; z < a.Columns; z++) //parcours la ligne de la matrice a et la colonne de la matrice b correspondante
{
c.Elements[j, i] += a.Elements[z, i] * b.Elements[j, z]; //somme des produits des termes correspondant
}
}
}
return c; //retourne la matrice de passage
}
else
{
throw new Exception("Operation impossible: le nombre de ligne de la première matrice n'est pas egale au nombre de collones de la deuxième matrice.\n");
} //sinon retoune une erreur
}
public static Matrix operator *(string a, Matrix b) //operateur '*': defini une méthode de calcul avec l'operateur '*', un string et une matrice
{
double value; //defini une variable value en tant que double
if (Double.TryParse(a, out value)) //essaye de convertir le string en double
{
return value * b; // si réussi, appel l'operateur '*' avec double et une matrice
}
throw new Exception("Impossible de convertir '" + a + "' en double dans l'operateur * de Matrix.\n"); //sinon retourne une erreur
}
public static Matrix operator *(double a, Matrix b) //operateur '*': defini une méthode de calcul avec l'operateur '*', un double et une matrice
{
Matrix c = new Matrix(b.Lines, b.Columns); //crée une matrice de passage de dimension de la matrice b
for (int i = 0; i < b.Lines; i++)
{
for (int j = 0; j < b.Columns; j++) //parcours la matrice c et b
{
c.Elements[i, j] = a * b.Elements[i, j]; //produit du double avec les termes correspondant
}
}
return c; //retourne la matrice c
}
public void Input() //méthode qui appel la fenetre MatrixInput pour initialiser la matrice
{
MatrixInput MatrixInput = new MatrixInput(this, false); //crée une nouvelle fenêtre avec comme paramètre this (la matrice) et un booleen (false qui determine si on modifie ou non la matrice)
MatrixInput.Show(); //on affiche la fenêtre
}
public Matrix Trans() //defini une methode pour la transposer
{
Matrix T = new Matrix(this.Lines, this.Columns); //crée une matrice de passage de meme dimension que la matrice this
for (int i = 0; i < this.Lines; i++)
{
for (int j = 0; j < this.Columns; j++) //parcours la matrice T et this
{
T.Elements[i, j] = this.Elements[j, i]; //defini la transposee de this
}
}
return T; //retourne la matrice T
}
public Matrix Pow(String p) //méthode pour calculer la puissace d'une matrice
{
int value;
if (int.TryParse(p, out value)) //on essaye de convertir "p" en int
{
Matrix b = this; //on crée une autre matrice "b" égale à "this"
for (int n = 1; n < value; n++)
{
b *= this; //si réussi ,multiplie "c" par "b", "p" fois
}
return b; //retourne b
}
throw new Exception("Impossible de convertir '" + p + "' en int dans l'operateur ^ de SquareMatrix.\n"); //si on arrive pas à convertir
}
public override string ToString() // méthode pour mettre la matrice sous forme de string
{
String value = ""; //defini une variable value en tant que string et est egale a rien
for (int j = 0; j < this.Lines; j++) //parcours les lignes de la matrice this
{
value += "\t| "; //ajoute une tabulation et |
for (int i = 0; i < this.Columns; i++) //parcours les colonnes de la matrice this
{
value += Elements[i, j]; //ajoute la valeurs de la case correspondante
if (i != this.Columns - 1)
{
value += "\t"; //si ce n'est pas la l'avant deriere colonne, on ajoute une tabulation
}
}
value += " |\n"; //ajoute | et un retour a la ligne
}
return value; //retourne value
}
}
}