41 Востаннє редагувалося ur_naz (16.05.2020 19:58:27)

Re: Структури

leofun01 написав:

Натисніть сюди, щоб розгорнути або згорнути

Оце вже близько до теми.
Але ви, пане leofun01, дещо загубили. Мабуть у кротову діру потрапили.
Бо не існує точки без системи координат. А ви, пане leofun01, примусово усе в декартові координати поклали ба не знаєте, що спеціалізований софт користується полярними координатами.
доречи, всі ті оператори вводу/виводу... то є речі дуже специфічні. якщо просто - суцільний майхем. точка живе в системі координат. їй ті консолі, потоки, як собацюрі п'ята нога. де ви бачили консоль в сучасному софті? ау
тепер наступне. ви кажете, давайте буде функція... ой нє... чи не може точка сама розрахувати відстань до іншої точки? може. якще нема контейнера, це найліпший варіант. якщо є контейнер  можна передати такі повноваження йому. але окрема функція... ну, таке... спитайте пана каалу... розкажіть йому до чого тут enum і чому не треба створювати ідентичні за структурою типи

42

Re: Структури

koala написав:

А що, не видно, що тут не було попереднього курсу C?

Мені байдуже що там в нього було і чого не було. Зараз він пише на C++ і я запропонував рішення. Якщо не подобається, завжди можна відмовитись.

43

Re: Структури

ur_naz написав:

А ви, пане leofun01, примусово усе в декартові координати поклали ба не знаєте, що спеціалізований софт користується полярними координатами.

А тепер ще раз уважно перегляньте мій код. Підказка: Ctrl+F "polar2d"

44

Re: Структури

ur_naz написав:

точка живе в системі координат. їй ті консолі, потоки, як собацюрі п'ята нога. де ви бачили консоль в сучасному софті?

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

ur_naz написав:

ну, таке... спитайте пана каалу...

А хто такий пан "каалу" ? Я такого не знаю.

ur_naz написав:

розкажіть йому до чого тут enum

Краще ви мені розкажіть до чого тут enum.

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

45

Re: Структури

нащо вам дві однакові структури даних? Невже так складно зрозуміти, що не існує точки поза системою координат. Де ваші системи координат? Скільки можна повторювати одне й те ж??? чи в вас не складається логічний зв'язок між системи координат та enum?

46 Востаннє редагувалося koala (16.05.2020 22:16:44)

Re: Структури

ur_naz написав:

нащо вам дві однакові структури даних?

О, то наш геній теоретичного програмування, виявляється, вважає, що якщо у двох структур даних випадково збігаються типи елементів, то можна використовувати замість обох одну структуру, навіть якщо вони семантично несумісні! Схоже, хтось таки на першому занятті з програмування був такий зайнятий функціями, що майже повністю пропустив тему про типи і важливість контролю типів.
Прошу вас: відкрийте нам усім очі на використання "оператора enum" у цьому неймовірно нетривіальному контексті! Весь форум захоплено чекає!

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

47

Re: Структури

Мені вдалося знайти і виправити деякі свої помилки. Видалив iohelper. Оновив код. Основа залишилась та сама.

48 Востаннє редагувалося koala (16.05.2020 23:03:46)

Re: Структури

Тоді ще врахуйте, що стандартні функції sin та cos в <cmath>, на відміну від <math.h>, перевантажені для різних типів даних (в C воно зберігається в <tgmath.h>).

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

49

Re: Структури

koala написав:

Тоді ще врахуйте, що стандартні функції sin та cos в <cmath> ... перевантажені для різних типів даних

Я використав функції конкретно для float саме для однозначності, в сенсі приведення типів. Чи ви пропонуєте переробити структури на шаблони (template) ?

50

Re: Структури

Ні, просто використовувати std::sin та std::cos.

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

51

Re: Структури

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

//main.cpp
#include <iostream>
#include "point2d.h"
#include <windows.h>
using namespace std;

int main()
{
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
    point dek;
    polar pol;
    int d;
    cout << "Введіть:\n 0 - щоб перевести point in polar;\n 1 - щоб перевести polar in point;\n";
    while (cin >> d)
    {
        switch (d)
        {
        case 0:
            cout << "Введіть х та у:\n";

            while (cin >> dek.x >> dek.y)

            {

                pol = point_to_polar(dek); // переведення прямокутних координат до полярних

                show_polar(pol); // друк полярних координат

                cout << "Введіть нові значення чи будь-яку літеру для виходу:\n";

            }

            cout << "Бувай!:)\n";
            break;
        case 1: 
            cout << "Введіть distance та angle:\n";

            while (cin >> pol.distance >> pol.angle)

            {
                while (pol.distance < 0)
                {
                    cout << "Помилка. Выдстань < 0. Введіть ще раз: ";
                    cin >> pol.distance;
                }

                dek = polar_to_point(pol); // переведення прямокутних координат до полярних

                show_point(dek); // друк полярних координат

                cout << "Введіть нові значення чи будь-яку літеру для виходу:\n";

            }

            cout << "Бувай!:)\n";
            break;
        default:
            cout << ("Такого значення немає!Введіть інше:\n");
        };
    }
    return 0;

}
//koord.cpp
#include <iostream>

