[C++] Dodawanie macierzy na 2 sposoby

Forum dotyczące ogólnie pojętego programowania - algorytmów, struktur danych, narzędzi programistycznych, itp - głównie w kontekście komputerów PC.
ODPOWIEDZ
Awatar użytkownika
Luminofor
Użytkownik
Posty: 1373
Rejestracja: 27 lis 2007, 17:17
Lokalizacja: Polska

[C++] Dodawanie macierzy na 2 sposoby

Post autor: Luminofor » 13 maja 2009, 16:34

Witam, napisałem dodawanie macierzy na 2 sposoby. Będę wdzięczny za wszelkie uwagi, komentarze i spostrzeżenia.

1. Macierze reprezentowane jako tablice dwuwymiarowe:

Kod: Zaznacz cały

#include 
<iostream>

using namespace std;

void wprowadz_macierz(int macierz[][10],int wiersze, int kolumny);
void dodaj_macierze(int macierzA[][10], int macierzB[][10], int macierzC[][10],int wiersze, int kolumny);
void wyswietl_wynik(int macierzC[][10],int wiersze,int kolumny);

int main()
{
	int macA[10][10], macB[10][10], macC[10][10]={0},wmac,kmac;
	cout << "Podaj rozmiar obu macierzy:\nWierszy: ";
	cin >> wmac;
	cout << "Kolumn: ";
	cin >> kmac;
	if((kmac) && (wmac) && (wmac<11) && (kmac<11)) // sprawdzenie poprawnosci rozmiarow macierzy
	{
		cout << "\nMacierz A: \n";
		wprowadz_macierz(macA,wmac,kmac); // wprowadzamy macierz A
		cout << "\nMacierz B\n";
		wprowadz_macierz(macB,wmac,kmac); // i macierz B	
		dodaj_macierze(macA,macB,macC,wmac,kmac); // dodajemy je
		wyswietl_wynik(macC,wmac,kmac);  // i wyswietlamy macierz wynikowa
	}
	else cout << "Zly rozmiar macierzy!\n";
	return 0;
} 

//**************************************************************************
void wprowadz_macierz(int macierz[][10], int wiersze, int kolumny)
{
	for(int i=0; i<wiersze; i++)       // po wierszach
	{
		for(int j=0; j<kolumny; j++)  // po kolumnach
		{
			cout << "Podaj element (" << i+1 << "," << j+1 << "): ";
			cin >> macierz[i][j];
		}
	}
}

//********************************************************************************
void dodaj_macierze(int macierzA[][10], int macierzB[][10], int macierzC[][10],int wiersze,int kolumny)
{
	for(int i=0; i<wiersze; i++)
	{
		for(int j=0; j<kolumny; j++)
		{
			macierzC[i][j]=macierzA[i][j]+macierzB[i][j];  // wlasciwe dodawanie
		}
	}
}

//***********************************************************
void wyswietl_wynik(int macierzC[][10],int wiersze,int kolumny)
{
	cout << "\nWynik:\n";
	for(int i=0; i<wiersze; i++)
	{
		for(int j=0; j<kolumny; j++)
		{
			cout << macierzC[i][j];
			if(j<kolumny-1) cout << ", ";
		}
		cout << "\n";
	}
	cout << "\n";
}
2. Macierze reprezentowane jako tablice jednowymiarowe:

Kod: Zaznacz cały

#include <iostream>

using namespace std;

void wprowadz_macierz(int macierz[],int wiersze, int kolumny);
void dodaj_macierze(int macierzA[], int macierzB[], int macierzC[],int wiersze, int kolumny);
void wyswietl_wynik(int macierzC[],int wiersze,int kolumny);

int main()
{
	int macA[100], macB[100], macC[100]={0},wmac,kmac; // wmac - ilosc wierszy, kmac - ilosc kolumn, dodajemy macierze wmac x kmac
	cout << "Podaj rozmiar obu macierzy:\nWierszy: ";
	cin >> wmac;
	cout << "Kolumn: ";
	cin >> kmac;
	if((kmac) && (wmac) && (wmac<11) && (kmac<11)) // sprawdzenie poprawnosci rozmiarow macierzy
	{
		cout << "\nMacierz A: \n";
		wprowadz_macierz(macA,wmac,kmac); // wprowadzamy pierwsza macierz
		cout << "\nMacierz B\n";
		wprowadz_macierz(macB,wmac,kmac);	// i druga
		dodaj_macierze(macA,macB,macC,wmac,kmac);  // i je dodajemy
	    wyswietl_wynik(macC,wmac,kmac);  // wyswietlamy wynikowa macierz
	}
	else cout << "Zly rozmiar macierzy!\n";
	return 0;
}

//*********************************************************************
void wprowadz_macierz(int macierz[], int wiersze, int kolumny) // funkcja do wprowadzania macierzy
{
	for(int i=0; i<wiersze; i=i++)       // po wierszach
	{
		for(int j=0; j<kolumny; j++)  // po kolumnach
		{
			cout << "Podaj element (" << i+1 << "," << j+1 << "): ";
			cin >> macierz[(i*kolumny)+j]; // mnozymy i razy liczbe kolumn, zeby wartosci w tablicy jednowymiarowej nie nadpisywaly sie
		}
	}
}

//************************************************************************************************
void dodaj_macierze(int macierzA[], int macierzB[], int macierzC[],int wiersze,int kolumny) // funkcja dodajaca macierze
{
	for(int i=0; i<wiersze*kolumny; i++)
	{
		macierzC[i]=macierzA[i]+macierzB[i];
	}
}

//*********************************************************************************
void wyswietl_wynik(int macierzC[],int wiersze,int kolumny) // wyswietlanie macierzy wynikowej
{
	cout << "\nWynik:\n";
	for(int i=0; i<wiersze; i++)
	{
		for(int j=0; j<kolumny; j++)
		{
			cout << macierzC[(i*kolumny)+j]; // (i*kolumny)+j, a nie (i+j) zeby np macierzC(1,0) nie nadpisalo macierzC(0,1)
			cout << "\t";
		}
		cout << "\n";
	}
	cout << "\n";
}

MiW
Użytkownik
Posty: 226
Rejestracja: 28 sty 2007, 11:32
Lokalizacja: Kraków
Kontakt:

Post autor: MiW » 13 maja 2009, 20:58

Na macierz dobra jest klasa - pomaga się w tym połapać, pamięć się nie marnuje i można własne operatory napisać...

ODPOWIEDZ