Programowanie komputerów Relatywnie prosty interfejs użytkownika Złożony algorytm. Elementy obowiązkowe (2,) Klawisze: numeryczne..9, znak dziesiętny (","), operacje arytmetyczne, -, *, /, wynik () oraz kasowanie AC, W pełni poprawne działanie (tj. nie tylko 2C-) Obsługa klawiatury możliwe udoskonalenia "biurowy" (2,) pamięć - klawisze M, M-, MR, MC (M i M- z obl. wyniku) (,5) wydruk historii operacji (,) tryby pracy wyświetlacza (norm. / / 2 / miejsca po przecinku) (,) blokada wielokrotnych zer i przecinków (,) obsługa błędu dzielenia przez (,5) klawisz % (,5) klawisz zmiany znaku /- (,5) klawisze C i AC możliwe udoskonalenia "naukowy" (,5) funkcje matematyczne - sin, cos, ln, exp (,5) "inteligentne" powtarzanie operacji (,) argument funkcji trygonometr. (stopnie / radiany) (,5) powtarzanie operacji po wielokrotnym (,5) klawisz zmiany znaku /- (,5) klawisze C i AC Zasady oceniania kalkulatora Ocena suma uzyskanych punktów (w tym 2pkt. za elementy obowiązkowe) ale Na ocenę przynajmniej jedno rozszerzenie za minimum pkt. Na 5 przynajmniej jedno rozszerzenie za minimum,5 pkt. Nie można mieszać rozszerzeń kalkulatora biurowego i naukowego
jako automat skończony Oznaczenia: W wyświetlacz L, L2 zmienne przechowujące wartości arg. O wybrana operacja arytmetyczna (np. ) K wciśnięty klawisz [] klawisze numeryczne [] klawisze operacji arytm. [] wiadomo [C] klawisz kasowania jako automat skończony 2 L W W Wk C W "" W L O L2 L W W Wk Typowe działanie użytkownika wersja podstawowa jako automat skończony Komponenty kalkulatora C W "" W L O L2 L W 2 L W W Wk W Wk 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
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 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 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 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 L oraz L2, operacja arytm. 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> 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:
Typowy sposób obsługi zdarzeń Typowy sposób obsługi zdarzeń C W "" W L O L2 L W 2 L W W Wk W Wk Czynności, jakie należy wykonać po wciśnięciu cyfry 2 W Wk W Wk 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 : W->Text Key; State ; case : W->Text W->Text Key; // itd. Uogólniona instrukcja warunkowa. Składnia: switch (wyrażenie) { case stała : [ instrukcja ] [ ]... 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 Alternatywnie: switch (wyrażenie) { Case Case... Case gdzie fraza Case ma postać: case stała: case stała:... instrukcja instrukcja... jedno "case stała:" może zastąpić "default:" case : W->Text key; State 2; case 2: W->Text W->Text key; instrukcje odrębne dla każdego przypadku (case u)
case : W->Text key; case : W->Text ; State 2; instrukcje częściowo wspólne brak break case : case : W->Text W->Text key; instrukcje wspólne dla obu przypadków switch (val) { case 7: case 9: W->Text key; default: W->Text ; Fraza default jest wykonywana, gdy wartość wyrażenia nie pasuje do żadnego z case-ó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 TForm::FormKeyPress(..., char &Key) { switch (Key) { case '': b->click(); case '': b->click(); case '': badd->click(); case '': case : beqs->click(); case 'c': case 'C': case 8: bclr->click(); Key ;