Copyright © 2009 Janusz Bonarowski
1
Ć wiczenie VB7.0_max_paraboli – instrukcja Do...Loop
Zadanie
Metodą iteracyjną znaleźć maksimum paraboli.
Zadanie można zobrazować za pomocą arkusza kalkulacyjnego znajdującego się w katalogu zadania, a którego postać przedstawia rys. 1.
Rys. 1. Zadanie rozwiązane w arkuszu kalkulacyjnym
Bez stosowania metody iteracyjnej, wprost ze wzorów w ramce możemy uzyskać współrzędne extremum x=3,5, y=5,5.
Zastosujmy jednak metodę iteracyjną w celu poznania sposobu wykorzystywania instrukcji
cyklu Do...Loop. Instrukcja ta stosowana jest w sytuacjach, w których nie wiemy ile razy
pętla ma być wykonana. W naszym przypadku, jeśli rozpoczniemy od punktu Xstart bardzo
odległego od extremum i gdy założymy przyrost dx bardzo mały – pętla będzie wykonywana
wiele razy. Natomiast jeśli punkt startowy Xstart będzie bliski szukanego x i dx stosunkowo
duży – pętla wykona się może tylko kilkakrotnie.
Copyright © 2009 Janusz Bonarowski
2 Algorytm programu
Wczytanie:
A, B, C, Xstart, dx
X1 = Xstart Y1 = A*X1^2 + B*X1+C
X2 = X1 + dx Y2 = A*X2^2 + B*X2+C
czy Y2 > Y1
X1 = X2 Y1 = Y2 X2 = X1 + dx Y2 = A*X2^2 + B* X2 + C
Drukuj X1, Y1
Koniec TAK
NIE
Copyright © 2009 Janusz Bonarowski
3 Kod aplikacji
Private Sub btnOblicz_Click(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles btnOblicz.Click
Dim A, B, C, Xstart, dx As Single Dim X1, X2, Y1, Y2 As Single
A = CSng(txtA.Text) B = CSng(txtB.Text) C = CSng(txtC.Text)
Xstart = CSng(txtXstart.Text) dx = CSng(txtDx.Text)
X1 = Xstart
Y1 = WartoscFunkcji(A, B, C, X1) X2 = X1 + dx
Y2 = WartoscFunkcji(A, B, C, X2)
ListBox1.Items.Clear() ListBox2.Items.Clear()
Do While Y2 > Y1 X1 = X2 Y1 = Y2 X2 = X1 + dx
Y2 = WartoscFunkcji(A, B, C, X2) ListBox1.Items.Add(X1.ToString) ListBox2.Items.Add(Y1.ToString) Loop
lblWynik.Text = "Xextr=" & X1.ToString & vbCrLf & _ "Yextr=" & Y1.ToString
End Sub
Private Function WartoscFunkcji(ByVal A As Single, ByVal B As Single, _ ByVal C As Single, ByVal X As Single) _ As Single
Return A * X ^ 2 + B * X + C End Function