Skocz do zawartości
michalaf

C# Windows Forms - działania na macierzach - jak i co?

Rekomendowane odpowiedzi

Witam, mam aplikację konsolową w C#, która wykonuje działania - dodawanie, odejmowanie, transponowanie macierzy. Jednak teraz potrzebuję to wykonać w Windows Forms. Dopiero z tym zaczynam, jest to o tyle trudne, że nie mam pojęcia jak zrobić by np z text boxa, do którego użytkownik wpisze wybraną przez siebie macierz, program pobrał te dane do zmiennej, następnie z kolejnego tekst boxa pobrał dane drugiej macierzy, wykonał działanie i wyświetlił je w trzecim tekst boxie.

Jeśli chodzi o konsolę to tak to zrobiłem by pobrała macierz od uzytkownika;

            Console.Write("Prosze podac ilosc wierszy: ");
            int m = Convert.ToInt32(Console.ReadLine());
            Console.Write("Prosze podac ilosc kolumn: ");
            int n = Convert.ToInt32(Console.ReadLine());

macierz = new int[m, n];

            for (int i = 0; i < macierz.GetLength(0); i++)
            {
                for (int j = 0; j < macierz.GetLength(1); j++)
                {
                    Console.Write("Podaj element [" + i + "][" + j + "]: ");
                    macierz[i, j] = Convert.ToInt32(Console.ReadLine());
                }
            }

            Console.WriteLine("\nMacierz została pobrana.");

 

Ale nie wiem kompletnie jak to napisać jeśli chodzi o text box, by z niego pobierało te wartości.

W skrócie:

1. Pobranie od użytkownika dwóch macierzy, podobnie jak w konsoli, by napisał element po elemencie, najpierw ma podać ilość wierszy i kolumn, potem wartości

2. Wykonywanie działań - np dodanie dwóch macierzy, by wyświetliło sie w kolejnym text boxie

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Na wstępie zastrzegam, że w C# oraz Windows Forms nigdy nie robiłem. Ostatnie okienkowe aplikacje sporo lat temu.
Jak ktoś się lepiej zna, jest na bieżąco z okienkami, to niech mnie poprawia, a w skrajnych przypadkach pogoni kijem ;)

 

Nie podchodziłbym do okienek jak do konsoli. Generalnie to działa trochę inaczej i np. cała zawartość textboxa powinna być w jakiejś zmiennej, czy to bezpośrednio, czy przy użyciu odpowiedniej metody z obiektu boxa. Także raczej czeka cię czytanie z jakiegoś stringa, żeby rozbić to na poszczególne liczby i pozycje w macierzy.

Alternatywnie po podaniu rozmiarów macierzy można stworzyć odpowiednią liczbę textboxów, tak że każdy to jedna liczba w macierzy. Będzie łatwiej przerzucić wartości do tablicy/macierzy (ewentualnie ułożyć to sobie tak, że będzie tablica boxów) ale więcej zabawy w układanie elementów okienka.

 

Według mnie główna różnica względem konsoli, to obsługa samych okienek. Tutaj może być różnie, trzeba samemu zrobić pętlę sprawdzającą zdarzenia (wciśniecie przycisku, zaznaczenie checkboxa, wpisanie tekstu w textboxa, najechanie kursorem na element itp.) lub jest ona załatwiona z automatu przez bibliotekę (np. w QT łączyło się zdarzenia elementu z funkcją, która miała je obsłużyć). Generalnie traci się nieco liniowości wykonania programu.

Na twoim przykładzie, nie ma wypisu, obrania danych, wypisu, pobrania danych, wykonania obliczeń, wypisanie wyniku.
Będzie to wyglądało mniej więcej tak: tworzysz okienko i jego elementy, czekasz na wystąpienie zdarzenia (w tym momencie użytkownik może sobie dowolnie pisać w textboxie i zmieniać jego zawartość), użytkownik wcisnął przycisk "oblicz", to łapiesz to zdarzenie i zaczynasz je obsługiwać (pobranie danych z boxów, obliczenia, wypisanie wyniku), po obsłużeniu wracasz do oczekiwania na kolejne zdarzenie i tak w kółko aż do zamknięcia programu (czy to przez zamknięcie okna, czy w jakiś sposób wyjdziesz z programu przy obsłudze zdarzenia).

 

