first commit (gaussjordan is bugged)
This commit is contained in:
164
src/main.cpp
Normal file
164
src/main.cpp
Normal file
@@ -0,0 +1,164 @@
|
||||
#include <iostream>
|
||||
#include <vector>
|
||||
#include <algorithm>
|
||||
|
||||
template <typename T>
|
||||
class Matrix
|
||||
{
|
||||
private:
|
||||
std::size_t m_Lignes;
|
||||
std::size_t m_Colonnes;
|
||||
std::size_t m_Dimension;
|
||||
std::vector<T> m_Data;
|
||||
|
||||
public:
|
||||
Matrix(std::size_t lignes, std::size_t colonnes) : m_Lignes(lignes), m_Colonnes(colonnes), m_Dimension(lignes * colonnes)
|
||||
{
|
||||
m_Data.resize(m_Dimension);
|
||||
}
|
||||
~Matrix() {}
|
||||
|
||||
void Print() const
|
||||
{
|
||||
for (size_t i = 0; i < m_Lignes; ++i)
|
||||
{
|
||||
std::cout << "[ ";
|
||||
for (size_t j = 0; j < m_Colonnes; ++j)
|
||||
{
|
||||
std::size_t indice = i * m_Lignes + j;
|
||||
std::cout << at(i, j) << " ";
|
||||
}
|
||||
std::cout << "]";
|
||||
std::cout << std::endl;
|
||||
}
|
||||
}
|
||||
void Insert()
|
||||
{
|
||||
for (size_t i = 0; i < m_Lignes; ++i)
|
||||
{
|
||||
for (size_t j = 0; j < m_Colonnes; ++j)
|
||||
{
|
||||
std::cin >> at(i, j);
|
||||
}
|
||||
std::cout << std::endl;
|
||||
}
|
||||
}
|
||||
|
||||
void DivideLine(T div, std::size_t line){
|
||||
for (size_t i = 0; i < count; i++)
|
||||
{
|
||||
/* code */
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
void GaussJordan()
|
||||
{
|
||||
int r = -1;
|
||||
for (std::size_t j = 0; j < m_Colonnes; ++j)
|
||||
{
|
||||
std::size_t k = 0;
|
||||
// Rechercher
|
||||
for (std::size_t i = r + 1; i < m_Lignes; ++i)
|
||||
{
|
||||
if (at(i, j) > at(k, j))
|
||||
{
|
||||
k = i;
|
||||
}
|
||||
}
|
||||
Matrix<float> mat_pivot(1, 1);
|
||||
mat_pivot.at(0, 0) = at(k, j);
|
||||
if (at(k, j) != 0)
|
||||
{
|
||||
++r;
|
||||
// Diviser
|
||||
for (std::size_t z = 0; z < m_Colonnes; ++z)
|
||||
{
|
||||
at(k, z) /= mat_pivot.at(0, 0);
|
||||
}
|
||||
if (k != r)
|
||||
{
|
||||
// Echanger
|
||||
for (std::size_t z = 0; z < m_Colonnes; ++z)
|
||||
{
|
||||
std::swap(at(k, z), at(r, z));
|
||||
}
|
||||
}
|
||||
for (std::size_t i = 0; i < m_Lignes; ++i)
|
||||
{
|
||||
if (i != r)
|
||||
{
|
||||
//Soustraire
|
||||
for (std::size_t z = 0; z < m_Colonnes; ++z)
|
||||
{
|
||||
at(i, z) -= at(r, z) * at(i, j);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
T &operator[](std::size_t indice)
|
||||
{
|
||||
return at(indice);
|
||||
}
|
||||
|
||||
T &at(std::size_t ligne, std::size_t colonne)
|
||||
{
|
||||
return m_Data[ligne * m_Lignes + colonne];
|
||||
}
|
||||
|
||||
T at(std::size_t ligne, std::size_t colonne) const
|
||||
{
|
||||
return m_Data[ligne * m_Lignes + colonne];
|
||||
}
|
||||
|
||||
/*std::vector<T>::iterator begin() {
|
||||
return m_Data.begin();
|
||||
}
|
||||
|
||||
std::vector<T>::iterator end() {
|
||||
return m_Data.end();
|
||||
}*/
|
||||
};
|
||||
|
||||
/*
|
||||
void test()
|
||||
{
|
||||
Matrix<float> mat(2, 2);
|
||||
mat.at(0, 0) = 4;
|
||||
mat.at(0, 1) = 3;
|
||||
mat.at(1, 0) = 2;
|
||||
mat.at(1, 1) = 1;
|
||||
|
||||
mat.Print();
|
||||
mat.GaussJordan();
|
||||
mat.Print();
|
||||
}
|
||||
*/
|
||||
|
||||
int main(int argc, char **argv)
|
||||
{
|
||||
//test();
|
||||
|
||||
std::cout << "hello world!" << std::endl;
|
||||
std::cout << "Quelle est le nombre de lignes de votre matrice ?" << std::endl;
|
||||
std::size_t lignes;
|
||||
std::cin >> lignes;
|
||||
std::cout << "Quelle est le nombre de colonnes de votre matrice ?" << std::endl;
|
||||
std::size_t colonnes;
|
||||
std::cin >> colonnes;
|
||||
std::size_t dimension = lignes * colonnes;
|
||||
std::cout << "Rentrez les coefficients de la matrice" << std::endl;
|
||||
Matrix<float> mat(lignes, colonnes);
|
||||
|
||||
mat.Insert();
|
||||
|
||||
mat.Print();
|
||||
mat.GaussJordan();
|
||||
std::cout << std::endl;
|
||||
mat.Print();
|
||||
|
||||
return 0;
|
||||
}
|
||||
Reference in New Issue
Block a user