Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Discussion: Somme de 2 matrices

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    mars 2018
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : mars 2018
    Messages : 18
    Points : 9
    Points
    9

    Par défaut Somme de 2 matrices

    Bonjour,

    Je fais un exercice en C++ et je souhaite faire l'addition de 2 matrices de dimensions 10 lignes & 10 colonnes, dont je rentre moi-mêmes les valeurs dans les 2 matrices.

    Dans le code que j'ai écris, lorsque je fais "run", le code ne se limite pas à seulement 2 matrices, il poursuit à M3, M4, M5 et ça sans fin.
    Pourtant dans mon code, je parle seulement de M1 et de M2, donc je ne vois pas où se situe mon erreur?
    Quelqu'un peut m'éclaircir?
    Merci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
     
    #include <iostream>
    #include <vector>
     
    using namespace std;
     
    typedef vector<vector<double>> Matrice;
     
    Matrice lire_matrice();
    void affiche_matrice(const Matrice& M);
    Matrice somme(const Matrice& M1, const Matrice& M2);
     
    //-------------------------------------------------------------
    int main()
    {
        Matrice M1(lire_matrice()), M2(lire_matrice());
     
        if(M1[0].size() != M2.size()) {
            cout <<"Somme des matrices impossible !" << endl;
        } else {
            cout << "Resultat :" << endl;
            affiche_matrice(somme(M1, M2));
        }
     
        return 0;
    }
     
    //--------------------------------------------------------------
    Matrice lire_matrice()
    {
        cout << "Saisie d'une matrice :" << endl;
     
        size_t lignes;
        do{
            cout << "Nombre de lignes :";
            cin >> lignes;
        } while (lignes < 1);
     
        size_t colonnes;
        do{
            cout << "Nombre de colonnes :";
            cin >> colonnes;
        } while (colonnes < 1);
     
        Matrice M(lignes, vector<double>(colonnes));
     
        for (size_t i(0); i < lignes; ++i) {
            for (size_t j(0); j < colonnes; ++j){
                cout << " M[" << i+1 << "," << j+1 << "]=";
                cin >> M[i][j];
            }
        }
        return M;
    }
     
    //-----------------------------------------------------------------
    Matrice somme(const Matrice& M1, const Matrice& M2)
    {
        // crée la Matrice prod è la bonne taille *et* l'initialise
        // avec des zéros :
        Matrice som(M1.size(), vector<double>(M2[0].size()));
     
        for (size_t i(0); i < M1.size(); ++i)
            for (size_t j(0); j < M2[0].size(); ++j)
                for (size_t k(0); k <M2.size(); ++k)
                    som[i][j] += M1[i][j] + M2[k][j];
     
        return som;
    }
     
    //--------------------------------------------------------------------
    void affiche_matrice(const Matrice& M)
    {
        for (auto ligne : M){
            for (auto element : ligne){
                cout << element << " ";
            }
            cout << endl;
        }
    }

  2. #2
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    mars 2018
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : mars 2018
    Messages : 18
    Points : 9
    Points
    9

    Par défaut

    Lorsque je lui dit que j'ai 10 lignes et 10 colonnes, c'est comme s'il considérait que j'ai 10 matrices au total, mais en réalité j'en veux juste 2 de 10 colonnes et de 10 lignes!

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    juin 2010
    Messages
    53
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : juin 2010
    Messages : 53
    Points : 97
    Points
    97

    Par défaut

    Bonjour

    Bon, je ne sait pas si vector<vector<double>> est imposé par la consigne mais ce n'est pas forcément le mieux..
    Plus spécifiquement pour ton problème, quand tu écris
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
        size_t lignes;
        do{
            cout << "Nombre de lignes :";
            cin >> lignes;
        } while (lignes < 1);
    tu demandes en fait de saisir le nombre de ligne jusqu'a ce qu'il n'y ai plus de ligne, c'est bien ce que tu veux faire? (pareil pour le colonnes)

    Ensuite dans la somme à proprement parlé, pourquoi un troisieme indice k ? Veux tu faire une somme ou une multiplication ?

  4. #4
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    avril 2018
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 23
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : avril 2018
    Messages : 9
    Points : 9
    Points
    9

    Par défaut

    Bonsoir pourquoi vous faites les déclarations méthodes dans le main et non en dehors ?
    Puis pour tester des sommes on initialises des tableau avec des valeurs.

    Pour commencer je vous conseille de faire des test sur des tableau statiques au lieu de vouloir faire compliquer et il est mieux d'initialiser des tailles de tableau par des entier.

    Dans les boucles for on sait que l'on part du début et donc de 0 il n'y a que la fin qu'il y a déterminer avec Size .

    Pour moi le code manque de visibilité je ne me souvient jamais avoir eu besoin de faire 3 boucle for imbriqué pour une somme de 2 matrice .

    Il voudrait mieux essayer de faire sa avec un tableau statique avant de passer a un vecteur je pense que vous avez essayer de faire compliqué tout de suite et vous avez sauté des étapes.

Discussions similaires

  1. [XL-2007] somme entre deux matrice
    Par yasmina13 dans le forum Excel
    Réponses: 1
    Dernier message: 14/12/2009, 12h05
  2. Somme et sous matrice
    Par styleho dans le forum MATLAB
    Réponses: 8
    Dernier message: 29/05/2009, 15h25
  3. Somme dans une matrice
    Par stefsas dans le forum MATLAB
    Réponses: 2
    Dernier message: 13/05/2008, 12h01
  4. somme de deux matrice
    Par Invité dans le forum C++
    Réponses: 4
    Dernier message: 06/01/2008, 21h32
  5. Réponses: 2
    Dernier message: 11/12/2006, 20h46

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo