Mnożenie i dodawanie macierzy w C#.


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(); }

Podziel się :
  • Facebook
  • Twitter
  • email
  • Drukuj
  • PDF

Może Ci się również spodoba

6 komentarzy

  1. arqus pisze:

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

  2. arqus pisze:

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

  3. arqus pisze:

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

    Pozdrawiam arqus 🙂

  4. 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.

  5. shofer pisze:

    Bardzo dziękuję 🙂 Już poprawiam kod.

  6. asiqq23 pisze:

    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

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *

This site uses Akismet to reduce spam. Learn how your comment data is processed.