1

Тема: Реалізація програми для побудови будь-яких графіків функції

Підкажіть, будь ласка, яким чином можна реалізувати програму побудови будь-якого графіка фнкції однієї змінної на одній(будь-якій, ) мові програмування С, С++ чи С#. Чи можливо написати код програми таким чином, що після введення функції графік будувався по точкам(якщо - так, вкажіть, будь ласка складність такого алгоритму).

2

Re: Реалізація програми для побудови будь-яких графіків функції

Уточніть задачу - що саме у вас подається на вхід.
Гадаю, вам треба почитати щось про дерево розбору виразу (синтаксичне дерево) почитати.
Складність, вочевидь, залежить від складності функції.

3

Re: Реалізація програми для побудови будь-яких графіків функції

На вхід подається будь-яка змінна одної змінної, і після цього будується графік

От щось накшталт цієї программи

Post's attachments

Снимок.PNG 248.7 kb, 67 downloads since 2018-05-14 

4

Re: Реалізація програми для побудови будь-яких графіків функції

_Ek_ написав:

змінна одної змінної

:o
Мабуть, усе ж функція однієї змінної.
Тобто питання, фактично, як по стрічці з функцією обчислити її значення при заданій змінній (сподіваюся, цикл ви робити вмієте, і графік по точках побудуєте). Якщо вам складно розбиратися з деревами, будуйте їх неявно, рекурсією. Десь так:
значення(функція, x) =
- якщо функція - одне число, то це число
- якщо функція - "x", то x
- якщо функція - "(щось)", то значення(щось, x)
- якщо функція - "func(щось)", то func(значення(щось, x)) (де func - sin, cos і т.д.)
- якщо функція - "a+b", то значення(a, x)+значення(b,x)
- якщо функція - "a*b", то значення(a, x)*значення(b,x)
і т.д. Головне - не переплутайте пріорітет (додавання має обчислюватися після множення, отже, в переліку додавання йде раніше).
І обережно з дужками, (1+2)*(3+4) не містить зовнішніх дужок.

5

Re: Реалізація програми для побудови будь-яких графіків функції

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

6

Re: Реалізація програми для побудови будь-яких графіків функції

Вибачте, ви не знаєте, як зчитувати стрічки?
Виведення в будь-якому разі потребуватиме якоїсь графічної бібліотеки чи фреймворку. Нічого надзвичайного, але ви вже маєте досвід із чимось таким?

7

Re: Реалізація програми для побудови будь-яких графіків функції

_Ek_, я б рекомендував, якщо Ви серйозно налаштовані довести проект до кінця, якщо у Вас достатньо часу, знайти уже готовий проект де будуються графіки, якомога простіший, із відкритим початковим кодом або попросити у викладача чи у друзів, якщо Ви у ВНЗ, і розібратись із ним до кінця, щоб розуміти, хоча б по верхам, що виконує кожен із рядків коду, і за якими принципами програма працює загалом.
З моєї точки зору, якщо Ви почнете розбиратись від простого до складного, щоб самотужки побудувати таку програму, у Вас піде доволі багато часу.
Думаю, краще спочатку розібратись в готовій програмі, а потім за аналогією побудувати свою.
Якщо ви у ВНЗ, то підійдуть програми із відкритими ліцензіями.
Ось приклад: https://github.com/abhshkdz/graph-plotter .

Білий Лунь

8

Re: Реалізація програми для побудови будь-яких графіків функції

Розібратися самотужки (з певною кількістю підказок - від друзів чи на форумі) теж цілком реально, це не вища математика.
Але варто щось починати робити, бо якщо не робити - точно не розберетеся. Для початку - оберіть мову, інакше дуже важко щось радити одночасно для трьох різних мов (якщо ви не можете визначитися, беріть C#, вона найпростіша з названих).

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

9

Re: Реалізація програми для побудови будь-яких графіків функції

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

Максимальний розмір підпису: 400 символів завдовжки та 4 рядків заввишки

10 Востаннє редагувалося Alchimic (11.06.2018 14:54:03)

Re: Реалізація програми для побудови будь-яких графіків функції

Просто вибирається крок динамічно. І будується лайнами. Якщо сильні перегиби то крок зменшується. Якщо вихід за межі поля то прорисовка не йде просто відключена. Щоб гіперболу не полайнити на перериві. А краще використати модуль готовий.

(цей допис зроблено ботом. можете не звертати на нього уваги)
(цей підпис зроблено адміном. можете не звертати на нього уваги)