Jak bardzo chcesz, to obsługę podobną do konsoli da radę zrobić, tylko to IMO będzie upierdliwe w używaniu.
Np. jakieś pole z tekstem gdzie będziesz zmieniał zawartość na kolejne prośby ("podaj rozmiar", "podaj n-tą liczbę" itp.), obok pole tekstowe do wprowadzania liczb i przechwycenie entera lub przycisk do zatwierdzenia wpisania, gdzieś dalej będzie na bieżąco wypisywana wprowadzana macierz.

Przypuszczam, że będzie ciężko to napisać w formie tradycyjnej pętli, więc będzie trzeba jakoś pamiętać, w którym momencie się znajduje, żeby wywołać odpowiednie reakcje.
Ja bym jednak tą drogą nie szedł, za dużo kombinowania, zbyt niewygodne.

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Chcąc się jak najmniej bawić z UI to pewnie trzeba by było zrobić 4 kontrolki:

Textbox - macierz 1

Textbox - macierz 2

Textbox - macierz 3 (wynikowa)

Button - Policz

Macierz była by pobierana ze stringa i wyznaczana przez znaki nowej linii oraz spacji.

Poniżej prosty kod (na brudno pisałem, więc nie wiem ile z tego działa :E ) na sparwsowanie macierzy z textoboxa (texbox musi mieć możliwość wstawiania znaku nowej linii)

public Class MatrixField {
  	public MatrixField(int x; int y; int value)
    {
      X = x;
      y = y;
      Value = value;
    }
  
	public int X { get; private set; }
	public int Y { get; private set; }
	
	public int Value { get; private set; }
}

public Class Matrix {
	readonly List<MatrixField> fields = new List<MatrixField>();
  	public List<MatrixField> Fields => fields;
  
    //proste sprawdzenie czy element o danym x, y nie istnieje już w macierzy
    public bool Contains(int x; int y) {
      return fields.Where(field => field.X == x && field.Y == y).lenght > 0;
    }
  }
      
public static Class StringToMatrix {
      static Matrix FromString(string @string)
      {
        var matrix = new Matrix();
      	var rows = @string.Split('\n'); //dzieli stringi przy użyciu nowej znaku linii
      
      	for(var i = 0; i < rows.lenght; i++)
      	{
            //wartosci wiersza
            var row = rows[i].split(' '); //dzieli stringi przy użyciu spacji
                                       
      		for(var j = 0; j < row.lenght; j++)
            {
              //todo: dobrze by było przechwycić wyjątki parsowania, nie chcemy literek ani innych śmieci
              var value = int.Parse(row[j]);
              
              //todo: wypadało by się upewnić czy elementy się nie powtarzają, patrz Matrix.Contains(...)
              matrix.Fields.Add(j, i, value);
            }
      	}
        
        return matrix;
      }
}

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Dzięki za odpowiedzi, doceniam za swój wkład. Problem w tym, że nie umiem tego zaimplementować. 

@Matt91111  tylko gdzie ja mam to umieścić, bo mam tysiące błędów xd

Raczej to ma być w miarę prosty program, bo ledwo co zacząłem uczyć się podstaw na studiach. Robiliśmy prościutkie programy z podstawowymi int-ami, pętlami while, działania typu właśnie dodawanie macierzy, tablice do macierzy. Teraz ja juz nie wiem co tu robię. 

