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