Dodawanie do siebie dwu wymiarowych vektorów. Problem z wyświetlaniem.

Odpowiedz Nowy wątek
2019-04-24 03:49
0

Witam, nie umiem poradzić sobie z wyświetlaniem vector a który jest sumą dwóch innych, proszę o pomoc.
Zamiast zawartości vector a wyświetla się 00 11 jakby numeracja kolumn. Czy chodzi o to że muszę wskazać że odnoszę się do elementu vector a poprzez "->"?
Proszę tylko o zachowanie niekonstruktywnej krytyki dla siebie, konstruktywną chętnie przyjmę.
Dodam że się dopiero uczę.

Metoda odpowiadająca za wyświetlanie i sumowanie:


void sum_vectors() {

        vector<vector<int>>temp_sum;

        for (int a = 0;a < macierz1.size();a++) {
            vector <int> temp;
            for (int b = 0;b < macierz1[0].size();b++) {

                int c;

                c=macierz1[a][b] + macierz2[a][b];
                temp.push_back(a);
                cout << c;

            }
            cout << endl;
            temp_sum.push_back(temp);
        }

        for (int a = 0;a < macierz1.size();a++) {

            for (int b = 0;b < macierz1[a].size();b++) {
                int c;
                c= temp_sum[a][b];
                cout << "\t" <<c;
            }
            cout << endl;
        }

    }

Cały kod:

#include <iostream>
#include<vector>

using namespace std;
class vectors {
public:

    vector<vector<int>>macierz1;
    vector<vector<int>>macierz2;

    void add_vector() {

        int how_many_numbers;
        int how_many_vektors;
        int numb = 1;
        cout << "Ile wierszy chcesz dodac ?" << endl;
        cin >> how_many_vektors;
        cout << "Ile liczb chcesz dodac w wierszu ?" << endl;
        cin >> how_many_numbers;

        for (int a = 0;a < how_many_vektors; a++) {
            vector<int>temp;

            cout << "Podaj nastepujace liczby dla wiersza numer"<<numb << endl;
            for (int b = 0;b < how_many_numbers;b++) {
                int temp_number;
                cin >> temp_number;
                temp.push_back(temp_number);
            }
            macierz1.push_back(temp);
            numb++;
        }
        system("cls");

        numb = 1;

        cout << "Teraz wprowadź dla macierza numer dwa" << endl;

        for (int a = 0;a < how_many_vektors;a++) {
            vector<int>temp;

            cout << "Podaj nastepujace liczby dla wiersza numer" << numb << endl;
            for (int b = 0;b < how_many_numbers;b++) {
                int temp_number;
                cin >> temp_number;
                temp.push_back(temp_number);
            }
            macierz2.push_back(temp);
            numb++;
        }
        system("cls");
    }

    void sum_vectors() {

        vector<vector<int>>temp_sum;

        for (int a = 0;a < macierz1.size();a++) {
            vector <int> temp;
            for (int b = 0;b < macierz1[0].size();b++) {

                int c;

                c=macierz1[a][b] + macierz2[a][b];
                temp.push_back(a);
                cout << c;

            }
            cout << endl;
            temp_sum.push_back(temp);
        }

        for (int a = 0;a < macierz1.size();a++) {

            for (int b = 0;b < macierz1[a].size();b++) {
                int c;
                c= temp_sum[a][b];
                cout << "\t" <<c;
            }
            cout << endl;
        }

    }
};

int main()
{
    vectors a;
    do {
        int chose;

        cout << endl << endl;
        cout << "1.Dodaj macierz." << endl;
        cout << "2.Sumuj macierze." << endl;
        cout << "3.Mnożenie vektorów" << endl;
        cout << "0.Koniec." << endl;

        cin >> chose;

        switch (chose)
        {
        case 1:
            a.add_vector();     
            break;

        case 2:
            a.sum_vectors();
            break;

        case 3:
            break;

        case 0:
            return 0;
            break;

        }

    } while (true);

}
edytowany 2x, ostatnio: Pabloo111, 2019-04-24 04:02

Pozostało 580 znaków

2019-04-24 06:02
0

Czy Twoje vectory mają zawierać liczby rzeczywiste? Bo jeśli tak, to typ int je obcina i zostaje tylko część całkowita..

Jeśli wektory mają być 2D, to lepiej dla nich zrób klasę z polami X, Y. Kod będzie bardziej przejrzysty, łatwiejszy dla Ciebie do zrozumienia. Oczywiście kontener vector (nie Twoją klasę) wciąż stosujemy, jak chcesz sobie magazynować swoje matematyczne wektory w większej ilości.

edytowany 2x, ostatnio: Spine, 2019-04-24 06:09

Pozostało 580 znaków

2019-04-24 13:17
0
Spine napisał(a):

Czy Twoje vectory mają zawierać liczby rzeczywiste? Bo jeśli tak, to typ int je obcina i zostaje tylko część całkowita..

Jeśli wektory mają być 2D, to lepiej dla nich zrób klasę z polami X, Y. Kod będzie bardziej przejrzysty, łatwiejszy dla Ciebie do zrozumienia. Oczywiście kontener vector (nie Twoją klasę) wciąż stosujemy, jak chcesz sobie magazynować swoje matematyczne wektory w większej ilości.

Wiem, pisałem to dla liczb całkowitych.
Problem jak już napisałem jest z wyświetlaniem, linijka sprawdza mi że sumuje mi dane elementy vector ów dobrze:

 cout << c;

Ale kompilator w tym miejscu wyswietla juz zle bo wyswietla mi np 00 11 22:

for (int a = 0;a < macierz1.size();a++) {

            for (int b = 0;b < macierz1[a].size();b++) {
                int c;
                c= temp_sum[a][b];
                cout << "\t" <<c;
            }
            cout << endl;
        }

    }

Czyli po prostu oznaczyć współrzędne jako X,Y ?

edytowany 1x, ostatnio: Pabloo111, 2019-04-24 13:19

Pozostało 580 znaków

2019-04-24 21:47
3

Linia 65:
temp.push_back(a); => temp.push_back(c);

Jak ja mogłem tego nie zauważyć 😁👌👌 Dziękuję - Pabloo111 2019-04-24 23:45

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