1

Тема: Структури

Доброго дня, знову, розпочав вивчення структур, але це виявилося складніше ніж вважав. Опис ще більш менш зрозумів. Питання в тому, як зробити так щоб ось це(обчислення) можна було визвати як окрему функцію. Якщо можливо з прикладом. Переглянув кілька десятків сайтів і лекцію, все одно не зрозуміло. Буду дуже вдячний)


#include <iostream>
#include <stdio.h>
#include <conio.h>
#include <math.h>
#include <Windows.h>
using namespace std;
struct xy_v_polar
{
    int x, y;

} a;
int main()

{
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
    cout << "\n Введіть координати:\n";
    cout << "\n Введіть значення х: "; cin >> a.x;
    cout << "\n Введіть значення y: "; cin >> a.y;
    if ((a.y == 0) && (a.y == 0))
        return -1;
    if (a.x == 0)
        return ((a.y > 0) ? 90 : 270);
    double theta = atan(a.y / a.x);                    // в радианах
    theta *= 360 / (2 * 3.1415926);            // перевод в градусы
    cout << "\nПолярна система:\n\n";
    if (a.x > 0) 
    {                                // 1 и 4 квадранты
        cout << ((a.y >= 0) ? theta : 360 + theta);
    }
    else                                         // 2 и З квадранты
    {
        cout << (180 + theta);
    }
    cout << " градус." << "\n\n*******************************\n";
}

2

Re: Структури

Покажіть свою спробу.

3

Re: Структури

Limon написав:

Питання в тому, як зробити так щоб ось це(обчислення) можна було визвати як окрему функцію.

"Ось це" - це що? Може є яке завдання? То ви його напишіть, бо так не зрозуміло, що вам потрібно.

4

Re: Структури

https://replace.org.ua/uploads/images/10171/739d8206438d6d2163a0e0a2f5bbe7b0.png

5

Re: Структури

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

принагідно

москвомовна ОС детектед

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

6

Re: Структури

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

  1. Отримання декартових координат точки, якщо задано її полярні координати;

  2. Обчислення відстані між двома точками, заданими в декартовій системі координат;

  3. Отримання полярних координат точки, якщо задано її декартові координати;

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

Все працює правильно. На рахунок "Ось це", питання полягало в тому чи можна записати в структурі цю систему обислень, як окрему функцію, яку можна викликати?

cout << "\n Введіть координати:\n";
    cout << "\n Введіть значення х: "; cin >> a.x;
    cout << "\n Введіть значення y: "; cin >> a.y;
    if ((a.y == 0) && (a.y == 0))
        return -1;
    if (a.x == 0)
        return ((a.y > 0) ? 90 : 270);
    double theta = atan(a.y / a.x);                  
    theta *= 360 / (2 * 3.1415926);            
    cout << "\nПолярна система:\n\n";
    if (a.x > 0) 
    {                                
        cout << ((a.y >= 0) ? theta : 360 + theta);
    }
    else                                        
    {
        cout << (180 + theta);
    }
    cout << " градус." << "\n\n*******************************\n";

Хотілось би запитатися чи працюю я в правильному напрямі? Вибачте, якщо відразу не так поставив питання.

7

Re: Структури

Limon написав:

Все працює правильно. На рахунок "Ось це", питання полягало в тому чи можна записати в структурі цю систему обислень, як окрему функцію, яку можна викликати?

Не знаю, як щодо цієї системи, але так, функція член (member function) може бути визначена в класі/структурі.

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

8

Re: Структури

wander написав:
Limon написав:

Все працює правильно. На рахунок "Ось це", питання полягало в тому чи можна записати в структурі цю систему обислень, як окрему функцію, яку можна викликати?

Не знаю, як щодо цієї системи, але так, функція член (member function) може бути визначена в класі/структурі.

Якщо не важко, можна будь який приклад, для наглядності, щоб краще зрозуміти?

9

Re: Структури

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

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

10

Re: Структури

Limon написав:

Якщо не важко, можна будь який приклад, для наглядності, щоб краще зрозуміти?

Гм, а книжки не пробували відкривати?
Загалом по цьому доволі багато матеріалу:

