Не работает часть кода после тела цикла - 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
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д