Untitled

mail@pastecode.io avatar
unknown
plain_text
2 months ago
2.5 kB
1
Indexable
Never
#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');
    }
}
Leave a Comment