Skip to content

Instantly share code, notes, and snippets.

@Pan-Maciek
Created January 20, 2017 19:24
Show Gist options
  • Select an option

  • Save Pan-Maciek/3bb9632df80838f47880eebd1e1b5eae to your computer and use it in GitHub Desktop.

Select an option

Save Pan-Maciek/3bb9632df80838f47880eebd1e1b5eae to your computer and use it in GitHub Desktop.
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