Untitled
unknown
plain_text
2 years ago
2.5 kB
9
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