Прихований текст

https://i.gyazo.com/9065eba8617b72ba462b954012ad8afa.png

Продовження в книжці The C++ Programming Language, 4th Edition by Stroustrup B.
Параграф 16.2.1 Member Functions

Подякували: Limon, leofun012

11

Re: Структури

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

12 Востаннє редагувалося ur_naz (15.05.2020 17:16:03)

Re: Структури

Спочатку треба визначити типи систем координат
Потім створити конструктор точки з вказанням системи координат
Нарешті написати функції, які повертають відповідні дані - або координати, або кут, або довжина вектору
Нічого складного тут немає
а те, що вам дарт wander виклав вже не актуально

13

Re: Структури

Ну ось частина коду. Підкажіть , будь ласка, якщо не важко, що  можна підправити, добавити щось чи прибрати?


#include <iostream>
#include <stdio.h>
#include <conio.h>
#include <math.h>
#include <Windows.h>
using namespace std;
struct dek_s
{
    double x, y, z;

} a, b;
struct polar_s
{
    double r, t, z;
} c, d;
double dek_in_polar(dek_s deks)
{
    cout << "\n Введіть координати:\n";
    cout << "\n Введіть значення х: "; cin >> a.x;
    cout << "\n Введіть значення y: "; cin >> a.y;
    double theta = atan(a.y / a.x);
    theta *= 360 / (2 * 3.1415926);
    cout << "\nПолярна система:\n\n";
    if ((a.x == 0) && (a.y == 0))
    {
        cout << "0";
    }
    if (a.x == 0)
    {
        c.z = ((a.y > 0) ? 90 : 270);
        cout << c.z;
        cout << " градус." << "\n\n*******************************\n";
        return  ((a.y > 0) ? 90 : 270);
    }
    if (a.x > 0)
    {
       c.z = ((a.y >= 0) ? theta : 360 + theta);
       cout << c.z;
       cout << " градус." << "\n\n*******************************\n";
       return ((a.y >= 0) ? theta : 360 + theta);  
    }
    else                                       
    {
       c.z =(180 + theta);
       cout << c.z;
       cout << " градус." << "\n\n*******************************\n";
       return (180 + theta); 
    }
}
double polar_in_dek(polar_s polars)
{
    return 0;
}
int main()

{
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
    int d;
    cout << "Введіть:\n 0 - щоб перевести dek in polar;\n";
    cin >> d;
    switch (d) 
    {
    case 0:  
        dek_in_polar(a);
        break;
    default:
        cout << ("Такого значення немає!");
    }
    return 0;
    }
ur_naz написав:

Спочатку треба визначити типи систем координат
Потім створити конструктор точки з вказанням системи координат
Нарешті написати функції, які повертають відповідні дані - або координати, або кут, або довжина вектору
Нічого складного тут немає
а те, що вам дарт wander виклав вже не актуально

14 Востаннє редагувалося wander (15.05.2020 17:37:32)

Re: Структури

ur_naz написав:

а те, що вам дарт wander виклав вже не актуально

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

Limon написав:

Підкажіть , будь ласка, якщо не важко, що  можна підправити, добавити щось чи прибрати?

А ви, схоже, так і не відкривали книжки чи навіть сайту..

15

Re: Структури

який об'єкт в тебе головний. Навколо чого все обертається?

16

Re: Структури

wander написав:
ur_naz написав:

а те, що вам дарт wander виклав вже не актуально

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

Limon написав:

Підкажіть , будь ласка, якщо не важко, що  можна підправити, добавити щось чи прибрати?

А ви, схоже, так і не відкривали книжки чи навіть сайту..

По перше, цитувати сенсу йому не було, він оголосив свою думку, яка важлива так, як і ваша.
По друге, я це написав для того щоб допомогли хто цього бажає, а не осуджували через те, що я вирішив на карантині вивчати програмування і чогось не розумію. Впевнений на 100% ви знали не більше мене на першому місяці навчання.

17

Re: Структури

ur_naz, wander, вам не соромно з людини знущатися? Які конструктори? Він ледве структури розбирає, причому намагається одночасно з функціями.

