Программа на си для построения графика функции
В этой статье мы разберем программу на языке программирования си для построения графиков функций. В нашей программе будут отражаться система координат с делениями и подписями на них и будут строиться графики двух функций, который может сам задать пользователь.
В программе на си для построения графика функции вводятся следующие константы
X0 , Y0 — координаты центра координат
k – масштаб одного деления на осях (сколько пикселов в одном делении)
Опишем все функции и процедуры используемые в программе для построения графиков функций
Подробно о задании функций и процедур в си
int osx (float x) переводит реальную координату на оси ox в координату экрана
int osy (float y) переводит реальную координату на оси oy в координату экрана
float F1 ( float x ) и float F2 ( float x ) задают функции , графики которых мы будем строить
void Point ( float x, float y, int color ) рисует точку графика функции на экране
Перед построением графиков функций необходимо построить систему координат. Для построения системы координат используется процедура
void Axes()
В этой процедуре в цикле for рисуются линии меток делений на равном расстоянии друг от друга, который определяется масштабом одного деления k и выводятся значения делений с помощью двух операторов
sprintf ( s, «%d», i ); // записываем в строковую переменную число деления
outtextxy ( xe-10, Y0+4, s ); // вывод числа
Процедура grafik1() и grafik2() строят графики функций f1 и f2
В этих процедурах в цикле for для всех доступных значений x определяется координата y и точка графика строится с помощью процедуры point()
Пример работы программы построения графиков на си, функции пользователь может менять
Программа на си для построения графиков функций
#include
#include //графический режим
#include // математические функции
//————————————————
const int X0 = 100, Y0 = 400;// координаты центра координат
const float k = 15;// масштаб в точках одного деления на графике
//——————————————
// перевод y в координаты экрана
//——————————————
int osx (float x)
return X0+k*x;
>
//——————————————
//перевод y в координаты экрана
//——————————————
int osy (float y)
return Y0-k*y;
>
// первая функция
float F1 ( float x )
return sqrt(2*x);
>
// вторая функция
float F2 ( float x )
return x*x/2;
>
// построение осей
void Axes()
int i, xe,ye,y1;
char s[10];
line ( X0, 0, X0, 599 ); // ось ox
line ( 0, Y0, 799, Y0 ); // ось oy
// метки на оси ox
for ( i = 1; i xe = osx ( i );
line ( xe, Y0-2, xe, Y0+2 ); // рисуем деление разметки
sprintf ( s, «%d», i ); // записываем в строковую переменную число деления
outtextxy ( xe-10, Y0+4, s ); // вывод числа
>
// метки на оси oy
for ( i = 1; i ye = osy( i+1 );
line ( X0-2, ye, X0+2, ye ); // рисуем деление
sprintf ( s, «%d»,i ); // записываем в строковую переменную число деления
outtextxy ( X0+10, ye+4, s ); // вывод числа
>
>
// построение точки графика функции
void Point ( float x, float y, int color )
int xe, ye;
xe = osx(x);
ye = osy(y);
if ( xe >= 0 && xe < 800 && ye >= 0 && ye < 600 )
putpixel(xe, ye, color);
>
// построение графика первой функции
void grafik1()
float x, h, xmin, xmax;
h = 1 / k;
xmin = (-X0)/ k;
xmax=(800-X0)/k;
for ( x = xmin; x Point(x, F1(x), WHITE);
>
>
// построение графика второй функции
void grafik2()
float x, h, xmin, xmax;
h = 1 / k;
xmin = (-X0)/ k;
xmax=(800-X0)/k;
for ( x = xmin; x Point(x, F2(x), WHITE);
>
>
// главная программа
main ()
initwindow ( 800, 600 ); // создать окно для графики
Axes(); // построение и разметка осей координат
grafik1(); // строим график первой функции
grafik2(); // строим график второй функции
getch(); // ждать нажатия на клавишу
closegraph(); // закрыть окно для графики
>
Полезно почитать по теме построение графиков функций в программа си
Графика в си
Процедуры и функции в си
Комментарии ( 0 )
Нет комментариев. Ваш будет первым!
Построить график функции с помощью символов
Нужно нарисовать график функции в консоли на С++, но проблема в том, что нельзя использовать библиотеки для работы с графикой. То есть нарисовать её нужно с помощью символов (*) и цикла, а я не понимаю, как это сделать.Вот сама функция exp(x-2)-5*x^2+3
#include #include #include double foo(const double x) < return exp(x-2)-5*x*x+3; >int main() < SetConsoleCP(1251); SetConsoleOutputCP(1251); int x,a,b,t; while (true) < std::cout > a; std::cin >> b; if (a > b) < std::cout b" else < break; >> while (true) < std::cout > t; if (t <=0) < >else < break; >> for (int i = a; i >
Получилось только ось нарисовать. Функция может возвращать как положительные так и отрицательные значения.
Отслеживать
задан 20 мая 2020 в 7:58
1 1 1 серебряный знак 1 1 бронзовый знак
2 ответа 2
Сортировка: Сброс на вариант по умолчанию
примерно так. Но под вашу функцию надо оси масштабировать. этим займитесь сами В общем и целом подход такой — график «рисуется» в двумерном массиве и потом выводится.
// размеры "экрана" // по оси абсцисс #define scene_length 150 // по оси ординат #define scene_width 40 char scene[scene_length][scene_width*2]; // тут будем график рисовать. по оси ординат делаем в 2 раза больше (под отрицательные значения) for(int x=0;x // тут будем обсчитывать функцию и рисовать график for(int x=0;x // выводим на экран for(int y=scene_width*2-1;y>=0;y--) < printf ("%03d ", y-scene_width); for(int x=0;xprintf("\n"); > return 0;
Построение графика функции
Разработать программу для построения графика функции у = 2*sinx*e^4/5 . Считать из файла х функции. График функции построить в интервале от -50 до 50. Результатом работы программы будут считаться два массива, которые содержат значения промежуточные значения x и y для интервала [-50; 50]. Возможно кто-то сможет построить график по этим значениям, это будет еще лучше.
К сожалению, решения данной задачи пока нет. Если Вы решили эту задачу, сообщите нам, и мы выложим её на сайте.
Следующие статьи помогут вам в решении данной задачи:
Дата: 13.01.2014
Поделиться:
Комментарии
Ihor Lokki
08.03.2015 Решение с использованием OpenGl:
#include #include #include #include #include #include int count = 0; // Размер масива У,Х float* X; // масив для хранение х-ов float* Y; // масив для хранения у-ов void display() < // Функция перерисовки дисплея glClear(GL_COLOR_BUFFER_BIT); glBegin(GL_LINES); glColor3f(1.0, 0.0, 0.0); glVertex3f(0, 50, 0); // Рисование системи координат glVertex3f(0, -50, 0); glVertex3f(-50, 0, 0); glVertex3f(50, 0, 0); for(int i = -11; i < 8; i++)< glVertex3f(10 + i * 5, -2, 0); glVertex3f(10 + i * 5, 2, 0); >for(int i = -11; i < 8; i++)< glVertex3f(-2, 10 + i * 5, 0); glVertex3f(2, 10 + i * 5, 0); >// Конец рисования системы крдинат glEnd(); glBegin(GL_POINTS); // Рисование точок графика функции float y; for(int i = 0; i < count; i++)< glVertex3f(X[i], Y[i], 0); >glEnd(); glutSwapBuffers(); > int main(int argc, char** argv) < std::vectorarr; // Вектор в котором будем хранить даные из файла std::ifstream fin; // Для вивода даних из файла std::string path; // Путь к файлу do< // Цикл который обеспечывает открития файла std::cout>path; fin.open(path.c_str()); if(!fin.is_open()) < std::cout>while(!fin.is_open()); float i = 0.0; while(!fin.eof())< // Запись даних из файла в вектор fin>>i; arr.push_back(i); > fin.close(); for(int j = 0; j < arr.size(); j++)< // Цикл для подсчота х-ов в диапазоне if(arr[j] >-50.0 && arr[j] < 50.0) // [-50;50] < count++; >> X = new float[count]; // Создание масива с х Y = new float[count]; // Создание масива с У int n = 0; for(int j = 0; j < arr.size(); j++)< // Цыкл для записи даних(х) указаного if(arr[j] >-50.0 && arr[j] < 50.0)< // диапазона в масив Х X[n] = arr[j]; n++; >> for(int j = 0; j < count; j++)< Y[j] = 2*sin(X[j])*pow(M_E,4/5); // Заполнение масива У >// Стандартное создание окна в OpenGl glutInit(&argc, argv); glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB); glutInitWindowSize(400, 400); glutInitWindowPosition(20, 810); glutCreateWindow("Rownanie"); glClearColor(0, 0, 0, 0); glMatrixMode(GL_PROJECTION); glLoadIdentity(); glOrtho(-55, 55, -55, 55, -100, 100); glutDisplayFunc(display); glutMainLoop(); delete [] X; delete [] Y; >
Sancho
Оставить комментарий
Вы должны войти, чтобы оставить комментарий.
Rust Journey: Хотите освоить язык программирования, который завоевывает мир?
Илон Маск, один из ведущих инноваторов нашего времени, утверждает, что за Rust будущее. А когда последний раз он ошибался в своих прогнозах?
✨ Не упустите свой шанс быть в авангарде IT-революции. Подписывайтесь на канал Rust Journey и начните свой путь в захватывающий мир Rust сегодня!
Chart – графики и диаграммы

Компонент Chart – удобный инструмент создания различных графиков и диаграмм с широкими возможностями и эффектным построением входных данных. Компонент Chart обладает множеством свойств, событий и методов, которые значительно сокращают время разработки приложений. Компонент Chart это контейнер объекта Series типа TChartSeries. Этот тип относится к сериям данных, которые квалифицируются различными стилями оформления. Компонент Chart позволяет работать одновременно с несколькими сериями Series. Если нужно отображать несколько графиков в одном окне, то каждая серия отвечает за одну кривую на графике. Если нужно вывести данные в диаграмму, то в этом случае можно наложить несколько разных серий.
Свойства компонента Chart
| Значение | Описание |
|---|---|
| AllowPanning | Позволяет прокручивать область графика во время выполнения в режиме реального времени: |
- pmNone – прокрутка области запрещена;
- pmHorizontal – прокрутка области разрешена только в горизонтальном направлении;
- pmVertical – прокрутка области разрешена только в вертикальном направлении;
- pmBoth — прокрутка области разрешена в обоих направлениях.
Большинство из описанных свойств компонента Chart имеют дополнительные параметры, которые вызываются нажатием в «Инспекторе объектов» кнопкой с многоточием. Где вызывается страница «Редактор диаграмм» (позволяет устанавливать все свойства диаграмм). Так же вызвать «Редактор диаграмм» можно двойным кликом левой кнопки мыши по компоненту Chart или же правой кнопкой мыши, выбрав команды Edit Chart.
Series – добавление графиков
- Открыть окно «Редактор диаграмм» компонента Chart.
- Перейти в закладку Series и нажать на кнопке Add, которая позволяет добавить серию Series.
- Появится список имеющихся типов графиков и диаграмм. Здесь можно выбрать ту или иную диаграмму для требуемых задач.
- После выбора желательно в разделе Titles задать заголовок диаграмме, в разделе Legend задать параметры для отображения легенды (списка обозначений), в разделе Panel задать внешний вид панели, остальные параметры по желанию.
При добавлении графика или диаграммы в компонент Chart, они создаются с демо-данными, чтобы можно было посмотреть результат отображения, применяя различные параметры. Кроме этого в «Редактор диаграмм» в разделе Series имеется ряд различных закладок, которые позволяют ещё глубже и детальнее настраивать серии.
Параметры круговой диаграммы
- Опция Circled Pie на закладке Format позволяет отображать круговую диаграмму при любом масштабировании компонента Chart.
- Опции в Style на закладке Marks позволяет настроить ярлычки к различным сегментам диаграммы: Percent – проценты, Value – значение, Label – названия данных и прочее.
- Можно установить шаблон отображения значений на закладке General.
Компонент Chart позволяет дублировать настроенную серию. В разделе Series окна «Редактор диаграмм» компонента Chart есть кнопка Clone, которая позволяет мгновенно скопировать созданную серию. После клонирования можно изменить тип диаграммы или некоторые параметры с помощью кнопки Change.
Общие параметры диаграмм
Раздел Axis в «Редактор диаграмм» позволяет детально задать и настроить отображение координатных осей графиков и диаграмм.
Раздел Walls позволят настроить отображение трёхмерных граней графика.
Методы серий Series
- Clear – очищает серию от всех входных данных.
- Add – добавляет новую точку в график или диаграмму со следующими параметрами:
- AValue – отображает входное значение;
- ALabel – отображает название добавленной точки (параметр является не обязательным и можно оставить значение пустым);
- AColor – устанавливает цвет точки.
- AddXY – добавляет новую точку в график функции со следующими параметрами:
- AXValue и AYValue – устанавливают значения аргументу и функции;
- ALabel и AColor выполняют те же функции, что и в методе Add.
Пример создания графика
int A1 = 55, A2 = 21, A3 = 33, A4=44; const float Pi = 3.14159; Series1->Clear(); Series2->Clear(); Series3->Clear(); Series1->Add(A1,"User 1",clYellow); Series1->Add(A2,"User 2",clBlue); Series1->Add(A3,"User 3",clRed); Series1->Add(A4,"User 4",clPurple); for(int i = 0; i AddXY(Pi*i,sin(0.1*Pi*i)*10,"",clRed); Series3->AddXY(Pi*i,cos(0.1*Pi*i)*10,"",clBlue); >
Функции Clear для каждой серии нужны, чтобы в процессе работы программы данные обновлялись. Без этого при повторном построении графиков с помощью методов Add и AddXY, новые точки продолжат добавляться к графикам.
В компоненте Chart можно создать две серии Series для отображения одинаковых данных, но с разным видов, например, Pie и Bar, и для пользователя предусмотреть возможность выбора отображения той или иной диаграммы. Так, например, в событие OnClick кнопки Button можно создать простую обработку, которая загрузит данные в Series и сделает её невидимой:
Series2->Assign(Series1); //Переписывает данные из Series1 в Series2 Series2->Active = false; //Скрывает Series2
Процедура смены типа диаграммы очень проста:
Series1->Active =! Series1->Active; Series2->Active =! Series2->Active;
