begin process at 2012 05 27 14:25:46
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Maths & Algorithmes

 > CLASS MATRICE C++

CLASS MATRICE C++


 Information sur la source

Note :
2 / 10 - par 1 personne
2,00 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10
Catégorie :Maths & Algorithmes Classé sous :Matrice, Addition, mutiplication, Soustraction, Inverse Niveau :Expert Date de création :26/05/2011 Vu / téléchargé :4 142 / 182

Auteur : elkasimi2007

Ecrire un message privé
Ce membre participe au partage de revenus publicitaires
Commentaire sur cette source (7)
Ajouter un commentaire et/ou une note


 Description

Cliquez pour voir la capture en taille normale
cette classe permet de faire les opérations usuelles dans les matrices :
- addition
- soustraction
- multiplication
- lecture des données a partir d'un fichier
- affichage de la matrice

Source

  • #ifndef __MATRIX_H__
  • #define __MATRIX_H__
  • #include <stdio.h>
  • #include <stdlib.h>
  • class Matrix
  • {
  • int m_size;
  • double ** m_matrix;
  • FILE * m_log;
  • public :
  • Matrix(int n, FILE * m_log = stderr);
  • double get(int i, int j);
  • void set(int i, int j, double value);
  • Matrix* add(Matrix * m);
  • Matrix* subtract(Matrix * m);
  • Matrix* multiply(Matrix * m);
  • Matrix* inverse();
  • bool read(char * file_name);
  • void display(char * matrix_name);
  • ~Matrix();
  • };
  • #endif
#ifndef __MATRIX_H__
#define __MATRIX_H__

#include <stdio.h>
#include <stdlib.h>

class Matrix
{
    int m_size;
    double ** m_matrix;
    FILE * m_log;
    
    public :
        Matrix(int n, FILE * m_log = stderr);
        double get(int i, int j);
        void set(int i, int j, double value);
        Matrix* add(Matrix * m);
        Matrix* subtract(Matrix * m);
        Matrix* multiply(Matrix * m);
        Matrix* inverse();
        bool read(char * file_name);
        void display(char * matrix_name);
        ~Matrix();
};

#endif

 Conclusion

calcul de l'inverse prochainement

 Fichier Zip

Les Membres Club peuvent télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip


 Sources du même auteur

MEILLEURE MÉTHODE POUR CALCULER UN PUISSANCE
Source avec Zip Source avec une capture OBTENIR TOUTES LES NOMBRES PREMIERS DANS UNE GRANDE RANGÉE A...
Source avec une capture EVALUATION D'UNE EXPRESSION PARENTHÉSÉE
Source avec une capture CALCUL DU FACTORIEL DES GRANDS NOMBRES EN TOUTE RAPIDITÉ
JOUR A PARTIR D'UNE DATE MM/JJ/YYYY

 Sources de la même categorie

Source avec Zip UN EXAMPLE D'APPLICATION EN CUDA DE L'ALGORITHME DE SCAN POU... par oguzaras
Source avec Zip Source avec une capture CHIFFREMENT DE VIGENERE par lajouad
Source avec Zip Source avec une capture ANALYSE SYNTAXIQUE par lajouad
Source avec Zip Source avec une capture STRUCTURE D'UNE MATRICE PAR LES LISTE LINÉAIRE (NON CONTUGUS... par benzarabel
Source avec Zip Source avec une capture DESSINER UNE ARBRE BINAIRE( MODE CONSOLE): par benzarabel

 Sources en rapport avec celle ci

Source avec Zip Source avec une capture STRUCTURE D'UNE MATRICE PAR LES LISTE LINÉAIRE (NON CONTUGUS... par benzarabel
Source avec Zip Source avec une capture HDR EXPOSURE FUSION par mecrosoft
LES OPÉRATIONS DE LA LISTE CHAINÉE par smaili
CALCULER LE PRODUIT DE DEUX MATRICES DE TAILLE DIFFERENT par aymenet1
Source avec une capture OPÉRATIONS SUR MATRICES C++ par Minilogus

Commentaires et avis

Commentaire de CptPingu le 26/05/2011 17:38:41 administrateur CS

Expert => Débutant.

