Copyright © 2009, Janusz Bonarowski
1
KolVB3.1
Wykonać aplikację Windows Forms Application obliczającą zasięg i wysokość maksymalną rzutu ukośnego dla danych:
V
0[m/s] - prędkość początkowa, α [stopnie] - kąt wyrzutu,
posługując się wzorami:
zasięg ( )
g Z V
⋅ ⋅ α
=
02sin 2
wysokość maksymalna ( )
g H V
⋅
= ⋅ 2
sin
22 0 max
α
Aplikacja powinna być zabezpieczona przed wprowadzeniem danych, które mogłyby spowodować awarię aplikacji. Proponuję sprawdzenie:
1. Czy zawartość TextBoxów nie jest ciągiem pustym.
2. Czy nie zawiera kropki zamiast przecinka.
3. Czy nie jest ciągiem znaków alfanumerycznych.
Rozwiązanie
Rys. 1. Propozycja formularza
Copyright © 2009, Janusz Bonarowski
2 Kod aplikacji
Private Sub btnOblicz_Click(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles btnOblicz.Click '---
Dim Alfas, Alfar, v0, Z, hmax As Single Dim g As Single = 9.81
' Przed konwersją stringu txtAlfa należy sprawdzić:
' 1. Czy nie jest pusty
' 2. Czy nie zawiera kropki zamiast przecinka.
' 3. Czy nie jest ciągiem znaków alfanumerycznych '--- ' 1. Czy nie jest pusty.
If txtAlfa.Text = "" Then
MessageBox.Show("Proszę wpisać wartość kata w stopniach") Exit Sub
End If
' 2. Czy nie zawiera kropki zamiast przecinka.
If InStr(1, txtAlfa.Text, ".") Then
MessageBox.Show("Separator dziesiętny MUSI BYĆ PRZECINKIEM") Exit Sub
End If
' 3. Czy nie jest ciągiem znaków alfanumerycznych.
If Not IsNumeric(txtAlfa.Text) Then
MessageBox.Show("Wpisana wartość kąta nie jest liczbą") Exit Sub
End If
' Podobnie jak dla kąta Alfa (punkty 1, 2 i 3)
' należy wykonać sprawdzenie poprawności wprowadzonej wartości ' dla prędkości.
' ...
' Zabezpieczenie przed awarią z innych nieznanych powodów.
Try
Alfas = Single.Parse(txtAlfa.Text) If Alfas = 90 Then
MsgBox("Oj, bo pocisk spadnie na głowę", _
MsgBoxStyle.Critical, "Proszę pomyśleć") Exit Sub
End If
' Zamiana stopni na radiany Alfar = Alfas * Math.PI / 180
v0 = Single.Parse(txtVo.Text)
Z = v0 ^ 2 * Math.Sin(2 * Alfar) / g
hmax = (v0 ^ 2 * Math.Sin(Alfar) ^ 2) / (2 * g) lblZasieg.Text = Z.ToString
lblHmax.Text = hmax.ToString Catch ex As Exception
MsgBox("Błąd danych", MsgBoxStyle.Exclamation, "Błąd") End Try