Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.75/4: Рейтинг темы: голосов - 4, средняя оценка - 4.75
Vlad_b
0 / 0 / 0
Регистрация: 19.04.2018
Сообщений: 6
1

Реализация функции печати результатов предыдущей функции

19.04.2018, 19:11. Просмотров 802. Ответов 5
Метки нет (Все метки)

Была написана программа с функцией, находящая результат выражения с аргументом, значения которого заданы параметром со значениями и шагом. Изначально для этого была написана прога:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <iostream>
#include <cmath>
using namespace std;
void math(double min, double max, double step)
{
    double x = min;
    double y;
    while (x < max)
    {
        y = pow(6 * x + 7,2) - 2 * (x - 3)*(6 * x + 7) + pow(x - 3,3);
        x += step;
        cout << x << '-' << y << endl;
    }
}
int main()
{
    math(0, 10, 1);
    return 0;
}
Нужно реализовать вывод результатов работы функции через функцию печати, а не через cout в main.
Попытался написать, но в результате не выдает ничего
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
#include <iostream>
#include <cmath>
#include <conio.h>
struct Roots
{
    double x, y;
};
using namespace std;
Roots math(double min, double max, double step);
void PrintRoots(const Roots &r);
int main()
{
    math(0, 10, 1);
    return 0;
}
Roots math(double min, double max, double step)
{
    Roots r;
    double x= min;
    while (x < max)
    {
        r.y = pow(6 * x + 7, 2) - 2 * (x - 3)*(6 * x + 7) + pow(x - 3, 3);
        x += step;
    }
    _getch();
    return r;
}
void PrintRoots(const Roots &r)
{
    cout << r.x << '-' << r.y << endl;
}
Что делаю неправильно?
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
19.04.2018, 19:11
Ответы с готовыми решениями:

Классы. Программирование алгоритмов с использованием конструктора, деструктора, friend - функции инициализации set() и функции вывода результатов prin
Братаны, выручайте!:help: Общая постановка. Пользовательский класс Х должен...

Классы. Программирование алгоритмов с использованием конструктора, деструктора, friend - функции инициализации set() и функции вывода результатов pri
Братаны, выручайте! Общая постановка. Пользовательский класс Х должен...

Вычислить значение заданной функции. Осуществить вывод значений аргумента и результатов вычислений значений функции в за
Вычислить значение заданной функции. Осуществить вывод значений аргумента и...

Получение двух результатов из функции
нужно сделать ф-цию, которая будет возвращать периметр и площадь прямоугольника...

Возвращение результатов функции в несколько переменных
Здраствуйте, можно ли как-то припомощи оператора return вернуть несколько...

5
nd2
2835 / 2403 / 1057
Регистрация: 29.01.2016
Сообщений: 8,045
19.04.2018, 19:24 2
Цитата Сообщение от Vlad_b Посмотреть сообщение
Что делаю неправильно?
Не вижу, в math(), r.x, не вижу, что используется значение, возвращаемое math(), не вижу вызова PrintRoots().
0
Vlad_b
0 / 0 / 0
Регистрация: 19.04.2018
Сообщений: 6
19.04.2018, 21:40  [ТС] 3
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
#include <iostream>
#include <cmath>
#include <conio.h>
struct Roots
{
    double x, y;
};
using namespace std;
Roots math(double min, double max, double step);
void PrintRoots(const Roots &r);
int main()
{
    double min, max, step;
    Roots res;
    math(0, 10, 1);
    PrintRoots(&res);
    res = math(min, max, step);
    return 0;
}
Roots math(double min, double max, double step)
{
    Roots r;
    double x= min;
    while (x < max)
    {
        r.y = pow(6 * x + 7, 2) - 2 * (x - 3)*(6 * x + 7) + pow(x - 3, 3);
        r.x += step;
    }
    _getch();
    return r;
}
void PrintRoots(const Roots &r)
{
    cout << r.x << '-' << r.y << endl;
}
Вот еще вариант как пробовал, но тогда выдает ошибку на счет Roots
error C2664: "void PrintRoots(const Roots &)": невозможно преобразовать аргумент 1 из "Roots *" в "const Roots &"
0
nd2
2835 / 2403 / 1057
Регистрация: 29.01.2016
Сообщений: 8,045
19.04.2018, 22:19 4
Цитата Сообщение от Vlad_b Посмотреть сообщение
но тогда выдает ошибку на счет Roots
Цитата Сообщение от Vlad_b Посмотреть сообщение
C++
1
PrintRoots(&res);
Амперсанд убери.

Добавлено через 3 минуты
Цитата Сообщение от Vlad_b Посмотреть сообщение
Вот еще вариант
Цитата Сообщение от Vlad_b Посмотреть сообщение
C++
1
2
3
4
5
    double min, max, step;
    Roots res;
    math(0, 10, 1);
    PrintRoots(&res);
    res = math(min, max, step);