Dałem właśnie 3 pola tekstowe i 1 button, w kodzie mam tylko to póki co bo dalej nie wiem jak ruszyć

        private void button1_Click(object sender, EventArgs e)
        {
            string tekst = textBox1.Text;
            string tekst2 = textBox2.Text;
            string tekst3 = textBox3.Text;

            textBox3.Text = tekst + tekst2;

Sorry jeśli to tylko u mnie tak nie działa, bo prawie nic nie ogarniam :( 
To jest tylko przepisanie tekstu do 3 pola :P Teraz właśnie jak napisałeś trzeba byłoby to podzielić zeby między spacjami była nowa zmienna? Da się tu zrobić jak w konsole tablice tzn [0] [1] itd. ? A nowa linia to kolejny wiersz czy ja juz nwm.

To jest grubszy projekt, mam na to jeszcze trochę czasu, ale nie wiem czy się uda.
Jeszcze nie wspominałem ale ma być mozliwość wczytania macierzy z pliku :( I te same działania na nim. To juz pewnie jakoś udałoby mi sie znaleźć w necie dlatego nie chciałem tu pisać zeby ktoś się nie przeraził

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Sęk w tym iż w moim przykładzie "MatrixField" jest pojedynczym polem co będzie wymagało zmiany podejścia w obliczeniach, alternatywnie kod StringToMatrix.FromString(...) można by przerobić tak aby na początku zainicjalizować tablicę a później przypisać do niej wartości. Kod który dzieli Ci stringi na rzędy w sumie już masz w tej metodzie. Jedyne co trzeba zrobić to pobranie ilości wierszy i kolumn aby zainicjalizować tablicę.

StringToMatrix.FromString(tekst) powinien wypluć Ci macierz z dowolnego stringa, obojętnie czy jest to pole tekstowe czy cały plik.

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

@Matt91111  na razie mam takie coś, wykonuje dodawanie na określonych juz w kodzie tablicach


            int[,] matrix = new int[,] {{5, 6},
            { 5, 6} };

            string matrixString = "";
            for (int i = 0; i < matrix.GetLength(0); i++)
            {
                for (int j = 0; j < matrix.GetLength(1); j++)
                {
                    matrixString += matrix[i, j].ToString();
                    matrixString += " ";
                }

                matrixString += Environment.NewLine;
            }
            textBox1.Text = matrixString;


            int[,] matrix2 = new int[,] {{1, 2},
            { 1, 7} };

            string matrixString2 = "";
            for (int i = 0; i < matrix2.GetLength(0); i++)
            {
                for (int j = 0; j < matrix2.GetLength(1); j++)
                {
                    matrixString2 += matrix2[i, j].ToString();
                    matrixString2 += " ";
                }

                matrixString2 += Environment.NewLine;
            }
            textBox2.Text = matrixString2;


            int [,] matrixwynik = new int[1,1];

            matrixwynik = new int[matrix.GetLength(0), matrix2.GetLength(1)];

            string matrixStringwynik = "";

            for (int i = 0; i < matrixwynik.GetLength(0); i++)
            {
                for (int j = 0; j < matrixwynik.GetLength(1); j++)
                {
                    
                    {
                        matrixwynik[i, j] = matrix[i, j] + matrix2[i, j];
                        matrixStringwynik += matrixwynik[i, j].ToString();
                        matrixStringwynik += " ";
                    }
                    
                }
                matrixStringwynik += Environment.NewLine;
            }

            textBox3.Text = matrixStringwynik;

bardzo sugerowałem się tym co zrobiłem wczesniej w konsoli, działa, tylko teraz przerobić to na to co podaje użytkownik :( Popiszę coś i sprawdzę czy coś zadziała z tego co podałeś. 
Jeśli ktoś jeszcze może mnie bardziej nakierować to poproszę

 

Aaa jeszcze w sumie to mam pytanie jeszcze co to znaczy znak " += "? Bo na jakiejś stronce znalazłem i tak napisałem ale w sumie to jeszcze czegoś takiego nie widziałem

Macierz prototyp.png

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach
Napisano (edytowane)

Ja w ogóle takiej funkcji przypisać nie mogę  - StringToMatrix.FromString, po prostu czyta jako zwykły tekst i tyle, wczesniej przypisałem tablice int[,] matrix0 = new int[3, 3];

Edytowane przez michalaf

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Ogólne uwagi do kodu:

Używaj komentarzy aby kod był czytelny:


            int[,] matrix = new int[,] {{5, 6},
            { 5, 6} };

            string matrixString = "";
			//Formatujemy macierzy
            for (int i = 0; i < matrix.GetLength(0); i++)
            {
                for (int j = 0; j < matrix.GetLength(1); j++)
                {
                    matrixString += matrix[i, j].ToString(); //konwertujemy int na string
                    matrixString += " ";
                }

                matrixString += Environment.NewLine;
            }
            textBox1.Text = matrixString; //przypisujemy wartość textboxa

Wstawiaj całe metody(funkcje):

void Oblicz_OnClick(...)
{
   //....
} 

Teraz do tego kodu który wrzuciłeś:

- Umieszczasz gotowe macierze z poziomu kodu, to nie zadziała chcąc je przeczytać z "textboxa"

- StringToMatrix.FromString() jest niepubliczny (moja wina :E tak jak mówiłem nie testowałem)

- Sugeruję użyć funkcji String.Split('\n') oraz String.Split(' ') do iteracji wartości macierzy tak jak zrobiłem to w StringToMatrix

Ponadto: dobrze by było umieścić w klasie matrix możliwość odwołania się do konkretnego elementu:

public Class Matrix {
	readonly List<MatrixField> fields = new List<MatrixField>();
  	public List<MatrixField> Fields => fields;
  
    //proste sprawdzenie czy element o danym x, y nie istnieje już w macierzy
    public bool Contains(int x; int y) {
      return fields.Where(field => field.X == x && field.Y == y).lenght > 0;
    }
  
  	public int GetAt(int x; int y) {
      if(!Contains(x, y))
        throw new InvalidOperationExceptin($"Macierz nie zawiera elementu na: X ${x} Y ${y}");
      
      return fields.Where(field => field.X == x && field.Y == y).First();
    }
  }

I kilka pytań kontrolnych:

Wiesz jak działają metody (funkcje): podstawowe typy danych które zwracają, paramatery?

Wiesz jak działają klasy, dlaczego się ich używa, konstruktory, dostępność (public, protected, internal, private)?

Sposób użycia z mojego przykładu:

var matrixString1 = Textbox1.Text;
var matrix = StringToMatrix.FromString(matrixString1);

var matrixResult = new Matrix();

//wykonywanie działań w moim podejściu
for(var i = 0; i < matrix.Fields.Max(field => field.X); i++)
{
  for(var j = 0; j < matrix.Fields.Max(field => field.Y) j++)
  {
  	 var wartosc = matrix.GetAt(i, j).Value; //wartosc elementu na x, y
     
     //dzialanie
     // var nowaWartosc
     
     matrixResult.Add(new MatrixField(i, j, nowaWartosc));
  }
}

I dopiero matrixResult trzeba by było sformatować tak jak Ty to zrobiłeś i umieścić w wynikowym textboxie.

Operator =+ w przypadku string służy do dopisania do już instniejącej zawartości:

string zdanie = "Ala";

zdanie =+ " ma";

//wartosc zmiennej zdanie: "Ala ma"

zdanie =+ " kota";

//wartosc zmiennej zdanie: "Ala ma kota"

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

chyba zbyt wcześnie dla autora jest wprowadzać temat obiektywności ...

zmiena += 1;

jest równoważne

zmiena = zmiena + 1;

macierz to tablica liczb wiec tworzenie specjalnej klasy dla pola w macierzy nie ma sensu a szczególnie przechowywanie w nim indeksów

wtedy będzie mieć listę int'ów a nie  MatrixField'ów

w idei clean code'u metoda StringToMatrix.FromString() nie powinna być konstruktorem konwertującym klasy matrix? (Matrix(String))

@michalaf musisz prze-konwertować wejściową macierz zapisaną jako String do postaci tablicy int i StringToMatrix.FromString() od Matt91111 jest tego dobrym przykładem

konwertowanie wejściowych macierzy na String'i jest bezcelowe (chyba że to forma ćwiczenia) jedynie wynikowej

ostrzegam na przyszłość; dziś standardem jest jest WPF a nie Windows Forms

ale WPF to zdecydowanie bardziej skomplikowany temat ;)

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach
Napisano (edytowane)

@Auberon WPF nie znam, ale nie mam wyboru póki co, bo wykładowca wymaga zrobienia tego w Formsach :(  

var matrix = new Matrix();
      	var rows = @string.Split('\n');

nawet to mi nie działa w kodzie. Mózg mi pęknie zaraz bo kombinuję i kombinuję ale nic nie wychodzi z tego co sugerujecie, nie jestem jeszcze wprawiony. Konsolę jeszcze jako tako sobie ogarniałem, posługiwałem się głównie Console.writeline, zwykłymi int-ami i tyle, @Matt91111public, protected, internal, private - nie wiem, robiłem domyślnie. Przy konsoli z macierzami robiłem kolejne static void z ref-ami i tyle. Dlatego wiedzą stoję pewnie na zupełnym minimum, a to co robimy ma nas wprawić w prostsze programowanie.

String.Split('\n') tego nie robiłem jeszcze i ahgh... niby mam Twój kod ale i tak mi nie działa, a sam gryzę się i nie umiem napisać zeby działało

 

Nie da rady żeby ktoś mi napisał prostym jezykiem, tak żeby mi działało - uzytkownik wpisuje liczby do textboxa 1, wpisuje liczby do textboxa 2, klika button "zatwierdź", zawartość texboxa 1 przechodzi do int [ , ] , to samo z textbox 2, są więc 2 int [ , ]. Dalej juz będę umiał = dodawanie itd. dwóch intów, następnie wynikowe inty [,] przejdą do stringa i wyświetlą sie w 3cim textboxie.

Bez tych fieldów bo mi nie działają

Edytowane przez michalaf

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Sorki ze tak nie kumam, bo moze jakbym był bardziej kumaty to to co piszecie by mi zadziałało. Nie gardzę tym i nie idę na gotowe, tylko juz tyle się męczę i nie mam pomysłu jak to ciągnąć

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

@michalaf wrzuć co masz, jeżeli IDE wyświetla Ci błędy to daj znać jakie.

Ja bym się tego nie podejmował bez poznania zasad obiektowości, wykładowca nakierował was chociaż w jaki sposób do tego podejść?

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Windows Forms teraz cisną w szkołach? Technologia sprzed 20 lat, która nie nadaje się do użytku na wyświetlaczach HiDPI. Niech ktoś uświadomi Twojego nauczyciela/doktora/profesora by się zainteresował C# WPF z XAML (nie ma problemu z wyświetlaniem).

Godzinę temu, Auberon napisał:

ostrzegam na przyszłość; dziś standardem jest jest WPF a nie Windows Forms

ale WPF to zdecydowanie bardziej skomplikowany temat ;)

Idzie się przyzwyczaić do WPF ;)

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

@Auberon najwięcej sensu pewnie miało by stworzenie "extension class" ale celowo nie chcę komplikować autorowi jeszcze bardziej zadania

Ja uważam, że lepiej jest wykorzystać MatrixField z kilku powodów:

- łatwiejsze zarządzanie obiektami z listy, nie musimy deklarować wielkości tablicy

- możliwość wykorzystania LINQ

- możliwość "dopisania" do klasy matrix metod typu Add(...) oraz wykonywanie sprawdzeń i walidacje macierzy

- notacja tablic w C# to jest tragedia

 

Nie mniej dla autora to faktycznie chyba trochę za wcześnie i będzie musiał zostać z tablicami

2 minuty temu, Kyle_PL napisał:

Windows Forms teraz cisną w szkołach? Technologia sprzed 20 lat, która nie nadaje się do użytku na wyświetlaczach HiDPI. Niech ktoś uświadomi Twojego nauczyciela/doktora/profesora by się zainteresował C# WPF z XAML (nie ma problemu z wyświetlaniem).

Idzie się przyzwyczaić do WPF ;)

Ja bym powiedział, że teraz już WPF ma coraz mniej sensu (a co dopiero formsy), ale reformowanie wykładowców to ciężka sprawa :E

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach
7 minut temu, Matt91111 napisał:

Ja bym powiedział, że teraz już WPF ma coraz mniej sensu (a co dopiero formsy), ale reformowanie wykładowców to ciężka sprawa :E

Zainteresowałeś mnie ;) Co byś teraz polecił zamiast WPF? (i jakie to ma zalety wzgl. WPF)

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach
32 minuty temu, michalaf napisał:

 WPF nie znam, ale nie mam wyboru póki co, bo wykładowca wymaga zrobienia tego w Formsach :(  


var matrix = new Matrix();
      	var rows = @string.Split('\n');

nawet to mi nie działa w kodzie. Mózg mi pęknie zaraz bo kombinuję i kombinuję ale nic nie wychodzi z tego co sugerujecie, nie jestem jeszcze wprawiony. Konsolę jeszcze jako tako sobie ogarniałem, posługiwałem się głównie Console.writeline, zwykłymi int-ami i tyle,

jeśli pójdziesz do roboty to będą od ciebie wymagać WPF ale jeszcze nie teraz

wywal @ z @string.Split

1 minutę temu, Kyle_PL napisał:

Idzie się przyzwyczaić do WPF ;)

