1

Тема: [C++] клас Коло / class Circle

Доброго дня я початківець(прям самий самий початок) в програмування.Але наполеглово вчуся.
Допоможіть з таким завданням.
"Клас Circle (коло). Клас зберігає Декартові координати центра кола, а також значення точки на колі. Повинні бути передбачені функції-елементи, що обчислюють довжину кола, площу та діаметр".
Завчасно дякую.

2

Re: [C++] клас Коло / class Circle

І чим же вам допомогти?

3

Re: [C++] клас Коло / class Circle

kasia написав:

Клас Circle (коло). Клас зберігає Декартові координати центра кола, а також значення точки на колі. Повинні бути передбачені функції-елементи, що обчислюють довжину кола, площу та діаметр

Можна так:

#include <iostream>
#include <cmath>

struct PointF {
    float X, Y;
    PointF() : X(0.f), Y(0.f) { }
    PointF(float x, float y) : X(x), Y(y) { }
};
float distance(PointF const p0, PointF const p1) {
    float x = p0.X - p1.X,
          y = p0.Y - p1.Y;
    return sqrt(x * x + y * y);
}
std::ostream &operator <<(std::ostream &out, PointF const p) {
    return out << "{ X: " << p.X << ", Y: " << p.Y << " }";
}

class Circle {
    public:
        PointF const C;
        PointF const P;
        Circle() : C(PointF()), P(PointF()) { }
        Circle(PointF c, PointF p) : C(c), P(p) { }

        float get_area() const {
            // TODO: calculate area here and return it
            float a = 0.f;
            return a;
        }
        float get_diameter() const {
            float d = distance(C, P);
            return d + d;
        }
        float get_length() const {
            // TODO: calculate length here and return it
            float l = 0.f;
            return l;
        }
};

int main(int argc, char *argv[]) {
    Circle c({ 1.f, 1.f }, { 5.f, 4.f });
    std::cout << "Center of the circle: " << c.C << "\r\n"
              << "Point on the circle : " << c.P << "\r\n";
    std::cout << "Area    : " << c.get_area() << "\r\n"
              << "Diameter: " << c.get_diameter() << "\r\n"
              << "Length  : " << c.get_length() << "\r\n";
    return 0;
}

Але там де бачите "// TODO" треба дописати функцію.
get_diameter() маєте як приклад.
Якщо вам не вистачає якоїсь функції для PointF, то можна створити її, подібно до того як була створена функція distance(...).

Подякували: Olex_V, Betterthanyou2

4

Re: [C++] клас Коло / class Circle

Велике дякую за допомогу.
Ось що получилось в кінцевому результаті (можливо комусь зпригодиться).

#include <iostream>
#include <cmath>
using namespace std;
struct PointF {
    float X, Y;
    PointF() : X(0.f), Y(0.f) { }
    PointF(float x, float y) : X(x), Y(y) { }
};
float distance(PointF const p0, PointF const p1) {
    float x = p0.X - p1.X,
        y = p0.Y - p1.Y;
    return sqrt(x * x + y * y);
}

std::ostream& operator <<(std::ostream& out, PointF const p) {
    return out << "{ X: " << p.X << ", Y: " << p.Y << " }";
}

class Circle {
public:
    PointF const C;
    PointF const P;
    Circle() : C(PointF()), P(PointF()) { }
    Circle(PointF c, PointF p) : C(c), P(p) { }
    float get_area() const {
        const double PI = 3.14;
        float a= PI* (distance(C, P)* distance(C, P));
        return a;
    }
    float get_diameter() const {
        float d = distance(C, P);
        return d+d;
    }
    float get_length() const {
        const double PI = 3.14;
        float l = (distance(C, P) * 2) * PI;
        return l;
    }
};

int main(int argc, char* argv[]) {
    Circle c({ -6.f, 7.f }, { 0.f, 6.f });
    cout << "Center of the circle: " << c.C << "\r\n"<< "Point on the circle : " << c.P << "\r\n";
    cout << "Area: " << c.get_area() << "\r\n" << "Diameter: " << c.get_diameter() << "\r\n"<< "length: "<<c.get_length()<< "\r\n";
        return 0;
}

ПС.Зізнаюсь чесно поки не розумію до кінця початок коду.Український Форум самий кращий.

Подякували: koala1

5

Re: [C++] клас Коло / class Circle

