Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.82/34: Рейтинг темы: голосов - 34, средняя оценка - 4.82
14 / 14 / 16
Регистрация: 26.01.2015
Сообщений: 213

Написать приложение, которое строит график математической функции y=f(x)

02.03.2017, 13:38. Показов 7641. Ответов 36
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день, коллеги!
Столкнулся с задачей, в которой испытываю затруднения. Ранее не сталкивался с подобным, т.к. не дошёл ещё до таких тем.
Сама задача:

Написать на языке C++ приложение для Windows, которое строит график заданной математической функции y=f(x) (см. ниже) в окне и/или в графическом файле на диске (выберите популярный формат, например, PNG). Код отрисовки графика в окне и на картинке должен быть по возможности отделен от кода вычисления функции; плавное изменение размеров окна должно по возможности оставаться плавным. График должен выводиться во всю клиентскую область окна. По возможности, предусмотрите масштабирование и прокрутку для просмотра.

В качестве среды используйте MSVS2015 или QtCreator 4.2.1 (Qt5.8); если потребуется, используйте сторонние библиотеки. Фреймворк: Qt или MFC (Qt можно использовать и в MSVS2015).

Код со всеми зависимостями должен собираться под Windows 7 в MSVS2015 или в QtCreator 4.2.1 (Qt5.8).

Функция: y(x) = x2 / sin(x/4*PI) + exp(ln(|x| * |sin(PI*x/2 + 1)|))
на интервале [ -10; 20 ] с шагом 0.02.

Прежде у меня вопросы по самой функции:
1)PI - это число Пи (~3.14)
2)Что означает знак "|" - это модуля знак. Путает то, что в тексте задачи PI и |, то есть I и | выглядят практически одинаково.
3)Ln - это натуральный логарифм, да?

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

Прошу написать код задания с подробным описанием действия, чтобы я смог проанализировать и разобраться и ответить на 3 вопроса, приведённых выше.
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
02.03.2017, 13:38
Ответы с готовыми решениями:

Написать графическое приложение, которое строит график заданной функции
Написать графическое приложение, которое строит график заданной функции sin(10x). Создать меню с командами Chart, Build, Clear, About,...

Приложение которое строит график функции √x+x^2=10
Помогите пожалуйста,нужно составить приложение которое будет выводить график функции √x+x^2=10

Создать приложение, которое строит график многочлена с заданными коэффициентами
Создать приложение, которое строит график многочлена с заданными коэффициентами.

36
 Аватар для avgoor
1550 / 877 / 179
Регистрация: 05.12.2015
Сообщений: 2,555
03.03.2017, 14:03
Студворк — интернет-сервис помощи студентам
Ofelion, Есть же QChart. Специально для графиков.
1
7804 / 6568 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
03.03.2017, 14:32
Что за QChart? Какой-то сторонний компонент?
0
14 / 14 / 16
Регистрация: 26.01.2015
Сообщений: 213
03.03.2017, 14:55  [ТС]
avgoor, уточните, пожалуйста, я вообще графикой не занимался до сего момента. По возможности дайте ссылку на ресурс.
0
 Аватар для avgoor
1550 / 877 / 179
Регистрация: 05.12.2015
Сообщений: 2,555
03.03.2017, 14:59
Ofelion, это часть Qt специально для графиков. Правда только GPL.
0
14 / 14 / 16
Регистрация: 26.01.2015
Сообщений: 213
03.03.2017, 15:04  [ТС]
avgoor, спасибо, поищу информацию.
0
 Аватар для avgoor
1550 / 877 / 179
Регистрация: 05.12.2015
Сообщений: 2,555
03.03.2017, 15:09
Qt Charts
1
14 / 14 / 16
Регистрация: 26.01.2015
Сообщений: 213
05.03.2017, 02:45  [ТС]
Немного продвинулся, но результата так и не получил пока. Кто может, посмотрите, пож-та, мой проект, прикрепляю архив. Чтобы был понятен ход моих действий, приведу сайт, на основании которого я писал: http://blog.kislenko.net/show.php?id=1138 . Если я всё правильно сделал, то остаётся одна ошибка -
C++
1
ui->centralWidget->graph(0)->setData(vx,vy);
, пишет: /home/nemo/Work1/mainwindow.cpp:19: ошибка: no matching function for call to 'QCPGraph::setData(std::vector<double, std::allocator<double> >&, std::vector<double, std::allocator<double> >&)'
ui->centralWidget->graph(0)->setData(vx,vy);

Сам cpp:

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 "mainwindow.h"
#include "ui_mainwindow.h"
#include "vect.h"
 
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
newAct = new QAction(tr("&Новый"), this);
fileMenu = this->menuBar()->addMenu(tr("&Файл"));
fileMenu->addAction(newAct);
connect(newAct, SIGNAL(triggered()), this, SLOT(newFile()));
}
 