Limon, дивіться. Є такий метод програмування - декомпозиція, рух "згори донизу". Велику задачу розбиваємо на маленькі, ті - на ще менші, доки не дістанемося до простих команд. Функції часто можуть допомогти декомпозиції - просто замінимо те, що має бути, на функцію.
Також, я так розумію, ви не зовсім чітко уявляєте собі, що таке функція. Функція - це набір команд, що перетворюють вхідні параметри на значення, що повертається. Так само, як і математична - тільки тут команди мови C++, а не математичні операції.
У вас, я так розумію, є велика задача - зробити меню з вибором, у ньому кілька пунктів. Одним із пунктів має йти те, що ви пишете тут. ОК, поїхали:

int main()
{
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
    int d;
    cout << "Введіть:\n 0 - щоб перевести dek in polar;\n";
    cin >> d;
    switch (d) 
    {
    case 0:  
        dek_in_polar();
        break;
    default:
        cout << ("Такого значення немає!");
    }
    return 0;
}

Нам нічого не треба передавати у функцію - від попереднього коду виконання саме функції dek_in_polar ніяк не залежить. Усе, main написаний. Пішли далі. Як би ми написали функцію з введення, перетворення і виведення координат, якби у нас були стандартні типи координат і окрема функція перетворення у, наприклад, <cmath>?

void dek_in_polar()//функція не приймає параметрів і ніяких значень у main не повертає
{
    dek_s coord;
    cout<<"Введіть координати\n";
    cin>>coord;
    polar_s pcoord = transform_dec_to_polar(coord);
    cout << "\nПолярна система:\n";
    cout<<pcoord<<"\n";
}

Класно було б, правда? Однак, на жаль, cin та cout не вміють працювати з нашими структурами. Насправді їх можна навчити, але поки що перепишемо функціями:

void dek_in_polar()
{
    cout<<"Введіть координати:\n";
    dek_s coord = input_dek(); //функція не приймає параметрів і повертає введений з клавіатури dek_s, якийзаписуємо в coord
    polar_s pcoord = transform_dec_to_polar(coord);
    cout << "\nПолярна система:\n";
    output_polar(pcoord); //функція приймає параметром polar_s і виводить його
}

О, це вже схоже на щось, що можна зробити, правда?

dek_s input_dek()
{
    dek_s dek;
    cout << "\n Введіть значення х: "; cin >> dek.x;
    cout << "\n Введіть значення y: "; cin >> dek.y;
    return dek; //ми ввели dek, а тепер повертаємо його значення туди, звідки викликали input_dek()
}

void output_polar(polar_s polar)
{
    cout<<"r="<<polar.r<<" t="<<polar.t;//виводимо елементи того polar_s, що нам передали у функцію
}

Вам лишається тільки написати функцію transform_dec_to_polar, що приймає dek_s, створює відповідний polar_s і повертає його. Впораєтеся?

Подякували: Limon, 0xDADA11C72

18

Re: Структури

koala написав:

wander, вам не соромно з людини знущатися? Які конструктори?

Що? Які конструктори? Хто знущається? Я людині запропонував відкрити хорошу книжку по С++, та почати вчити, як би це зробили всі. Про конструктори я взагалі нічого не писав *FACEPALM*

koala написав:

Limon, дивіться. Є такий метод програмування - декомпозиція, рух "згори донизу".

Зате про декомпозицію втирати ок? Що за подвійні стандарти.

Від теми відписався.

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

19

Re: Структури

Декомпозицію можна і без функцій робити.

20 Востаннє редагувалося ur_naz (15.05.2020 20:03:54)

Re: Структури

koala, хоч ви не ганьбитесь. Якщо дитина не розуміє, це не повід йому таке писати.
я дав чіткі вказівки, якщо не ясно, дам ще підказку: оператор enum

а те, що ви намагаєтесь нав'язати є затхлий стиль відсталого бурситету. ніколи. ще раз наголошую. ніколи не робіть так. бо це порушує основні принципи ООП. А без ООП ви (не ви, а дитина) не ввійдете у професію.
Якщо не дійшло, перелічите основні принципи ООП: ... які тут використані і які порушені.