Как вывести график на си
Перейти к содержимому

Как вывести график на си

  • автор:

Построение графика функции на языке C?

Добрый день, подскажите как максимально просто построить график функции средствами языка C?

#include #include int main() < float x, y, z, step; printf("input x:\n"); scanf("%f", &x); printf("Input y:\n"); scanf("%f", &y); printf("input step:\n"); scanf("%f", &step); printf("result:\n"); for(int i = 0; i < 32; i++) < z = (sin(x)+cos(y))/(cos(x)-sin(y))*tan(x*y); printf("%.2f\t %f\n", x, z); x += step; >>

5a9ba82c11315920922107.jpeg

В итоге чтобы получить что то максимально похожее на график из Excel:

  • Вопрос задан более трёх лет назад
  • 5995 просмотров

Построить график функции с помощью символов

Нужно нарисовать график функции в консоли на С++, но проблема в том, что нельзя использовать библиотеки для работы с графикой. То есть нарисовать её нужно с помощью символов (*) и цикла, а я не понимаю, как это сделать.Вот сама функция 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; 

Программа на си для построения графика функции

В этой статье мы разберем программу на языке программирования си для построения графиков функций. В нашей программе будут отражаться система координат с делениями и подписями на них и будут строиться графики двух функций, который может сам задать пользователь.
В программе на си для построения графика функции вводятся следующие константы
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 )

Нет комментариев. Ваш будет первым!

КАК ваще можно рисовать на этом «ужасном» языке?

Когда-то, давным-давно, когда дебри ДОСа простирались от края и до края, программисты были самыми несчастными людьми. Им приходилось программировать графику под ДОС. Эта операционная система, ветхая, как и сами компьютеры, не реализует ничего, кроме работы с файлами, да и то на довольно низком уровне. Толку от неё практически никакого не было, и с графикой приходилось работать напрямую, используя 10-ый вектор прерывания. О прерываниях в следующем разделе, а пока скажем лишь, что работу с регистрами скрыли от нас всевозможные графические библиотеки. В компании Borland тоже сделали одну. Теперь она часть языка СИ, того, что для ДОС. Так уж повелось, что Паскаль, скажем, всегда рассматривается комплексно, с графикой. В СИ — язык отдельно, графика отдельно. Есть книги по языку, есть книги по графике. Разделяй и властвуй!
Работа с графикой осложняется тем, что надо подключать специальный EGA/VGA-драйвер, разработнный Borland для инициализации и работы с графическим режимом видеоплаты. Для этого надо этим файлом располагать. И конечно же, в ОС Windows этот драйвер не поддерживается. Куда деваться? использовать старый добрый Borland C++ 3.0 (3.1). Там и драйвер есть в папке BGI и поддерживает она его. Но для работы вашей программы с графикой, придётся комплектовать её файлом EGAVGA.BGI. Его целесообразно размещать в той же папке, что и программа или в подпапке, чтобы случайно не стёрли. Также надо разрешить компилятору работать с графикой. Выставьте флажок в меню: options->linker->libraries->Graphic library. Убеждаю вас, что ни Visual C++, ни Borland C++ 5.0 к низкоуровневой графике вас и близко не подпустят. Освоив эту графику, вы без труда освоите графику под Windows, когда мы с нею столкнёмся. Принципиальных отличий нет, если не считать некоторых изменений в именах функций и того, что эти функции могут быть членами класса (Visual C++). Главное — понять концепцию.

Вопрос: КАК перейти в графический режим?

Самый распространённый способ — использовать функцию initgraph, которая задаёт и режим и резрешение и указывает путь к EGAVGA.BGI. Рассмотрим её синтаксис:

initgraph(*int far grdriver, *int far grmode, char *path);

Первый аргумент указывает тип видеоадаптера. Он принимает числовое значение:
Аргумент grdriver:

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *