450 kb

Transkrypt

450 kb
Programowanie
komputerów
Udoskonalenia kalkulatora.
Kalkulator
•Elementy obowiązkowe (2,0)
–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
Kalkulator – możliwe udoskonalenia
Kalkulator – możliwe udoskonalenia
•Kalkulator "biurowy"
•Kalkulator "naukowy"
Kalkulator
•Zasady oceniania kalkulatora
–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,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
Udoskonalenia kalkulatora
UWAGA! Stopień komplikacji kodu
rośnie znacznie szybciej, niż ilość udoskonaleń:
Złożoność
–(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
Udoskonalenia
1
Udoskonalenia kalkulatora
Zmiana znaku
Udoskonalenia różnią się stopniem trudności.
Zależenie od udoskonalenia, konieczne może
być dodanie:
–Samego tylko kodu
(np. blokada zer i przecinków, zmiana znaku)
–Stanów oraz kodu
(np. powtarzanie operacji po "=")
–Przycisków oraz kodu
(np. klawisze całkowitego i częściowego kasowania)
–Stanów, przycisków oraz kodu
(np. funkcje matematyczne, pamięć kalkulatora)
Blokada wielokrotnych zer i przecinków
–Nie da się wpisać zer wiodących lub wielu
przecinków.
0
0
0
,
,
,
0
0
–Po kliknięciu przycisku zmiany znaku
na wyświetlaczu przed liczbą naprzemienne jest
wyświetlany lub nie znak "-".
1
,
± ±
-1,
1,
–Realizacja: wykorzystanie odp. metod właściwości
Text wyświetlacza (klasy AnsiString),
Metody klasy AnsiString
–operator[ ] – operator indeksowania;
pierwszy znak ma indeks 1 (jak w Pascalu)
if (W->Text[1]=='-')
// ...
1
–operator== – operator równości
0
0,
0,001
if (W->Text=="0")
// ...
–Realizacja: wykorzystanie odp. metod właściwości
Text wyświetlacza (klasy AnsiString),
Metody klasy AnsiString
–Pos (substr) – znajduje podłańcuch substr i zwraca
jego pozycję lub 0, jeżeli nie znajdzie
if (W->Text.Pos(","))
// ...
–Delete (pos, cnt) – usuwa z łańcucha cnt znaków
poczynając od pozycji pos
W->Text = W->Text.Delete (1, 1);
–Insert (pos, substr) – wstawia podłańcuch substr na
pozycję pos
Kasowanie całkowite i częściowe
–Przycisk kasowania częściowego (C)
umożliwia skasowanie drugiego operandu:
2
+
3
C
0
6
=
8
–W innych sytuacjach działa na identycznie,
jak przycisk kasowania całkowitego (AC)
W->Text = W->Text.Insert (1, "-");
2
Kalkulator jako automat skończony
Obliczanie procentów
–Przycisk procent (%) działa podobnie, jak przycisk
równe (=), ale daje inny wynik:
C
4
AC
0
3
W Å "0"
0
0
+
5 %
=
1
C
C
315
C
–Reguły:
2
+
1
1
1
3
A
A
A
A
1
+
+
*
+
B
B
B
B
%
%
%
%
Æ
Æ
Æ
Æ
A
A
A
A
+
*
/
(A*B/100)
(A*B/100)
(B/100)
(B/100)
Realizacja kasowania częściowego
Kalkulator jako automat skończony
Powtarzanie operacji
–Wielokrotne klikanie przycisku równe (=) powoduje
powtarzanie operacji:
%
4
0
2
%
1
+
5
= = =
=
1
%
%
2
+
1
1
7
12
19
–Operacja ma sens tylko wtedy, gdy użytkownik
wybrał wszystkie 3 elementy (L1, Op, L2)
Æ Potrzebny jest dodatkowy stan
3
1
+
Realizacja funkcji procent
Powtarzanie operacji
Powtarzanie operacji
4
0
1
=
4
0
1
=
11
=
=
1
1
+
2
+
1
3
1
1
1
Co będzie „powtórzone” po wciśnięciu: 1 = = =…?
?
=
=
=
+
2
1
+
3
1
Powtarzanie operacji – dodatkowy stan
3
Powtarzanie operacji
Inteligentne powtarzanie operacji
4
0
=
–Wielokrotny wybór drugiego operandu i
wyświetlenie wyniku po kliknięciu równe (=) :
2
1
?
=
2
+
1
5
1
3
=
8
=
1
7
=
=
1
+
3
=
10
15
–Operacja ma sens tylko wtedy, gdy użytkownik
wybrał wszystkie 3 elementy (L1, Op, L2)
Æ Potrzebny jest dodatkowy stan
1
+
Powtarzanie operacji – stan 0 zamiast dodatkowego
Inteligentne powtarzanie operacji
Inteligentne powtarzanie operacji
4
0
1
4
0
1
=
11
?
=
=
2
+
1
1
1
+
3
1
1
1
Co będzie „powtórzone” po wciśnięciu: 1 = 2 = 3 =…?
Inteligentne powtarzanie operacji
–Jeżeli po wyświetleniu wyniku wprowadzana jest
liczba ...
2
+
5
=
3
=
=
2
+
3
1
1
+
Powtarzanie operacji – dodatkowy stan
Inteligentne powtarzanie operacji
... to nie wiadomo jeszcze, czy jest to powtarzanie
operacji, czy nowa operacja :
2
+
5
7
=
3
powtarzanie
=
7
2
+
5
=
7
5
3
+
6
=
nowa operacja
9
4
Inteligentne powtarzanie operacji
Inteligentne powtarzanie operacji
=
1
0
4
1
5
0
1
1
1
11
+
?
=
=
2
+
1
1
1
+
3
1
1
1
Nie wiadomo, co zrobi użytkownik ...
4
1
=
=
2
+
3
1
1
+
Inteligentne powtarzanie operacji – dodatkowy stan
Funkcje matematyczne
Funkcje matematyczne
–Minimum 4 różne funkcje matematyczne,
w tym 2 trygonometryczne:
2
5
√ +
8
1
4
0
√ =
=
1
5
9
11
14
–Po wpisaniu liczby i kliknięciu funkcji wyświetlany
jest wynik pośredni – do liczby tej nie można
dopisywać cyfr
Æ Potrzebne są dodatkowe stany
+
√
√
2
+
1
=
31
1
1
3
1
+
Funkcje matematyczne – dodatkowe stany
Funkcje matematyczne
Obsługa błędu dzielenia przez zero
?
?
?
0
=
1
√
4
1
11
2
=
1
1
√
+
2
+
√
?
1
0
=
-E-
+
1
/
2
+
9
= C
=
31
+
√
–Próba dzielenia przez zero powoduje wyświetlenie
komunikatu o błędzie:
3
-E-
0
–Kalkulator nie reaguje na przyciski [1], [+] i [=];
dopiero kliknięcie przycisku [AC] wznawia pracę
Æ Potrzebny jest dodatkowy stan
1
Niektóre z brakujących przejść między stanami
5
Obsługa błędu dzielenia przez zero
Pamięć (z obliczaniem wyniku)
AC
6
1
0
4
+
–Kliknięcie M+ lub M- powinno dać efekt taki,
jak kliknięcie =, a dodatkowo zmienić pamięć:
2
=
+
3 M+ 1
+
4
M-
=
1
M
+
2
+
1
1
1
3
5
5
–Kliknięcie MR powinno wyświetlić zawartość
pamięci, jednak bez możliwości dopisywania cyfr
Æpotrzebne są dodatkowe stany
1
+
Obsługa błędu dzielenia przez zero – dodatkowy stan
Pamięć (z obliczaniem wyniku)
Pamięć (z obliczaniem wyniku)
4
0
4
0
MR
1
=
11
M+
=
1
11
=
M+
1
1
+
3
1
1
1
Wybór trybu pracy
3
1
1
+
Pamięć – obsługa MR
Wybór trybu pracy
–Po kliknięciu „Mode”, kalkulator wyświetla
podpowiedź; kliknięcie cyfry zmienia tryb pracy:
1
7
Md
Md
4
0
1
+ =
1
1:Rad 2:Deg
2
+
Pamięć – obsługa M+ i M-
3
=
MR
1
2
+
Md + =
31
+
M+
1
=
=
Md
0
–Kalkulator nie reaguje na przyciski [+] i [=],
a tylko na cyfry albo przycisk [AC]
Æ Potrzebny jest dodatkowy stan
1
1
Md
Md
+
2
1
+
3
1
Wybór trybu pracy– dodatkowy stan
6
Wybór trybu pracy
–Jeżeli wybór trybu pracy dotyczy argumentu funkcji
trygonometrycznych (stopnie / radiany),
to ewentualną zamianę stopni na radiany
należy przeprowadzić we własnym zakresie:
if (Mode==1)
// R1 = radiany z L1
else
R1 = L1;
r = sin (R1);
Wybór trybu pracy
–W obu wypadkach zamiast instrukcji warunkowej
można wykorzystać wyrażenie warunkowe:
W = warunek? A: B;
zamiast
if (warunek)
W = A;
else
W = B;
Przykłady:
Wybór trybu pracy
–Jeżeli wybór trybu pracy dotyczy sposobu
wyświetlania wyników obliczeń (Norm / Fixed),
to do zamiany liczby na napis należy wykorzystać
funkcję FloatToStrF:
if (Mode==0)
W->Text = R;
else
W->Text = FloatToStrF (R, ffFixed, 20, N);
Wydruk historii operacji
–W odpowiednich momentach podczas pracy
kalkulatora wyświetlane są informacje
1
3
+
2
7
=
wydruk?
–Realizacja: metody komponentu Memo
(lub obiektu Lines , należącego do Mema)
R = Mode? sin(…): sin (L1);
W->Text = Mode? FloatToStrF (…): String(R);
Metody komponentu Memo
–Add (String) – dodaje linijkę tekstu do Mema
Memo->Lines->Add(String()+"*"+L1);
–Clear() – czyści zawartość Mema
Memo->Clear();
7

Podobne dokumenty