first commit (gaussjordan is bugged)

This commit is contained in:
Morph01
2024-02-01 20:01:24 +01:00
commit 066bc64ab9
6 changed files with 340 additions and 0 deletions

164
src/main.cpp Normal file
View 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;
}