instrukcja_do_cw_z_prog_obiektowego.doc

(81 KB) Pobierz
Instrukcje do ćwiczeń z Programowania Obiektowego w C++

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 = y2y1

              b = x1x2

              c = y1 x2y2 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( (x1x2)2 + (y1y2)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 b2a2 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 = ∞

w przeciwnym razie

              x0 = (b1 c2b2 c1) / d

              y0 = (c1 a2c2 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...

Zgłoś jeśli naruszono regulamin