• Nie Znaleziono Wyników

Wstęp do Programowania 2

N/A
N/A
Protected

Academic year: 2022

Share "Wstęp do Programowania 2"

Copied!
11
0
0

Pełen tekst

(1)

Wst ˛ep do Programowania 2

dr Bo˙zena Wo´zna-Szcze´sniak bwozna@gmail.com

Akademia im. Jana Długosza

Wykład 7

(2)

Przykład realizowany na wykładzie

Klasa Wektor. Wst ˛epne pliki zał ˛aczone jako ´zródła.

Przykład z ksi ˛a˙zki: Stephen Prata. J ˛ezyk C++. Szkoła programowania. Wydanie V.

(3)

Informacje wst ˛epne

Wektorto termin u˙zywany m.in. w in˙zynierii, fizyce i matematyce.

Wektorjest wielko´sci ˛a, która posiada zarównorozmiar jak ikierunek, np. efekt pchni ˛ecia jakiego´s przedmiotu zale˙zy od u˙zytej siły (rozmiar) oraz obranego kierunku.

Matematyczna reprezentacja wektora zale˙zy od układu współrz ˛ednych wykorzystanego do jego opisu.

Przykładowo: wektor dwuwymiarowy mo˙zna reprezentowa´c przy pomocy dwóch warto´sci, które przedstawia´c b ˛ed ˛a:

rozmiar (długo´s´c) i kierunek (k ˛at) – układ współrz ˛ednych biegunowych (polarnych);

wspólrz ˛edn ˛a x i y – układ współrz ˛ednych kartezja ´nskich (prostok ˛atnych);

(4)

Informacje wst ˛epne

Wektory mog ˛a by´c dodawane, odejmowane, mno˙zone przez liczb ˛e i odwracane. Operacje te spełniaj ˛a znane prawa algebraiczne: przemienno´sci, ł ˛aczno´sci,

rozdzielno´sci (odejmowanie traktowane jest jako szczególny przypadek dodawania). Zatem operacje przeprowadzane na wektorach daje si ˛e łatwo opisa´c za pomoc ˛a operatorów przeci ˛a˙zonych, gdy˙z stanowi ˛a one analogie do zwykłych operacji arytmetycznych.

(5)

Klasa Vector - interfejs, czesc prywatna

#ifndef VECTOR_H_

#define VECTOR_H_

#include <iostream>

namespace VECTOR // nasz nowa przestrzen {

class Vector {

private:

double x; // wartosc skladowej poziomej double y; // wartosc skladowej pionowej double mag; // dlugosc wektora

double ang; // kierunek wektora

char mode; // ’r’ = tryb prostokatny, ’p’ = tryb biegunowy // metody prywatne ustawiajace skladowe

void set_mag(); // ustaw dlugosc void set_ang(); // ustaw kat void set_x(); // ustaw wsp. x void set_y(); // ustaw wsp. y public:

...

};

} // koniec przestrzeni nazw VECTOR

#endif

(6)

Klasa Vector - interfejs, czesc publiczna

#ifndef VECTOR_H_

#define VECTOR_H_

#include <iostream>

namespace VECTOR // nasz nowa przestrzen {

class Vector {

...

public:

Vector();

Vector(double n1, double n2, char form = ’r’);

void set(double n1, double n2, char form = ’r’);

~Vector();

double xval() const {return x;} // zwraca wartosc skladowej x double yval() const {return y;} // zwraca wartosc skladowej y double magval() const {return mag;} // zwraca dlugosc

double angval() const {return ang;} // zwraca kat void polar_mode(); // ustawia tryb na ’p’

void rect_mode(); // ustawia tryb na ’r’

// metody przeciazajace operatory Vector operator+(const Vector & b) const;

Vector operator-(const Vector & b) const;

Vector operator-() const;

Vector operator*(double n) const;

// funkcje zaprzyjaznione

friend Vector operator*(double n, const Vector & a);

friend std::ostream & operator<<(std::ostream & os, const Vector & v);

};

} // koniec przestrzeni nazw VECTOR

#endif

(7)

Uwagi do przykładu

Nast ˛epuj ˛ace funkcje z uwagi na swoj ˛a definicj ˛e wewn ˛atrz deklaracji klasy staj ˛a sie automatycznie funkcjami

wplatanymi (inline):

double xval() const {return x;} // zwraca wartosc skladowej x double yval() const {return y;} // zwraca wartosc skladowej y double magval() const {return mag;} // zwraca dlugosc

double angval() const {return ang;} // zwraca kat

Poniewa˙z powy˙zsze funkcje nie modyfikuj ˛a obiektów, to zostały zdefiniowane z u˙zyciem modyfikatoraconst.

(8)

Uwagi do przykładu

Definicja operatcji dodawania wektorów:

Vector Vector::operator+(const Vector & b) const {

Vector sum;

sum.x = x + b.x;

sum.y = y + b.y;

sum.set_ang();

sum.set_mag();

return sum;

}

(9)

Uwagi do przykładu

Definicja operatcji dodawania wektorów:

Vector Vector::operator+(const Vector & b) const {

return Vector(x + b.x, y + b.y);

}

(10)

Uwagi do przykładu

Klasa Vector mo˙ze zosta´c zastosowana do symulacji problemu losowego prze´scia z punktu A do punktu B.

Wyobra´zmy sobie osob ˛e, która ma doj´s´c do jakiego´s punktu, lecz za ka˙zdym razem zmienia kierunek marszu. Jeden z rodz ˛acych sie

problemów jaki trzeba tutaj rozwi ˛aza´c jest wyliczenie liczby kroków potrzebnych do osi ˛agni ˛ecia celu.

W uj ˛eciu wektorowym problem ten mo˙zna sprowadzi´c do dodawania du˙zej ilo´sci losowo zorientowanych wektorów, trwaj ˛ace dopóty, dopóki ich suma osi ˛agnie odległo´s´c jaka ma zosta´c przebyta przez dana osobe.

(11)

Uwagi do przykładu

Program do kompilacji wymaga biblioteki matematycznej cmath.

W niektórych systemach operacyjnych do kompilacji omawianego programu wymagane jest jawne doł ˛aczenie biblioteki cmath, tj.:

g++ pliki ´zródłowe z rozszerzeniem .cc (.cpp) -lm

bws@bws:~/programy$ g++ randwalk.cpp vect.cpp -o wektory bws@bws:~/programy$ g++ randwalk.cpp vect.cpp -lm -o wektory

Cytaty

Powiązane dokumenty

This easily leads to examples of surfaces over a number field which do not dominate any variety of general type, but which nevertheless do not acquire Zariski-dense K-rational

pow double pow(double x, double y); x y - x do potęgi y sin double sin(double x); sinus argumentu x w radianach atan double atan(double x); arcus tangens argumentu x atan2

[r]

[r]

Caªkami szczególnymi rozwa»anego równania s¡ zatem e 2x , xe 2x , które na mocy Uwagi 1c) s¡.. liniowo niezale»na, a zatem tworz¡

Nieco poszerzone badania późniejsze zawęziły ten dystans czasowy do 166-249 tysięcy (Vigilant et al. Powodem krytyki i zarazem popularności ich badań stał się wniosek,

Jaką drogę przebędzie on do chwili zatrzymania się, jeśli współczynnik tarcia krążka o lód wynosi f=0,1?.

* t, const double epsabs, const double epsrel, const size_t limit, gsl_integration_workspace * workspace, double * result, double * abserr) This function computes the integral of