void MainWindow::newFile()
{
ui->centralWidget->addGraph();
ui->centralWidget->graph(0)->setData(vx,vy);
 
ui->centralWidget->xAxis->setLabel("Ось x");
ui->centralWidget->xAxis->setRange(0,n); //1
ui->centralWidget->yAxis->setLabel("f(x)");
ui->centralWidget->yAxis->setRange(-1,1);
 
ui->centralWidget->replot();
}
 
MainWindow::~MainWindow()
{
delete ui;
}
^
Вложения
Тип файла: rar Work1.rar (5.5 Кб, 4 просмотров)
0
14 / 14 / 16
Регистрация: 26.01.2015
Сообщений: 213
05.03.2017, 02:46  [ТС]
Только мне лучше бы без меню "Файл" сделать, просто чтобы график отображался. Но не смог это сделать.
0
 Аватар для avgoor
1550 / 877 / 179
Регистрация: 05.12.2015
Сообщений: 2,555
05.03.2017, 03:06
Ofelion, Он же вам пишет, что нет подходящей перегрузки. setData принимает QVector, а вы передаете std::vector. Можно использовать ...->setData(QVector<double>::fromStdVector( vx),...
1
14 / 14 / 16
Регистрация: 26.01.2015
Сообщений: 213
05.03.2017, 03:53  [ТС]
avgoor, сделал так:
C++
1
ui->centralWidget->graph(0)->setData(QVector<double>::fromStdVector(vx),fromStdVector(vy);
пишет: /home/nemo/Work1/mainwindow.cpp:19: ошибка: 'fromStdVector' was not declared in this scope
ui->centralWidget->graph(0)->setData(QVector<double>::fromStdVector( vx),fromStdVector(vy);
^
почему второй from незадекларирован?
0
 Аватар для avgoor
1550 / 877 / 179
Регистрация: 05.12.2015
Сообщений: 2,555
05.03.2017, 04:23
Лучший ответ Сообщение было отмечено Ofelion как решение

Решение

Цитата Сообщение от Ofelion Посмотреть сообщение
почему второй from незадекларирован
Потому, что QVector<double>::fromStdVector(vx) - это вызов статического метода.
Т.е. должно быть ui->centralWidget->graph(0)->setData(QVector<double>::fromStdVector( vx), QVector<double>::fromStdVector(vy);

Вам рано Qt. Посмотрел ваш проект... глобальные переменные в хедере - это за гранью добра и зла.
1) Создайте новый проект, при этом удалите галку generate form.
2) Удалите все файлы кроме main.cpp
3) Добавьте qcustomplot в хедеры и сорцы
4) код main.cpp:
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
36
37
38
39
40
41
42
43
44
45
46
#include <QApplication>
#include <QMainWindow>
#include "qcustomplot.h"
#define _USE_MATH_DEFINES
#include <cmath>
 
 
double f(double x)
{
    double t = fabs(x) * fabs( sin(M_PI*x/2 + 1) );
    return x*x/sin(x/4*M_PI) + exp(log(t));
}
 
 
int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    QMainWindow w;
 
    QCustomPlot *cp = new QCustomPlot();
    w.setCentralWidget(cp);
    w.resize(800, 600);
 
    const double x1 = -10, x2 = 20, dx = 0.02;
    const int n = (x2-x1)/dx + 1;
 
    QVector<double> vx(n), vy(n);
    for(int i=0; i<n; i++)
    {
        double x=x1+dx*i;
        vx[i]=x;
        vy[i]=f(x);
    }
 
    cp->addGraph();
    cp->graph(0)->setData(vx, vy);
 
    cp->xAxis->setLabel("Ось x");
    cp->xAxis->setRange(x1, x2); //1
    cp->yAxis->setLabel("f(x)");
    cp->yAxis->setRange(-1,1);
 
    w.show();
 
    return a.exec();
}
5) Наслаждайтесь.
1
05.03.2017, 07:51

Не по теме:

avgoor, сомнительно, что без редактора форм будет проще. Достаточно перенести переменные в класс формы.

0
05.03.2017, 15:00

Не по теме:

nmcf, это лично мое мнение. Возможно я неправ, но ИМХО к началу использования фреймворков надо знать, что такое единицы трансляции и оператор разрешения видимости. А я просто переписал код ТС в стиле хеллоуворлда.

0
14 / 14 / 16
Регистрация: 26.01.2015
Сообщений: 213
05.03.2017, 19:15  [ТС]
avgoor, почему-то стала высвечиваться ошибка в файле customplot.cpp

