Przeglądaj wersję html pliku:

wiczenie 12_13


cwicz_12_13

H M P R O G R A M O W A N I E

str. 29
W D E L P H I

ĆWICZENIE 12 – Wprowadzanie danych liczbowych poprzez kontrolki graficzne.
Poznałeś zasady tworzenia interfejsu użytkownika (okien) i wymiany informacji między użytkownikiem a komputerem poprzez ekran. Potrafisz deklarować zmienne i przypisywać im wartości wprost albo poprzez wyrażenia arytmetyczne. Umiesz także pogrupować instrukcje proste w instrukcje złożone i zaprogramować warunkowe ich wykonanie. Poznasz teraz nowe sposoby wprowadzania danych liczbowych i instrukcje pozwalające sterować wykonywaniem programu w sytuacjach nieco bardziej skomplikowanych. Być może zetknąłeś się podczas ćwiczeń z problemem niestarannego formułowania danych do programu. Np. użytkownik zamiast liczby całkowitej wpisał liczbę rzeczywistą, lub popełnił błąd używając niedozwolonych znaków. Są sposoby zabezpieczenia programu przed tymi błędami. Metodą, która nie daje szansy na wystąpienie wspomnianych problemów jest zastosowanie w oknie programu jednego z dwóch składników (mówimy też o nich - kontrolki graficzne): paska przewijania (ScrollBar) przycisku góra-dół (UpDown) Kontrolki te służą do zmiany pewnych wartości (zwiększania i zmniejszania) i zetknąłeś się z nimi obsługując Windowsowskie programy. Wiele właściwości tych składników ma znaczenie analogiczne jak w obiektach, które już poznałeś. Teraz najistotniejsze są trzy nowe właściwości określane wartościami liczbowymi typu całkowitego: Min minimalna możliwa do ustawienia wartość, Max maksymalna możliwa do ustawienia wartość, Position wartość ustawiona w danej chwili (obrazowo pokazuje ją położenie suwaka). Odpowiednio do położenia suwaka lub liczby kliknięć na strzałki, użytkownik może zmieniać wartość właściwości Position, nie wychodząc jednak poza przedział Min..Max. Projektując program, można każdą z tych trzech wartości ustawić w oknie Properties kontrolera obiektów (Object Inspector). Można także zaprogramować ich zmianę poprzez użycie instrukcji przypisania. Na przykład, gdy poprzez pasek przewijania wybierany jest numer dnia miesiąca maja, to

ScrollBar1.Max:=31
a gdy „za chwilę” ten sam pasek ma być użyty do wybierania numeru dnia z miesiąca czerwca, to wcześniej można zmienić jego właściwość Max

ScrollBar1.Max:=30
Jedno jest pewne - liczba całkowita wprowadzona przy użyciu tych obiektów będzie zawsze formalnie (a najczęściej i wartościowo) poprawna. Odpowiedz na pytanie - jakim sposobem wyprowadzić wartość (liczbową) właściwości Position na ekran. 29

cwicz_12_13

H M P R O G R A M O W A N I E

str. 30
W D E L P H I

Z A D A N I E . Opracuj program, który na podstawie aktualnej daty i godziny (wprowadzonej przez użytkownika), obliczy ile dni i ile godzin upłynęło od początku roku. Ponieważ program ma wykonać obliczenia dla dowolnej daty, musi rozpoznawać rok przestępny, w którym miesiąc luty ma 29 dni. Wykonaj polecenia. 1. Wyczyść folder roboczy. 2. Rozpocznij nowy projekt budując okno podobne do pokazanego niżej. Użyj składników: Label, Edit, ScrollBar, UpDown, Button. Składnik ScrollBar znajdziesz w palecie Standard, a składnik UpDown w palecie Win32. 3. Ustaw odpowiednio właściwości Name, Caption i Text składników Label, Button i Edit. Na rysunku w objaśnieniach wpisane są przyjęte w tej instrukcji nazwy (Name) niektórych składników. Pasek_Mies Ed_rok UpDo_dzie Lab_mies UpDo_godz Lab_dzie Lab_godz

4. Ustaw odpowiednio startowe wartości właściwości Min, Max, Position kontrolek graficznych ScrollBar i UpDown przyjmując jako datę wyjściową np. rok 1900, miesiąc 1, dzień 1, godz. 0 (czyli 01.01.1900 r.). Sprawdź, czy dla tej daty sensowne są ustawienia z punktu poprzedniego. 5. Uruchom program. Czy możesz posługiwać się paskiem przewijania ? Co jeszcze nie działa? 6. Zapisz projekt w folderze roboczym. Z pierwszych ćwiczeń powinieneś pamiętać, że mieć wartość liczbową, to nie to samo co pokazać ją na ekranie. Aby wyświetlić aktualną liczbową wartość właściwości Position, trzeba najpierw zamienić ją na tekst przy użyciu funkcji poznanych w ćwiczeniu 7. Ten zaś tekst przypisać do właściwości Caption odpowiedniego składnika, np. typu TLabel. Dla przykładu, jeśli 11 razy kliknąć na prawą strzałkę paska przewijania (miesiące) powinno się dotrzeć do prawego skraju paska. Właściwość Position ma wartość 12. Aby ta wartość mogła być wyświetlona (np. nad paskiem), powinno się użyć instrukcji następującej postaci. 30

cwicz_12_13

H M P R O G R A M O W A N I E

str. 31
W D E L P H I

Lab_mies.Caption:=IntToStr(Pasek_Mies.Position)
co oznacza: zamień na tekst liczbę całkowitą Position obiektu Pasek_mies i przypisz go do właściwości Caption obiektu Lab_mies. W które miejsce programu taką instrukcję wpisać ? A kiedy użytkownik chce wiedzieć, jaką wartość ustawił ? Otóż najpewniej powinien od razu widzieć liczbowy efekt zmian jakich dokonał na pasku przewijania. Nic prostszego. Analogicznie jak potrafiłeś zaprogramować reakcję programu na kliknięcie na składniku typu przycisk (składnik Button - karta Events - zdarzenie OnClick), tak można zaprogramować treść procedury, która jest uruchamiana przy jakiejkolwiek zmianie na pasku przewijania (składnik ScrollBar - karta Events - zdarzenie OnChange). Tam między słowami begin end musi być wstawiona powyższa instrukcja. Uwaga. Zauważ, że pełna nazwa właściwości (np. Caption) zawiera kropkę, a przed nią jeszcze nazwę obiektu, którego ta właściwość dotyczy. W procedury związane z kontrolkami obsługi danych wpisz instrukcje, które będą pokazywać nastawioną wartość. Wykonaj polecenia. 7. W oknie projektu Liczba dni ... wskaż składnik Lab_godz. 8. Wybierz kartę Events i dwukrotnie kliknij na pole obok nazwy zdarzenia OnClick. 9. Jesteś w procedurze, w której musisz wpisać instrukcje do pokazania nastawionej wartości. Wprowadź instrukcję przypisania o postaci

Lab_godz.Caption:=IntToStr(UpDo_godz.Position)
10. Uruchom i wytestuj program. Sprawdź działanie strzałek do ustawienia godziny. 11. Wprowadź instrukcje pokazujące wartość wprowadzonych danych dla pozostałych kontrolek graficznych. 12. Wytestuj program. 13. Zapisz projekt w folderze roboczym.

ĆWICZENIE 13 – Instrukcja wyboru wielowariantowego.
Poznamy często stosowaną instrukcję, która umożliwia wybór wielu różnych wariantów wykonania programu na podstawie wartości obliczonego wyrażenia. Pamiętasz, że instrukcja warunkowa If dawała szansę co najwyżej na dwie takie różne drogi. Teraz mamy do czynienia z przypadkiem, który pokazany jest na poniższym schemacie. wyrażenie wartości1 wartości2 wartości3 wartości4

Instr-1

Instr-2

Instr-3

Instr-4 31

cwicz_12_13

H M P R O G R A M O W A N I E

str. 32
W D E L P H I

Pod pojęciem instrukcja rozumie się instrukcję prostą lub złożoną. Ilość dróg (wariantów) może być bardzo duża. Instrukcja wyboru zawsze używa trzech słów case, of, end i ma postać następującą

case wyrażenie of
wartości selekcyjne1: instrukcja1; wartości selekcyjne2: instrukcja2; wartości selekcyjne3: instrukcja3; end; Dla przykładu niżej przedstawiona jest instrukcja wyboru, która przypisze dzień tygodnia (poniedziałek, wtorek, itd.) dla konkretnych dni miesiąca. Użyte zmienne oznaczają: dzien ⇒ nr dnia miesiąca - zmienna typu całkowitego (Integer) nazwa_dnia ⇒ nazwa dnia tygodnia - zmienna typu tekstowego (String)

case dzien of 1,8,15,22,29: nazwa_dnia:=’poniedziałek’; 2,9,16,23,30: nazwa_dnia:=’wtorek’; 3,10,17,24,31: nazwa_dnia:=’środa’; 4,11,18,25: nazwa_dnia:=’czwartek’; 5,12,19,26: nazwa_dnia:=’piątek’; 6,13,20,27: nazwa_dnia:=’sobota’; 7,14,21,28: nazwa_dnia:=’niedziela’ end; W instrukcji wyboru można użyć jeszcze słowa else, po którym trzeba
umieścić instrukcję, która ma być wykonana, jeśli nie zajdzie żaden z wymienionych wcześniej przypadków. W naszym przykładzie można instrukcję wyboru zmodyfikować następująco.

case dzien of 1,8,15,22,29: nazwa_dnia:=’poniedziałek’; 2,9,16,23,30: nazwa_dnia:=’wtorek’; 3,10,17,24,31: nazwa_dnia:=’środa’; 4,11,18,25: nazwa_dnia:=’czwartek’; 5,12,19,26: nazwa_dnia:=’piątek’; 6,13,20,27: nazwa_dnia:=’sobota’; else: nazwa_dnia:=’niedziela’ end;
Jesteś już „doświadczonym” programistą. Koniec prowadzenia za rączkę. Od tej pory wszystkie polecenia będą formułowane najczęściej dość ogólnie. Musisz umieć przełożyć je na precyzyjny język instrukcji programowych. Poza tym, możesz stosować własne pomysły na rozwiązanie przedstawionych zagadnień. Dopiero to i ciągłe poznawanie (odkrywanie) nowych możliwości sprawia, że programowanie jest przyjemnością. 32

cwicz_12_13

H M P R O G R A M O W A N I E

str. 33
W D E L P H I

W programie liczącym „dni i godziny” wprowadź instrukcje prowadzące do wyniku. Musisz je umieścić w procedurze, która jest uruchamiana po kliknięciu na przycisk Jeden z możliwych sposobów dojścia do wyniku przedstawiony jest niżej w punktach. Jeśli chcesz go zastosować, to musisz umieć ten opis zamienić na instrukcje programowe. OPIS DZIAŁAŃ 1. Zadeklaruj zmienne potrzebne do obliczeń. 2. Przypisz zmiennym wartości odczytane z właściwości składników okna. 3. Zastosuj instrukcję wyboru, którą obliczysz liczbę dni jaka minęła od początku roku do początku każdego miesiąca. 4. Oblicz liczbę dni do ustawionej daty. 5. Sprawdź, czy rok jest przestępny (dzielenie poprzez operator mod) i skoryguj liczbę dni. 6. Oblicz liczbę godzin. 7. Wyprowadź wyniki na ekran. 8. Zabezpiecz program przed błędami użytkownika, np. przed sytuacją, w której dla miesiąca lutego ustawi dzień nr 31. Najlepiej będzie gdy odpowiednio zmodyfikujesz właściwości Max kontrolek graficznych. Ale, w którym miejscu to zrobić ? 9. Rozwiąż pozostałe nieścisłości, niedoróbki. Wprowadź modyfikacje. To ma być porządnie zrobiony program. To, że od czasu do czasu musisz projekt uruchamiać, zapisywać, że musisz go testować, jest oczywiste i nie będzie więcej przypominane. Przypomnij sobie Ćwiczenie 1 i 2. Tam, w okienku programu Ankieta, osadzone zostały składniki typu kratka (CheckBox) przycisk radiowy (RadioButton)

Obiekty te posiadają właściwość Checked, która odpowiada na pytanie, czy obiekt jest zaznaczony. Checked może mieć tylko wartości typu Boolean, a więć: False lub True (fałsz lub prawda). Łatwo się domyślić, że o sposobie działania programu bardzo często decyduje stan tych składników. Program sprawdza więc wartości właściwości Checked i od niej uzależnia tok dalszych obliczeń. Łatwo powiedzieć program sprawdza - my już wiemy, że programista musi odpowiednio to sprawdzanie przewidzieć i zaprogramować. Wystarczy zapisać to tak
Nazwa składnika

if CheckBox1.Checked then begin ....... Nazwa end właściwości else begin ....... end;

Instrukcje Nazwa dla True ł ś i ś i Instrukcje Nazwa dla False ł ś i ś

33

cwicz_12_13

H M P R O G R A M O W A N I E

str. 34
W D E L P H I

♦ Wprowadzania danych przez kontrolki graficzne. ♦ Instrukcja wyboru

Zadania do samodzielnego wykonania

Zadanie 1. Stosując zagnieżdżone instrukcje warunkowe, a do wprowadzania
danej - pasek przewijania, opracuj program, który po podaniu liczby lat człowieka, wypisze na ekranie słowa: maluch, przedszkolak, uczeń, student, pracownik, emeryt.

Zadanie 2. Zmodyfikuj powyższy program stosując instrukcje wyboru zamiast
instrukcji warunkowych.

Zadanie 3. Opracuj program, który oceni predyspozycje człowieka do
wyczynowej gry w koszykówkę. Niech formularz (okno) zawiera pytania o np.: płeć, wiek, wagę, wzrost, ostrość wzroku, wady serca, wynik testu wydolnościowego, choroby dziedziczne, itp. Do wprowadzania danych liczbowych zastosuj paski przewijania. Każdej odpowiedzi przypisz pewną wartość liczbową, stosując instrukcje warunkowe i instrukcje wyboru. Wynik testu niech będzie sumą tych wszystkich wartości cząstkowych.

34

 
statystyka