Instrukcje do ćwiczeń z Programowania Obiektowego w C++.
Ćwiczenie nr 1. : Klasy.
UWAGA!!! Odpowiedzi na pytania/polecenia zaznaczone na szaro muszą znaleźć się w sprawozdaniu z ćwiczenia.
Wprowadzenie
Tworzenie programów zorientowanych obiektowo w C++ to tworzenie i używanie klas (ang. classes). Klasa definiuje nowy typ. Jednak w odróżnieniu od typów poznanych do tej pory, definicja klasy łączy w sobie defnicję nowych obiektów (danych) oraz operacji (metod), które mogą być wykonywane na tych obiektach. Ogólna postać definicji klasy wygląda następująco:
class nazwa_klasy {
instrukcje_definiujace_klase
};
Pierwsza linia to deklaracja klasy; po niej następuje definicja klasy ujęta w nawiasy klamrowe, a wszystko zakończone średnikiem. Instrukcje definujące klasę obejmują deklaracje zmiennych (danych) oraz funkcji (metod).
Cel ćwiczenia
W tym ćwiczeniu stworzymy dwie proste klasy, Punkt i Prosta, reprezentujące obiekty geometryczne (odpowiednio: punkt i prostą) na płaszczyźnie. Następnie wykorzystamy te dwie klasy w krótkim programie rozwiązującym proste problemy geometryczne.
Niezbędne wiadomości z geometrii
Będą nam potrzebne pewne podstawowe wiadomości z geometrii:
1. Definicja punktu na płaszczyźnie.Punkt na płaszczyźnie (oznaczmy ten punkt przez P) reprezentujemy przy pomocy pary współrzędnych (czyli liczb rzeczywistych x i y) ujętych w nawias okrągły:
P(x,y),
a zatem, żeby zdefniować punkt wystarczą dwie liczby: x i y.
2. Definicja prostej na płaszczyźnie.Prostą na płaszczyźnie reprezentujemy przy pomocy równania:
ax + by + c = 0,
a zatem, żeby zdefniować prostą wystarczą trzy liczby: a, b i c.
3. Definicja prostej na płaszczyźnie przy pomocy dwóch punktów.
Prostą można też zdefiniować nieco inaczej: otóż przez dwa punkty na płaszczyźnie przechodzi dokładnie jedna prosta, a zatem żeby jednozacznie zdefniować prostą wystarczy podać dwa punkty przez które ta prosta przechodzi.
Załóżmy, że chcemy aby nasza prosta przechodziła przez punkty P1(x1,y1) i P2(x2,y2).
Wówczas współczynniki prostej, a, b i c (patrz punkt 2.) znajdujemy przy pomocy współrzędnych punktów P1 i P2 według następującego przepisu (algorytmu):
Jeżeli (x1 = x2), to
a = 1
b = 0
c = – x1
w przeciwnym razie
a = y2 – y1
b = x1 – x2
c = y1 ∙ x2 – y2 ∙ x1
4. Odległość między dwoma punktami.Mając dwa punkty na płaszczyźnie P1(x1,y1) i P2(x2,y2) możemy obliczyć odległość między nimi. Przepis (algorytm) jest następujący:odległość_miedzy_punktami = sqrt( (x1– x2)2 + (y1– y2)2 ),gdzie sqrt oznacza, że bierzemy pierwiastek kwadratowy z wyrażenia w nawiasie.
5. Odległość między punktem a prostą.Mając punkt P1(x1,y1) oraz prostą zdefiniowaną równianiem ax + by + c = 0 możemy obliczyć odległość między tymi dwoma obiektami. Przepis (algorytm) jest następujący:odległość_prosta_punkt = abs (a ∙ x1 + b ∙ y1 + c) / sqrt (a2 + b2),gdzie abs oznacza, że bierzemy wartość bezwzględną z wyrażenia w nawiasie, natomiast sqrt oznacza, że bierzemy pierwiastek kwadratowy z wyrażenia w nawiasie.
6. Punkt przecięcia dwóch prostych.Dwie proste które nie są równoległe, przecinają się dokładnie w jednym punkcie. Jeśli proste są równoległe, to przyjmujemy, że ich punkt przecięcia znajduje się w nieskończoności (∞).Załóżmy, że znamy dwie proste o równaniach a1x + b1y + c1 = 0 oraz a2x + b2y + c2 = 0. Chcemy znaleźć współrzędne punktu P0(x0,y0), który jest punktem przecięcia tych prostych. Współrzędne te obliczymy przy pomocy znanych współczynników a1, b1, c1, a2, b2, c2. Przepis (algorytm) jest następujący:
Oblicz liczbę pomocniczą d: d = a1 ∙ b2 – a2 ∙ b1 Oblicz kwadrat sinusa kąta między liniami: sin_kw = d2 / ((a12 + b12) ∙ (a22 + b22))Jeżeli (sin_kw = 0) to (czyli proste są równoległe, więc punkt przecięcia jest w nieskończoności)
x0 = ∞
y0 = ∞
x0 = (b1 ∙ c2 – b2 ∙ c1) / d
y0 = (c1 ∙ a2 – c2 ∙ a1) / d
Przygotwanie programu głównego
Zanim stworzymy klasy Punkt i Prosta musimy przygotować środowisko (czyli program główny), w którym te dwie klasy będą pracować.W tym celu przygotujmy krótki program w C++ (nazwijmy ten program umownie Geometria), który będzie komunikował się z użytkownikiem według następującego schematu:
wypisze na ekranie napis: "Podaj wspolrzedne (x,y) dla czterech dowolnych punktow"
wczytaj współrzędne czterech punktów i zapamiętaj je w zmiennych x1,y1, x2,y2, x3,y3, x4,y4
UWAGA!!! Powyższe zmienne mają być typu Liczba. Typ Liczba zdefiniujemy sami korzystając z deklaracji:
typedef float Liczba;
(umożliwi nam to łatwą zmianę typu naszych zmiennych w razie potrzeby).
UWAGA!!! Deklaracja typedef float Liczba; powinna być umieszczona PRZED deklaracją funkcji main() !!!!
Po przygotowaniu programu Geometria proszę sprawdzić, czy działa on poprawnie (a więc czy poprawnie wczytuje i zapamiętuje współrzędne podawane przez użytkownika)!
Teraz jesteśmy gotowi do przygotowania klas Punkt i Prosta, które następnie wykorzystamy w programie Geometria.
Projektowanie klasy Punkt
Chcemy aby klasa Punkt "potrafiła" wykonywać następujące operacje na obiektach typu Punkt:
· wykreować punkt na płaszczyźnie na podstawie pary współrzędnych (x,y) (zgodnie z opisem w 1.);
· obliczyć odległość do innego punktu (zgodnie z opisem w 4.);
· obliczyć odległość do prostej (zgodnie z opisem w 5.);
· wypisać współrzędne punktu;
Defninicja klasy Punkt
Zdefniujemy teraz klasę Punkt...
chomikSGHowy