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

92,454 zapytań

141,262 odpowiedzi

319,089 komentarzy

61,854 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

Akademia Sekuraka 2024 zapewnia dostęp do minimum 15 szkoleń online z bezpieczeństwa IT oraz dostęp także do materiałów z edycji Sekurak Academy z roku 2023!

Przy zakupie możecie skorzystać z kodu: pasja-akademia - użyjcie go w koszyku, a uzyskacie rabat -30% na bilety w wersji "Standard"! Więcej informacji na temat akademii 2024 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!

...