• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Mnożenie macierzy, c++ uproszczenie prgramu

VPS Starter Arubacloud
0 głosów
5,697 wizyt
pytanie zadane 19 marca 2018 w C i C++ przez Groshq Użytkownik (590 p.)

Cześć, poprosze tu jakiegoś eksperta od c++, otóż właśnie skończyłem główkować nad mnożeniem macierzy kwadratowych w c++, tyle że program ma mase linijek powtarzajacych i pytanko czy dało by sie go jakoś uprościć ? 

Myślałem teżnad wywołaniem osobnych funkcji na wpisywanie danych i inne działania tylko nie wiem jak to zrobić żeby spowtorem zwróciło w wartość do int main(){} poratuje ktoś sposobem ? 

 

#include <iostream>
using namespace std;
int w, k, a,j,n,i;
int main()
{
	cout << "Podaj ilosc wierszy dla 1 i 2 macierzy : ";
	cin >> w; 
	cout << endl <<  "Podaj ilosc kolumn dla 1 i 2 macierzy : ";
	cin >> k; cout << endl;
	int mA[w][k], mB[w][k],mC[w][k];
	cout << "Wypelnimy teraz 1 macierz" << endl;
	for (i = 0; i < w; i++)							//			wpisywanie liczb do macierzy 
		{
			for (j = 0; j < k; j++)
			{
				cout << "Podaj wartosc dla indeksu" << i << "x" << j << endl;
				cin >> a;
				mA[i][j] = a;
			}
		}
	cout << endl << "Wypelnimy teraz 2 macierz" << endl
	;
	for (i = 0; i < w; i++)							//			wpisywanie liczb do macierzy 
		{
			for (j = 0; j < k; j++)
			{
				cout << "Podaj wartosc dla indeksu" << i << "x" << j << endl;
				cin >> a;
				mB[i][j] = a;
			}
		}
	for (i=0; i<w; i++)								//wyswietlanie macierzy
	{
		cout << " |";
		for(j=0; j<k; j++)
		{
			cout << " " << mA[i][j];		
		}
		cout << " |" << endl;
	}
	cout << endl;
	for (i=0; i<w; i++)								//wyswietlanie macierzy
	{
		cout << " |";
		for(j=0; j<k; j++)
		{
			cout << " " << mB[i][j];		
		}
		cout << " |" << endl;
	}
	cout << endl;
	for (i=0; i<w; i++)								//mnozenie macierzy
	{
		for(j=0; j<k; j++)
		{
			mC[i][j]=0;
			for(n=0; n<k; n++)
			{
				mC[i][j]=(mA[i][n]*mB[n][j])+mC[i][j];
			}
			cout << endl;	
		}
	}
	for (i=0; i<w; i++)								//wyswietlanie macierzy
	{
		cout << " |";
		for(j=0; j<k; j++)
		{
			cout << " " << mC[i][j];		
		}
		cout << " |" << endl;
	}
	return 0;
}

 

2 odpowiedzi

+1 głos
odpowiedź 19 marca 2018 przez damianeqe Gaduła (4,380 p.)
W komentarzach do kodu podałeś 3 kluczowe kwestie: wprowadzenie danych, wyświetlenie i obliczenie. Możesz stworzyć 3 funkcje które zrobią to i automatycznie Twój kod skróci się dość znacznie.
komentarz 19 marca 2018 przez Beginer Pasjonat (22,110 p.)
Pozwolę się nie zgodzić, kod by się nie skrócił, dodatkowo trochę skomplikował. W programie, gdzie każdy z trzech wymienionych modułów jest wykonywany tylko raz nie ma potrzeby (sensu) wprowadzania funkcji zewnętrznych.

Dla podwyższenia przejrzystości, czytelności kodu wystarczy każdy z tych modułów oddzielić wolnym (pustym,) wierszem, lub linią komentarza z gwiazdkami.
komentarz 19 marca 2018 przez criss Mędrzec (172,590 p.)

W programie, gdzie każdy z trzech wymienionych modułów jest wykonywany tylko raz

Ale wykonywany jest 2 razy. Poza tym podzielenie kodu na funkcję zwiększy ci czytelność i zaoszczędzi trochę roboty jakbyś chciał rozbudować apke. 

komentarz 19 marca 2018 przez Beginer Pasjonat (22,110 p.)

Mnożenie macierzy to jest prosta operacja - i program powinien być prosty. (Nie ma co komplikować - życie jest wystarczająco skomplikowane). Każda z trzech operacji:

wprowadzenie danych, wyświetlenie i obliczenie. 

jest wykonywana tylko raz.

Oczywiście, czytelność, przejrzystość struktury kodu jest ważna, ale o tym już się wypowiedziałem.

komentarz 19 marca 2018 przez damianeqe Gaduła (4,380 p.)
Z tego co widzę to wczytywanie jest wykonywane 2 razy, wypisanie tablicy 3 razy, mnożenie faktycznie raz. Gdybym pisał kod to użyłbym w takim przypadku funkcji, a nie wklejał te same fragmenty kodu x razy.
0 głosów
odpowiedź 19 marca 2018 przez Beginer Pasjonat (22,110 p.)
Skoro macierze mają być kwadratowe, zapytaj tylko o rozmiar macierzy: "Podaj rozmiar macierzy (liczbę kolumn lub wierszy)".

Następnie wprowadzaj dane wierszami. Najpierw dla pierwszej macierzy, później dla drugiej.

Nic tutaj krótszego, prostszego - zarazem bardziej naturalnego, nie da się wymyśleć.

Podobne pytania

0 głosów
1 odpowiedź 1,187 wizyt
pytanie zadane 12 listopada 2018 w Java przez Tom_Ja Dyskutant (7,970 p.)
0 głosów
1 odpowiedź 959 wizyt
pytanie zadane 11 października 2019 w C i C++ przez kazik8980 Użytkownik (810 p.)
0 głosów
1 odpowiedź 2,004 wizyt
pytanie zadane 4 marca 2019 w Python przez bednar98 Początkujący (440 p.)

92,974 zapytań

141,938 odpowiedzi

321,180 komentarzy

62,301 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Wprowadzenie do ITsec, tom 2

Można już zamawiać tom 2 książki "Wprowadzenie do bezpieczeństwa IT" - będzie to około 650 stron wiedzy o ITsec (17 rozdziałów, 14 autorów, kolorowy druk).

Planowana premiera: 30.09.2024, zaś planowana wysyłka nastąpi w drugim tygodniu października 2024.

Warto preorderować, tym bardziej, iż mamy dla Was kod: pasja (użyjcie go w koszyku), dzięki któremu uzyskamy dodatkowe 15% zniżki! Dziękujemy zaprzyjaźnionej ekipie Sekuraka za kod dla naszej Społeczności!

...