Не работает часть кода после тела цикла - C (СИ)
Формулировка задачи:
Здравствуйте! Уже некоторое время читаю сей форум, сейчас настала пора самому обратиться за помощью.
Моя программа находит время, затрачиваемое на падение на Землю с 1000 км до 100 км с нулевой начальной скоростью через метод Эйлера с точностью 0.2%, результаты промежуточных значений x, V она записывает в table.txt.
Проблема заключается в том, что после цикла for в main() она ничего не выводит. И вообще не делает. И мне обидно. Поверхностный гуглинг позволил понять, что проблема подобная у людей возникала, но я не смекаю, почему она есть и как её решить.
Заранее благодарен.
Листинг программы
- #include <stdio.h>
- #include <math.h>
- double func_t(int);
- int main()
- {
- //2*n - шаг
- int n;
- //инициализация переменных для старта цикла
- double a = 2, b = 1;
- for (n = 1; fabs((a - b) / a) >= 0.002; n++)
- {
- //присваиваем значения функций при разных шагах
- a = func_t(10 * n);
- b = func_t(n);
- printf("a = %.0lf b = %.0lf (a-b)/a: %2.0lf step, c: %d\n", a, b, 100 * (a - b) / a, 200 / (2 * n));
- }
- printf("Ne pechataet");
- }
- //Функция расчёта времени от целого числа, определяющего шаг
- double func_t(int n)
- {
- //Запишем расчёты в файл
- FILE *a;
- fopen_s(&a, "S:/table.txt", "a");
- double R = 1000, x = R, h = 100, V = 0, t = 0, g0 = 9.8, Rz = 6370, step = 200 / (2 * n), schet = 0;
- while (x > h)
- {
- //счётчик
- schet++;
- V -= 0.001*step * g0 / pow(1 + (x / Rz), 2);
- x += step * V;
- fprintf_s(a, "%lf %lf %lf %d\n", x, V, schet*step, n);
- }
- fclose(a);
- t = (schet - 1)*step;
- return(t);
- }
Решение задачи: «Не работает часть кода после тела цикла»
textual
Листинг программы
- #include <stdio.h>
- #include <math.h>
- double func_t(int);
- int main()
- {
- //2*n - ГёГ*ГЈ
- int n;
- //ГЁГ*èöèГ*ëèçГ*öèÿ ïåðåìåГ*Г*ûõ äëÿ Г±ГІГ*ðòГ* öèêëГ*
- double a = 2, b = 1;
- for (n = 1; fabs((a - b) / a) >= 0.002; n++)
- {
- //ïðèñâГ*ГЁГўГ*ГҐГ¬ Г§Г*Г*Г·ГҐГ*ГЁГї ГґГіГ*êöèé ïðè Г°Г*Г§Г*ûõ ГёГ*ГЈГ*Гµ
- a = func_t(10 * n);
- b = func_t(n);
- printf("a = %.0lf b = %.0lf (a-b)/a: %2.0lf step, c: %d\n", a, b, 100 * (a - b) / a, 200 / (2 * n));
- }
- printf("Ne pechataet");
- }
- //ÔóГ*êöèÿ Г°Г*Г±Г·ВёГІГ* âðåìåГ*ГЁ îò öåëîãî Г·ГЁГ±Г«Г*, îïðåäåëÿþùåãî ГёГ*ГЈ
- double func_t(int n)
- {
- //Г‡Г*ГЇГЁГёГҐГ¬ Г°Г*Г±Г·ВёГІГ» Гў ГґГ*éë
- FILE *a;
- a=fopen("table.txt", "a");
- double R = 1000, x = R, h = 100, V = 0, t = 0, g0 = 9.8, Rz = 6370, step = 200 / (2 * n), schet = 0;
- while (x > h)
- {
- //Г±Г·ВёГІГ·ГЁГЄ
- schet++;
- V -= 0.001*step * g0 / pow(1 + (x / Rz), 2);
- x += step * V;
- fprintf(a, "%lf %lf %lf %d\n", x, V, schet*step, n);
- }
- fclose(a);
- t = (schet - 1)*step;
- return(t);
- }
Объяснение кода листинга программы
- Входные данные: n = 1, a = 2, b = 1
- Выполняется цикл while для func_t(n)
- Внутри цикла: a. Вычисляется значение переменной schet b. Вычисляется значение переменной V c. Вычисляется значение переменной x d. Выводится значение переменных x, V, schet, n
- Цикл while выполняется до тех пор, пока x больше h
- По завершении цикла: a. Значение переменной t вычисляется как (schet - 1) * step b. Функция fclose(a) закрывает файл table.txt c. Возвращается значение переменной t
- Вывод: a = 2.0000 b = 1.0000 (a-b)/a: 0.0000 step, c: 200/2=100
- Цикл while для func_t(n) начинается заново с n = 1
- Выполняется цикл while для func_t(n)
- ...
- Вывод: a = 2.0000 b = 1.0000 (a-b)/a: 0.0000 step, c: 200/2=100
- Цикл while для func_t(n) начинается заново с n = 1
- ...
- Вывод: a = 2.0000 b = 1.0000 (a-b)/a: 0.0000 step, c: 200/2=100
- Цикл while для func_t(n) начинается заново с n = 1
- ...
- Вывод: a = 2.0000 b = 1.0000 (a-b)/a: 0.0000 step, c: 200/2=100
- Цикл while для func_t(n) начинается заново с n = 1
- ...
- Вывод: a = 2.0000 b = 1.0000 (a-b)/a: 0.0000 step, c: 200/2=100
- Цикл while для func_t(n) начинается заново с n = 1
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д