• 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

Object Storage Arubacloud
0 głosów
5,512 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,146 wizyt
pytanie zadane 12 listopada 2018 w Java przez Tom_Ja Dyskutant (7,970 p.)
0 głosów
1 odpowiedź 890 wizyt
pytanie zadane 11 października 2019 w C i C++ przez kazik8980 Użytkownik (810 p.)
0 głosów
1 odpowiedź 1,892 wizyt
pytanie zadane 4 marca 2019 w Python przez bednar98 Początkujący (440 p.)

92,620 zapytań

141,474 odpowiedzi

319,813 komentarzy

62,004 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.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...