From e9321631c5173a9ac704a68a72f11fbb21af418e Mon Sep 17 00:00:00 2001 From: Persson-dev Date: Fri, 2 Feb 2024 14:41:31 +0100 Subject: [PATCH] save and load --- matricies/matrice3x3.mat | 4 +++ matricies/matrice3x3echelonne.mat | 4 +++ src/Matrix.h | 45 +++++++++++++++++++++++++------ src/main.cpp | 21 ++++++--------- 4 files changed, 53 insertions(+), 21 deletions(-) create mode 100644 matricies/matrice3x3.mat create mode 100644 matricies/matrice3x3echelonne.mat diff --git a/matricies/matrice3x3.mat b/matricies/matrice3x3.mat new file mode 100644 index 0000000..8751921 --- /dev/null +++ b/matricies/matrice3x3.mat @@ -0,0 +1,4 @@ +3 3 +1 2 3 +4 5 6 +1 2 3 diff --git a/matricies/matrice3x3echelonne.mat b/matricies/matrice3x3echelonne.mat new file mode 100644 index 0000000..e7cd658 --- /dev/null +++ b/matricies/matrice3x3echelonne.mat @@ -0,0 +1,4 @@ +3 3 +1 0 -1 +0 1 2 +0 0 0 diff --git a/src/Matrix.h b/src/Matrix.h index db148b1..8f2c3db 100644 --- a/src/Matrix.h +++ b/src/Matrix.h @@ -1,9 +1,10 @@ #pragma once -#include #include #include +#include #include +#include template static bool EqualZero(T var) { @@ -19,9 +20,17 @@ class Matrix { std::vector m_Data; public: + Matrix(const std::string& fileNameInput) { + Load(fileNameInput); + } 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(std::size_t lignes, std::size_t colonnes, std::initializer_list&& initList) : + m_Lignes(lignes), m_Colonnes(colonnes), m_Dimension(lignes * colonnes) { + m_Data = initList; + m_Data.resize(m_Dimension); + } ~Matrix() {} void Print() const { @@ -52,15 +61,35 @@ class Matrix { } } - /* - void DivideLine(T div, std::size_t line){ - for (size_t i = 0; i < count; i++) - { - + void Save(const std::string& fileName) { + std::ofstream out{fileName}; + if (!out) { + std::cerr << "Impossible de sauvegarder la matrice !\n"; + return; + } + out << m_Lignes << " " << m_Colonnes << "\n"; + for (std::size_t i = 0; i < m_Lignes; i++) { + for (std::size_t j = 0; j < m_Colonnes; j++) { + out << at(i, j) << " "; + } + out << "\n"; + } + } + + void Load(const std::string& filename) { + std::ifstream in{filename}; + if (!in) { + std::cerr << "Impossible de charger la matrice !\n"; + return; + } + in >> m_Lignes >> m_Colonnes; + m_Data.resize(m_Lignes * m_Colonnes); + for (std::size_t i = 0; i < m_Lignes; i++) { + for (std::size_t j = 0; j < m_Colonnes; j++) { + in >> at(i, j); + } } - } - */ void GaussJordan() { int r = -1; diff --git a/src/main.cpp b/src/main.cpp index 4513251..94e04f9 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -1,25 +1,16 @@ #include "Matrix.h" void test() { - Matrix mat(3, 3); - mat.at(0, 0) = mat.at(2, 0) = 1; - mat.at(0, 1) = mat.at(2, 1) = 2; - mat.at(0, 2) = mat.at(2, 2) = 3; - - mat.at(1, 0) = 4; - mat.at(1, 1) = 5; - mat.at(1, 2) = 6; - + Matrix mat{"matrice3x3.mat"}; mat.Print(); + //mat.Save("matrice3x3.mat"); mat.GaussJordan(); std::cout << "\nResultat :\n"; mat.Print(); + mat.Save("matrice3x3echelonne.mat"); } -int main(int argc, char** argv) { - test(); - - std::cout << "hello world!" << std::endl; +void prompt() { std::cout << "Quelle est le nombre de lignes de votre matrice ?" << std::endl; std::size_t lignes; std::cin >> lignes; @@ -36,6 +27,10 @@ int main(int argc, char** argv) { mat.GaussJordan(); std::cout << std::endl; mat.Print(); +} +int main(int argc, char** argv) { + test(); + prompt(); return 0; }