Qu'apporte de plus cette classe que les 50 autres sources sur le même sujet, déjà présentes sur ce site ?
(A noter qu'on a ci-dessous des classes de matrice bien plus complètes)

http://www.cppfrance.com/codes/MATRICE-AVEC-TEMPLATE_45871.aspx
http://www.cppfrance.com/codes/MODULE-GESTION-MATRICE_24795.aspx
http://www.cppfrance.com/codes/CLASSE-MATRICE_19915.aspx
http://www.cppfrance.com/codes/MATRICE-CLASSE-TEMPLATE-CMATRICE_22625.aspx
http://www.cppfrance.com/codes/OPERATION-SUR-MATRICES-CARREES-AVEC-CLASSE-GENERIQUE_51270.aspx
http://www.cppfrance.com/codes/CLASSES-TRAITER-MATRICES-COMPLEXES_40908.aspx
http://www.cppfrance.com/codes/CLASS-MATRICE-AVEC-TEMPLATE_45950.aspx
http://www.cppfrance.com/codes/CALCUL-MATRICIEL-PERMET-PLUPART-CALCULS-SUR-MATRICES-OPTIMISABLE_22279.aspx
http://www.cppfrance.com/codes/MULTIPLICATION-MATRICIELLE-ENCHAINEE_39701.aspx
Et j'en passe...

Commentaire de elkasimi2007 le 26/05/2011 18:03:47

je ne pense pas que je suis débutant
j'ai posé ma propre conception de la classe matrice qui consiste en l'ajout de logger et la possibilité de lire a partir d'un stream

celui qui est intéressé par mon code il peut le télécharger et l'utiliser.
je ne crois pas que je stocke ma source sur ton serveur.

finalement mon travail est encore en cours ..

Commentaire de CptPingu le 26/05/2011 18:26:43 administrateur CS

> je ne pense pas que je suis débutant
Je ne pense pas que tu sois expert non plus...
De plus, on parle ici de la difficulté de la source et non du programmeur. Tu peux être expert en C++ et poster une source facile d'accès. Le niveau sera alors "destiné" aux débutants. Or la source que tu as posté est assez basique et aisément compréhensible par un débutant (pas de template, de redéfinition d'opérateur, etc...).

> j'ai posé ma propre conception de la classe matrice qui consiste en l'ajout de logger et la possibilité de lire a partir d'un stream
Tu lis des valeurs dans un fichier, rien d'extra-ordinaire, c'est du déjà vu (cf les 50 autres matrices que tu trouveras sur ce site). Le logger ? A part une variable qui traine et qui s'appelle logger, y a pas vraiment de log. De plus, un système de log est utile s'il est externe aux classes, et facilement insérable sans être intrusif. Ici, on a une composition entre log et matrice. Ce qui, en conception logiciel, n'est pas du tout une bonne solution.
De même, la classe display ne devrait pas prendre d'argument. C'est à l'utilisateur d'écrire ce qu'il veut avant, et cette méthode ne devrait faire que son travail: afficher la matrice. C'est aussi une maladresse de conception.
Je rajouterais aussi que le mélange C et C++ n'est pas du plus bel effet. A moins que tu es une contrainte (imposée ou choisie), tu ne devrais pas avoir de FILE, de "**" ou de scanf. Une utilisation de la STL aurait été plus judicieuse.
Par convention, une attribut de classe est différencié d'un argument (par exemple et le préfixant d'un _ ).
Pourquoi passer des pointeurs, là où une référence aurait été bien plus adaptées ?
Pourquoi n'y-t-il aucun const ?
Pourquoi ne pas utiliser la liste d'intialisation au lieu d'affecter les valeurs dans le constructeur ?

Au final:
- Pas d'originalité par rapport à ce qui est posté.
- Une qualité de code qui n'est pas exceptionnelle (Tu dis ne pas être débutant, mais en tout cas tu fais des erreurs de débutant)

> finalement mon travail est encore en cours ..
Pourquoi publier, si tu n'as pas fini ? Une source doit au moins être finalisé avant d'être postée...

> je ne crois pas que je stocke ma source sur ton serveur.
Non, mais dès le moment ou tu publies une source dans cette section, tu acceptes d'être soumis à la critique.

Commentaire de elkasimi2007 le 26/05/2011 19:01:15

je voix que tu as des confusions entre ce qui est habituelle et ce qui est obligatoire :)
les règles que tu me propose sont juste des habitudes que certains jugent bien.

pour la STL il ne me convient pas car sa lecture des fichiers est assez longue(1000 fois que stdio
tu pourra tester) or je vous faire les calcules pour des matrices aussi grand que possible stockés dans des fichiers quelque parts.

je préfère retourner un pointeur si on veut faire une dés-allocation avec celui-la.  

je crois que l'option modifier existe pour les sources pour démarrer d'une version et de progresser ensuite tu pourra suivre l'avancement de cette source si tu veux

