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

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);
	
}
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.

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 ?

3

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

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