dodawanie macierzy - pomocy!!

Odpowiedz Nowy wątek
2016-01-27 18:59
Biały Samiec
0

Witam, mam problem z programem ktory ma dodawac macierze 3x3.
Napisałem program za pomocą funkcji, ale zamiast wyników dostaje losowe liczby. Ktoś widzi problem bo ja nie umiem sobie z tym poradzic ;d

 #include <cstdlib>
#include <iostream>

using namespace std;

int wpisz_elementy(int A[3][3], int B[3][3])
{
 cout<<"Podaj elementy macierzy A: "<<endl;
for(int i=0;i<3;i++)
{
 for(int j=0;j<3;j++)
   {
    cout<<"Podaj element "<<i+1<<", "<<j+1<<" :"<<endl;
    cin>>A[i][j];
   }
}

cout<<"Podaj elementy macierzy B: "<<endl;
for(int i=0;i<3;i++)
{
 for(int j=0;j<3;j++)
   {
    cout<<"Podaj element "<<i+1<<", "<<j+1<<" :"<<endl;
    cin>>B[i][j];
   }
}
}

int dodaj(int A[3][3],int B[3][3])
{
int C[3][3]; 

for(int i=0; i<3; i++)
{
 for(int j=0; j<3; j++)
 {
 C[i][j]=A[i][j]+B[i][j];
 }
}
}

int wypisz(int C[3][3])
{
cout<<"Macierz A + B = "<<endl;
for(int i=0; i<3; i++)
{
 for(int j=0; j<3; j++)
 {
 cout<<C[i][j]<<", ";
 }
cout<<endl;
}
}

int main()
{
int A[3][3]; //macierz A
int B[3][3]; //macierz B
int C[3][3]; //macierz wynikowa C

wpisz_elementy(A,B);
dodaj(A,B);
wypisz(C);

    system("PAUSE");
    return EXIT_SUCCESS;
}

a o to wynik po skompilowaniu https://gyazo.com/2b31aee47a3cf1c3db1fcb41d15af23f

Pozostało 580 znaków

2016-01-27 19:03
0

Numerowanie indeksów tablic zaczyna się od ZERA. Masz macierze 4x4 zamiast 3x3 z tego co widzę ale mogę się mylić.
Zapomnijmy o tym ;p

edytowany 1x, ostatnio: Alinous, 2016-01-27 19:06
mylisz się, tablice są 3x3 - twonek 2016-01-27 19:05

Pozostało 580 znaków

2016-01-27 19:04
Biały Samiec
0
Alinous napisał(a):

Numerowanie indeksów tablic zaczyna się od ZERA. Masz macierze 4x4 zamiast 3x3 z tego co widzę ale mogę się mylić.

Ale problem w tym, że bez funkcji wyniki były prawidłowe. Dopiero jak zrobiłem funkcjami to coś nie idzie :/

Pozostało 580 znaków

2016-01-27 19:04
2

W dodaj() deklarujesz lokalną tablicę C która znika po wyjściu z funkcji, a potem w main wypisujesz inną lokalną tablicę C z niezainicjalizowanymi wartościami (UB btw).

Pozostało 580 znaków

2016-01-27 19:05
3
  1. zapoznaj się z pojęciem formatowania kodu: http://4programmers.net/Forum/998482
  2. zapoznaj się z inkrementacją: http://4programmers.net/Forum/1101404
  3. nazywaj zmienne sensownie, bo z i, j za chwilę się zgubisz i nie będziesz wiedzieć co jest wierszem a co kolumną.
  4. przeczytaj jakiś kurs rozdział funkcje, musisz zrozumieć że int nie jest magicznym słowem występującym przed funkcją.
  5. napisz funkcję void wpisz_elementy(int M[3][3]) i zwyczajnie wywołaj ją dwa razy
  6. Do funkcji dodaj musisz przekazać macierz C - tak będzie prościej jak na początek.

Wykonuję programy na zamówienie, pisać na Priv.
Asm/C/C++/Pascal/Delphi/Java/C#/PHP/JS oraz inne języki.

Pozostało 580 znaków

2016-01-27 19:06
Biały Samiec
0
twonek napisał(a):