tylko to wymaga większej wiedzy niż Windows Forms

2 minuty temu, Matt91111 napisał:

@Auberon najwięcej sensu pewnie miało by stworzenie "extension class" ale celowo nie chcę komplikować autorowi jeszcze bardziej zadania

Ja uważam, że lepiej jest wykorzystać MatrixField z kilku powodów:

- łatwiejsze zarządzanie obiektami z listy, nie musimy deklarować wielkości tablicy

- możliwość wykorzystania LINQ

- możliwość "dopisania" do klasy matrix metod typu Add(...) oraz wykonywanie sprawdzeń i walidacje macierzy

- notacja tablic w C# to jest tragedia

ale czy dodajesz do listy (kontenera) int'y czy obiekty to nie ma żadnego znaczenia

8 minut temu, Kyle_PL napisał:

Zainteresowałeś mnie ;) Co byś teraz polecił zamiast WPF? (i jakie to ma zalety wzgl. WPF)

no jasnej że proste że QT ;) 

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach
4 minuty temu, Kyle_PL napisał:

Zainteresowałeś mnie ;) Co byś teraz polecił zamiast WPF? (i jakie to ma zalety wzgl. WPF)

Electron, kod jest super przenośny. Wiadomo, że jeżeli się zna WPFa i pisze tylko pod windowsa to nie ma jakiejś dużej konieczności przesiadki, ale Electron + downolny popularny framework frontendowy to już jest chyba nowy trend. Wiadomo, że ma to pewne ograniczenia i sporo aplikacji wykorzystuje (tak gdzie to konieczne) natywne biblioteki pisane pod dany OS (c/c++) + Electron.

  • Thanks 1

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach
Napisano (edytowane)

