Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

mnozenie macierzy

Ostatnio zmodyfikowano 2012-07-17 15:10
Autor Wiadomość
Mufas
Temat założony przez niniejszego użytkownika
mnozenie macierzy
» 2012-07-15 18:15:42
niby proste, a program mi nie chce dzialac (ale kompiluje sie juz ok)
petelki przy mnozeniu wygladaja tak:
C/C++
for( int i = 0; i < m; i++ )
{
    for( int j = 0; j < p; j++ )
    {
        c[ i ][ j ] = 0;
        for( int k = 0; k < o; k++ )
        {
            c[ i ][ j ] = c[ i ][ j ] + a[ i ][ k ] * b[ k ][ j ];
        }
    }
}

co tu jest zle??
macierz a[m][n]
macierz b[o][p]
to macierz c[m][p]
P-60094
Mufas
Temat założony przez niniejszego użytkownika
» 2012-07-15 21:19:03
moze doprecyzuje, bo brak odpowiedzi widze

Program mnozy 2 macierze przez siebie - liczby pseudolosowe
Macierz 1
Podaj liczbe wierszy dla 1 macierzy
3
Podaj liczbe kolumn dla 1 macierzy
3
2 0 2
3 0 0
2 0 1
Macierz 2
Podaj liczbe wierszy dla 2 macierzy
3
Podaj liczbe kolumn dla 2 macierzy
3
0 0 3
1 3 3
4 0 4
Mnozenie macierzy
-495105442 0 14044800
-495105442 0 14044800
-495105442 0 14044800

tak to wyglada, chyba nie do konca dobrze. A kod wyglada tak

C/C++
#include <iostream>
#include <conio.h>
#include <time.h>
#include <math.h>
#include <stdlib.h>

using namespace std;

int main()
{
    srand( static_cast < unsigned int >( time( NULL ) ) );
    cout << "Program mnozy 2 macierze przez siebie - liczby pseudolosowe" << '\n';
    short int m, n, p, o;
    int a[ m ][ n ];
    cout << "Macierz 1" << '\n';
    cout << "Podaj liczbe wierszy dla 1 macierzy" << '\n';
    cin >> m;
    cin.ignore();
    cout << "Podaj liczbe kolumn dla 1 macierzy" << '\n';
    cin >> n;
    cin.ignore();
    for( int i = 1; i <= m; i++ )
    {
        for( int j = 1; j <= n; j++ )
        {
            a[ i ][ j ] = rand() % 5;
            cout << a[ i ][ j ] << " ";
        }
        cout << "" << '\n';
    }
    cout << "Macierz 2" << '\n';
    cout << "Podaj liczbe wierszy dla 2 macierzy" << '\n';
    cin >> o;
    cin.ignore();
    cout << "Podaj liczbe kolumn dla 2 macierzy" << '\n';
    cin >> p;
    cin.ignore();
    int b[ o ][ p ];
    for( int i = 1; i <= o; i++ )
    {
        for( int j = 1; j <= p; j++ )
        {
            b[ i ][ j ] = rand() % 5;
            cout << b[ i ][ j ] << " ";
        }
        cout << "" << '\n';
    }
    cout << "Mnozenie macierzy" << '\n';
    int c[ m ][ p ];
    for( int i = 0; i < m; i++ )
    {
        for( int j = 0; j < p; j++ )
             c[ i ][ j ] = 0;
       
    }
    for( int i = 0; i < m; i++ )
    {
        for( int j = 0; j < p; j++ )
        {
           
            for( int k = 0; k < o; k++ )
            {
                c[ i ][ j ] = c[ i ][ j ] + a[ i ][ k ] * b[ k ][ j ];
            }
        }
    }
    for( int i = 0; i < m; i++ )
    {
        for( int j = 0; j < p; j++ )
             cout << c[ i ][ j ] << " ";
       
        cout << "" << '\n';
    }
   
   
    getch();
    return 0;
   
}

jak w petli mnozenia macierzy dam c[j] =0 (jak w poscie wczesniej) to program wogole sie nie włacza
pls help
P-60124
mati1qazxsw2
» 2012-07-16 12:54:14

...
short int m, n, p, o;
int a[ m ][ n ];
...
Co ja pacze tu UłuuO.o?