W dodaj() deklarujesz lokalną tablicę C która znika po wyjściu z funkcji, a potem w main wypisujesz inną lokalną tablicę C z niezainicjalizowanymi wartościami (UB btw).

a jak tablicę z funkcji przekazać z wartościami do maina?

Pozostało 580 znaków

2016-01-27 19:08
1
_13th_Dragon napisał(a):

# Do funkcji dodaj musisz przekazać macierz C - tak będzie prościej jak na początek.

Pozostało 580 znaków

2016-01-27 19:09
2
#include <iostream>
using namespace std;

int main() {
    constexpr size_t matrix_side = 3, matrix_size = matrix_side*matrix_side;
    int a[matrix_size], b[matrix_size];

    auto read_matrix = [](int *matrix, size_t size){
        for(size_t i = 0; i < size; ++i)
            cin >> matrix[i];
    };

    read_matrix(a, matrix_size);
    read_matrix(b, matrix_size);

    for(size_t i = 0; i < matrix_size; ++i){
        cout << a[i]-b[i] << " \n"[!((i+1)%matrix_side)];
    }
    return 0;
}

input:

1 2 3 4 5 6 7 8 9
9 8 7 6 5 4 3 2 1

output:

-8 -6 -4
-2 0 2
4 6 8
edytowany 1x, ostatnio: spartanPAGE, 2016-01-27 19:26
miała być suma ;P - _13th_Dragon 2016-01-27 19:12
@_13th_Dragon a tam, Biały Samiec da rade :D - spartanPAGE 2016-01-27 19:14
Może i da ..., mogę zasugerować: cout &lt;&lt; a[i]-b[i] &lt;&lt; &quot; \n&quot;[!((i+1)%matrix_side)]; - _13th_Dragon 2016-01-27 19:24

Pozostało 580 znaków

2016-01-27 19:39
0

Poprawiony kod. W funkcji dodaj miałeś zadeklarowaną tablicę C[3][3], to nie jest ta sama tablica co w main(). Usunąłem ten fragment z funkcji dodaj, przekazałem tablicę C do funkcji i zwróciłem tablice C. Teraz funkcja wypisz operuje na tablicy C.

#include <cstdlib>
#include <iostream>

using namespace std;

int wpisz_elementy(int A[3][3], int B[3][3])
{
    cout << "Podaj elementy macierzy A: " << endl;
    for (int i = 0; i<3; i++)
    {
        for (int j = 0; j<3; j++)
        {
            cout << "Podaj element " << i + 1 << ", " << j + 1 << " :" << endl;
            cin >> A[i][j];
        }
    }

    cout << "Podaj elementy macierzy B: " << endl;
    for (int i = 0; i<3; i++)
    {
        for (int j = 0; j<3; j++)
        {
            cout << "Podaj element " << i + 1 << ", " << j + 1 << " :" << endl;
            cin >> B[i][j];
        }
    }
    return 0;
}

int dodaj(int A[3][3], int B[3][3], int C[3][3])
{

    for (int i = 0; i<3; i++)
    {
        for (int j = 0; j<3; j++)
        {
            C[i][j] = A[i][j] + B[i][j];
        }
    }
    return C[3][3];
}

int wypisz(int C[3][3])
{
    cout << "Macierz A + B = " << endl;
    for (int i = 0; i<3; i++)
    {
        for (int j = 0; j<3; j++)
        {
            cout << C[i][j] << ", ";
        }
        cout << endl;
    }
    return 0;
}

int main()
{
    int A[3][3]; //macierz A
    int B[3][3]; //macierz B
    int C[3][3]; //macierz wynikowa C

    wpisz_elementy(A, B);
    dodaj(A, B, C);
    wypisz(C);

    system("PAUSE");
    return EXIT_SUCCESS;
} 
edytowany 3x, ostatnio: winiardesign, 2016-01-27 19:46

Pozostało 580 znaków

2016-01-27 20:06
0

Jakich słów nie rozumiesz w punktach 2..5 http://4programmers.net/Forum/1219744 ?


Wykonuję programy na zamówienie, pisać na Priv.
Asm/C/C++/Pascal/Delphi/Java/C#/PHP/JS oraz inne języki.

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

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