Загрузка данных


#include <stdio.h>
#include <math.h>

#define PI 3.14159265358979323846
#define POINTS 42
#define PRECISION 7

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

// Лемниската Бернулли (y > 0)
double lemniscate(double x) {
    if (fabs(x) > 1.0) {
        return -1.0;  // Не определена
    }
    
    double x2 = x * x;
    
    // Особый случай x = 0
    if (fabs(x) < 1e-15) {
        return 0.0;
    }
    
    // Решаем уравнение: y^4 + (2x^2 + 1)y^2 - x^2 = 0
    double a = 1.0;
    double b = 2.0 * x2 + 1.0;
    double c = -x2;
    
    double discriminant = b * b - 4.0 * a * c;
    if (discriminant < 0) {
        return -1.0;
    }
    
    double y2 = (-b + sqrt(discriminant)) / (2.0 * a);
    if (y2 < 0) {
        return -1.0;
    }
    
    return sqrt(y2);
}

// Квадратичная гипербола: y = 1 / x^2
double hyperbola(double x) {
    if (fabs(x) < 1e-12) {
        return -1.0;  // Не определена в 0
    }
    return 1.0 / (x * x);
}

int main() {
    double start = -PI;
    double end = PI;
    double step = (end - start) / (POINTS - 1);
    
    for (int i = 0; i < POINTS; i++) {
        double x = start + i * step;
        
        double y1 = versiera(x);
        double y2 = lemniscate(x);
        double y3 = hyperbola(x);
        
        // Выводим с точностью до 7 знаков
        printf("%.7f | %.7f | ", x, y1);
        
        if (y2 < -0.5) {
            printf("- | ");
        } else {
            printf("%.7f | ", y2);
        }
        
        if (y3 < -0.5) {
            printf("-\n");
        } else {
            printf("%.7f\n", y3);
        }
    }
    
    return 0;
}


cd ~/D03T03

# Компилируем
gcc -Wall -Werror -Wextra src/door_functions.c -o door_functions -lm

# Запускаем и сохраняем в файл
./door_functions > src/data/door_data.txt

# Проверяем результат
echo "Первые 5 строк:"
head -5 src/data/door_data.txt

echo ""
echo "Последние 5 строк:"
tail -5 src/data/door_data.txt

echo ""
echo "Всего строк:"
wc -l src/data/door_data.txt
# Должно быть 42 строки


# Добавляем файлы
git add src/door_functions.c
git add src/data/door_data.txt

# Делаем коммит
git commit -m "Quest 4: Three functions table for door reconstruction

- Versiera Agnese: y = 1/(1+x^2)
- Lemniscate Bernoulli: y>0 from (x^2+y^2)^2 = x^2-y^2
- Quadratic hyperbola: y = 1/x^2
- 42 points from -PI to PI
- Precision: 7 decimal places
- Separator: '|'
- Save output to door_data.txt"

# Отправляем
git push origin develop