#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