désolé mais une critique commence par un salut ou un bonjour (pas par "Expert => Débutant.") suivi par des remarques sur le code et sa conception.

de toutes façon je croix que la discussion était comme même fructueuse malgré ton premier message agressif.

à bientôt

Commentaire de CptPingu le 26/05/2011 19:26:41 administrateur CS

>> je voix que tu as des confusions entre ce qui est habituelle et ce qui est obligatoire :)
Te conseiller d'adopter de bonnes pratiques n'est en rien une confusion.

>> les règles que tu me propose sont juste des habitudes que certains jugent bien.
Effectivement. Mais en quoi ne pas avoir de conventions est une bonne chose ? Je ne dis pas de suivre une convention pré-établie, mais d'en avoir au moins une.
Ici, on ne peut différencier facilement un attribut d'un argument. Si une convention a été établie, ce n'est pas peut être pas par hasard, non ?

>> pour la STL il ne me convient pas car sa lecture des fichiers est assez longue(1000 fois que stdio
>> tu pourra tester) or je vous faire les calcules pour des matrices aussi grand que possible stockés dans des fichiers quelque parts.
1) La STL n'est pas juste pour lire des fichiers... Y a aussi des conteneurs templatés qui sont particluièrements efficaces (en perfs).
2) Si tu parles de lenteur dans les stream, je rappelle qu'avant de dire que c'est lent, on se renseigne. La perte de perf est dû à la synchronisation avec les streams de la lib C. Désactiver cette synchro, résoud ce problème de perfs:
http://www.cplusplus.com/reference/iostream/ios_base/sync_with_stdio/
3) Si tu cherches à avoir des perfs extrêmement bonnes, ce n'est sûrement pas avec un FILE et un fscanf que tu y arriveras. Il te faudra aller un peu plus bas niveau que ça pour obtenir les meilleurs perfs. Je pense notamment à des conversions via modp_atoi (fonctions non standards issues du projet modp, trouvable sur google code).

Tout ça pour dire que ton argument envers la STL n'est pas justifié.

>> je préfère retourner un pointeur si on veut faire une dés-allocation avec celui-la.  
Et le principe de RAII (Resource Acquisition Is Initialisation) ? C'est le principe le plus important du C++. Un objet qui alloue de la mémoire est chargé de sa destruction. Renvoyer un pointeur au lieu d'une référence ne peut pas se justifier par une soi-disante possiblité de désallocation. De plus, la référence est utile pour chaîner des actions.

>> je crois que l'option modifier existe pour les sources pour démarrer d'une version et de progresser ensuite tu pourra suivre l'avancement de cette source si tu veux
C'est vrai. C'est utile pour modifier une source, pour apporter des corrections par exemple. Mais pas pour finir un travail à peine commencé. Il y a les DCVS (git, svn, mercurial, etc...) pour ça. Bien différencier: corriger un travail et finir un travail.

>> désolé mais une critique commence par un salut ou un bonjour (pas par "Expert => Débutant.")
Pas forcément. J'aime aller droit au but. De plus, les sources ne sont pas le forum, ni une conversation privée. Je donne mon avis sur un code comme je le ferais sur un texte.

>> suivi par des remarques sur le code et sa conception.
Evidemment qu'il y a des remarques sur le code et la conception. D'une part tu postes dans la section ou l'on critique les codes, d'autre part, les remarques sont nécessaires, ton code étant améliorable sur de nombreux points.

Commentaire de ctx_man le 26/05/2011 19:30:46 2/10

Un peu sévère le CptPingu, mais il a pas tort du tout ^^'
Personnellement ca a tendance aussi a me titiller quand je vois une source relativement basique être publié en "expert".
Je compte même plus les caculettes a deux francs (oui, des francs, ca ne vaut même pas des euros) en mode console et qui sont notée expert alors qu'elle ne peuvent même pas résoudre une expression un chouilla complexe ( ex: "3*15+4-(12/3)"). Ou quand elle le peuvent, le code qui le fait est une atroce succession de if/while imbriqué.
Ca me titille tellement que je vais finir par en poster une qui avec un parseur d'expression, utilisant massivement la stl et les foncteurs, peut être même boost::spirit, boost::phoenix et capable de dessiner les courbes correspondantes à des équation, et je metterai ca en "débutant", juste histoire de faire complètement l'inverse.

M'enfin, au final je sais pas si j'aurais le courage de perdre mon temps a faire ca...