@Kyle_PL Wiesz co ja mogę... wykładowca wymaga tego w Forms więc muszę czy chcę czy nie. 

@Matt91111 Nakierował? Chciałbym, tak naprawdę to cały semestr mieliśmy konsole, ostatnie zadanie było właśnie dodawanie, transponowanie macierzy, wczytywanie z pliku - wybór z menu. Na ostatnich zajęciach powiedział że mamy to wykonać tylko w Formsach, "wprowadzenie" zrobił właśnie na tych samych zajęciach - do końca semestru to robimy zadanie i przesyłamy na zaliczenie. Wprowadzenie polegało na przedstawieniu przybornika - label, text box, button i proste wytumaczenie gdzie umieścić kod jak klikniemy np button, pokazał tez kod na wyświetlenie tego samego w textbox 2 co w textbox 1 i w sumie TO TYLE Z WPROWADZENIA I NAKIEROWANIA. Powiedział że mamy korzystac z tych macierzy co robiliśmy w konsoli i koniec.

Więc nasza praca polega mniej więcej na tym kto wygrzebie głębiej z neta :( 

Dlatego dodatkowe obarczanie się jakimiś MatrixField co nawet nie wiem co to jest i nie działa to dla mnie naprawdę wielkie wyzwanie, dlatego wolę zrobić to krótko, szybko i minimum co ode mnie wymagane, niestety zbliza się sesja więc i matma, algorytmy i mniej wazne przedmioty jak socjologia trzeba zaliczyć

Edytowane przez michalaf

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

na dzisiaj to chyba dałbym sobie spokój i usiadł do tego po przespanej nocy ...

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach
Napisano (edytowane)

@Matt91111 proszę, co mam robić :(

blad csharp.png

@Auberon Usiadłem dzisiaj do tego po przespanej nocy, myślałem że jak uda mi się zrobić to tak jak do tej pory czyli z gotowymi intami [,] tablic to pobrać od uzytkownika będzie mi łatwiej, myslałem że jestem blisko zrozumienia tego i napisania tego programu, ale okazuje się że wcale nie ...

Edytowane przez michalaf

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach
4 minuty temu, michalaf napisał:

@Matt91111 proszę, co mam robić :(

blad csharp.png

static Matrix FromString(string @string)

jeszcze tutaj musisz wywalić @ i  string z dużej litery (String)

dodatkowo nie masz zdefiniowanej klasy Matrix

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach
Napisano (edytowane)

Jeżeli miałbym coś zasugerować.

Użyj kontrolki DataGridView

Będziesz miał coś w rodzaju excela do wprowadzania danych.

Nic nie trzeba bedzie parsować i kombinować

 

Zadeklarujesz rozmiar macierzy, wygenerujesz odpowiednią ilość kolumn i wierszy.

Edytowane przez darkmartin
  • Like 1

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

zamiast Matrix możesz użyć List<int>

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

No cóż jak wykładowca każe to nie ma rady :E. Trzeba na tablicach zrobić.

String.Split() to funkcja która wykonuje operację bezpośrednio na zmiennej typu string:

string matrix = Textbox1.Text;
string[] podzielone = matrix.Split(...);

Więcej o string.Split() https://docs.microsoft.com/en-us/dotnet/csharp/how-to/parse-strings-using-split

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Tak split, jest tu dobrym i prostym rozwiażaniem.

Macierz to wiersze i kolumny.

Najpierw dzielisz cały string na wiersze, separatorem jest tu znak nowej linii.

Potem każdy wiersz dzielisz na kolumny, separatorem jest spacja.

 

Potem sobie to załaduj do tablicy i możesz już wykonywać operacje matematyczne.

  • Upvote 1

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Jeśli chcesz dodać odpowiedź, zaloguj się lub zarejestruj nowe konto

Jedynie zarejestrowani użytkownicy mogą komentować zawartość tej strony.

Zarejestruj nowe konto

Załóż nowe konto. To bardzo proste!

Zarejestruj się

Zaloguj się

Posiadasz już konto? Zaloguj się poniżej.

Zaloguj się

  • Ostatnio przeglądający   0 użytkowników

    Brak zarejestrowanych użytkowników przeglądających tę stronę.

×
×
  • Dodaj nową pozycję...