Якщо щось не розумієте - питайте, тільки трохи розлого. Тобто якщо маєте свої припущення чи щось навколо розумієте - поясніть, як саме ви це розумієте, можливо, проблема не в тому місці, де вам здається.

6

Re: [C++] клас Коло / class Circle

І щераз доброго дня Ми з України.
Умова така:
Клас Quadrangle (чотирикутник). Клас зберігає Декартові координати чотирьох кутів чотирикутника. Конструктор приймає чотири групи координат. Повинні бути передбачені функції-елементи, що обчислюють периметр і площу, а також функція, що перевіряє чи передані координати визначають прямокутник. Довжиною повинне вважатися більше із двох вимірів.

#include<iostream>
#include<cmath>
#include<Windows.h>
using namespace std;
struct PointF {
    float X, Y;
    PointF() : X(0.f), Y(0.f) { }
    PointF(float x, float y) : X(x), Y(y) { }
};
float distance(PointF const p0, PointF const p1) {
    float x = p0.X - p1.X,
        y = p0.Y - p1.Y;
    return sqrt(x * x + y * y);
}
std::ostream& operator <<(std::ostream& out, PointF const p) {
    return out << "{ X: " << p.X << ", Y: " << p.Y << " }";
}
class Quadrangle {
public:
    PointF const A;
    PointF const B;
    PointF const C;
    PointF const D;
    Quadrangle() : A(PointF()), B(PointF()), C(PointF()), D(PointF()) { }
    Quadrangle(PointF a, PointF b) : A(a), B(b) { }
    Quadrangle(PointF c, PointF d) : C(c), D(d) { }
    Quadrangle(PointF a, PointF c) : A(a), C(c) { }
    Quadrangle(PointF b, PointF d) : B(b), D(d) { }
    float get_area() const {
        
        float a = 0.f;
        return a;
    }
    float get_perimeter() const {
        
        float l = 0.f;
        return l;
    }
};
int main()
{
    SetConsoleCP(1251); 
    SetConsoleOutputCP(1251);
    int ice;
    while (true)
    {
        cout << "Ввести дані напишіть цифру 1 ||  Вийти із програми напишіть цифру 2 "<< endl;
        cin >> ice;
        if (ice == 2) { break; }
        else if (ice == 1) 
        {
            float t1, t2, t3, t4, t5, t6, t7, t8;
            cout << " : X="; cin >> t1;
            cout << " : Y="; cin >> t2;
            cout << " : X="; cin >> t3;
            cout << " : Y="; cin >> t4;
            cout << " : X="; cin >> t5;
            cout << " : Y="; cin >> t6;
            cout << " : X="; cin >> t7;
            cout << " : Y="; cin >> t8;
            Quadrangle c( { t1, t2 },{ t3, t4 });
            Quadrangle c({ t5, t6 }, { t7, t8 });
            cout << "Center of the circle: " << c.A << "\r\n" << "Point on the circle : " << c.B << "\r\n";
            cout << "Point on the circle : " << c.C << "\r\n" << "Point on the circle : " << c.D << "\r\n";
            cout << "Площа: " << c.get_area() << "\r\n" << "Периметир: " << c.get_perimeter() << "\r\n" ;
        }
        else { continue; }
    }
    return 0;
}

ПС. Не хоче працювати підкажіть.

7

Re: [C++] клас Коло / class Circle

kasia написав:

Не хоче працювати підкажіть.

трохи токсичного сарказму

мабуть, нечемно просили

Будь ласка, описуйте проблему конкретно, і бажано в позитивних твердженнях: не лише те, чого програма НЕ робить, а й те, що вона РОБИТЬ натомість. Якщо компілятор пише про помилку - то про яку і де.

Подякували: leofun01, Olex_V2

8

Re: [C++] клас Коло / class Circle

Ось можлив хтось за 10 років подякую мені)

#include <iostream>
#include <math.h>
using namespace std;

class Point
{
public:
    double x, y;
    Point() // Точки на осі х 
    {
        x = 0;
        y = 0;
    }
    Point(double _x, double _y)
    {
        x = _x;
        y = _y;
    }
    void set(double _x, double _y)
    {
        x = _x;
        y = _y;
    }

};

class Line //
{
public:

