Mnożenie macierzy w C++

0

Witam. Jestem początkującym programistą w C++, choć 'początkujący' to i tak za dużo powiedziane :D. Mam mały problem z macierzami (ich mnożeniem). Trzeba napisać programik, który:

  1. generuje dwie macierze: X[10][10] oraz Y[10][10], o elementach losowych z zakresu 1 do 100 (z tym nie mam problemu :D ),
  2. wyświetla te macieże na ekranie (z tym też nie ma kłopotów),
  3. mnoży te dwie macieże tworząc nową macież Z[10][10] (tu pojawia się problem :D),
  4. wyświetla na ekranie macierz Z[][].
    Czy jest jakaś odważna osoba, która podjęłaby się tego wyzwania ? :D. Chodzi mi konkretnie o punkcik nr 3. Jeśli nikomu nie chce się pisać całego programu, to prosiłbym bardzo choć o fragment kodu, który wykonywałby punkty 3 i 4. Mogę liczyć na Waszą pomoc ?

Przepraszam bardzo... mała korekta :D. Macierze X i Y powinny wyglądać tak: X[4][3], Y[3][5]. Zakres losowanych liczb to przedział od 1 do 9, a macież wynikowa powinna wyglądać tak: Z[4][5]. Niecierpliwie czekam na ewentualne odpowiedzi.

I przepraszam za ortografię :D. Tak jakoś wyszło...

0
Łukasz R. napisał(a)

Macierze X i Y powinny wyglądać tak: X[4][3], Y[3][5].

Nie pomnozysz XY. Jedynie YX. :D

0

Proszę bardzo ;->
Napisałem taki oto programik (zabrało mi to coś koło 5 minut).
Niezbyt elastyczny, działa tylko z ustalonymi wymiarami macierzy.
Jeśli chcesz używać dynamicznych wymiarów, wypadałoby napisać
jakąś prostą klasę.

#include <iostream>
#include <cstdlib>
#include <ctime>
using namespace std;

void multMatrix(double (*z)[5],
  const double (*x)[3], const double (*y)[5]) {
    /* z = x*y */
    for (int i = 0; i < 4; i++)
        for (int j = 0; j < 5; j++) {
            z[i][j] = 0;
            for (int k = 0; k < 3; k++)
                z[i][j] += x[i][k] * y[k][j];
        }
}

int main() {
    double X[4][3];
    double Y[3][5];
    double Z[4][5];
    srand(time(0));
    cout << "X:\n";
    for (int i = 0; i < 4; i++) {
        for(int j = 0; j < 3; j++) {
            X[i][j] = 1 + rand() % 9;
            cout << X[i][j] << '\t';
        }
        cout << endl;
    }
    cout << endl;
    cout << "Y:\n";
    for (int i = 0; i < 3; i++) {
        for(int j = 0; j < 5; j++) {
            Y[i][j] = 1 + rand() % 9;
            cout << Y[i][j] << '\t';
        }
        cout << endl;
    }
    cout << endl;
    multMatrix(Z, X, Y);
    cout << "Z:\n";
    for (int i = 0; i < 4; i++) {
        for(int j = 0; j < 5; j++) {
            cout << Z[i][j] << '\t';
        }
        cout << endl;
    }
    cout << endl;
}

Do maniek_2: można wykonać mnożenie XY, YX już nie :-)

1 użytkowników online, w tym zalogowanych: 0, gości: 1