#include <cmath>
// оголошення структур та прототипів функцій
#include "koord.h"
// переведення прямокутних координат до полярних

polar point_to_polar(point pon)

{

    using namespace std;

    polar pol;

    pol.distance = sqrt(pon.x * pon.x + pon.y * pon.y); // переведення відстані

    pol.angle = atan2(pon.y, pon.x); // переведення кута

    return pol; // повертає структуру полярні координати

}

// друк полярних координат

void show_polar(polar dol)

{

    using namespace std;

    const double Rad_to_deg = 57.29577951; // 1 радіан = 57.29577951 градусів

    cout << "\nВідстань від початку координат = " << dol.distance;

    cout << "\nКут = " << dol.angle * Rad_to_deg;

    cout << " градусів\n";

}

point polar_to_point(polar pol)
{
    using namespace std;

    point pon;
    
    pon.x = pol.distance * cosf(pol.angle); // переведення відстані

    pon.y = pol.distance * sinf(pol.angle);; // переведення кута

    return pon; // повертає структуру полярні координати
}

void show_point(point dek)
{
    using namespace std;

    cout << "\nx = " << dek.x;

    cout << "\ny = " << dek.y;

    cout << "\n";
}
//koord.h
#ifndef POLAR2D_H_ // якщо COORDIN_H_ неозначена раніше препроцестром

#define POLAR2D_H_ // то означити

struct polar // структура полярні координати

{

    double distance; // відстань від початку координат

    double angle; // кут

};

struct point // прямокутні координати

{

    double x; // x-координата

    double y; // y-координата

};

// прототипи функцій

polar point_to_polar(point dek); // переведення прямокутних координат до полярних

void show_polar(polar pol); // друк полярних координат

point polar_to_point(polar pol);

void show_point(point dek);

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

52

Re: Структури

Карантинний код - всі рядки дотримуються дистанції.

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

53

Re: Структури

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

До того ж нащо тобі ті структури? тут достатньо 4 флоатів і 1 інт.

54

Re: Структури

Я розумію, але завдання було поставлене саме з використанням структур. Це все. Виконав ні більше, ні менше.

Визначити структури для опису точки в полярній та декартовій системах
координат. Написати та протестувати функції для:

Отримання декартових координат точки, якщо задано її полярні координати;
Обчислення відстані між двома точками, заданими в декартовій системі координат;
Отримання полярних координат точки, якщо задано її декартові координати;
Обчислення відстані між двома точками, заданими в полярній системі координат;

55

Re: Структури

Пане ur_naz, невже доведеться дійти висновку, що ви лише лаятися вмієте, а програмувати - ні? Де ваш "оператор enum", про який ви стільки розповідали?

Подякували: FakiNyan, Q-bart2

56

Re: Структури

я вам дав вудку. а вам треба риба. хто як не ви, koala, закриваєте теми направо й наліво? ви вважаєте цей набір літер кодом?

Ні, це не так. навіть в навчальних цілях. Якщо не зрозуміло, беріть олівець, аркуш паперу і малюйте модель.

ТС, спробуй позбутись класу polar він зайвий. там і знайдеш свій enum.

Хто-небудь колись бачив консольні додатки? Зазвичай там пишуть що за програма, чиї авторські права і додають запрошення.

57

Re: Структури

ur_naz, якщо це некод то що в вашому розумінні тоді програмування.

58

Re: Структури

https://uk.wikipedia.org/wiki/%D0%9F%D1 … 0%BD%D1%8F

59

Re: Структури

Ви не дали вудку. Ви морознули дурню, а тепер відмовляєтеся це визнавати.

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

60

Re: Структури

Limon, все чудово. Можна додати ще конструктори додати (я надаю перевагу назвам типів з великих літер, це їх вирізняє):

struct Point // прямокутні координати
{
    double x; // x-координата
    double y; // y-координата
    Point(double x_, double y_)
    {
        x = x_;
        y = y_; //це не зовсім правильний спосіб ініціалізації, але вам так буде зрозуміліше
    }
};

Тепер метод перетворення виглядає вкрай лаконічно:

Point polar_to_point(Polar pol)
{
    return Point(pol.distance * std::cos(pol.angle), 
                 pol.distance * std::sin(pol.angle) );//вирівняв для краси
}

А взагалі є спосіб зробити цей метод стандартним перетворенням, щоб можна було писати так:

Point p;
... //якось заповнюємо поля p
show_polar(Polar(p)); //перетворити і вивести полярні координати
Подякували: Limon1