    Point A, B;
    Line()
    {
        A.set(0, 0);// обнуляю точку а і б забираємо зайве сміття 
        B.set(0, 0);
    }
    Line(Point _A, Point _B)
    {
        A = _A;
        B = _B;
    }
    void set(Point _A, Point _B)
    {
        A = _A;
        B = _B;
    }
    double lenght()
    {
        return sqrt(pow(A.x - B.x, 2) + pow(A.y - B.y, 2)); // Формула для дерикторених координат 
    }
};

class Quatrangle { // класс чотирикутник 
public:// Оголошення загальнодоступних членів класу

    Point A, B, C, D; // ологолушуєм точки 
    Line AB, BC, CD, AD; // відрізки 
    Quatrangle()
    {
        A.set(0, 0);
        B.set(0, 0);
        C.set(0, 0);
        D.set(0, 0);
        AB.set(A, B);
        BC.set(B, C);
        CD.set(C, D);
        AD.set(A, D);
    }
    // обнуляємо

    Quatrangle(Point _A, Point _B, Point _C, Point _D)
    {
        A = _A;
        B = _B;
        C = _C;
        D = _D;
        AB.set(A, B);
        BC.set(B, C);
        CD.set(C, D);
        AD.set(A, D);
    }


    bool isQuatrangle() // bool це зімнна 
    {
        bool flag = false;
        bool tmp1 = AB.lenght() >= BC.lenght() && CD.lenght() >= AD.lenght(); // аб повинне бути більше ніж бс і ...
        bool tmp2 = AB.lenght() >= CD.lenght() && BC.lenght() >= AD.lenght();
        bool tmp3 = AB.lenght() <= BC.lenght() && CD.lenght() <= AD.lenght();
        bool tmp4 = AB.lenght() <= CD.lenght() && BC.lenght() <= AD.lenght();

        if ((tmp1 == true) || (tmp2 == true) || (tmp3 == true) || (tmp4 == true)) // перевірка чи координати визначають прямокутник
        {
            flag = true;
        }

        return flag;
    }

    void Perimetr() // функція у якій записана формула для обчислення периметру 
    {
        cout << "P=" << AB.lenght() + BC.lenght() + CD.lenght() + AD.lenght() << endl;
    }

    void Plocha() // функція у якій записана формула для обчислення площі
    {
        cout << "S=" << AB.lenght() * BC.lenght() << endl;
    }

    void print()
    {
        if (isQuatrangle() == true) {
            Perimetr();
            Plocha();
        }
        else {
            cout << "Error" << endl;
        }
    }
};
void main()
{
    setlocale(0, "");
    while (true)
    {
        int q;
        cout << "1 Додати ||2 Кінець " << endl; cin >> q;
        if (2 == q)
        {
            break;

        }

        else if (1 == q)
        {
            float t1, t2, t3, t4, t5, t6, t7, t8;

            cout << "  точка A x="; cin >> t1;
            cout << "  точкаA y="; cin >> t2;
            cout << "  точкаB X="; cin >> t3;
            cout << "  точкаB Y="; cin >> t4;
            cout << " точка C X="; cin >> t5;
            cout << "  точкаC Y="; cin >> t6;
            cout << " точка D X="; cin >> t7;
            cout << "  точкаD Y="; cin >> t8;
            cout << endl;
            Point A(t1, t2), B(t3, t4), C(t5, t6), D(t7, t8);
            Quatrangle pryam(A, B, C, D);
            pryam.print();
            cout << endl;
        }
        else { continue; }
    }
    system("pause");

}

9

Re: [C++] клас Коло / class Circle

Дивно. Початковий код був значно чистішим. Таке враження, що взяли чужий і намагалися із ним розібратися, причому не дуже вдало. Ну, або спеціально заплутували.
Підкажу одну деталь: AB.lenght() >= BC.lenght() і AB.lenght() <= BC.lenght() одночасно можливо, тільки якщо AB.lenght() == BC.lenght(). І всі умови у isQuatrangle перевіряють, чи є фігура ромбом. Після чого чомусь множаться сторони цього ромба для пошуку площі, що неправильно.

10

Re: [C++] клас Коло / class Circle

Перевіряємо ознаки паралелограма, а саме чи є протилежні сторони рівні
1) AB = CD
2) BC = DA
Далі перевіряємо чи є паралелограм прямокутником порівнюючи діагоналі
3) AC = BD
Ніби цих трьох умов повинно вистачити.

Виправте, якщо я помиляюся.