Zad. 1 Napisać program umożliwiający wykonywanie obliczeń na

Transkrypt

Zad. 1 Napisać program umożliwiający wykonywanie obliczeń na
Systemy informatyczne
Zad. 1
Napisać program umożliwiający wykonywanie obliczeń na liczbach zespolonych. Liczba zespolona będzie
reprezentowana przez obiekty klasy CComplex zdefiniowanej przez użytkownika. Zakłada się następujące dane,
funkcje składowe oraz funkcje operatorowe klasy:
sekcja publiczna
CComplex – konstruktor; nadaje wartość zero danym prywatnym re, im klasy (przyjmujemy, że w chwili
tworzenia obiektu części rzeczywista i urojona liczby zespolonej będą miały wartość równą zero);
~CComplex – destruktor;
set_re – funkcja dostępu do danej prywatnej re, powodująca nadanie/zmianę jej dotychczasowej wartość;
set_im – funkcja dostępu do danej prywatnej im, powodująca nadanie/zmianę jej dotychczasowej wartość;
set_complex – funkcja dostępu do danych prywatnych re, im, powodująca nadanie/zmianę ich dotychczasowych
wartości;
get_re – funkcja dostępu do danej prywatnej re, zwracająca jej bieżącą wartość;
get_im – funkcja dostępu do danej prywatnej im, zwracająca jej bieżącą wartość;
print_complex – funkcja drukująca (wypisująca na ekranie) liczbę zespoloną w formacie (re,im) dla bieżących
wartości re oraz im;
abs – funkcja obliczająca wartość bezwzględną liczby zespolonej;
sekcja prywatna
re, im – dane typu rzeczywistego reprezentujące część rzeczywistą i urojoną liczby zespolonej;
funkcje operatorowe klasy
zadeklarowane jako funkcje zaprzyjaźnione klasy CComplex
operator +
dodawanie dwóch liczb zespolonych;
operator –
odejmowanie dwóch liczb zespolonych;
operator *
mnożenie dwóch liczb zespolonych;
operator /
dzielenie przez siebie dwóch liczb zespolonych (przyjmujemy, że operacja dzielenia nie może być
wykonana jeżeli drugi z operandów ma części rzeczywistą i urojoną równe zero – w takiej sytuacji przyjmujemy,
że wynik dzielenia jest liczbą zespoloną taką, że re = im = 0);
operator *
mnożenie liczby zespolonej przez skalar będący liczbą rzeczywistą (mnożenie może być wykonane
z lewej lub z prawej strony – odpowiednio deklarujemy dwie różne funkcje operatorowe zakładające różną
kolejność operandów);
operator << przeciążenie operatora wstawiania do strumienia reprezentowanego przez obiekt typu ostream;
przyjmujemy, że lewym operandem jest referencja do obiektu typu ostream, a prawym obiekt klasy CComplex;
wykorzystanie operatora << w programie umożliwi wypisanie na ekranie liczby zespolonej w takiej samej postaci
jak funkcja print_complex;
operator >> przeciążenie operatora pobrania ze strumienia reprezentowanego przez obiekt typu istream;
przyjmujemy, że lewym operandem jest referencja do obiektu typu istream, a prawym obiekt klasy CComplex;
wykorzystanie operatora >> w programie umożliwi wczytywanie danych do obiektu klasy CComplex, co więcej
możliwe będzie również kaskadowe wczytywanie danych do kilku obiektów tej klasy;
operator == porównanie dwóch liczb zespolonych; jeżeli części rzeczywiste i urojone tych liczb są sobie równe,
wynikiem jest wartość logiczna true; w przeciwnym razie – false;
3
Systemy informatyczne
operator != porównanie dwóch liczb zespolonych; jeżeli części rzeczywiste i urojone tych liczb są sobie równe,
wynikiem jest wartość logiczna false; w przeciwnym razie – true;
zadeklarowane jako funkcje składowe klasy CComplex
operator = przypisanie składowym obiektu znajdującego się po lewej stronie operatora składowych obiektu tej
klasy leżącego po prawej stronie operatora przypisania;
operator !
wykonanie operacji sprzężenia na liczbie zespolonej reprezentowanej przez obiekt klasy, na który
działa operator;
operator += operacja dodawania z przypisaniem; wykonanie operacji dodania do siebie liczb zespolonych
reprezentowanych przez obiekty leżące po lewej i prawej stronie operatora, a następnie podstawienie wyniku pod
obiekt znajdujący się po lewej stronie operatora;
operator –= operacja odejmowania z przypisaniem; wykonanie operacji odjęcia od liczby zespolonej
reprezentowanej przez obiekt leżący po lewej operatora liczby zespolonej reprezentowanej przez obiekt leżący po
prawej stronie operatora, a następnie podstawienie wyniku pod obiekt znajdujący się po lewej stronie operatora;
operator *= operacja mnożenia z przypisaniem; wykonanie operacji mnożenia przez siebie liczb zespolonych
reprezentowanych przez obiekty leżące po lewej i prawej stronie operatora, a następnie podstawienie wyniku pod
obiekt znajdujący się po lewej stronie operatora;
operator /= operacja dzielenia z przypisaniem; wykonanie operacji dzielenia liczby zespolonej reprezentowanej
przez obiekt leżący po lewej operatora przez liczbę zespoloną reprezentowaną przez obiekt leżący po prawej
stronie operatora, a następnie podstawienie wyniku pod obiekt znajdujący się po lewej stronie operatora;
Uwagi
Przyjęcie jako wynik operacji dzielenia wartości części rzeczywistej i zespolonej równej zero jest rozwiązaniem
tymczasowym i upraszczającym. Na kolejnych laboratoriach w celu sygnalizacji wykonania niedozwolonej
operacji dzielenia przez operand reprezentujący zerową liczbę zespoloną zostanie zastosowany mechanizm obsługi
wyjątków.
Przyjmujemy w klasie CComplex jeden ze sposobów implementacji operatorów +, –, *, /; albo jako funkcje
zaprzyjaźnione z daną klasą (zob. założenia klasy w zadaniu), albo jako funkcje składowe klasy.
Niech dane będą liczby zespolone
z1 = a + bi,
z2 = c + di.
Wówczas podstawowe działania na liczbach zespolonych zdefiniowane są w następujący sposób:
z1 + z2 = (a + c) + (b + d)i
z1 - z2 = (a – c) + (b – d)i
z1 · z2 = (ac – bd) + (bc + ad)i
z1 / z2 = [(ac + bd) / (c2 + d2)] + [(bc – ad) / (c2 + d2)] i
4
Systemy informatyczne
Napisz program, w którym wykorzystana zostanie klasa CComplex do wykonania następujących zadań testowych:
1. Zadeklaruj obiekty x, y, z klasy CComplex. Nadaj im odpowiednie wartości: x = 2 – 4i, y = –5 + 3i, z = –3 – 5i. Dla
każdej liczby zespolonej oblicz jej moduł oraz wypisz wynik na ekranie.
2. Wykonaj następujące działania na liczbach zespolonych:
a) x + y; x – y; x · y; x / y;
b) (x – z) / (y + z); 5 · (y + z); x · (2·z – y·3);
Zapamiętaj wszystkie otrzymane wyniki działań w odpowiednich (dodatkowo zadeklarowanych) obiektach klasy
(wykorzystując operator podstawienia =) oraz wypisz je na ekranie wykorzystując funkcję print_complex.
3. Wykorzystaj operator == do porównania wyników odpowiednich działań:
a) x + y oraz y – z;
b) x · y oraz 2 · z.
Rezultaty odpowiednich porównań zapamiętaj w zmiennych typu logicznego, a informację czy wyniki są równe wypisz
na ekranie.
4. Wykorzystując operatory +=, –=, ·= oraz /= wykonaj odpowiednie zadania: zwiększ wartość liczby x o (4 – 2i),
pomniejsz wartość liczby y o (–6 + 3i), pomnóż liczbę z przez (3 + 5i) a otrzymany wynik podstaw ponownie pod
zmienną z.
5. Wypisz na ekranie wartości liczb zespolonych x, y, z operator <<.
6. Zadeklaruj trzy obiekty (np. s1, s2, s3) typu CComplex. Wczytaj odpowiednie wartości dla części rzeczywistej oraz
zespolonej wykorzystując operator >>.
7. Pobierz (wykorzystując odpowiednią funkcję dostępu do danej re) wartość części rzeczywistej liczby reprezentowanej
przez obiekt s1 i zainicjuj nią wartość części zespolonej obiektu s3 (wykorzystując odpowiednią funkcję dostępu do
danej im).
Napisz program, w którym wykorzystana zostanie klasa CComplex do wykonania następujących zadań testowych:
1. Zadeklaruj obiekty x, y, z klasy CComplex. Nadaj im odpowiednie wartości: x = 4 + 6i, y = –2 – 7i, z = 4 – 9i. Dla
każdej liczby zespolonej oblicz jej moduł oraz wypisz wynik na ekranie.
2. Wykonaj następujące działania na liczbach zespolonych:
a) z + y; z – y; z · y; z / y;
b) 3 · (y + z); (y + z) / (x – z); (–2· z + y·3) · x.
Zapamiętaj wszystkie otrzymane wyniki działań w odpowiednich (dodatkowo zadeklarowanych) obiektach klasy
(wykorzystując operator podstawienia =) oraz wypisz je na ekranie.
3. Wykorzystaj operator == do porównania wyników odpowiednich działań:
a) y + z oraz x – y;
b) 3 · x · y oraz z / x.
Rezultaty odpowiednich porównań zapamiętaj w zmiennych typu logicznego, a informację czy wyniki są równe wypisz
na ekranie.
4. Wykorzystując operatory +=, –=, ·= oraz /= wykonaj odpowiednie zadania: zwiększ wartość liczby x o (–5 + 3i),
pomniejsz wartość liczby y o (2 + 4i), podziel liczbę z przez (–3 + 6i) a otrzymany wynik podstaw ponownie pod
zmienną z.
5. Wypisz na ekranie wartości liczb zespolonych x, y, z operator <<.
6. Zadeklaruj trzy obiekty (np. q1, q2, q3) typu CComplex. Wczytaj odpowiednie wartości dla części rzeczywistej oraz
zespolonej wykorzystując operator >>.
7. Pobierz (wykorzystując odpowiednią funkcję dostępu do danej im) wartość części zespolonej liczby reprezentowanej
przez obiekt q2 i zainicjuj nią wartość części rzeczywistej obiektu q1 (wykorzystując odpowiednią funkcję dostępu do
danej re).
5

Podobne dokumenty