C++
1
2
3
4
5
6
QPrinter printer(QPrinter::ScreenResolution);
  printer.setOutputFileName(fileName);
  printer.setOutputFormat(QPrinter::PdfFormat);
  printer.setColorMode(QPrinter::Color);
  printer.printEngine()->setProperty(QPrintEngine::PPK_Creator, pdfCreator);
  printer.printEngine()->setProperty(QPrintEngine::PPK_DocumentName, pdfTitle);
Пишет, что не определена ссылка: /home/nemo/Загрузки/qcustomplot.cpp:14245: ошибка: undefined reference to `QPrinter::setOutputFileName(QString const&)' .
В предыдущем проекте такого не было.

Добавлено через 6 минут
Это мой первый, так сказать, "глобальный" проект, поэтому туплю так ((
0
 Аватар для avgoor
1550 / 877 / 179
Регистрация: 05.12.2015
Сообщений: 2,555
05.03.2017, 20:02
Ofelion, В файл .pro надо добавить в строчку QT += .... printsupport. Затем пункты меню run qmake, rebuild.
1
14 / 14 / 16
Регистрация: 26.01.2015
Сообщений: 213
05.03.2017, 22:45  [ТС]
avgoor, огромное вам спасибо! Всё получилось. Посредством этой задачи уяснил, что необходимо учить фреймворк, чтобы уметь делать реальные проекты, а не консольные приложения.
0
14 / 14 / 16
Регистрация: 26.01.2015
Сообщений: 213
05.03.2017, 23:22  [ТС]
avgoor, вот такой график вывелся
Миниатюры
Написать приложение, которое строит график математической функции y=f(x)  
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
05.03.2017, 23:22

Создать приложение, которое строит график какой-нибудь одной из трех функций
Помогите пожалуйста, Нужно создать : 1- 1 кнопку ,которая будет запускать процесс рисования 2- 2 компонента Tlable, в которые мы...

Написать программу, которая строит график параметрической функции
Всем привет. Не могу понять задачу. Используя операторы цикла написать программу, которая строит график параметрической функции {...

Написать программу, которая строит график функции: x=C1*(t-1/2*sin2t)+C2, y=C1*sin^2t
Здравствуйте! помогите пожалуйста написать программу которая строит график функции: x=C1*(t-1/2*sin2t)+C2 y=C1*sin^2t в Делфи...

Написать код который строит график по функции, которую нужно ввести самому.
Всем доброго времени суток, помогите пожалуйста. Совсем не понимаю с чего начать. Задание таково: написать код который строит график по...

Написать приложение для рисования графика математической функции.
Помогите написать приложение для рисования графика математической функции. График строить в масштабе, пропорциональном размерам окна. ...


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

Или воспользуйтесь поиском по форуму:
37
Ответ Создать тему
Новые блоги и статьи
Саморегулирующийся социальный контракт для сервера cross-section.
Hrethgir 14.08.2026
С кодом конечно таких глубоких размышлений пока не было, впрочем я уже привык к алгоритмизации. Суть предмета записи: снова в диалоге с нейросетью (я взял пока себе ник для учётки админа - Rector). . . .
Часы электронные
Uhbif79 12.08.2026
Выкладываю программу часов. Программа позволяет: 1. Использовать системное время и дату, 2. Есть возможность вводить время и дату вручную. 3. Реализованы 2 будильника: начало и конец рабочего дня. . . .
Часы с будильником на основе класса QLCDNumber
Uhbif79 12.08.2026
Всем добрый день, выкладываю программу часов с будильником на основе класса QLCDNumber. Здесь я пробовал самостоятельно создавал классы, впервые столкнулся с видимостью переменной одного класса из. . .
Установка MinGW GCC 16.2 и CMake
8Observer8 10.08.2026
VK Видео: https:/ / vkvideo. ru/ video-240781534_456239017 YouTube: eY5-5PyI9NM Текстовая версия
Неделя из жизни имитационной модели склада: мои кривые руки растут, откуда надо
anaschu 10.08.2026
Неделя из жизни имитационной модели склада: как я почти написал неправильную логику и что с этим делать Работаю сейчас над учебно-рабочим проектом: строю в AnyLogic имитационную модель процессов. . .
Калькулятор для расчета родства
russiannick 07.08.2026
1. Задача: Создать калькулятор для расчета родства. Родственных связей существует 8 ступеней, такие как: p - отец P - мать q - муж Q - жена b - брат B - сестра s - сын S - дочь
Мир по моей воле
kumehtar 07.08.2026
Когда-то кажется, что всё просто. Ты весь такой светлый. Причиняешь добро. Борешься за справедливость в этом тёмном мире. Потом начинаешь замечать одну неприятную вещь. Почти каждый хороший. . .
Кредитный калькулятор
Maks 05.08.2026
Решение задачи по прикладной информатике средствами 1С. Задача: Напишите приложение-калькулятор, которое помогает рассчитывать параметры кредита для аннуитетного и дифференцированного видов. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru