Untitled
unknown
plain_text
a year ago
2.5 kB
6
Indexable
#include <stdio.h> #include <math.h> #include "parser.h" #include "pol_notation.h" #include "drawer.h" #include "data_structures.h" #define PI 3.14159265358979323846 #define DOMAIN_START 0 #define DOMAIN_END (4 * PI) #define RANGE_MIN -1 #define RANGE_MAX 1 #define WIDTH 80 #define HEIGHT 25 // Прототипы функций, предполагается, что они реализованы в других файлах double evaluate_expression(const char* expression, double x); void draw_graph(double(*func)(const char*, double), const char* expression); int main(int argc, char** argv) { if (argc < 2) { printf("Usage: %s \"expression\"\n", argv[0]); return 1; } const char* expression = argv[1]; // Отрисовка графика функции draw_graph(evaluate_expression, expression); return 0; } double evaluate_expression(const char* expression, double x) { // Предполагается, что здесь вы вызовете функцию, которая преобразует expression в польскую нотацию // и вычислит её значение для данного x. Это упрощенный пример. // В вашем случае, это будет более сложная реализация, включая разбор выражения и работу с польской нотацией. return sin(x); // Заглушка для примера, нужна реальная реализация } void draw_graph(double(*func)(const char*, double), const char* expression) { char graph[HEIGHT][WIDTH]; // Заполнение фона for (int i = 0; i < HEIGHT; ++i) { for (int j = 0; j < WIDTH; ++j) { graph[i][j] = '.'; } } // Вычисление значений функции и заполнение графика for (int i = 0; i < WIDTH; ++i) { double x = DOMAIN_START + i * (DOMAIN_END - DOMAIN_START) / WIDTH; double y = func(expression, x); // Преобразование y в координаты графика if (y >= RANGE_MIN && y <= RANGE_MAX) { int graphY = HEIGHT / 2 - (int)(y * HEIGHT / 2); graph[graphY][i] = '*'; } } // Вывод графика for (int i = 0; i < HEIGHT; ++i) { for (int j = 0; j < WIDTH; ++j) { putchar(graph[i][j]); } putchar('\n'); } }
Editor is loading...
Leave a Comment