Copyright © 2014 Janusz Bonarowski 1
VB_4.5_Podprogram_Function_objetość_walca
Dany jest promień podstawy i wysokość walca. Obliczyć objętość walca. Obliczenia wykonać tworząc procedury Function PolePodstawy (obliczającą pole podstawy walca) i Objetosc (obliczającą objętość walca, korzystającą z funkcji PolePodstawy). Zabezpieczyć program przed błędnie wprowadzonymi danymi.
Rysunek 1. Propozycja formularza
Kod – wersja podstawowa, bez obsługi błędów
Private Function PoleKola(ByVal Promien As Single) As Single Return Math.PI * Promien ^ 2
End Function
Private Function ObjetoscWalca(ByVal Promien, ByVal Wysokosc) As Single Return PoleKola(Promien) * Wysokosc
End Function
Private Sub btnOblicz_Click(ByVal sender As System.Object, _ ByVal e As System.EventArgs) _ Handles btnOblicz.Click
Dim R, H, V As Single R = CSng(txtR.Text) H = CSng(txtH.Text)
V = ObjetoscWalca(R, H) '--- txtV.Text = V.ToString End Sub
Opis kodu
• W programie głównym konwertujemy zawartości TextBoxów na liczby i liczby te podstawiamy pod zmienne R i H.
• Zmienne te sa argumentami funkcji ObjetoscWalca.
• Funkcja ObjetoscWalca wywołuje funkcję PoleKola, która zwraca pole okręgu podstawy, a następnie mnoży to pole przez Wysokosc uzyskując objętość. Rezultat mnożenia zwracamy do programu głównego, podstawiając go pod zmienną V.
• Wartość zmiennej V wyświetlana jest w TextBox’sie txtV.
Copyright © 2014 Janusz Bonarowski 2
Pełny kod zadania
Private Function PoleKola(ByVal Promien As Single) As Single If Promien <= 0 Then
Err.Raise(9003, "Funkcja PoleKola", "Promień <=0") End If
Return Math.PI * Promien ^ 2 End Function
Private Function ObjetoscWalca(ByVal Promien, ByVal Wysokosc) As Single If Wysokosc <= 0 Then
Err.Raise(9004, "Funkcja ObjetoscWalca", "Wysokość <= 0") End If
Return PoleKola(Promien) * Wysokosc End Function
Private Sub btnOblicz_Click(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles btnOblicz.Click Dim R, H, V As Single
Try
If IsNumeric(txtR.Text) = False Then
Err.Raise(9002, "Promień", "To nie jest liczba") End If
R = CSng(txtR.Text)
If IsNumeric(txtH.Text) = False Then
Err.Raise(9003, "Wysokość", "To nie jest liczba") End If
H = CSng(txtH.Text)
V = ObjetoscWalca(R, H) '--- txtV.Text = V.ToString
If txtV.Text = "+nieskończoność" Then Err.Raise(6)
End If
Catch ex As Exception txtV.Text = ""
If Err.Number < 1000 Then
MsgBox(ex.Message, MsgBoxStyle.Exclamation, _ "Błąd nr " & Err.Number)
Else
MsgBox(Err.Source & " - błąd danych" & vbCrLf & _ Err.Description, MsgBoxStyle.Critical, _ "Błąd nr " & Err.Number)
End If End Try End Sub