Każdy jest innym i nikt sobą samym.

Jest to przykład na tyle prosty, żeby był łatwo zrozumiały bez większego wysiłku, a jednocześnie informatycz-nie na tyle złożony, żeby możliwe było przedstawienie wielu aspektów języka programowania. Jest to wręcz idealny przykład na zastosowanie instrukcji wyboru if i operacji arytmetycznych.
Najpierw jednak trochę teorii dla tych, którzy zdążyli już zapomnieć, jak oblicza się pierwiastki równania kwadratowego i czym one w ogóle są. Równanie kwadratowe to równanie, w którym wyrażenie typu ax2+bx+c przyrównuje się do zera, a więc ax2+bx+c=0. Współczynniki równania a, b i c są ustalone i możemy założyć, że je znamy. Zakładamy dodatkowo, że współczynnik a jest różny od zera1. Naszym zada-niem jest natomiast wyznaczenie takich wartości liczby x, dla których równanie będzie spełnione, tzn. że po wstawieniu znalezionego x do lewej strony będzie ona równa zero.
Jeżeli pozwolimy, żeby x było liczbą zespoloną, to równanie kwadratowe ma zawsze dwa, choć niekoniecznie różne, rozwiązania. W C++ liczby zespolone nie są jednak jednym z typów wbudowanych, choć obecny jest on w dołączonych do C++Buildera bibliotekach. Proponuję zatem ograniczyć się do liczb rzeczywistych, a wówczas równanie kwadratowe może mieć dwa różne rozwiązania, jedno rozwiązanie „podwójne”
lub nie mieć rozwiązań. Wszystko zależy od wartości parametrów, a dokładnie od wartości ich następującej kombinacji: D = b2 - 4ac . Jest to wyróżnik równania kwadratowego nazywany popularnie deltą, bo takiego symbolu używa się zazwyczaj do jego oznaczenia. Jeżeli wartość delty jest dodatnia, to równanie ma dwa różne rozwiązania (pierwiastki). Jeżeli równa jest zero, to pierwiastki stają się sobie równe i mówimy, że równanie ma jedno rozwiązanie będące pierwiastkiem podwójnym. Natomiast jeżeli delta jest ujemna, to równanie nie ma rozwiązań w dziedzinie liczb rzeczywistych. Obliczenie delty to już połowa sukcesu, bo o ile nie jest ujemna, pozwala na bezpośrednie obliczenie wartości pierwiastków, które są równe:
- b
x
- D
- b + D
1 =
x =
2a
i 2
2a
Widać, że jeżeli wartość delty równa jest zero, a więc znika pierwiastek w liczniku, to x1 i x2 mają taką samą wartość i są równe –b/2a. To wspomniany pierwiastek po-dwójny.
1 Jeżeli a jest równe zero, to równanie kwadratowe degraduje się do równania bx+c = 0, którego rozwiązaniem jest x = –c /b (wówczas b musi być różne od zera).
Rozdział 3. ¨ Typy zmiennych i instrukcje sterujące
47
Algorytm obliczania rozwiązań równania kwadratowego jest zatem następujący: 1. Odczytujemy wartości współczynników równania
2. Obliczamy wartość delty D.
3. Sprawdzamy, czy wartość delty jest mniejsza od zera: jeżeli tak, kończymy, pokazując komunikat o braku pierwiastków.
4. Jeżeli delta jest nieujemna, obliczamy pierwiastki i prezentujemy je użytkownikowi.
Przygotowanie interfejsu
Aby umożliwić użytkownikowi podanie współczynników równania, zastosujemy jeden z najbardziej podstawowych komponentów biblioteki VCL, a mianowicie TEdit
— pole edycyjne. A dokładniej trzy tego typu komponenty, po jednym dla każdego współczynnika. Z każdym polem edycyjnym związana będzie etykieta informująca, który współczynnik należy wpisać do pola. Etykieta to komponent TLabel. Wynik po-każemy natomiast w okienku dialogowym, a ponadto na dodatkowym komponencie TEdit. Obliczenia uruchamiane będą za pomocą przycisku TButton. TEdit, TLabel i TButton to trzy chyba najczęściej używane komponenty biblioteki VCL.
Świadomie pominąłem komponent TSpinEdit z zakładki Samples, który byłby z pewnością wygodniejszy do kontroli liczb, którymi są współczynniki równania. Chciałem po prostu przedstawić Czytelnikowi komponent TEdit.
Stwórzmy zatem nowy projekt aplikacji. Dokładniejszy opis czynności, które należy w tym celu wykonać, znajdzie Czytelnik w pierwszym rozdziale, ale ograniczają się one w zasadzie do wybrania pozycji VCL Forms Application — C++Builder z menu File/New.
W widoku projektowania na formie należy umieścić trzy komponenty TEdit według wzoru na rysunku 3.1. Za pomocą inspektora własności zmieniamy ich własności Text odpowiadające zawartości pól na np. 1 w przypadku pierwszego i zera w przypadku pozostałych (zob. rysunek 3.1). Nad każdym z nich warto umieścić komponent TLabel. Ich dokładne pozycje można dopasować za pomocą własności Left i Top widocznych w inspektorze obiektów. Etykiety tych komponentów zmieniamy kolejno na a, b i c. Można też zmienić ich własność Font w taki sposób, żeby powiększyć etykiety i użyć kursywy2. Dzięki temu będzie jasne, jaką wartość należy wpisać do każ-
dego pola edycyjnego.

Tematy