...
int b[ o ][ p ];
...
Co ty tutaj paczysz!

Jeśli chcesz tworzyć tablice z określonymi przez użytkownika rozmiarami to musisz tworzyć ją dynamicznie po wybraniu wartości m i n, dlatego pokazuje ci te śmieci :P
P-60171
Mufas
Temat założony przez niniejszego użytkownika
» 2012-07-17 13:20:43
tablica dynamiczna dla macierzy b i petla mnozenia
C/C++
int ** b = new int *[ o ];
for( int i = 1; i <= o; i++ )
{
    for( int j = 1; j <= n; j++ )
    {
        b[ i ] = new int[ p ];
        b[ i ][ j ] = rand() % 5;
        cout << b[ i ][ j ] << " ";
    }
    cout << "" << '\n';
}
cout << "Mnozenie macierzy" << '\n';
int c[ m ][ p ];
for( int i = 1; i <= m; i++ )
{
   
    for( int j = 1; j <= p; j++ )
    {
        c[ i ][ j ] = 0;
        for( int k = 1; k <= o; k++ )
        {
            c[ i ][ j ] = c[ i ][ j ] + a[ i ][ k ] * b[ k ][ j ];
        }
    }
}

macierz b mysle ze jest dobrze, ale prosze o potwierdzenie
a w przypadku mnozenia tablice c, tez mam dynamiczna zrobic?? a jesli tak to jak (bo mi dziwne wyniki wychodza zarowno przy dynamicznej jak i statycznej)
P-60322
mati1qazxsw2
» 2012-07-17 15:10:06

#include <iostream>
#include <time.h>
#include <math.h>
#include <stdlib.h>

using namespace std;

int main()
{
    srand( static_cast < unsigned int >( time( NULL ) ) );
    cout << "Program mnozy 2 macieze przez ciebie - liczby pseldolosowe" << '\n';
    short int m, n, p, o;

    cout << "Macierz 1" << '\n';
    cout << "Podaj liczbe wierszy dla 1 maciezy" << '\n';
    cin >> m;
    cin.ignore();
    cout << "Podaj liczbe kolumn dla 1 maciezy" << '\n';
    cin >> n;
    cin.ignore();

    int** a = new int*[m];
    for( int i = 0; i < m; i++ )
    {
        a[i] = new int[n];
        for( int j = 0; j < n; j++ )
        {
            a[ i ][ j ] = rand() % 5;
            cout << a[ i ][ j ] << " ";
        }
        cout << "" << '\n';
    }

    cout << "Macierz 2" << '\n';
    cout << "Podaj liczbe wierszy dla 2 maciezy" << '\n';
    cin >> o;
    cin.ignore();
    cout << "Podaj liczbe kolumn dla 2 maciezy" << '\n';
    cin >> p;
    cin.ignore();


    int** b = new int*[o];
    for( int i = 0; i < o; i++ )
    {
        b[i] = new int[p];
        for( int j = 0; j < p; j++ )
        {
            b[ i ][ j ] = rand() % 5;
            cout << b[ i ][ j ] << " ";
        }
        cout << "" << '\n';
    }

    int w = m>o?m:o,h = p>n?p:n,w2 = m>o?o:m,h2 = p>n?n:p;

    cout << "Mnorzenie macierzy" << '\n';
    int** c = new int*[h];
    for( int i = 0; i < h; i++ )
    {
        c[i] = new int[w];
        for(int j = 0;j < w;++j)
        {
            c[i][j] = 0;
        }
    }
    cout << w << " " << h << endl;
    for( int i = 0; i < h; i++ )
    {
        for( int j = 0; j < w; j++ )
        {
            if(j < w2 && i < h2)
            {
                c[ i ][ j ] = a[ i ][ j ] * b[ i ][ j ];
            }else
            {
                c[i][j] = (w2<o&&h2<p?b[i][j]:a[i][j]);
            }
            cout << c[ i ][ j ] << " ";
        }
        cout << "" << '\n';
    }
    cout << "TROLOLOLO wymnorzylem!" << endl;
    /*
    System(oprócz win 9x) sam zwolni pamięć dlatego nie ma wycieku
    */

    cin.ignore();
    return 0;

}
P-60352
« 1 »
  Strona 1 z 1