Created
January 20, 2017 19:24
-
-
Save Pan-Maciek/3bb9632df80838f47880eebd1e1b5eae to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| using System; | |
| using System.Collections.Generic; | |
| using System.Linq; | |
| using System.Text; | |
| using System.Threading.Tasks; | |
| namespace macierze | |
| { | |
| // Uwagi ogólne | |
| // trzymaj sie nazewnictwa spójnego boo tu masz matric a zaraz jest dodaj XD - 1 język | |
| class Matrix | |
| { | |
| private string symbol; | |
| public string Symbol { | |
| get { | |
| return symbol; | |
| } | |
| set { | |
| symbol = value; | |
| } | |
| } | |
| public int m { get; /*private*/ set; }// raczej nie chcesz zeby ktoś modyfikował sb rozmiar macierzy po jej utworzeniu a jak chcesz to trzeba było by to uwzględnić | |
| public int n { get; /*private*/ set; } | |
| // nie daj ludzia podmienic sobie tej tablicy XD | |
| // a co jak ktoś chce dać w macierzy 0.5 ? | |
| /*private*/ public /*double*/int[,] element { get; set; } // tak naprawde to to powinno być prywatne i fajnie było by użyć indeksera o tak | |
| //public double this[int n, int m] { | |
| // get { return element[n, m]; } // + sprawdzanie czy nie wychodzi poza zakres jak tak to throw new Exception("powód"); | |
| // set { element[n, m] = value; } // value to wartość z = value | |
| //} | |
| public Matrix() { } // pusty konstruktor nie jest ci potrezebny a wręcz szkodzi w sumie | |
| //KONSTRUKTOR | |
| public Matrix(string name) {// macież z nazwą ale bez rozmiaru ? powinno się rozdzielić tworzenie macierzy jako klasy od tworzenia jej z inputu tym może sie zajac całkowici inna funkcja gdzieś poza klasa matrix | |
| symbol = name; | |
| Console.Write("Podaj liczbę wierszy macierzy " + symbol+": "); | |
| try | |
| { | |
| m = int.Parse(Console.ReadLine()); | |
| } | |
| catch (Exception ex){ | |
| Console.WriteLine("Błąd wprowadzania danych: " + ex.ToString()); | |
| Console.ReadKey(); | |
| System.Environment.Exit(-1); // throw new Exception - podawaj powód zamkniecia programu a nie poprostu go zamykaj | |
| } | |
| Console.Write("Podaj liczbę kolumn macierzy " + symbol + ": "); | |
| try | |
| { | |
| n = int.Parse(Console.ReadLine()); | |
| } | |
| catch (Exception ex) | |
| { | |
| Console.WriteLine("Błąd wprowadzania danych: " + ex.ToString()); | |
| Console.ReadKey(); | |
| System.Environment.Exit(-1);// throw new Exception XD | |
| } | |
| // a w zasadzie to nie powinno być tej całej czescie XD | |
| // dopiero to ma sens | |
| element = new int[m, n]; | |
| for (int i = 0; i < m; i++) { // w c# wszystkei tablice sa odrazu inicjowane zerami wiec te petle możesz sb darować | |
| for (int j = 0; j < n; j++) | |
| { | |
| element[i, j] = 0; | |
| } | |
| } | |
| } | |
| //WYŚWIETLANIE | |
| public void wyswietl() { | |
| Console.WriteLine("Macierz: " + symbol); | |
| for (int i = 0; i < m; i++) | |
| { | |
| for (int j = 0; j < n; j++) | |
| { | |
| Console.Write(element[i, j]); | |
| if (j < n - 1) { Console.Write(" "); } // użyj sb '\t' to działa jak tabulacja | |
| } | |
| Console.WriteLine(); | |
| } | |
| } | |
| //WPISYWANIE DANYCH | |
| public void wpiszDane() { | |
| Console.WriteLine("Uzupełnij danymi macierz " + symbol + "."); // wpisz dane powinna być funkcja zewnętrzna nie potrzebuje byc wewnatrz klasy macierz bo jest tylko interfejsem dla użytkownika a nie funkcjonalnoscia klasy | |
| for (int i = 0; i < m; i++) | |
| { | |
| for (int j = 0; j < n; j++) | |
| { | |
| int wartosc = 0; | |
| Console.Write("Podaj wartosc do [" + i + "]" +"["+ j + "]"+": "); | |
| try | |
| { | |
| wartosc = int.Parse(Console.ReadLine()); | |
| } | |
| catch (Exception ex) | |
| { | |
| Console.WriteLine("Błąd wprowadzania danych: " + ex.ToString()); | |
| Console.ReadKey(); | |
| System.Environment.Exit(-1); // taaa jak masz po try wychodzić z programu piszac jaki błąd to dokładnie to samo dzieje sie bez try tylko dostajesz wiece informacji wiec sam sb szkodzisz XD | |
| } | |
| element[i, j] = wartosc; | |
| } | |
| } | |
| } | |
| //SUMOWANIE | |
| public Matrix dodaj(Matrix tab, string nazwa) { | |
| Matrix wynikowa = new Matrix(); // no i widzisz gdyby twój konstruktor uwzględniał rozmiar to byś zrobił sbtylko | |
| // new Matrix(tab.m, tab.n) | |
| // możesz użyc var żeby nie pisać matrix | |
| // var wynikowa = new Matrix(tab.m, tab.n) | |
| wynikowa.m = tab.m; | |
| wynikowa.n = tab.n; | |
| wynikowa.element = new int[wynikowa.m, wynikowa.n]; // tym powinien zając sie konstruktor | |
| wynikowa.symbol = nazwa; | |
| int m = tab.m; // to akurat jest dobre bo kaszowanie właściwości obiektu jest szybsze aczkolwiek gdyby to było pole to już nie potrzebne | |
| int n = tab.n; // w sumie to zrobił bym int m = tab.m, n = tab.n; ale to szczegół estetyczny w sumie mało ważne | |
| for (int i = 0; i < m; i++) | |
| { | |
| for (int j = 0; j < n; j++) | |
| { | |
| wynikowa.element[i, j] = this.element[i,j] + tab.element[i, j]; | |
| } | |
| } | |
| return wynikowa; | |
| } | |
| //ODEJMOWANIE | |
| public Matrix odejmij(Matrix tab, string nazwa) | |
| { | |
| Matrix wynikowa = new Matrix(); // podobnie jak dodawanie | |
| wynikowa.m = tab.m; | |
| wynikowa.n = tab.n; | |
| wynikowa.element = new int[wynikowa.m, wynikowa.n]; | |
| wynikowa.symbol = nazwa; | |
| int m = tab.m; | |
| int n = tab.n; | |
| for (int i = 0; i < m; i++) | |
| { | |
| for (int j = 0; j < n; j++) | |
| { | |
| wynikowa.element[i, j] = this.element[i, j] - tab.element[i, j]; | |
| } | |
| } | |
| return wynikowa; | |
| } | |
| //MNOŻENIE PRZEZ LICZBE (SKALARNE) | |
| public Matrix pomnozSkalarnie(int liczba) // super tylko pozbył bym sie tego członu przez skalar bo jak ktoś poda liczbe to jest dośc oczywiste dla niego ze to jest skalar | |
| { | |
| for (int i = 0; i < m; i++) | |
| { | |
| for (int j = 0; j < n; j++) | |
| { | |
| this.element[i, j] *= liczba; | |
| } | |
| } | |
| return this; | |
| } | |
| //MNOŻENIE MACIEŻY PRZEZ MACIEŻ | |
| public Matrix pomnozPrzezMacierz(Matrix tab, string nazwa) // same usunął bym ten człon nazwy przez macierz | |
| { | |
| Matrix wynikowa = new Matrix(); // tak jak poprzenio | |
| wynikowa.m = this.m; | |
| wynikowa.n = tab.n; | |
| wynikowa.symbol = nazwa; | |
| wynikowa.element = new int[this.m, tab.n]; | |
| for (int i = 0; i < wynikowa.m; i++) | |
| { | |
| for (int j = 0; j < wynikowa.n; j++) | |
| { | |
| wynikowa.element[i, j] = 0; // ? tablica jest inicjowana zerami | |
| for (int k = 0; k < this.n; k++) | |
| { | |
| wynikowa.element[i, j] = wynikowa.element[i, j] + this.element[i, k] * tab.element[k, j]; | |
| //wynikowa.element[i, j] += element[i, k] * tab.element[k, j]; | |
| // a z indekserem to wogule | |
| //wynikowa[i, j] += element[i, k] * tab[k, j]; | |
| } | |
| } | |
| } | |
| return wynikowa; | |
| } | |
| //WYZNACZNIK MACIEŻY | |
| /*public int wyznacznik() { | |
| int delta = 0; | |
| return delta; | |
| }*/ | |
| } | |
| } |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment