if
Dzialanie=0 then
Znak:= '+';
//jeżeli wylosowano dodawanie to pokaz
znak '+'
if Dzialanie=1 then
Znak:= '-';
//jeżeli wylosowano odejmowanie to pokaz
znak '-'
if Dzialanie=2 then
Znak:= 'x';
//jeżeli wylosowano mnożenie to pokaz
znak 'x'
W tej sekcji
realizujemy dalszą procedurę związaną ze zmienną Dzialanie
opartą na instrukcji warunkowej if...then, czyli: Jeżeli dla
zmiennej Dzialanie wylosowano zero, wtedy do zmiennej Znak przypisz
znak „+”. W podobny sposób odczytujemy informacje dla
pozostałych wylosowanych możliwości.
Informacje powyższe
potrzebne są nam do wyświetlenia odpowiedniego znaku na etykiecie
Label6:
Label6.Caption:=('Ile
jest: ' + IntToStr(Liczba1) + ' ' + znak + ' ' +IntToStr(Liczba2) + '
?');
Ponieważ
etykieta Label6 musi przedstawić wiele różnych informacji, stąd
też jest ona zbiorem tekstu i zmiennych. Jako, że etykieta służy
do wyświetlenia krótkiego tekstu, stąd też informacje wyświetlamy
z pozycji kodu, zmieniając jej właściwość Caption. To samo
robiliśmy wcześniej, przygotowując projekt z pozycji Inspektora
Obiektów (Caption).
Ponieważ
nazwa jest zbiorem różnych elementów, więc całość musimy ująć
w nawias. W jego środku zwykły tekst umieszczamy w apostrofie, a
zmienne dokładamy za pomocą znaku „+”. Gdybyśmy chcieli
wyświetlić taki plus, musielibyśmy go także zawrzeć w
apostrofie. Z uwagi na to, że liczby nie są typu tekstowego
(string), tylko liczbowego (integer), musimy je przekonwertować do
postaci string, stosując konwersję typu IntToStr. W ten sposób
liczby będą mogły zostać wyświetlone, gdyż zostaną
potraktowane jako znaki tekstowe. Proszę nie zapomnieć o spacji po
słowie „jest”, ani przed znakiem zapytania. To samo tyczy się
pustych miejsc ujętych w apostrofy przed i za zmienną „Znak”.
Są one potrzebne do tego, aby porobić odstępy między słowami i
liczbami.
Na
zakończenie kodu umieszczamy polecenie:
Edit1.SetFocus;
//ustaw focus w Polu
do Odpowiedzi
Ta linia nie jest
konieczna, ale jest użyteczna, ponieważ po wyświetleniu działania
umieszcza kursor w polu edycyjnym. Bez tego kodu, po każdorazowym
naciśnięciu przycisku START i wyświetleniu działania,
musielibyśmy myszką klikać w pole edycyjne, aby wpisać wynik.
Rozwiązanie, które tu stosujemy, umożliwia po wyświetleniu
działania od razu wpisać z klawiatury wynik bez użycia myszki. To
duże udogodnienie przy zabawie.
6. Gdy naciśniesz przycisk Sprawdź
Label KONIEC;
//Etykieta do przechodzenia w inne
miejsca kodu
var Odp: String; //zmienna przechowująca naszą odpowiedź
Zanim zadeklarujemy
zmienną Odp, deklarujemy element Label. Nie jest to jednak komponent
Label służący do wyświetlania napisów, co widać w innym
pokolorowaniu składni w kodzie. Element ten jest częścią
instrukcji goto za pomocą
której możemy przenieść się w inne miejsce kodu i służy do
zadeklarowania nazwy, która będzie ten punkt określała. Może być
ona dowolna. Starajmy się wybierać takie nazwy, które będą nas
informowały o przeznaczeniu tych instrukcji. W późniejszym czasie,
gdyby zaistniała potrzeba modyfikacji kodu, odpowiednie nazwy
ułatwią nam rozeznanie się w tych tysiącach linii kodu.
Zadeklarujemy teraz
zmienną, która będzie przechowywać naszą odpowiedź.
Teoretycznie powinna być typu liczbowego (Integer), ponieważ w pole
edycyjne Edit1 wpisujemy z klawiatury liczby. Niestety, pomimo
wpisywania do komponentu Edit cyfr, są one traktowane jako znaki
tekstowe, a nie liczbowe, ponieważ komponent ten służy do
wyświetlania znaków tekstowych. Nie jest to problem, ponieważ w
dalszej części kodu będziemy mogli przekonwertować te wartości.
Posiadając tę wiedzę deklarujemy więc zmienną 'Odp' typu
tekstowego (String).
Odp:=
Edit1.Text; //odczytaj
podaną odpowiedź i przypisz ją do zmiennej
if
Odp='' then //gdy nie podano odpowiedzi
monituj o wpisaniu wyniku
begin
ShowMessage('Wpisz
najpierw wynik'); //wyświetl komunikat
informujący
Edit1.SetFocus;
//ustaw focus w Polu do Odpowiedzi
goto
KONIEC; //pomiń poniższy kod i przejdź od
razu na koniec procedury
end:
W pierwszej części kodu
przypisujemy podaną przez nas odpowiedź (wpisaną do pola Edit) do
zmiennej „Odp”. Tutaj wprowadzamy jedno z naszych wcześniejszych
założeń, mianowicie chcemy, aby program informował nas o
sytuacji, gdy naciśniemy przycisk „Sprawdź”, a w polu edycyjnym
nie będzie wpisana żadna liczba. Jest to zadanie opcjonalne, nie
wpływające na poprawną pracę samej zabawy, ale warto zaopatrzyć
w nie nasz program na wszelki wypadek. W sytuacji, gdy naciśniemy
przycisk „Sprawdź”, a w polu edycyjnym nie będzie wpisana żadna
liczba, bez tego kodu, program uzna to za błędną odpowiedź,
ponieważ puste pole nie będzie pasowało do poprawnego wyniku.
Aby zrealizować nasze
założenie, wprowadzamy instrukcję warunkową if: Jeżeli
zmienna „Odp” nie zawiera żadnej wartości (if Odp='' -
normalnie, pomiędzy apostrofami powinien znaleźć się jakiś znak
lub tekst), wtedy (then) wykonaj następujące instrukcje
(begin...end): Wyświetl komunikat informujący o tym (ShowMessage),
ustaw kursor (focus) ponownie na polu edycyjnym, oraz przejdź do
punktu „KONIEC:”, aby pominąć wykonywanie dalszych instrukcji
(goto KONIEC). Bez tego przejścia program, po wyświetleniu
komunikatu zrealizowałby kolejne linie kodu, czyli porównałby
naszą odpowiedź z poprawnym wynikiem i uznał ją za błędną.
W przypadku jakiejkolwiek
instrukcji warunkowej, jeżeli chcemy, aby program wykonał kilka
różnych operacji, musimy je wszystkie zawrzeć w bloku
„begin...end”. Podobnie, jak w poprzednim przypadku,
ustawiamy kursor na polu edycyjnym dla naszej wygody, aby nie trzeba
było klikać na nie myszką.
if
Odp=(IntToStr(WYNIK)) then //jeżeli
odpowiedź jest poprawna to ...
begin
ShowMessage('Bardzo
dobrze!'); //wyświetl komunikat o poprawnej
odpowiedzi
Label11.Caption:=
'Ile jest: '; //wyczyść działanie
Poprawne:=Poprawne
+ 1; //dodaj punkt do poprawnych
odpowiedzi
end //bez średnika
else
//w przeciwnym wypadku ...
begin
ShowMessage('Niestety
źle'); //wyświetl komunikat o złej
odpowiedzi
Niepoprawne:=Niepoprawne
+ 1; //dodaj
punkt do niepoprawnych
odpowiedzi
end;
Czas najwyższy ocenić
naszą odpowiedź. W tym celu stosujemy instrukcję warunkową
if...then: Jeżeli udzielona przez nas odpowiedź (Odp)
jest taka sama (=) jak wynik działania (WYNIK), wtedy (then) wykonaj
następujące instrukcje (begin...end): Wyświetl komunikat
(ShowMessage) informujący o poprawnej odpowiedzi, pozostaw tylko
napis „Ile jest:” (Label6.Caption), oraz zwiększ zmienną
przechwującą ilość poprawnych odpowiedzi o 1
(Poprawne:=Poprawne+1), w przeciwnym wypadku (else) (czyli, gdy nasza
odpowiedź będzie się różniła od poprawnego wyniku), wykonaj
następujące instrukcje (begin...end): wyświetl komunikat o błędnej
odpowiedzi (ShowMessage), oraz zwiększ zmienną przechowującą
ilość niepoprawnych odpowiedzi o 1.
Konstrukcja typu
Zmienna:=Zmienna+1 pozwala nam zapamiętywać wynik i powiększać go
lub pomniejszać w trakcie działania programu. W ten sposób program
„pamięta” nasz wynik.
Aby dopasować typy
danych, wynik ze zmiennej WYNIK (typu Integer) konwertujemy do typu
String za pomocą konwersji IntToStr.
Edit1.Clear;
//wyczyść pole do podawania
Odpowiedzi
Edit1.SetFocus;
//ustaw focus w Polu do Odpowiedzi
Label9.Caption:=
IntToStr(Poprawne); //wyświetl
ilość poprawnych odpowiedzi
Label10.Caption:=
IntToStr(Niepoprawne); //wyświetl
ilość niepoprawnych odpowiedzi
KONIEC
Bez względu na udzieloną
przez nas odpowiedź, po jej ocenie, wymazujemy ją z pola edycyjnego
(Edit1.Clear) i ustawiamy na nim kursor (focus), przygotowując
program na przyjęcie kolejnej odpowiedzi.
Na koniec wyświetlamy
podsumowanie naszych wyników. W tym celu w komponencie Label4
wyświetlamy ilość poprawnych odpowiedzi, zmieniając jego nazwę
(Caption) na wartość odpowiadającą zmiennej Poprawne. Ponieważ
zmienna ta jest typu Integer, więc musimy zastosować konwersję,
aby dostosować ją do charakteru tekstowego, jakim jest nazwa
komponentu Label.
Powyższe zadanie
powtarzamy dla komponentu Label5 wyświetlającego ilość
niepoprawnych odpowiedzi, wiążąc jego nazwę (Caption) z wartością
zmiennej Niepoprawne. Na samym końcu
umieszczamy etykietę KONIEC, czyli miejsce do którego przechodzi
instrukcja goto. Jest ona na samym końcu, więc cały kod
pomiędzy instrukcjami „goto KONIEC” a „KONIEC” jest
przez nią pomijany.
Zaprezentowany przez nas
przykład prostej zabawy matematycznej możemy traktować jako punkt
wyjścia dla bardziej rozbudowanych rozwiązań. Aby dać tego
przykład, w dwóch kolejnych propozycjach rozwiniemy tę zabawę w
dwóch różnych obszarach: w jednym, utrudnimy sobie liczenie
dokładając kolejne dwie liczby, a w drugim, zamiast wyświetlać
komunikaty, program będzie je wypowiadał. Po zastosowaniu
dodatkowych rozwiązań z tej książki, możemy nawet sprawić , aby
całkiem wyłączyć monitor i bawić się z komputerem tak, jak z
żywym człowiekiem. To naprawdę zależy tylko od naszej inwencji.
< Wstecz 3/3
Artykuł pochodzi z mojej książki pt. "Delphi w przykładach dla początkujących". Zapraszam na Stronę książki.
Ciekawe artykuły:
Zapoznaj się z innymi utworami. Przejdź do zakładki Spis artykułów.
- Zagadki logiczne i inne zagadki
- Gry matematyczne w Delphi
- Zabawy rozwijające pamięć w Delphi
- Przechwyt klawiatury w Delphi
- Nauki płynące z mądrości pokoleń
Zapoznaj się z innymi utworami. Przejdź do zakładki Spis artykułów.
Brak komentarzy:
Prześlij komentarz