Instrukcja cyklu Do While
Copyright © 2017, Janusz Bonarowski 1
Do While
Zadanie – kartka
Ile razy należy złożyć kartkę papieru (o grubości 0,1 mm) aby jej grubość była co najmniej taka jak wysokość Pałacu Kultury (231 m)?
Private Sub ButtonOblicz_Click(sender As Object, e As EventArgs) _ Handles ButtonOblicz.Click Dim Grubosc As Single
Dim Wysokosc As Single Dim N As Integer = 0
Grubosc = CSng(TextBoxGruboscKartki.Text)
Wysokosc = CSng(TextBoxWysokoscDoOsiagniecia.Text) ' Wejdź do pętli jeśli warunek jest prawdziwy Do While Grubosc < Wysokosc
Grubosc = Grubosc * 2 N = N + 1
Loop
TextBoxIlerazy.Text = N & "; " & Grubosc End Sub
Zadanie – sinus
Obliczyć, instrukcją cyklu, dla jakiej wartości kąta α funkcja sin(α) osiąga maksimum (i ile ono wynosi).
Private Sub ButtonOblicz_Click(sender As Object, e As EventArgs) _ Handles ButtonOblicz.Click
Dim x1, x2, dx As Double x1 = CDbl(TextBoxXpocz.Text) dx = CDbl(TextBoxDx.Text) x2 = x1 + dx
Do While Math.Sin(x1) < Math.Sin(x2) x1 = x2
x2 = x1 + dx Loop
TextBoxWynik1.Text = Format((x1 * 180 / Math.PI), "00.0000") TextBoxWynik2.Text = Math.Sin(x1).ToString
End Sub
Private Sub TextBoxDx_TextChanged(sender As Object, e As EventArgs) _ Handles TextBoxDx.TextChanged TextBoxWynik1.Text = ""
TextBoxWynik2.Text = ""
End Sub
Private Sub TextBoxXpocz_TextChanged(sender As Object, e As EventArgs) _ Handles TextBoxXpocz.TextChanged TextBoxWynik1.Text = ""
TextBoxWynik2.Text = ""
End Sub
Instrukcja cyklu Do While
Copyright © 2017, Janusz Bonarowski 2
Zadanie – parabola
Obliczyć, instrukcją cyklu, dla jakiej wartości zmiennej niezależnej x funkcja
( )
x A x B x Cy = ⋅ 2 + ⋅ + osiąga maksimum i ile ono wynosi.
Private Sub ButtonOblicz_Click(sender As Object, e As EventArgs) _
Handles ButtonOblicz.Click Dim x1, x2, dx As Single
x1 = CSng(TextBoxXpocz.Text) dx = CSng(TextBoxDx.Text) x2 = x1 + dx
Do While Parabola(x1) < Parabola(x2) x1 = x2
x2 = x1 + dx Loop
TextBoxXmax.Text = Format(x1, "0.000000") TextBoxY.Text = Parabola(x1).ToString End Sub
Public Function Parabola(ByVal x As Single) As Single Dim A As Single = -5
Dim B As Single = 0 Dim C As Single = 5
Return A * x ^ 2 + B * x + C End Function
Zadanie – oszczędzanie
Obliczyć, instrukcją cyklu, ile lat należy oczekiwać, aby kapitał początkowy umieszczony na stały procent w banku osiągnął (lub przekroczył) określoną wartość końcową.
Private Sub ButtonOblicz_Click(sender As Object, e As EventArgs) _
Handles ButtonOblicz.Click Dim Kapitalpocz, KapitalKon, Oprocentowanie As Single
Dim LiczbaLat As Integer = 0
Kapitalpocz = CSng(TextBoxKapitalPocz.Text)
Oprocentowanie = CSng(TextBoxOprocentowanie.Text) KapitalKon = CSng(TextBoxKapitalKoncowy.Text) Do While KapitalKon >= Kapitalpocz
Kapitalpocz = Kapitalpocz + Kapitalpocz * Oprocentowanie LiczbaLat = LiczbaLat + 1
Loop
TextBoxLiczbaLat.Text = LiczbaLat.ToString & "; " & Kapitalpocz.ToString End Sub
Instrukcja cyklu Do While
Copyright © 2017, Janusz Bonarowski 3
Zadanie – działka przy murze
Mając daną długość ogrodzenia L obliczyć, za pomocą instrukcji cyklu, długość odcinka h pozwalającą uzyskać największe pole powierzchni działki przy murze, składającej się z dwóch identycznych trójkątów.
2 2 2
2 a h
L = +
, stąd 2
2
4 h a= L − ;
2 a2h
S ⋅
⋅
= , 2 4 2
2 L h
S = h⋅ − ⋅
Rozwiązanie w arkuszu Excela
Rysunek 1 Kod
Private Sub ButtonOblicz_Click(sender As Object, e As EventArgs) _
Handles ButtonOblicz.Click Dim L, h, dh, a, S, S1, S2 As Single
L = CSng(TextBoxL.Text) h = CSng(TextBoxH.Text) dh = CSng(TextBoxDH.Text)
a = (1 / 2) * Math.Sqrt(L ^ 2 - 4 * h ^ 2) S1 = a * h
h = h + dh
a = (1 / 2) * Math.Sqrt(L ^ 2 - 4 * h ^ 2) S2 = a * h
Do While S1 < S2 S1 = S2 h = h + dh
a = (1 / 2) * Math.Sqrt(L ^ 2 - 4 * h ^ 2) S2 = a * h
Loop
TextBoxWynik.Text = "h=" & (h - dh) & " S=" & S1 End Sub
Instrukcja cyklu Do While
Copyright © 2017, Janusz Bonarowski 4
Zadanie – działka przy murze 2
Mając daną długość ogrodzenia L obliczyć, za pomocą instrukcji cyklu, długość odcinków a i b pozwalających uzyskać
największe pole powierzchni działki przy murze, mającej kształt prostokąta.
b a
L=2⋅ + , b=L−2⋅a, S=a⋅b=a⋅
(
L−2⋅a)
Rozwiązanie w arkuszu Excela
Kod
Private Sub ButtonOblicz_Click(sender As Object, e As EventArgs) _ Handles ButtonOblicz.Click Dim L, a, da, b, s1, s2 As Single
L = CSng(TextBoxL.Text) a = CSng(TextBoxA.Text) da = CSng(TextBoxB.Text) b = L - 2 * a
s1 = a * b a = a + da b = L - 2 * a s2 = a * b
Do While s1 < s2 s1 = s2 a = a + da b = L - 2 * a s2 = a * b Loop
TextBoxWynik.Text = "a=" & (a - da) & vbCrLf &
"b=" & (L - 2 * (a - da)) & vbCrLf &
"Smax=" & s1 End Sub