Форум программистов, компьютерный форум, киберфорум
C/C++: WinAPI
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.63/8: Рейтинг темы: голосов - 8, средняя оценка - 4.63
0 / 0 / 0
Регистрация: 23.11.2016
Сообщений: 45

Визуализатор графиков по заданной функции на некотором диапазоне

04.12.2018, 11:39. Показов 1621. Ответов 4
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день, используя winApi нужно сделать такое задание. Получилось сделать отдельные функции типа sin, cos. Но чтобы задавать функцию и рисовать ее на некотором отрезке не получается. Помогите
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
04.12.2018, 11:39
Ответы с готовыми решениями:

Разработать функцию, которая находит оптимумы математической функции, заданной на некотором интервале
нужен код "Разработать функцию, которая находит оптимумы математической функции, заданной на некотором интервале." (чтоб понял даже...

Изменить параметры в некотором количестве графиков
Необходимо сделать видимыми n-ое количество chart(Visible = true) на форме, и очистить их(Series.Points.Clear()). Как можно реализовать?...

Построить несколько графиков параметрически заданной функции
Помогите пожалуйста!!!!! Задание. Построить несколько графиков параметрически заданной функции при разных значениях констант а, b,...

4
2734 / 888 / 331
Регистрация: 10.02.2018
Сообщений: 2,099
04.12.2018, 13:37
Вы хотите задавать функцию прямо в процессе работы программы? Что бы сделать подобное потребуется написать свой синтаксический анализатор математических выражений - это довольно сложно. Гораздо проще задавать формулу в исходниках и компилировать программу заново с нужной функцией. Так что именно вам нужно сделать по заданию: красиво отобразить график, создать парсер математических выражений или всё сразу?
0
2637 / 1648 / 267
Регистрация: 19.02.2010
Сообщений: 4,370
04.12.2018, 15:07
Цитата Сообщение от Ygg Посмотреть сообщение
Вы хотите задавать функцию прямо в процессе работы программы? Что бы сделать подобное потребуется написать свой синтаксический анализатор математических выражений
Готтсподи... В Винде уже >=20лет стандартно присутствуют интерпретаторы jscript и vbscript, которым можно передавать строку с матем.выражением - и они вернут посчитанный результат.
Имеется в виду использование их как COM/OLE-объектов (но это ведь ВинАПИшные технологии).
0
0 / 0 / 0
Регистрация: 23.11.2016
Сообщений: 45
06.12.2018, 11:29  [ТС]
Цитата Сообщение от Ygg Посмотреть сообщение
Вы хотите задавать функцию прямо в процессе работы программы? Что бы сделать подобное потребуется написать свой синтаксический анализатор математических выражений - это довольно сложно. Гораздо проще задавать формулу в исходниках и компилировать программу заново с нужной функцией. Так что именно вам нужно сделать по заданию: красиво отобразить график, создать парсер математических выражений или всё сразу?
допустим у нас в окне есть 3 edit.в первый вписываем Хмин во второй Хмакс в третий нашу функцию. и вот программа анализирует эти данные что в edit_ах и рисует нашу функцию. Само рисование я сделал, но хМин, Хмакс и функция задаются через define в коде, а нужно тчобы в окне.
0
2734 / 888 / 331
Регистрация: 10.02.2018
Сообщений: 2,099
06.12.2018, 15:35
kqest, я всё равно не совсем понимаю вашу проблему.
Можно хранить исходные данные в разном виде, например, в виде массива точек или в виде функций. В первом случае (как у вас сейчас) для рисования используются готовые значения. Во втором случае расчёт точек может производиться динамически в процессе рисования на основании функции и граничных значений X. Если вы хотите сохранить массив точек как основу своего компонента, то вы должны самостоятельно произвести расчёт точек и передать получившийся массив в компоненту. Получение значений из EDIT-ов и расчёт - дело не хитрое. Самая большая проблема с интерпретацией функции из текстовой строки. Либо вы пишите свой парсер, либо ждёте простого решения через COM, но не от меня, так как я нифига не знаю как подобное делается. Либо вы забиваете на определение функции во время выполнения программы. Для тестов или в качестве временного решения можно прописать в программе несколько функций и предоставить возможность выбора нужной через COMBOBOX.
пример предопределённых функций
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
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
#include <iostream>
 
// тип функции
typedef double(*MyFuncType)(double);
 
// пустая функция
double MyFunc0(double x)
{
    return 0.0;
}
 
// предопределённая функция 1
double MyFunc1(double x)
{
    return sin(x);
}
 
// предопределённая функция 2
double MyFunc2(double x)
{
    return x * sin(x);
}
 
// предопределённая функция 3
double MyFunc3(double x)
{
    return x * x - x - 1;
}
 
// получить указатель на функцию по её номеру
MyFuncType GetFunc(int funcNum)
{
    switch (funcNum)
    {
        case 1:
            return MyFunc1;
        case 2:
            return MyFunc2;
        case 3:
            return MyFunc3;
    }
 
    return MyFunc0;
}
 
// тут храним точки
double xx[10];
double yy[10];
 
// посчитать точки для функции
void InitPoints(double xMin, double xMax, int funcNum)
{
    // получаем предопределённую функцию по её номеру
    MyFuncType func = GetFunc(funcNum);
 
    // заполняем 10 точек
    for (int i = 0; i < 10; i++)
    {
        xx[i] = xMin + i * (xMax - xMin) / 9; // X распределяем линейно от мин до макс
        yy[i] = func(xx[i]); // считаем функцию (Y) для посчитанного выше аргумента (X)
    }
}
 
int main()
{
    std::cout.precision(2);
 
    // функция 1
    InitPoints(0, 3.14/2, 1);
    std::cout << "sin(x):  ";
    for (int i = 0; i < 10; i++)
        std::cout << yy[i] << " ";
    std::cout << std::endl;
 
    // функция 2
    InitPoints(0, 3.14/2, 2);
    std::cout << "x*sin(x):  ";
    for (int i = 0; i < 10; i++)
        std::cout << yy[i] << " ";
    std::cout << std::endl;
 
    // функция 3
    InitPoints(-4, 5, 3);
    std::cout << "x^2-x-1:  ";
    for (int i = 0; i < 10; i++)
        std::cout << yy[i] << " ";
    std::cout << std::endl;
 
    system("pause");
    return 0;
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
06.12.2018, 15:35
Помогаю со студенческими работами здесь

Найти количество отрицательных элементов массива, значения которых лежат в некотором диапазоне
Найти количество отрицательных элементов массива, значения которых лежат в некотором(как я понял тоже отрицательном, что есть логично)...

Построить несколько графиков параметрически заданной функции при разных значениях констант а, b, λ
Построить несколько графиков параметрически заданной функции при разных значениях констант а, b, λ. Оси графика – х и y, которые...

Рассчитать значение функции y=f(x) при некотором значении «х» с использованием представления функции в виде ряда
Помогите с программами нужны готовые програмные коды. Темы циклы: 2) Рассчитать значение функции y=f(x) при некотором значении...

Вычислить значение функции с помощью стандартных функций и путем разложения в ряд Тейлора с заданной точностью е при изменении аргумента в указанном диапазоне [a,b] с шагом
Помогите решить за дачу на Паскале пожалуйста... Мозг кипит... Сама задача в прикрепленном файле-картинке.

Построение графика функции на некотором промежутке
сложить програму построения графика функции на некотором промежутке(любой промежуток). функция y=2*x^2+4. помогите решить такое. ...


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
Установка Emscripten SDK (emsdk) и CMake на Windows для сборки C и C++ приложений в WebAssembly (Wasm)
8Observer8 30.01.2026
Чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. Система контроля версиями Git. . .
Подключение Box2D v3 к SDL3 для Android: физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL3_image
8Observer8 27.01.2026
Содержание блога SDL3_image - это библиотека для загрузки и работы с изображениями. Эта пошаговая инструкция покажет, как загрузить и вывести на экран смартфона картинку с альфа-каналом, то есть с. . .
Влияние грибов на сукцессию
anaschu 26.01.2026
Бифуркационные изменения массы гриба происходят тогда, когда мы уменьшаем массу компоста в 10 раз, а скорость прироста биомассы уменьшаем в три раза. Скорость прироста биомассы может уменьшаться за. . .
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru