Подорожуй з gofrie.com

Задача: Обчислення арифметико-геометричного середнього

Арифметико-геометричного середнім M(a,b) двох дійсних чисел 0<a<b. M(a,b) називається спільна границя двох послідовностей, з яких одна монотонно зростає, а інша — монотонно спадає:



де послідовності задані рекурентними співвідношеннями:



Обчислити M(a,b) з максимально можливою точністю.

Задача: Обчислення iнтегралу Гауса

Запрограмуйте функцію обчислення інтегралу Гауса за розкладом у ряд

\int_{0}^{x}e^{-t^{2}}dt = x-\frac{x^{3}}{3*1!} + \frac{x^{5}}{5*2!}-\frac{x^{7}}{7*3!}...

Задача: Обчислення елементарних функцiй

Реалізувати власні функції обчислення елементарних функцiй MySin, MyCos, MyExp, MyLn

Задача: Клас Time

Реалізувати клас Time за наведеною нижче специфікацією.

Увага! Час має нормалізуватися при створенні об'єкта.
Наприклад Time a(8, 75, 210) після створення має мати атрибути Hours = 9, Minutes= 18, Seconds == 30

Зразки виводу:
1) Для Time(1,1,1) — 01:01:01
2) Для Time(23,59,59) — 23:59:59

#include <exception>
#include <iostream>
using namespace std;

class Time
{
public:
	struct BadTime;
	typedef int Hours;
	typedef int Minutes;
	typedef int Seconds;
	
	Time (const Hours& h, const Minutes& m, const Seconds& s);
	Time (const Seconds &s=0);
	Time (const Time&);
	~Time(){};
	Time& operator=(const Time&);
	
	operator int() const;

	const double ToHours() const;
	const int ToSeconds() const;

	// Selectors
	const Hours& getHours() const;
	const Minutes& getMinutes() const;
	const Seconds& getSeconds() const;

	// Modifiers
	void setHours(const Hours&);
	void setMinutes(const Minutes&);
	void setSeconds(const Seconds&);

	const Time& operator++();
	const Time operator++(int);
	const Time& operator--();
	const Time operator--(int);

private:
	// Mutable attributes in order to allow normalizing in const objects
	mutable Hours _hours;
	mutable Minutes _minutes;
	mutable Seconds _seconds;

	void normalizeTime() const;
};

Time& operator+=(Time&, const Time&);
const Time operator+(const Time&, const Time&);

const bool operator==(const Time&, const Time&);
const bool operator!=(const Time&, const Time&);
const bool operator>(const Time&, const Time&);
const bool operator<(const Time&, const Time&);
const bool operator>=(const Time&, const Time&);
const bool operator<=(const Time&, const Time&);

ostream& operator<<(ostream&, const Time&);

struct Time::BadTime
{
	Time::Hours _hours;
	Time::Minutes _minutes;
	Time::Seconds _seconds;
};

Задача: Трикутники

Реалізувати клас трикутників за зразком сигнатури:

Вивід трикутників ABC у вигляді (1;2)(1;2)(3;5), де A, B, C — відповідні точки.

#include <iostream>
using namespace std;

class Point
{
private:
	double _x;
	double _y;

public:
	Point (const double &x = 0, const double &y = 0);
	Point (const Point &);
	~Point();
	Point &operator=(const Point &);
	double &x();
	double &y();
	const double &x()const;
	const double &y()const;
	const double distance(const Point &p) const;
};

ostream &operator<<(ostream&, const Point &);
const Point operator+ (const Point &, const Point &);
Point &operator+=(Point &, const Point &);
const Point operator- (const Point &, const Point &);
Point &operator-=(Point &, const Point &);
const bool operator==(const Point &, const Point &);
const bool operator!=(const Point &, const Point &);

class Triangle
{
public:
	// Segment of triangle
	class Segment 
	{
	private:
		// Assignment is forbidden in this implementation
		Segment &operator=(const Segment &);
		const Point &_a;
		const Point &_b;

	public:
		Segment(const Point &start, const Point &end);
		Segment(const Segment &);
		~Segment();

		const Point &start() const;
		const Point &end() const;

		const double length() const;
                // Найближча відстань від точки до відрізка
		const Point nearest(const Point &) const;
	};

	Triangle(const double &x1=0, const double &y1=0,
	         const double &x2=1, const double &y2=0,
		 const double &x3=0, const double &y3=1);
	Triangle(const Point &a, const Point &b, const Point &c);
	Triangle(const Point &a, const Segment &side);
	Triangle (const Triangle &);
	~Triangle();
	Triangle &operator=(const Triangle &);

	const double perimeter() const;
	const double area() const;

	const Point &apexA() const;
	const Point &apexB() const;
	const Point &apexC() const;

	const Segment &side_a() const;
	const Segment &side_b() const;
	const Segment &side_c() const;

	const double length_a() const;
	const double length_b() const;
	const double length_c() const;

	const Segment &height_a() const;
	const Segment &height_b() const;
	const Segment &height_c() const;

private:
        Point _a, _b, _c;
};

Задача: Робота з матрицями

Визначте тип дійсних матриць другого порядку. Запрограмуйте операції введення, виведення, множення матриці на число, збільшення елементів матриці на число, додавання матриць.

Вивід матриці має бути у вигляді (a_11 = 1, a_12 = 2, a_21 = 3, a_22 = 4): 1 2 3 4.

Задача: Пошук у загорнутому впорядкованому векторі a всіх членів загорнутого впорядкованого вектора b

Запрограмуйте функцію пошуку у загорнутому впорядкованому векторі a всіх членів загорнутого впорядкованого вектора b.

Вивід вектору має бути у вигляді: (1, 2, 3, 4).
Якщо елемент у векторі відсутній, то вивід має бути таким: (1, 2, NULL, NULL).

Задача: Обчислення гармонійно-геометричного середнього

Запропонуйте обчислення гармонійно-геометричного середнього, яке визначається як спільна границя двох послідовностей:

a_0 = a, b_0 = b; a_{n+1} = \frac{2}{\frac{1}{a_n}+\frac{1}{b_n}}; b_{n+1} = \sqrt{a_n b_n}; n = 1,2...

Задача: Обчислення довільного члена послідовності

Запрограмуйте функцію для обчислення довільного члена послідовності

a_0=1, a_1=0, a_2=1; a_{n+3}=a_n+2a_{n+1}+3a_{n+2}; n=0,1,...

Задача: Обчислення сумми

Запрограмуйте функцію для обчислення суми
s_{n} = x^{1^{2}}+x^{2^{2}}+...+x^{n^{2}}

Задача: Спрощення оператора

Спростити оператор

if (x>y) 
    z=x; 
else 
    z=y;

Задача: Сегмент

Реалізувати клас сегментів, який не суперечить наступній сигнатурі:


#include <iostream>
using namespace std;

class Point 
{
private:
    double _x;
    double _y;
public:
    Point(const double &x = 0, const double &y = 0);
    Point(const Point&);
    ~Point(void);
    Point& operator=(const Point &);
    double& x(void);
    double& y(void);
    const double& x()const;
    const double& y()const;
};

//Вивід у вигляді (x; y)
ostream& operator<<(ostream&, const Point&);
const Point operator+(const Point&, const Point&);
Point& operator+=(Point&, const Point&);
const bool operator==(const Point&, const Point&);
const bool operator!=(const Point&, const Point&);

class Segment
{
private:
    const unsigned int _myID;
    Point _a;
    Point _b;
public:
    Segment(const double &x1 = 0, const double &y1 = 0,
            const double &x2 = 0, const double &y2 = 0);
    Segment(const Point &start, const Point &end);
    Segment(const Segment &);
    ~Segment();
    Segment& operator=(const Segment &);
    const Point& start() const;
    const Point& end() const;
    Point& start();
    Point& end();
    const double& startX() const;
    const double& startY() const;
    const double& endX() const;
    const double& endY() const;
    double& startX();
    double& startY();
    double& endX();
    double& endY();
    // Обчислення довжини відрізка
    const double length() const;
    // Обчислення відстані від відрізка до точки
    const double distance(const Point &) const;
    //Ідентифікатор поточного сегменту
    const unsigned int getID() const;
};

// Вивід у вигляді [(x1; y1); (x2; y2)]
ostream& operator<<(ostream&, const Segment &);
const bool operator==(const Segment &, const Segment &);
const bool operator!=(const Segment &, const Segment &);

Задача: Бінарні операції над дійсними векторами

Запрограмуйте функцію, здатну виконати довільну бінарну операцію ω над парами, побудованими з елементів дійсних векторів

(x_1, x_2,..., x_n) і (y_1, y_2,..., y_n).

Оператор виводу має розмежовувати елементи вектору пробілом, наприклад 1 1.5 2.465 -6.3