Lubisz flat white? Mob programming przy kawie.
  • Blog
  • Lifestyle
  • Linux
  • Programowanie
    • PHP
    • C#
    • SQL
    • REST
    • Dobre praktyki
    • Open source
    • Porady
26 lipca 2011 przez Przemysław Sobolewski 6
C#

Mnożenie i dodawanie macierzy w C#

Mnożenie i dodawanie macierzy w C#
26 lipca 2011 przez Przemysław Sobolewski 6
C#

Poniżej leci kodzik mnożenia i dodawania macierzy napisany w C#. Będę wdzięczny za komentarze uzupełniające bądź wytykające błędy. Łapcie 🙂

static void Main(string[] args)
{
	int wybor;
	Console.WriteLine("1. Dodaj macierze");
	Console.WriteLine("2. Pomnoz macierze");
	Console.Write("\nTwoj wybor to: ");
	wybor = int.Parse(Console.ReadLine());
  
	switch (wybor) {
		case 1:
			dodawanie();
			break;
		case 2:
			mnozenie();
			break;
		default:
			Console.WriteLine("Wybierz od 1 do 2");
			Console.ReadKey();
			break;
	}
}

private new static void dodawanie()
{
	int x, y, x1, x2, a, b;
	double[,] tabA = new double[100, 100];
	double[,] tabB = new double[100, 100];
	double[,] tabC = new double[100, 100];
  
	Console.WriteLine("Max wymiary macierzy wynosza 100×100.\n\n");
	Console.WriteLine("Podaj wymiar macierzy A: ");
	x = int.Parse(Console.ReadLine());
	Console.WriteLine("x");
	y = int.Parse(Console.ReadLine());
	a = x + y;
	Console.WriteLine("Macierz A sklada sie z {0} elementow. Podaj je wszystkie: \n", a);
	
  	for (int i = 0; i < x; i++) { 
    	for (int j = 0; j < y; j++) { 
        	tabA[i, j] = int.Parse(Console.ReadLine()); 
        } 
    }
  
  	Console.WriteLine("Podaj wymiar macierzy B: "); 
  	x1 = int.Parse(Console.ReadLine()); 
  	x2 = int.Parse(Console.ReadLine()); 
  	b = x1 + x2; 
  	Console.WriteLine("Macierz B sklada sie z {0} elementow. Podaj je wszystkie: \n", b); 
  	
  	for (int i = 0; i < x1; i++) { 
      	for (int j = 0; j < x2; j++) { 
          	tabB[i, j] = int.Parse(Console.ReadLine()); 
        } 
    } 
  
  	Console.Clear(); 
  	Console.WriteLine("Dodawanie macierzy A+B\n"); 
  
  	if (x == x1 && y == x2) { 
      	for (int i = 0; i < x; i++) { 
          	for (int j = 0; j < y; j++) { 
              	tabC[i, j] = tabA[i, j] + tabB[i, j]; 
            } 
        } 
      
      	for (int i = 0; i < x; i++) { 
          	for (int j = 0; j < y; j++) { 
              	Console.Write("\t" + tabC[i, j]); 
            } 
          	
          	Console.WriteLine(); 
        } 
    } else { 
      Console.WriteLine("Nie mozna dodać macierzy A i B!!!\n"); 
    } 
  	
  	Console.Read(); 
} 

private new static void mnozenie() 
{ 
  	int x, y, x1, x2, a, b; 
  	double[,] tabA = new double[100, 100]; 
  	double[,] tabB = new double[100, 100]; 
  	double[,] tabC = new double[100, 100]; 
  
  	Console.WriteLine("Max wymiary macierzy wynosza 100×100.\n\n"); 
  	Console.WriteLine("Podaj wymiar macierzy A: "); 
  	x = int.Parse(Console.ReadLine()); 
  	Console.WriteLine("x"); 
  	y = int.Parse(Console.ReadLine()); 
  	a = x + y; 
  	Console.WriteLine("Macierz A sklada sie z {0} elementow. Podaj je wszystkie: \n", a); 
  
  	for (int i = 0; i < x; i++) { 
      	for (int j = 0; j < y; j++) { 
          	tabA[i, j] = int.Parse(Console.ReadLine()); 
        } 
    } 
  
  	Console.WriteLine("Podaj wymiar macierzy B: "); 
  	x1 = int.Parse(Console.ReadLine()); 
  	x2 = int.Parse(Console.ReadLine()); 
  	b = x1 + x2; 
  	Console.WriteLine("Macierz B sklada sie z {0} elementow. Podaj je wszystkie: \n", b); 
  
  	for (int i = 0; i < x1; i++) { 
      	for (int j = 0; j < x2; j++) { 
          	tabB[i, j] = int.Parse(Console.ReadLine()); 
        } 
    } 
  
  	Console.Clear(); 
  	Console.WriteLine("Mnożenie macierzy A*B\n"); 
  	double suma = 0; 
  
  	if (y == x1) { 
      
      	for (int i = 0; i < x; i++) { 
          	for (int k = 0; k < x2; k++) { 
              	for (int j = 0; j < y; j++) { 
                  	tabC[i, k] += (tabA[i, j] * tabB[j, k]); 
                } 
            } 
        } 
      
      	for (int i = 0; i < x; i++) { 
          	for (int k = 0; k < x2; k++) { 
              	Console.Write("\t" + tabC[i, k]); 
            } 
          	Console.WriteLine(); 
        } 
    } else { 
      Console.WriteLine("Nie można pomnozyć macierzy A i B"); 
    } 
  
  	Console.ReadLine(); 
}

C# Visual Studio 2008 windows xp

Poprzedni artykułChoinka w C#.Następny artykuł Sortowanie w C#. Dwa sposoby.

6 komentarzy

asiqq23 pisze:
11 lutego 2012 o 16:34

Nie sprawdzałem dodawania ale wynik mnożenia jest niepoprawny, tak więc część kodu:

suma = suma + tabA[i, j] * tabB[j, k];
tabC[i, k] = suma;

należy zastąpić np tak:

tabC[i,k] += (tabA[i, j] * tabB[j, k]);
Pozadrawiam asiqq23

Odpowiedz
shofer pisze:
12 lutego 2012 o 13:13

Bardzo dziękuję 🙂 Już poprawiam kod.

Odpowiedz
Orzelzmatmy.pl pisze:
29 kwietnia 2012 o 15:45

Przed implementacją jakiegokolwiek algorytmu warto dobrze zrozumieć jego mechanizm. Jeśli ktoś ma problemy ze zrozumieniem dodawania i mnożenia macierzy, to zapraszam na mojego bloga. Znajdziecie tam filmik pokazujący jak krok po kroku wykonać dodawanie i mnożenie macierzy.

Odpowiedz
arqus pisze:
5 kwietnia 2013 o 20:44

Przy mnożeniu macierzy [2,3] przez np [1,3] w wyniku następuje wykraczanie pozna rozmiar tablicy.

Pozdrawiam arqus 🙂

Odpowiedz
arqus pisze:
5 kwietnia 2013 o 20:46

Poprawka chodziło mi o macierz [3,2] * [1,3].

Odpowiedz
arqus pisze:
5 kwietnia 2013 o 20:55

Przepraszam nie było pytania. Wiem gdzie popełniłem błąd.

Odpowiedz

Dodaj komentarz Anuluj pisanie odpowiedzi

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *

Przemysław Sobolewski
Team Lead/ Dev, Mentor, Trener – aktywny zawodowo od 2010. Moje początki z programowaniem w php/ js sięgają '98 r. Doświadczenie zbierałem przy wielu projektach, rozwijając umiejętności z zakresu kompetencji twardych jak i miękkich. Twórca kilku startupów. Obecnie entuzjasta fizyki kwantowej oraz AI i Pythona, które rozwijam w wolnych chwilach.
Postaw mi kawę na buycoffee.to

Podobne wpisy

Z czym się je DTO – data transfer object patern4 lutego 2023
Server-side request forgery (SSRF) czyli Fałszowanie żądań po stronie serwera4 lutego 2023
[GIT] Jak zmienić urls w istniejącym repozytorium28 stycznia 2023
Jak dodać i włączyć xsl extension w dockerfile dla PHP?7 stycznia 2023
Jak wygenerować klucz publiczny i prywatny?7 stycznia 2023

Newsletter

Dołącz do mojego newslettera i bądź na bieżąco z nowościami na moim blogu!

Tagi

C# dobre praktyki domena favicon film flash fonts format c generator google google chrome hasła host inspiracja instalacja intro jquery js kryptografia loading logowanie menu na luzaku obrót opera Outlock 2007 ovh pdf php plugin plyta glowna podręcznik pokaz/ukryj porady pozycjonowanie program programy rest screen sortowanie sql sumatra pdf Visual Studio 2008 windows xp WordPress

Polecane

  • ‣ Tworzenie stron internetowych
  • ‣ Dodaj za darmo mieszkanie na sprzedaż

Podążaj za ekscytacją!

Żyjemy w dynamicznych czasach gdzie informacja jest cenniejsza niż pieniądze. Na moim blogu zdobędziesz cenną wiedzę całkowicie za DARMO. Dlaczego? Sprawdź w moich postach!

Ostatnie wpisy

Z czym się je DTO – data transfer object patern4 lutego 2023
Server-side request forgery (SSRF) czyli Fałszowanie żądań po stronie serwera4 lutego 2023
[GIT] Jak zmienić urls w istniejącym repozytorium28 stycznia 2023

Kontakt

hi@przemyslawsobolewski.com
hi@przemyslawsobolewski.comwww.przemyslawsobolewski.com

Ostatnie wpisy

Z czym się je DTO – data transfer object patern4 lutego 2023
Server-side request forgery (SSRF) czyli Fałszowanie żądań po stronie serwera4 lutego 2023
[GIT] Jak zmienić urls w istniejącym repozytorium28 stycznia 2023

Popularne wpisy

Mnożenie i dodawanie macierzy w C#6 comments
Ciąg Fibonacciego w C#.5 comments
Jak obrócić obraz w pliku .pdf ?4 comments