© W. Treichel, Podstawy Informatyki, sem. 2, Wydział Inżynierii Środowiska
Strona 1 z 3
C2. Instrukcje warunkowe złożone
If ... Then ... ElseIf ... Then ... Else ... EndIf
Z a d C 2 . T r ó j m i a n k w a d r a t o w y . Napisać program na znajdowanie pierwiastków
równania kwadratowego ax
2
+bx+c = 0. Rozważyć wszystkie możliwe przypadki wartości
współczynników a, b, c.
Rozważenie przypadku, gdy a=0 sprowadza zadanie do rozwiązania równania liniowego,
które było rozwiązywane w zadaniu C1. W przeciwnym przypadku, tzn. gdy a jest różne od 0
mamy do czynienia z trójmianem kwadratowym. Należy obliczyć wyróżnik tego trójmianu i
w zależności od jego wartości obliczyć dwa, jeden podwójny lub stwierdzić brak
pierwiastków rzeczywistych trójmianu.
Wskazówki do rozwiązania
1. Tworzenie formularza
1.1. Utwórz nowy projekt typu Windows Form Application. Zmień nazwę tworzonego
projektu na R_kwadratowe. W panelu Solution Explorer zmień nazwę utworzonego
formularza z Form1 na R_kwadratowe oraz w panelu właściwości zmień napis (Text)
na pasku formularza na Trójmian kwadratowy
1.2. Umieść napis Rozwiązanie trójmianu kwadratowego ax^2+bx+c=0 w postaci
etykiety (Label). Zadbaj o odpowiednie położenie (wycentrowanie) oraz czcionkę
(Times New Roman, 14, Pogrubiona)
1.3. Umieść na formularzu ramkę (GroupBox) i nadaj jej tytuł (Text) Podaj
współczynniki.
1.4. Umieść wewnątrz tej ramki trzy pola tekstowe (TextBox) i nazwij je odpowiednio
txta , txtb i txtc. Umieść przed tymi polami tekstowymi etykiety (Label) a= , b= oraz
c = .
1.5. Umieść na formularzu drugą ramkę (GroupBox) i nadaj jej tytuł (Text) Wynik.
Wewnątrz tej ramki umieść etykietę (Label), nazwij ją (Name) lblX oraz wyczyść jej
zawartość (Text). W tym miejscu będzie wyświetlony wynik obliczeń.
1.6. Umieść na formularzu przycisk polecenia (Button), nadaj mu nazwę (Name)
btnOblicz oraz zmień napis na nim na Oblicz.
1.7. Na koniec, umieść na formularzu jeszcze jeden przycisk polecenia (Button), nadaj mu
nazwę btnKoniec oraz zmień napis na nim na Koniec.
1.8. Zapisz na dysku utworzony projekt nadając mu nazwę R_kwadratowe.
© W. Treichel, Podstawy Informatyki, sem. 2, Wydział Inżynierii Środowiska
Strona 2 z 3
2. Pisanie kodu programu
Przed przystąpieniem do pisania kodu programu narysuj schemat blokowy dla tego zadania.
2.1. Dwukrotne kliknięcie przycisku btnKoniec przeniesie cię do okna kodu, do procedury
obsługi zdarzenia kliknięcia tego przycisku, czyli do procedury
Private
Sub
btnKoniec_Click(...)
.
Wpisz wewnątrz tej procedury polecenie
Close()
powodujące zakończenie programu.
2.2. Wróć do okna obiektu czyli do stworzonego formularza. Dwukrotne kliknięcie pola
tekstowego txta przeniesie cię ponownie do okna kodu, do obsługi zdarzenia zmiany
tego pola, czyli do procedury
Private
Sub
txta_TextChanged(...)
.
Wewnątrz
tej procedury odczytamy wartość wprowadzoną do tego pola tekstowego. Nadaj
zmiennej a wartość pierwszego współczynnika w równaniu tzn. podstaw na a wartość
właściwości Text obiektu txta. Zagwarantuj, że nastąpi konwersja (zamiana) tekstu na
liczbę (zapewnia to funkcja Val. W przypadku, gdy obiekt txta będzie zawierał tekst
nie odpowiadający liczbie, funkcja Val zwróci wartość równą 0). Linia kodu
powinna wyglądać następująco:
a = Val(txta.Text)
2.3. Zrób analogicznie dla zmiennych b oraz c.
2.4. Aby zmienne a, b i c były widoczne w innych procedurach zadeklaruj na samym
początku klasy te zmienne jako zmienne rzeczywiste (Single) wpisując:
Dim a, b, c As Single
.
2.5. Wróć ponownie do okna obiektu. Dwukrotne kliknięcie przycisku btnOblicz
przeniesie cię ponownie do okna kodu, do obsługi zdarzenia kliknięcia tego
przycisku, czyli do procedury
Private
Sub
btnOblicz_Click(...)
. Będzie to
główna procedura realizująca obliczenia w zależności od wprowadzonych wartości
oraz wyświetlająca wynik Na początku tej procedury zadeklaruj nowe, lokalne
zmienne typu rzeczywistego wpisując
Dim x1, x2, Delta As Single
.
Następnie
sprawdzimy czy współczynnik a jest równy zero. Jeśli tak, to w tym przypadku
dalsze obliczenia są identyczne jak w zadaniu C1.
2.6. W przeciwnym przypadku, tzn. gdy a jest różne od zera obliczamy wyróżnik
trójmianu korzystając ze znanego wzoru
Delta = b^2-4*a*c
2.7. Sprawdzamy, czy delta jest większa od zera. Jeśli tak, to istnieją dwa pierwiastki
rzeczywiste trójmianu, które obliczamy z zależności:
x1 = (-b-sqrt(Delta))/(2*a)
oraz
x2 = (-b+sqrt(Delta))/(2*a)
.
Uwaga: funkcja
sqrt
pochodzi z kolekcji
System.Math
zatem jej pełne poprawne
wywołanie powinno być następujące:
Math.Sqrt(Delta)
Obydwa pierwiastki wyświetlamy w polu etykiety lblX , dzieląc tekst na trzy wiersze
za pomocą znaku
Chr(10)
, czyli przejścia do nowego wiersza i łącząc je w łańcuch
za pomocą znaku
&
, np. zapisując
lblX.Text =
"Istniej
ą
dwa pierwiastki:"
& Chr(10) _
&
"x1 = "
& Str(x1) & Chr(10) &
"x2 = "
& Str(x2)
Uwaga: Znak podkreślenia poprzedzony spacją pozwala kontynuować długą linię kodu w kolejnych
wierszach
2.8. W przeciwnym razie (tzn. gdy
Delta
nie jest dodatnia) sprawdzamy czy
Delta
jest
równa zero. Jeśli tak, to istnieje pierwiastek podwójny, który obliczamy ze wzoru:
x1 = -b/(2*a)
i wynik
ten wyświetlamy w polu etykiety lblX opatrując go
odpowiednim komentarzem
2.9. W przeciwnym przypadku, tzn. gdy
Delta
jest ujemna, w polu etykiety lblX
umieszczamy komentarz, że brak jest pierwiastków rzeczywistych trójmianu.
2.10. Zapisz swój projekt, a następnie uruchom go i przetestuj jego działanie na kilku
zestawach danych. Sprawdź działanie programu dla błędnych danych np. wprowadź
w pola tekstowe inny tekst niż liczby lub wartości równe 0.
© W. Treichel, Podstawy Informatyki, sem. 2, Wydział Inżynierii Środowiska
Strona 3 z 3
Treści niektórych procedur obsługujących poszczególne kontrolki mogą być następujące:
Public
Class
R_kwadratowe
Dim
a, b, c
As
Single
Private
Sub
btnKoniec_Click(
ByVal
sender
As
System.Object,
ByVal
e
As
System.EventArgs)
Handles
btnKoniec.Click
Close()
End
Sub
Private
Sub
txta_TextChanged(
ByVal
sender
As
System.Object,
ByVal
e
As
System.EventArgs)
Handles
txta.TextChanged
a = Val(txta.Text)
End
Sub
Private
Sub
txtb_TextChanged(
ByVal
sender
As
System.Object,
ByVal
e
As
System.EventArgs)
Handles
txtb.TextChanged
b = Val(txtb.Text)
End
Sub
Private
Sub
txtc_TextChanged(
ByVal
sender
As
System.Object,
ByVal
e
As
System.EventArgs)
Handles
txtc.TextChanged
c = Val(txtc.Text)
End
Sub
Private
Sub
btnOblicz_Click(
ByVal
sender
As
System.Object,
ByVal
e
As
System.EventArgs)
Handles
btnOblicz.Click
Dim
x1, x2, Delta
As
Single
If
a = 0
Then
'Je
ś
li a równa si
ę
zero to mamy równanie liniowe
If
b <> 0
Then
'Je
ś
li b nie równa si
ę
zero
x1 = -c / b
lblX.Text =
"Równanie liniowe"
& Chr(10) & _
"x = "
& Str(x1)
Else
'w przeciwnym przypadku, tzn. gdy b=0
If
c <> 0
Then
'je
ś
li ponadto c nie równa si
ę
zero, czyli b=0 i c<>0
lblX.Text =
"Równanie sprzeczne"
Else
'w przeciwnym razie, tzn. c=0 i b=0
lblX.Text =
"Równanie to
ż
samo
ś
ciowe"
End
If
End
If
Else
'w przeciwnym przypadku, tzn. gdy a<>0
Delta = b ^ 2 - 4 * a * c
If
Delta > 0
Then
'je
ś
li delta dodatnia to mamy dwa pierwiastki
x1 = (-b - Math.Sqrt(Delta)) / (2 * a)
x2 = (-b + Math.Sqrt(Delta)) / (2 * a)
lblX.Text =
"Istniej
ą
dwa pierwiastki:"
& Chr(10) _
&
"x1 = "
& Str(x1) & Chr(10) &
"x2 = "
& Str(x2)
Else
If
Delta = 0
Then
'je
ś
li delta równa 0 to mamy jeden pierwiastek podwójny
x1 = -b / (2 * a)
lblX.Text =
"Istnieje jeden pierwiastek podwójny:"
_
& Chr(10) &
"x1 = "
& Str(x1)
Else
lblX.Text =
"Brak pierwiastków rzeczywistych"
End
If
End
If
End
If
End
Sub
End
Class
Uwaga. wszystkie linie zaczynające się od apostrofu są komentarzem nie mającym wpływ na realizację
programu. Wielokropek oznacza brakujące fragmenty kodu.