Untitled

 avatar
unknown
plain_text
a year ago
1.5 kB
1
Indexable
#include <stdio.h>
#include <math.h>

double versiera(double x) {
    // Верзьера Аньези: y = 1 / (1 + x^2)
    return 1.0 / (1.0 + x * x);
}

double lemniscate(double x) {
    // Лемниската Бернулли (для y > 0): r^2 = 2 * a^2 * cos(2 * theta), a = 1, x = sqrt(r^2) * cos(theta)
    // Используем уравнение в полярных координатах и преобразуем его в декартовы
    if (x == 0.0) return -1; // Функция не определена в точке 0
    double r2 = 2 * cos(2 * atan(x));
    return r2 > 0 ? sqrt(r2 / (1 + x * x)) : -1;
}

double hyperbola(double x) {
    // Квадратичная гипербола: y = 1 / x
    if (x == 0.0) return -1; // Функция не определена в точке 0
    return 1.0 / x;
}

int main() {
    double x, dx = 2 * M_PI / 41; // Шаг для 42 замеров
    for (int i = 0; i <= 41; i++) {
        x = -M_PI + i * dx;
        double y1 = versiera(x);
        double y2 = lemniscate(x);
        double y3 = hyperbola(x);
        
        if (y2 < 0) {
            printf("%.7f | - | ", x);
        } else {
            printf("%.7f | %.7f | ", x, y1);
        }

        if (y2 < 0) {
            printf("- | ");
        } else {
            printf("%.7f | ", y2);
        }

        if (y3 < 0) {
            printf("-\n");
        } else {
            printf("%.7f\n", y3);
        }
    }
    return 0;
}
Leave a Comment