Visual Basic: Tablice, sortowanie, r. ak. 2014/2015
Transkrypt
Visual Basic: Tablice, sortowanie, r. ak. 2014/2015
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 End Sub 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 Dim Kom, Tyt As String ' Try 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 Next Next End If Catch ex As Exception Tyt = "Błąd wykonania programu" Kom = ex.Message MessageBox.Show(Kom, Tyt, MessageBoxButtons.OK, MessageBoxIcon.Error) End Try End Sub 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 Dim Kom, Tyt As String Try For i = 0 To 3 For j = 0 To 4 If TabPol(i, j).Visible Then TabPol(i, j).Visible = False End If Next If TabPolSort(i).Visible Then TabPolSort(i).Visible = False End If Next txtMax.Visible = False txtLNum.Visible = False txtSuma.Visible = False Catch ex As Exception Tyt = "Błąd ukrywania pól tablicy" Kom = ex.Message MessageBox.Show(Kom, Tyt, MessageBoxButtons.OK, MessageBoxIcon.Error) End Try End Sub 2 Private Sub btnPrzepisz_Click(ByVal sender As Object, _ ByVal e As System.EventArgs) Handles btnPrzepisz.Click ' Dim w, k As Integer Dim Kom, Tyt As String ' Try ' ' 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 For w = 0 To CInt(cmbWiersze.Text) - 1 For k = 0 To CInt(cmbKolumny.Text) - 1 TabWartosci(w, k) = TabPol(w, k).Text Next Next ' ' Włączenie przycisków analizy zawartości tablicy btnMax.Enabled = True btnNumeryczne.Enabled = True btnGlownaPrzek.Enabled = True btnSortuj.Enabled = True Catch ex As Exception Tyt = "Błąd przepisywania pól tekstowych" Kom = ex.Message MessageBox.Show(Kom, Tyt, MessageBoxButtons.OK, MessageBoxIcon.Error) End Try End Sub 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 Dim w, k As Integer Dim Kom, Tyt As String Try For w = 0 To CInt(cmbWiersze.Text) - 1 For k = 0 To CInt(cmbKolumny.Text) - 1 TabPol(w, k).Text = "" TabWartosci(w, k) = "" Next TabPolSort(w).Text = "" TabSort(w) = "" Next txtLNum.Text = "" txtMax.Text = "" txtSuma.Text = "" txtNrKol.Text = "" Catch ex As Exception Tyt = "Błąd czyszczenia pól formularza" Kom = ex.Message MessageBox.Show(Kom, Tyt, MessageBoxButtons.OK, MessageBoxIcon.Error) End Try End Sub 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 w, k As Integer Dim Najwiekszy As String Dim Kom, Tyt As String Try ' ' Wstępnie zakładamy, że element (0,0) jest największy Najwiekszy = TabWartosci(0, 0) For w = 0 To CInt(cmbWiersze.Text) - 1 For k = 0 To CInt(cmbKolumny.Text) - 1 If Najwiekszy < TabWartosci(w, k) Then Najwiekszy = TabWartosci(w, k) End If Next Next txtMax.Text = Najwiekszy txtMax.Visible = True Catch ex As Exception Tyt = "Błąd poszukiwania maksimum" Kom = ex.Message MessageBox.Show(Kom, Tyt, MessageBoxButtons.OK, MessageBoxIcon.Error) End Try End Sub 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 w, k As Integer Dim Liczby As Integer Dim Kom, Tyt As String Try Liczby = 0 ' inicjalizacja For w = 0 To CInt(cmbWiersze.Text) - 1 For k = 0 To CInt(cmbKolumny.Text) - 1 If IsNumeric(TabWartosci(w, k)) Then Liczby = Liczby + 1 End If Next Next txtLNum.Text = Liczby.ToString txtLNum.Visible = True Catch ex As Exception Tyt = "Błąd zliczania liczb" Kom = ex.Message MessageBox.Show(Kom, Tyt, MessageBoxButtons.OK, MessageBoxIcon.Error) End Try End Sub 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 Dim Kom, Tyt As String Try 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)) End If Next txtSuma.Text = Suma.ToString txtSuma.Visible = True End If Catch ex As Exception Tyt = "Błąd obliczania sumy liczb na głównej przekątnej" Kom = ex.Message MessageBox.Show(Kom, Tyt, MessageBoxButtons.OK, MessageBoxIcon.Error) End Try End Sub 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 Try 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) Next ' ' 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 End If Next Next ' ' Wyświetlenie wyników For i = 0 To CInt(cmbWiersze.Text) - 1 TabPolSort(i).Text = TabSort(i) TabPolSort(i).Visible = True Next Catch ex As Exception Tyt = "Błąd sortowania kolumny " & txtNrKol.Text Kom = ex.Message MessageBox.Show(Kom, Tyt, MessageBoxButtons.OK, MessageBoxIcon.Error) End Try End Sub Private Sub btnZakoncz_Click(ByVal sender As Object, _ ByVal e As System.EventArgs) Handles btnZakoncz.Click ' ' Koniec pracy programu End End Sub 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) 'End If End Sub 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 If End Sub End Class 6