1

Тема: задача 8239 з e-olymp

Задача - https://www.e-olymp.com/ru/problems/8239
Мій код:

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

int main()
{
    double x, y, x1, y1, x2, y2, x3, y3;
    cin >> x;
    y = pow(x, 3) + 2 * pow(x, 2) - 3;
    cin >> x1;
    y1 = pow(x1, 3) + 2 * pow(x1, 2) - 3;
    cin >> x2;
    y2 = pow(x2, 3) + 2 * pow(x2, 2) - 3;
    cin >> x3;
    y3 = pow(x3, 3) + 2 * pow(x3, 2) - 3;
    printf("%10.4f\n", y);
    printf("%10.4f\n", y1);
    printf("%10.4f\n", y2);
    printf("%10.4f", y3);
    return 0;
}

Все добре рахує, але нерівно виводить відповідь
   18.1309
    0.0000
181885.0000
13560.6480
Як зробити так, щоб рівно виводило?

2

Re: задача 8239 з e-olymp

А можете умову навести?

3 Востаннє редагувалося koala (28.10.2018 18:50:22)

Re: задача 8239 з e-olymp

koala написав:

А можете умову навести?

Там зверху ссилка на задачку є.


тут було щось москвороте - Koala

4

Re: задача 8239 з e-olymp

Вам попередження за порушення п.1.1 Правил. Замість другого буде бан.

5

Re: задача 8239 з e-olymp

Мммм... :(
Так хтось мені допоможе?

6

Re: задача 8239 з e-olymp

Навряд, доки ви не зрозумієте, що це український форум.

7

Re: задача 8239 з e-olymp

І 10 в форматі приберіть

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

8

Re: задача 8239 з e-olymp

Eff1c написав:

Задача - https://www.e-olymp.com/ru/problems/8239

На тому сайті є українська версія завдання. Нащо сюди давати посилання на іноземну версію ?

Подякували: ostap34PHP, Eff1c2

9

Re: задача 8239 з e-olymp

leofun01 написав:
Eff1c написав:

Задача - https://www.e-olymp.com/ru/problems/8239

На тому сайті є українська версія завдання. Нащо сюди давати посилання на іноземну версію ?

Вибачте, провтикав  *SCRATCH*

koala написав:

І 10 в форматі приберіть

Дякую. Тепер нормально виводить.
Але код

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

int main()
{
    double x, y, x1, y1, x2, y2, x3, y3;
    cin >> x;
    y = pow(x, 3) + 2 * pow(x, 2) - 3;
    cin >> x1;
    y1 = pow(x1, 3) + 2 * pow(x1, 2) - 3;
    cin >> x2;
    y2 = pow(x2, 3) + 2 * pow(x2, 2) - 3;
    cin >> x3;
    y3 = pow(x3, 3) + 2 * pow(x3, 2) - 3;
    printf("%.4f\n", y);
    printf("%.4f\n", y1);
    printf("%.4f\n", y2);
    printf("%.4f", y3);
    return 0;
}

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

10

Re: задача 8239 з e-olymp

Eff1c написав:

потрібно приймати дані доти, доки їх будуть вводити.

Так. Так і треба.

Подякували: koala, Eff1c2

11

Re: задача 8239 з e-olymp

Eff1c написав:

Якщо так - підкажіть як це зробити.

12

Re: задача 8239 з e-olymp

Використовуй силуцикли, Люку!

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

13

Re: задача 8239 з e-olymp

koala написав:

Використовуй силуцикли, Люку!

Використав... Тепер постало питання як це все зберегти і вивести...
Для масиву потрібно вказати точну кількість елементів. Тому вирішив скористатися списком.
Погуглив і склав таку прогу

#include <iostream>
#include <math.h>
#include <list>
#include <iterator>

using namespace std;

int main()
{
    double x, y;
    list <double> list_num;
    while (cin >> x)
    {
        cin >> x;
        y = pow(x, 3) + 2 * pow(x, 2) - 3;
        list_num.push_back(y);
    }
    while (list_num.front >= 0 || list_num.front <= 0)
    {
        printf("%.4f\n", list_num.front);
        list_num.pop_front;
    }
    return 0;
}

Видає помилку "std::list<double,std::allocator<_Ty>>::front": нестандартний синтаксис; використовуйте "&", щоб створити вказівник на член    ConsoleApplication16    c:\users\xxxl\source\repos\consoleapplication16\consoleapplication16\consoleapplication16.cpp    25
   
"std::list<double,std::allocator<_Ty>>::front": нестандартний синтаксис; використовуйте "&", щоб створити вказівник на член    ConsoleApplication16    c:\users\xxxl\source\repos\consoleapplication16\consoleapplication16\consoleapplication16.cpp    27

"std::list<double,std::allocator<_Ty>>::pop_front": нестандартний синтаксис; використовуйте "&", щоб створити вказівник на член    ConsoleApplication16    c:\users\xxxl\source\repos\consoleapplication16\consoleapplication16\consoleapplication16.cpp    28



Тоді зробив щось таке

#include <iostream>
#include <math.h>
#include <list>
#include <iterator>

using namespace std;

int main()
{
    double x, y;
    list <double> list_num;
    while (cin >> x)
    {
        cin >> x;
        y = pow(x, 3) + 2 * pow(x, 2) - 3;
        list_num.push_back(y);
    }
    list <double> ::iterator it;
    for (it = list_num.begin(); it != list_num.end(); it++)
    {
        y = (*it);
        printf("%.4f\n", y);
    }

    return 0;
}

Помилок не виявило, але нічого не виводить.
Допоможіть будь ласка, а то я вже остаточно заплутався.

14

Re: задача 8239 з e-olymp

Ctrl+D для завершення вводу.

Eff1c написав:
    while (cin >> x)
    {
        cin >> x;
        y = pow(x, 3) + 2 * pow(x, 2) - 3;
        list_num.push_back(y);
    }

Двічі записуєте в x.

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

15

Re: задача 8239 з e-olymp

Вам не потрібен масив - можете одразу виводити.
Ну і для галочки - множення працює швидше за степінь (наприклад https://ideone.com/wreUyv), тому краще робіть

y = x*x*x+2*x*x-3;

Це те саме, але коротше і швидше.
Можна навіть

y = x*x*(x+2)-3;

це ще швидше, але тут не одразу видно, що це та сама формула.

А, так, ще для галочки: в останніх версіях C++ є цикл по елементах, який дозволяє писати цикли з ітераторами значно коротше:

    for (auto y: list_num)
    {
        printf("%.4f\n", y);
    }

еквівалентно вашому коду для виведення, але значно коротше і зрозуміліше.

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