Не работает часть кода после тела цикла - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Здравствуйте! Уже некоторое время читаю сей форум, сейчас настала пора самому обратиться за помощью. Моя программа находит время, затрачиваемое на падение на Землю с 1000 км до 100 км с нулевой начальной скоростью через метод Эйлера с точностью 0.2%, результаты промежуточных значений x, V она записывает в table.txt. Проблема заключается в том, что после цикла for в main() она ничего не выводит. И вообще не делает. И мне обидно. Поверхностный гуглинг позволил понять, что проблема подобная у людей возникала, но я не смекаю, почему она есть и как её решить.
Листинг программы
  1. #include <stdio.h>
  2. #include <math.h>
  3. double func_t(int);
  4. int main()
  5. {
  6. //2*n - шаг
  7. int n;
  8. //инициализация переменных для старта цикла
  9. double a = 2, b = 1;
  10. for (n = 1; fabs((a - b) / a) >= 0.002; n++)
  11. {
  12. //присваиваем значения функций при разных шагах
  13. a = func_t(10 * n);
  14. b = func_t(n);
  15. printf("a = %.0lf b = %.0lf (a-b)/a: %2.0lf step, c: %d\n", a, b, 100 * (a - b) / a, 200 / (2 * n));
  16. }
  17. printf("Ne pechataet");
  18. }
  19. //Функция расчёта времени от целого числа, определяющего шаг
  20. double func_t(int n)
  21. {
  22. //Запишем расчёты в файл
  23. FILE *a;
  24. fopen_s(&a, "S:/table.txt", "a");
  25. double R = 1000, x = R, h = 100, V = 0, t = 0, g0 = 9.8, Rz = 6370, step = 200 / (2 * n), schet = 0;
  26. while (x > h)
  27. {
  28. //счётчик
  29. schet++;
  30. V -= 0.001*step * g0 / pow(1 + (x / Rz), 2);
  31. x += step * V;
  32. fprintf_s(a, "%lf %lf %lf %d\n", x, V, schet*step, n);
  33. }
  34. fclose(a);
  35. t = (schet - 1)*step;
  36. return(t);
  37. }
Заранее благодарен.

Решение задачи: «Не работает часть кода после тела цикла»

textual
Листинг программы
  1. #include <stdio.h>
  2. #include <math.h>
  3.  
  4. double func_t(int);
  5.  
  6. int main()
  7. {
  8.     //2*n - ГёГ*ГЈ
  9.     int n;
  10.     //ГЁГ*èöèГ*ëèçГ*öèÿ ïåðåìåГ*Г*ûõ äëÿ Г±ГІГ*ðòГ* öèêëГ*
  11.     double a = 2, b = 1;
  12.     for (n = 1; fabs((a - b) / a) >= 0.002; n++)
  13.     {
  14.         //ïðèñâГ*ГЁГўГ*ГҐГ¬ Г§Г*Г*Г·ГҐГ*ГЁГї ГґГіГ*êöèé ïðè Г°Г*Г§Г*ûõ ГёГ*ГЈГ*Гµ
  15.         a = func_t(10 * n);
  16.         b = func_t(n);
  17.         printf("a = %.0lf    b = %.0lf    (a-b)/a: %2.0lf    step, c: %d\n", a, b, 100 * (a - b) / a, 200 / (2 * n));
  18.     }
  19.     printf("Ne pechataet");
  20. }
  21.  
  22. //ÔóГ*êöèÿ Г°Г*Г±Г·ВёГІГ* âðåìåГ*ГЁ îò öåëîãî Г·ГЁГ±Г«Г*, îïðåäåëÿþùåãî ГёГ*ГЈ
  23. double func_t(int n)
  24. {
  25.     //Г‡Г*ГЇГЁГёГҐГ¬ Г°Г*Г±Г·ВёГІГ» Гў ГґГ*éë
  26.     FILE *a;
  27.     a=fopen("table.txt", "a");
  28.     double R = 1000, x = R, h = 100, V = 0, t = 0, g0 = 9.8, Rz = 6370, step = 200 / (2 * n), schet = 0;
  29.     while (x > h)
  30.     {
  31.         //Г±Г·ВёГІГ·ГЁГЄ
  32.         schet++;
  33.         V -= 0.001*step * g0 / pow(1 + (x / Rz), 2);
  34.         x += step * V;
  35.         fprintf(a, "%lf %lf %lf %d\n", x, V, schet*step, n);
  36.     }
  37.     fclose(a);
  38.     t = (schet - 1)*step;
  39.     return(t);
  40. }

Объяснение кода листинга программы

  1. Входные данные: n = 1, a = 2, b = 1
  2. Выполняется цикл while для func_t(n)
  3. Внутри цикла: a. Вычисляется значение переменной schet b. Вычисляется значение переменной V c. Вычисляется значение переменной x d. Выводится значение переменных x, V, schet, n
  4. Цикл while выполняется до тех пор, пока x больше h
  5. По завершении цикла: a. Значение переменной t вычисляется как (schet - 1) * step b. Функция fclose(a) закрывает файл table.txt c. Возвращается значение переменной t
  6. Вывод: a = 2.0000   b = 1.0000   (a-b)/a: 0.0000   step, c: 200/2=100
  7. Цикл while для func_t(n) начинается заново с n = 1
  8. Выполняется цикл while для func_t(n)
  9. ...
  10. Вывод: a = 2.0000   b = 1.0000   (a-b)/a: 0.0000   step, c: 200/2=100
  11. Цикл while для func_t(n) начинается заново с n = 1
  12. ...
  13. Вывод: a = 2.0000   b = 1.0000   (a-b)/a: 0.0000   step, c: 200/2=100
  14. Цикл while для func_t(n) начинается заново с n = 1
  15. ...
  16. Вывод: a = 2.0000   b = 1.0000   (a-b)/a: 0.0000   step, c: 200/2=100
  17. Цикл while для func_t(n) начинается заново с n = 1
  18. ...
  19. Вывод: a = 2.0000   b = 1.0000   (a-b)/a: 0.0000   step, c: 200/2=100
  20. Цикл while для func_t(n) начинается заново с n = 1

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

5   голосов , оценка 3.6 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы