Не работает часть кода после тела цикла - 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);
}

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

  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
Похожие ответы