Это - ни о чём.

Добавлено через 30 минут
Цитата Сообщение от Vlad_b Посмотреть сообщение
C++
1
2
3
4
5
    while (x < max)
    {
        r.y = pow(6 * x + 7, 2) - 2 * (x - 3)*(6 * x + 7) + pow(x - 3, 3);
        r.x += step;
    }
Где в этом цикле меняются x или max (чтобы произошёл выход из цикла)? Какое первоначальное значение r.x?
0
Vlad_b
0 / 0 / 0
Регистрация: 19.04.2018
Сообщений: 6
20.04.2018, 12:35  [ТС] 5
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
#include <iostream>
#include <cmath>
struct Roots
{
    double x, y;
};
using namespace std;
Roots math(double min, double max, double step);
void PrintRoots(const Roots &r);
int main()
{
    double min, max, step;
    Roots res;
    cin>>min>>max>>step;
    res = math(min, max, step);
    PrintRoots(res);
    return 0;
}
Roots math(double min, double max, double step)
{
    Roots r;
    double x= min;
    for (x=min; x<=max; x+=step)
    {
        r.y = pow(6 * x + 7, 2) - 2 * (x - 3)*(6 * x + 7) + pow(x - 3, 3);
    }
    return r;
}
void PrintRoots(const Roots &r)
{
    cout << r.x << '-' << r.y << endl;
}
Теперь выдает nan-3894
Как понял что то с зацикливанием и выводом каждого результата. Второй день туплю
0
AlexVRud
478 / 190 / 72
Регистрация: 04.07.2014
Сообщений: 537
20.04.2018, 15:09 6
Лучший ответ Сообщение было отмечено Vlad_b как решение

Решение

C++
1
2
3
4
#include <iostream>
#include <iomanip>
#include <vector>
#include <cmath>
Стоит подправить названия сущностей:
C++
1
2
3
4
5
struct Point {
  double x, y;
};
 
std::vector<Point> tabulationFunction(double x_min, double x_max, double x_step);
Обрати внимание, что результатом является не одна точка. А их массив.
А, тут нет смысла говорить дополнительно, что выводим:
C++
1
void print(const std::vector<Point> &ps);
Это понятно и из параметров.
Мы лентяи, и вводить в каждый раз данные нам в лом. Плюс стоит показывать при каких параметрах у тебя проблемы:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
int main()
{
  double x_min, x_max, x_step;
 
  // std::cin >> x_min >> x_max >> x_step;
  x_min = -10.0;
  x_max = 10.0;
  x_step = 1.3;
 
  auto ps = tabulationFunction(x_min, x_max, x_step);
  print(ps);
 
  return 0;
}
В прошлый раз ты забыл задать поле r.x.
Но нам надо много точек.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
std::vector<Point> tabulationFunction(double x_min, double x_max, double x_step)
{
  std::vector<Point> ps;
  double x = x_min;
  size_t i = 0;
  while (x <= x_max) {
    Point p;
    p.x = x;
    p.y = pow(6 * x + 7, 2) - 2 * (x - 3) * (6 * x + 7) + pow(x - 3, 3);
    ps.push_back(p);
    ++i;
    x = x_min + i * x_step;
  }
  return ps;
}
Для double не хорошо делать x=x+step много раз подряд. Стоит помнить, что возможно получить результат, когда
x == x + step (в худшем случае), любо получим 90037 точек, вместо 90000 (бывает чаще). Всё это результат округления.

Ну и на по следок извращённый способ форматирования из стандартной библиотеки
C++
1
2
3
4
5
6
7
8
void print(const std::vector<Point> &ps)
{
  for (const auto &p : ps) {
    std::cout << "| " << std::fixed << std::setw(6) << std::setprecision(2) << p.x;
    std::cout << " | " << std::fixed << std::setw(10) << std::setprecision(4) << p.y;
    std::cout << " |" << std::endl;
  }
}
Вместо:

C++
1
2
3
4
5
6
void print(const std::vector<Point> &ps)
{
  for (const auto &p : ps) {
    std::cout << fmt::format("| {:6.2f} | {:10.4f} |\n", p.x ,p.y);
  }
}
Но это уже совсем другая история...
0
20.04.2018, 15:09
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
20.04.2018, 15:09

Функции(опять передача результатов выполнения)))
Есть массив элементов. Нужно реализовать функцию удаления элемента по поиску...

Табулирования функции и вывод результатов в таблице
Составить программу вычисления функции с использованием оператора цикла с...

Выполнить вывод на экран результатов вычисления функции (C++)
Только начал изучать C++ и не совсем понимаю как это сделать. Буду очень...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru