Programowanie komputerów Kalkulator Kalkulator Kalkulator

Transkrypt

Programowanie komputerów Kalkulator Kalkulator Kalkulator
Programowanie
komputerów
Kalkulator
•Relatywnie prosty interfejs użytkownika
•Złożony algorytm
Kalkulator.
Kalkulator
Kalkulator – możliwe udoskonalenia
•Elementy obowiązkowe (2,0)
•Kalkulator "biurowy"
–Klawisze: numeryczne 0..9, znak dziesiętny (","),
operacje arytmetyczne +, -, *, /, wynik (=)
oraz kasowanie AC,
–W pełni poprawne działanie
(tj. nie tylko 2+3=C4-1=)
–Obsługa klawiatury
–(2,0) pamięć - klawisze M+, M-, MR, MC
(M+ i M- z obl. wyniku)
–(1,5) wydruk historii operacji
–(1,0) tryby pracy wyświetlacza
(norm. / 1 / 2 / 3 miejsca po przecinku)
–(1,0) blokada wielokrotnych zer i przecinków
–(1,0) obsługa błędu dzielenia przez 0
–(0,5) klawisz %
–(0,5) klawisz zmiany znaku +/–(0,5) klawisze C i AC
Kalkulator – możliwe udoskonalenia
Kalkulator
•Kalkulator "naukowy"
•Zasady oceniania kalkulatora
–(1,5) funkcje matematyczne - sin, cos, ln, exp
–(1,5) "inteligentne" powtarzanie operacji
–(1,0) argument funkcji trygonometr.
(stopnie / radiany)
–(0,5) powtarzanie operacji po wielokrotnym =
–(0,5) klawisz zmiany znaku +/–(0,5) klawisze C i AC
–Ocena = suma uzyskanych punktów
(w tym 2pkt. za elementy obowiązkowe)
ale
–Na ocenę 4 przynajmniej jedno rozszerzenie
za minimum 1 pkt.
–Na 5 przynajmniej jedno rozszerzenie
za minimum 1,5 pkt.
–Nie można mieszać rozszerzeń kalkulatora
biurowego i naukowego
1
Kalkulator jako automat skończony
Kalkulator jako automat skończony
•Oznaczenia:
–W – wyświetlacz
–L1, L2 – zmienne przechowujące wartości arg.
–O – wybrana operacja arytmetyczna (np. +)
–K – wciśnięty klawisz
–[1] klawisze numeryczne
–[+] klawisze operacji arytm.
–[=] wiadomo
–[C] klawisz kasowania
0
4
C
W Å "0"
=
L2 Å W
WÅ L1 O L2
L1 Å W
1
WÅk
1
1
W Å W+k
+
L1 Å W
OÅk
2
+
OÅk
1
WÅk
3
1
W Å W+k
Typowe działanie użytkownika – wersja podstawowa
Kalkulator jako automat skończony
=
0
1
WÅk
Komponenty kalkulatora
=
1
C
W Å "0"
=
4
=
=
L2 Å W
WÅ L1 O L2
L1 Å W
+
+
+
1
1
W Å W+k
+
L1 Å W
OÅk
2
+
OÅk
1
WÅk
3
1
W Å W+k
Komplet przejść między stanami dla wersji podstawowej
Komponenty kalkulatora
–Wyświetlacz:
można użyć Memo lub Label (etykieta);
komponent Edit (pole edycyjne) nie nadaje się,
ponieważ nie ma możliwości wyrównania tekstu
do prawej strony.
–Przyciski
należy użyć komponentu SpeedButton;
zwykły Button (przycisk) nie nadaje się,
ponieważ zatrzymuje fokus (przerywana linia
wokół opisu przycisku, który został ostatnio
kliknięty)
Memo
–Memo jest komponentem służącym do edycji
większych fragmentów tekstu.
W przeciwieństwie do Edit (pole edycyjne), może
wyświetlać wiele linii tekstu
–Memo posiada wiele właściwości oraz metod
ułatwiających zarządzanie edytowanym tekstem
(m.in. zapis/odczyt pliku, operacje schowka
systemowego kopiuj/wytnij/wklej itd.);
–Może być podstawą prostego edytora tekstu,
klasy notatnika systemowego
2
Memo
–Właściwości:
Lines – kolekcja obiektów AnsiString,
zawierających tekst poszczególnych akapitów
Text – obiekt AnsiString, zawierający cały tekst
MaxLenght – maksymalna długość tekstu
Font – właściwości czcionki
Alignment – wyrównanie tekstu (do lewej/prawej)
Enabled (bool) – dostępność, tj. możliwość edycji
ReadOnly (bool) – tylko do odczytu
SpeedButton
–Właściwości:
Caption – opis przycisku
Font – właściwości czcionki
Glyph – obrazek (obrazki) na przycisku
Layout – położenie obrazka względem opisu
NumGlyphs – liczba obrazków zawartych w Glyph
Funkcje obsługi zdarzeń kalkulatora
–Najwygodniej jest utworzyć wspólną funkcję
obsługi zdarzeń dla przycisków jednej grupy:
– Zaznaczyć wszystkie komponenty grupy
– W inspektorze obiektów wybrać zakładkę Events
(tj. zdarzenia) i kliknąć w polu obok nazwy zdarzenia,
np. OnClick
– Wpisać własną nazwę, np. "CyfryKlik", nacisnąć <Enter>
SpeedButton
–SpeedButton jest przyciskiem przeznaczonym
głównie dla okien narzędziowych i pasków narzędzi;
od standardowego Button (przycisku) różni się
głównie dwiema cechami: nie zatrzymuje fokusu
oraz potrafi wyświetlać tzw. glyph
–SpeedButton można dostosować do różnych zadań
i wykorzystać na wiele sposobów – np. grupa takich
przycisków może zachowywać się jak przyciski
radiowe albo jak pola wyboru
Zmienne globalne kalkulatora
–Zmienne, które muszą zachować wartość
między kolejnymi zdarzeniami (i wyłącznie takie)
należy deklarować jako globalne;
–W kalkulatorze będą to:
numer stanu, liczby L1 oraz L2, operacja arytm.
Funkcje obsługi zdarzeń kalkulatora
–Aby komponenty mające wspólną funkcję obsługi
zdarzeń można było rozróżnić, należy wykorzystać
właściwość Tag:
– W inspektorze obiektów wpisujemy każdemu
komponentowi inną wartość Tag
– W funkcji obsługi zdarzenia odczytujemy Tag:
3
Typowy sposób obsługi zdarzeń
0
Typowy sposób obsługi zdarzeń
=
=
1
C
4
=
1
0
1
WÅk
=
+
+
=
L2 Å W
WÅ L1 O L2
L1 Å W
1
WÅk
3
1
4
WÅk
W Å "0"
+
1
+
L1 Å W
OÅk
1
W Å W+k
2
1
WÅk
+
OÅk
1
W Å W+k
Czynności, jakie należy wykonać po wciśnięciu cyfry
Typowy sposób obsługi zdarzeń
Key = dynamic_cast<TComponent*>(Sender)->Tag;
switch (State)
{
case 0:
W->Text = Key;
State = 1;
break;
case 1:
W->Text = W->Text + Key;
break;
// itd.
}
Instrukcja wyboru (decyzyjna)
–Alternatywnie:
switch (wyrażenie) {
Case Case ... Case
}
gdzie fraza Case ma postać:
case stała:
case stała: ...
instrukcja
instrukcja ...
break;
2
1
WÅk
1
W Å W+k
3
1
W Å W+k
Czynności, jakie należy wykonać po wciśnięciu cyfry
Instrukcja wyboru (decyzyjna)
–Uogólniona instrukcja warunkowa.
–Składnia:
switch (wyrażenie) {
case stała : [ instrukcja ] [ break; ]
...
default: instrukcja
}
wyrażenie - dowolne wyrażenie o rezultacie
całkowitym (często po prostu zmienna)
–Działanie: wykonywane są instrukcje począwszy
od stałej równej wyrażeniu aż do instrukcji break
Instrukcja wyboru (decyzyjna)
switch (State) {
case 1:
W->Text = key;
State = 2;
break;
case 2:
W->Text = W->Text + key;
break;
}
–instrukcje odrębne dla każdego przypadku (case’u)
jedno "case stała:" może zastąpić "default:"
4
Instrukcja wyboru (decyzyjna)
switch (State) {
case 3:
W->Text = key;
case 4:
W->Text = 0;
State = 2;
break;
}
–instrukcje częściowo wspólne – brak break
Instrukcja wyboru (decyzyjna)
switch (val) {
case 7:
case 9:
W->Text = key;
break;
default:
W->Text = 0;
break;
}
–Fraza default jest wykonywana, gdy wartość
wyrażenia nie pasuje do żadnego z case-ów
Instrukcja wyboru (decyzyjna)
switch (State) {
case 1:
case 3:
W->Text = W->Text + key;
break;
}
–instrukcje wspólne dla obu przypadków
Obsługa klawiatury
–Informacja o wpisaniu znaku z klawiatury jest
przekazywana do elementów aktywnych
(pulpit – aktywna aplikacja – aktywne okno
aktywnej aplikacji – aktywny komponent
aktywnego okna);
dzięki temu mogą działać różne skróty klawiaturowe
–W kalkulatorze najlepszym miejscem do
przechwycenia zdarzeń klawiatury jest formularz,
a ściślej jego zdarzenie OnKeyPress
–Dodatkowo należy we właściwościach formularza
ustawić KeyPreview na true
Obsługa klawiatury
void TForm1::FormKeyPress(..., char &Key)
{
switch (Key) {
case '0': b0->Click(); break;
case '1': b1->Click(); break;
case '+': bAdd->Click(); break;
case '=':
case 13: bEqs->Click(); break;
case 'c':
case 'C':
case
8: bClr->Click(); break;
}
Key = 0;
}
5

Podobne dokumenty