La source ici n'est clairement pas a destination des experts, rien de bien compliqué, des mélanges C et C++, etc...
Au passage, il manque le constructeur par copie et la surcharge de l'opérateur '=', la classe n'est pas fiable en l'état.
Sans constructeurs par copie, le compilo en met un qui fait une copie "brutale" de la mémoire. Et donc il copie les pointeurs plutôt que de ré-allouer.
exemple :
Matrix* m1 = new Matrix(2); // le constructeur fait m_matrix = new double*[2]; etc...
Matrix m2 = *m1; // il y a copie, ca ne refait pas l'allocation
delete m1; // m2::m_matrix pointe sur une zone dés allouée et donc invalide.

Il y a des fopen mais aucun close du fichier, la classe possède un membre m_log jamais utilisé (celui dans le constructeur est local au constructeur et non a la classe, de plus il n'est pas utilisé). Aucune vérification n'est faite sur la réussite de l'ouverture du fichier, des allocations, du respect des bornes des paramètres (par exemple, on peut écrire Matrix* m = new Matrix(-12); ce qui vaudra une belle exception non contrôlée), etc...
En prime, les opération allouent une nouvelle matrice qu'il retournent par pointeur, autrement dit ils transfèrent la propriété a l'appelant qui doit donc impérativement penser à détruire le résultat.

J'ai pas envie de prendre le temps de monter un code pour comparer la vitesse de la STL et de la libc, j'y crois pas une seconde, sauf en mode débug. Mais une fois compilé avec les flag d'optimisation qu'il faut, je veux bien croire qu'il y ai un écart, mais certainement pas un ratio de 1000.
Et ce n'est pas "des habitudes que certains jugent bien", c'est juste ce qu'il faut faire. Le fait est que stdio c'est du C, pas du C++, qu'il soit possible d'appeler du C en C++ n'est pas une raison pour utiliser le C plutôt que le C++. Dans ce cas autant tout faire en C. C'est comme en .Net, on peut appeler du C via du p/invoke, ca veut pas dire qu'on doit s'amuser à utiliser stdio plutôt que System.IO.File.

Commentaire de FasteX_ le 09/08/2011 16:53:33

Je suis parfaitement d'accord avec ctx_man et CptPingu. Les bonnes pratiques, ce n'est pas nécessairement ce qui est le plus rapide, mais c'est ce qui est le plus efficace à entretenir. À moins d'une différence de vitesse considérable, le mieux c'est d'utiliser les "features" actuels du langage et d'optimiser les algorithmes plutôt que d'utiliser quelque chose qui est moins supporté.

Ce n'est pas un prestige nécessairement de mettre une source sous le flag "expert", ça fait juste dire que les débutants et intermédiaires n'ont pas en moyenne les bagages qui faut pour bien comprendre. Souvent j'aime mieux réfléchir à une approche "débutante" pour un problème complexe donné. Ça permet d'aller chercher plus de monde et de partager des idées plus rapidement.

 Ajouter un commentaire


Discussions en rapport avec ce code source dans le forum

inverse de matrice dynamique [ par anaisa ] Aidez nous please c pr programmer en langage Votre texte ICIC l inverse de la matrice dynamique merci bcp !!!!!! matrice inverse [ par vladisback ] bonjour, j'utilise pour mes transformation des matrices 4x3: Xx Yx Zx Tx Xy Yy Zy Ty Xz Yz Zz Tz (Identique au matrice directX excepté une quatrieme inverse d'une matrice [ par rif59 ] bonjour,  je voudrai faire un programme ki calcul l'inverse d'une matrice (matx[5][5]) en visual C++ 2008, j'arrive pa à faire, si klkun peut m'aider calculer l'inverse d'une matrice [ par leFeu ] SVP, j'ai bessoin de votre aide.je dois trouver un programme qui calcul l'inverse d'une matrice carré, je l'ai fait avec la méthode des cofacteurs mai inverse matrice creuse de dim 150*1500 [ par m1naruto ] voila je cherche une méthode pour optimisé le temps de calcul de l'inverse d'un matrice creuse de grosse dimension (114*114), j'utilise la méthode de Calcul parallèle de l'inverse d'une matrice en utilisant le langage C et PVM [ par kaisbhh ] Salut à tous! je voudrais réaliser un bout de code en langage C qui inclut la bibliothèque pvm3.h et qui permet de calculer l'inverse d'une matrice pe classe matrice [ par monphp ] slt tt le monde, je suis entrain de réaliser un projet concernant le polymorphisme des matrices et des vecteurs. jé realisé alors une matricecaree qui matrice et vecteur [ par memoireph ] salut tous le monde je sollicite votre aide sur un problème voilà,j'ai deux classe vecteur et Matrice que je doit faire avec des opération élémentai


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,920 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales