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