Visual Basic: Tablice, sortowanie, r. ak. 2014/2015 Public Class Form1 Deklaracja tablicy pól tekstowych o 4 wierszach i 5 kolumnach Dim TabPol(3, 4) As TextBox Deklaracja tablicy pól tekstowych o 4 wierszach i 1 kolumnie Dim TabPolSort(3) As TextBox Deklaracja jednowymiarowej dynamicznej tablicy typu znakowego Dim TabSort As String() Deklaracja dwuwymiarowej dynamicznej tablicy typu znakowego Dim TabWartosci As String(,) Private Sub Form1_Load(ByVal sender As Object, _ ByVal e As System.EventArgs) Handles Me.Load Przypisanie pól tekstowych z sekcji "Tablica" formularza do elementów tablicy TablicaPol TabPol(0, 0) = txt00 TabPol(0, 1) = txt01 TabPol(0, 2) = txt02 TabPol(0, 3) = txt03 TabPol(0, 4) = txt04 TabPol(1, 0) = txt10 TabPol(1, 1) = txt11 TabPol(1, 2) = txt12 TabPol(1, 3) = txt13 TabPol(1, 4) = txt14 TabPol(2, 0) = txt20 TabPol(2, 1) = txt21 TabPol(2, 2) = txt22 TabPol(2, 3) = txt23 TabPol(2, 4) = txt24 TabPol(3, 0) = txt30 TabPol(3, 1) = txt31 TabPol(3, 2) = txt32 TabPol(3, 3) = txt33 TabPol(3, 4) = txt34 Przypisanie pól tekstowych wyników sortowania do elementów tablicy TabPolSort TabPolSort(0) = txtsort0 TabPolSort(1) = txtsort1 TabPolSort(2) = txtsort2 TabPolSort(3) = txtsort3 1
Private Sub btnpokaz_click(byval sender As Object, _ ByVal e As System.EventArgs) Handles btnpokaz.click Pokazanie wybranych elementów tablicy pól Dim i, j As Integer Dim LK, LW As Integer LW = CInt(cmbWiersze.Text) LK = CInt(cmbKolumny.Text) If LW > 4 Or LK > 5 Then Tyt = "Nieprawidłowe dane" Kom = "Maksymalna liczba wierszy wynosi 4," & vbcrlf & _ "maksymalna liczba kolumn wynosi 5." & vbcrlf & vbcrlf & _ "Proszę skorygować wprowadzone wartości." MessageBox.Show(Kom, Tyt, MessageBoxButtons.OK, _ MessageBoxIcon.Exclamation) Else For i = 0 To LW - 1 For j = 0 To LK - 1 TabPol(i, j).visible = True Tyt = "Błąd wykonania programu" End Private Sub btnukryj_click(byval sender As Object, _ ByVal e As System.EventArgs) Handles btnukryj.click Ukrywanie wszystkich pól tekstowych służących do wprowadzania wartości elementów tablicy i zawierających wyniki obliczeń Dim i, j As Integer For i = 0 To 3 For j = 0 To 4 If TabPol(i, j).visible Then TabPol(i, j).visible = False If TabPolSort(i).Visible Then TabPolSort(i).Visible = False txtmax.visible = False txtlnum.visible = False txtsuma.visible = False Tyt = "Błąd ukrywania pól tablicy" End 2
Private Sub btnprzepisz_click(byval sender As Object, _ ByVal e As System.EventArgs) Handles btnprzepisz.click Ustalenie wymiaru tablicy znakowej i przepisanie do niej zawartości wyświetlanych pól tablicy pól tekstowych. ReDim TabWartosci(CInt(cmbWiersze.Text) - 1, CInt(cmbKolumny.Text) - 1) Przepisanie wpisów z tablicy pól tekstowych do tablicy wartości TabWartosci(w, k) = TabPol(w, k).text Włączenie przycisków analizy zawartości tablicy btnmax.enabled = True btnnumeryczne.enabled = True btnglownaprzek.enabled = True btnsortuj.enabled = True Tyt = "Błąd przepisywania pól tekstowych" End Private Sub btnwyczysc_click(byval sender As Object, _ ByVal e As System.EventArgs) Handles btnwyczysc.click Wyczyszczenie pól tekstowych formularza (z wyjątkiem pól wyboru rozmiaru tablicy) i tablic znakowych w kodzie TabPol(w, k).text = "" TabWartosci(w, k) = "" TabPolSort(w).Text = "" TabSort(w) = "" txtlnum.text = "" txtmax.text = "" txtsuma.text = "" txtnrkol.text = "" Tyt = "Błąd czyszczenia pól formularza" End 3
Private Sub btnmax_click(byval sender As Object, _ ByVal e As System.EventArgs) Handles btnmax.click Odnalezienie największego ciągu znakowego w tablicy znakowej utworzonej w kodzie Dim Najwiekszy As String Wstępnie zakładamy, że element (0,0) jest największy Najwiekszy = TabWartosci(0, 0) If Najwiekszy < TabWartosci(w, k) Then Najwiekszy = TabWartosci(w, k) txtmax.text = Najwiekszy txtmax.visible = True Tyt = "Błąd poszukiwania maksimum" End Private Sub btnnumeryczne_click(byval sender As Object, _ ByVal e As System.EventArgs) Handles btnnumeryczne.click Odnalezienie liczby elementów numerycznych w tablicy znakowej utworzonej w kodzie Dim Liczby As Integer Liczby = 0 inicjalizacja If IsNumeric(TabWartosci(w, k)) Then Liczby = Liczby + 1 txtlnum.text = Liczby.ToString txtlnum.visible = True Tyt = "Błąd zliczania liczb" End Private Sub btnglownaprzek_click(byval sender As Object, _ ByVal e As System.EventArgs) Handles btnglownaprzek.click Sumowanie liczb na głównej przekątnej (tylko dla tablic kwadratowych) Dim i As Integer Dim Suma As Single If CInt(cmbWiersze.Text) <> CInt(cmbKolumny.Text) Then Tyt = "Wykonanie operacji jest niemożliwe" Kom = "Tablica nie jest tablicą kwadratową" MessageBox.Show(Kom, Tyt, MessageBoxButtons.OK, _ MessageBoxIcon.Exclamation) 4
Else Suma = 0.0 For i = 0 To CInt(cmbWiersze.Text) - 1 If IsNumeric(TabWartosci(i, i)) Then Suma = Suma + CSng(TabWartosci(i, i)) txtsuma.text = Suma.ToString txtsuma.visible = True Tyt = "Błąd obliczania sumy liczb na głównej przekątnej" End Private Sub btnsortuj_click(byval sender As Object, _ ByVal e As System.EventArgs) Handles btnsortuj.click Sortowanie elementów wybranej kolumny tablicy znakowej Dim i, j, NrKol As Integer Dim Schowek As String Dim Tyt, Kom As String NrKol = CInt(txtNrKol.Text) Określenie rozmiaru tabeli "TabSort" i przepisanie do niej kolumny z tabeli "TabelaWartosci" ReDim TabSort(CInt(cmbWiersze.Text) - 1) For i = 0 To CInt(cmbWiersze.Text) - 1 TabSort(i) = TabWartosci(i, NrKol) Sortowanie elementów kolumny wg algorytmu bąbelkowego For j = 0 To CInt(cmbWiersze.Text) - 2 For i = 0 To CInt(cmbWiersze.Text) - 2 If TabSort(i) > TabSort(i + 1) Then Schowek = TabSort(i) TabSort(i) = TabSort(i + 1) TabSort(i + 1) = Schowek Wyświetlenie wyników For i = 0 To CInt(cmbWiersze.Text) - 1 TabPolSort(i).Text = TabSort(i) TabPolSort(i).Visible = True Tyt = "Błąd sortowania kolumny " & txtnrkol.text End Private Sub btnzakoncz_click(byval sender As Object, _ ByVal e As System.EventArgs) Handles btnzakoncz.click Koniec pracy programu End 5
Private Sub cmbwiersze_textchanged(byval sender As Object, _ ByVal e As System.EventArgs) Handles cmbwiersze.textchanged Zmiana definicji tablicy w kodzie przy zmianie ustawień list rozwijalnych (nie została zastosowana, należałoby jeszcze skorygować wyświetlanie pól) If IsNumeric(cmbKolumny.Text) Then ReDim TabWartosci(CInt(cmbWiersze.Text) - 1, CInt(cmbKolumny.Text) - 1) Else ReDim TabWartosci(CInt(cmbWiersze.Text) - 1, 0) Private Sub cmbkolumny_textchanged(byval sender As Object, _ ByVal e As System.EventArgs) Handles cmbkolumny.textchanged Zmiana definicji tablicy w kodzie przy zmianie ustawień list rozwijalnych (nie została zastosowana, należałoby jeszcze skorygować wyświetlanie pól) If IsNumeric(cmbWiersze.Text) Then ReDim TabWartosci(CInt(cmbWiersze.Text) - 1, CInt(cmbKolumny.Text) - 1) Else ReDim TabWartosci(0, CInt(cmbKolumny.Text) - 1) End Class 6