Matrice (avec template)

0/5 (3 avis)

Vue 9 468 fois - Téléchargée 541 fois

Description

Classe C++ Matrice<T> proposant la gestion d'une matrice 2D classique.
Opérateurs surchargés présents:
=, +, +=, -=, *, *=, /, /=

(Addition avec un nombre réel/une matrice,
soustraction avec un nombre réel/une matrice,
multiplication avec un nombre réel/une matrice,
division avec un nombre réel)

Utilise le conteneur de la STL vector pour la gestion du tableau 2D.
Gestion des exceptions (attrapées avec string)
Plusieurs méthodes utiles sont mises à disposition.

CLASSE NON ACHEVEE A 100%. MANQUE DE METHODES LIEES A UNE MATRICE (Determinant, inverse...)

Si erreur merci de me le signaler !
Je ne prétends pas du tout que cette classe est optimisée et rapide, ni qu'elle est complète, mais c'est plutôt pour "m'entrainer" au C++. Merci d'être indulgent sur le code !

Contenu du .zip:
-> main.cpp (Exemple de fonctionnement de cette classe)
-> Matrice.h
-> Matrice.cbp (Projet Code::Blocks)

Source / Exemple :


// Je mets le main.cpp comme source (Matrice.h trop long)

#include <iostream>
#include "Matrice.h"

int main(void)
{
    Matrice<float> mat1(2, 3); // Ordre : 2x3 : nbLignes = 2, nbColonnes = 3

    // Les valeurs valent 0 (par defaut)
    mat1 += 9.4f; // Valeurs valent maintenant 9.4
    mat1.Afficher(); // = cout << mat1 << endl;

    Matrice<int> mat2(6, 7, 12); // Valeurs initialisees a 12

    std::cout << mat2 <<  std::endl; // Affiche une grille de 12
    mat2.Remplir(3); // Valeurs valent 3

    mat2(0, 3) = 9; // Modification d'une seule valeur.

    try
    {
        mat2(10, 6) = 4; // ERREUR : En dehors du tableau (6x7)
    }
    catch (std::string &e)
    {
       std::cout << e << std::endl; // Gestion de l'exception
    }

    Matrice<int> mat3 = mat2 * 2; // L'ordre de mat3 est celui de mat2

    mat3 += 8;
    mat3.Afficher();

    std::cout << mat3.GetLgns() << std::endl; // Affiche 6
    mat3.Redimensionner(4, 4); // L'ordre vaut 4x4, on n'efface pas les valeurs actuelles
    std::cout << mat3.GetLgns() << std::endl; // Affiche 4

    // On stocke les valeurs de la matrice dans un tableau 2D
    Matrice<int>::Matrice2D myTab1 = mat3.GetTableau();
    // EQUIVAUT A
    std::vector<std::vector<int> > myTab2 = mat3.GetTableau();

    std::cout << myTab1[0][0] << std::endl; // Affiche 14
    // EQUIVAUT A
    std::cout << mat3(0, 0) << std::endl;

    return 0;
}

Codes Sources

A voir également

Ajouter un commentaire Commentaires
Messages postés
966
Date d'inscription
samedi 3 avril 2004
Statut
Membre
Dernière intervention
4 mars 2010
4
tu peux également penser à protéger la fonction *=, par exemple
matrice M;
M*=M;

dans ton cas ne marchera pas.
Messages postés
1
Date d'inscription
dimanche 27 mai 2007
Statut
Membre
Dernière intervention
27 février 2008

En effet je n'ai pas pensé à gérer les exceptions dans l'exemple. Je vais en ajouter une seule pour faire voir comment ça fonctionne. Je vais modifier l'exemple.
Messages postés
336
Date d'inscription
samedi 9 août 2003
Statut
Membre
Dernière intervention
9 juillet 2011
2
oui petite remarque tu envois des exceptions mais dans ton exemple tu ne fais rien pour les attrapés

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.