Kalkulator RPN dla liczb zespolonych
Transkrypt
Kalkulator RPN dla liczb zespolonych
Kalkulator RPN dla liczb zespolonych 1 Cel zadania Wykształcenie zdolności abstrahowania operacji arytmetycznych od konkretnych typów. Utrwalenie umiej˛etności przecia˛żania operatorów arytmetycznych oraz dostosowania sposobu formatowania strumienia wejściowego i wyjściowego do potrzeb własnych struktur danych. 2 Opis zadania Niniejsze zadanie jest kontynuacja˛ zadania wcześniejszego. W ramach jego realizacji należy tak przekształcić program z zadania poprzedniego, aby mógł on działać na liczbach zespolonych. Należy w tym celu zdefiniować własna˛ klas˛e tworzac ˛ a˛ model poj˛ecie liczby zespolonej. Definicja wspomnianej klasy powinna zostać dołaczona ˛ do programu w postaci oddzielnego modułu. Podobnie jak to miało miejsce wcześniej, powinna być możliwa realizacja podstawowych działań arytmetycznych oraz operacji na stosie zgodnie z lista˛ przedstawiona˛ w poprzednim zadaniu. Ponadto dla napisanego programu należy stworzyć diagram klas. Jako baz˛e konstrukcji diagramu można wykorzystać diagram klas dostarczony do zadania poprzedniego. 3 Przykład działania programu jkowalsk@panamint: rozwiazanie> ./kalkulator_rpn 2+1i 3+4i 0+1i + p 3+5i 2+0i / ? 1.5+2.5i 2+1i / p 0.647059-0.411765i q jkowalsk@panamint: rozwiazanie> Dodatkowe puste linie w przykładzie działania programu dodane zostały dla zwi˛ekszenia czytelności. W przypadku rzeczywistej pracy programu nie musza˛ one wyst˛epować. 4 Rozszerzenie zadania (nieobowiazkowe) ˛ Należy zwrócić uwag˛e, że definiowanie operatorów dodatkowych przedstawionych w poprzednim zadaniu w sekcji “Rozszerzenie zadania” w odniesieniu do liczb zespolonych jest co najmniej dyskusyjne. Wskazane jest unikanie przenoszenia operacji logicznych, takich jak iloczyn 1 logiczny, suma logiczna itd., do arytmetyki liczb zespolonych. Ich obecność w przypadku typów podstawowych takich jak int, float, itp. wynika z cech j˛ezyka C i C++. Nie jest to zwiazane ˛ z samym poj˛eciem liczby całkowitej, czy też liczby rzeczywistej. Dlatego w rozszerzonej wersji tego zadania nie należy implementować operatorów wymienionych w analogicznej sekcji opisu zadania wcześniejszego. Jako rozszerzenie niniejszego zadania proponuje si˛e realizacj˛e takiego formatowania strumienia wejściowego i wyjściowego, aby było możliwe wczytanie i wyświetlenie wartości liczb zespolonych z pomini˛eciem cz˛eści rzeczywistej lub urojonej jeśli jej wartość wynosi zero, np.: 2.41, 12.2i 5 Materiały pomocnicze Dodatkowe materiały ułatwiajace ˛ rozpocz˛ecie realizacj˛e zadania znaleźć można na serwerze diablo lub panamint w katalogu ˜bk/edu/po/zad/z4. W katalogu tym znajduja˛ si˛e nast˛epujace ˛ podkatalogi i pliki: ˜bk/edu/po/zad/z4/. diagram_klas.xmi bin.diablo/kalkulator_rpn bin.diablo/kalkulator_rpn_rozszerzony bin.panamint/kalkulator_rpn bin.panamint/kalkulator_rpn_rozszerzony diagram_klas.xmi Jest to plik źródłowy diagramu klas w j˛ezyku UML, który pojawił si˛e w zadaniu wcześniejszym. Wspomniany plik jest przeznaczony dla programu umbrello. Diagram klas można również wykonać za pomoca˛ innych programów, np. dia. Strony domowe projektów: • umbrello – http://uml.sourceforge.net/index.php • dia – http://www.gnome.org/projects/dia Informacja o dost˛epności programów: • Linux – umbrello i dia powinny być dost˛epne w każdej dystrybucji. • MS Windows – dia dost˛epny jest w wersji binarnej dla Win32. Podane programy sa˛ podane jako przykładowe. Do tworzenia diagramów UML można również wykorzystać inne programy. Diagram należy dostarczyć w postaci pliku graficznego. Jego format oraz dodatkowe wymagania określa prowadzacy ˛ zaj˛ecia laboratoryjne. bin.diablo/kalkulator_rpn, bin.panamint/kalkulator_rpn Sa˛ to programy binarne. Stanowia˛ one przykład realizacji programu, w wersji podstawowej, który został skompilowany odpowiednio na serwerze diablo i na serwerze panamint. bin.diablo/kalkulator_rpn_rozszerzony, bin.panamint/kalkulator_rpn_rozszerzony Sa˛ to programy binarne. Stanowia˛ one przykład realizacji programu, w wersji rozszerzonej, który został skompilowany odpowiednio na serwerze diablo i na serwerze panamint. 2