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