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

Podobne dokumenty