Перевести код из С++ в Си - C (СИ) (69518)

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

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

Помогите пожалуйста
Листинг программы
  1. #include "stdafx.h"
  2. #include <iostream>
  3. #include <math.h>
  4. using namespace std;
  5. double fix(double(*f)(double), double a, double b, double eps);
  6. double f(double x);
  7. int i;
  8. int _tmain(int argc, _TCHAR* argv[])
  9. {
  10. setlocale(LC_ALL, "");//подключение языков
  11. double a, b, eps;
  12. cout << "Нахождение приближенного значения корня методом деления отрезка пополам.\nВведите левую границу отрезка 'a' = ";
  13. cin >> a;//ввод левой границы отрезка 'a'
  14. cout << "Введите правую границу отрезка 'b' = ";
  15. cin >> b;//ввод правой границы отрезка 'b'
  16. cout << "Введите точность нахождения 'eps' = ";
  17. cin >> eps;//ввод точности нахождения 'eps'
  18. cout << "Приближенное значение корня = " << fix(f, a, b, eps) << endl;
  19. cout << "Приближенное значение корня найдено за " << i << " шагов" << endl;
  20. system("PAUSE");
  21. return 0;
  22. }
  23. double fix(double(*f)(double), double a, double b, double eps)
  24. {
  25. double x = (a + b) / 2;
  26. while ((abs(b - a)>eps) && (f(x) != 0))
  27. {
  28. if (f(a)*f(x)<0)
  29. b = x;
  30. else
  31. a = x;
  32. x = (a + b) / 2;
  33. cout << "x=" << x << endl;
  34. i++;
  35. }
  36. return x;
  37. }
  38. double f(double x)
  39. {
  40. return sin(x);
  41. }

Решение задачи: «Перевести код из С++ в Си»

textual
Листинг программы
  1. #include "stdafx.h"
  2. //#include <iostream>
  3. #include <math.h> /*библиотека матем. функций*/
  4. #include <stdio.h> /*printf*/
  5. #include <locale.h> /*библиотека выбора языка*/
  6.  
  7.  
  8. double fix(double a, double b, double eps);
  9. double f(double x);
  10. int i;
  11.  
  12. int main()
  13. {
  14.     double a, b, eps;
  15.     setlocale(LC_CTYPE, "");//подключение языков
  16.     printf("Нахождение приближенного значения корня методом деления отрезка пополам.\nВведите левую границу отрезка 'a' = ");
  17.     scanf("%lf", &a);//ввод левой границы отрезка 'a'
  18.     printf("Введите правую границу отрезка 'b' = ");
  19.     scanf("%lf", &b);//ввод правой границы отрезка 'b'
  20.     printf("Введите точность нахождения 'eps' = ");
  21.     scanf("%lf", &eps);//ввод точности нахождения 'eps'
  22.     printf("Приближенное значение корня = %lf\n", fix(a, b, eps));
  23.     printf("Приближенное значение корня найдено за %d шагов\n", i);
  24.     return 0;
  25. }
  26.  
  27. double fix(double a, double b, double eps)
  28. {
  29.     double x = (a + b) / 2;
  30.     i = 0;
  31.     while ((fabs(b - a)>eps) && (f(x) != 0))
  32.     {
  33.         if (f(a)*f(x)<0)
  34.             b = x;
  35.         else
  36.             a = x;
  37.         x = (a + b) / 2;
  38.         printf("x=%lf\n", x);
  39.         i++;
  40.     }
  41.     return x;
  42. }
  43.  
  44. double f(double x)
  45. {
  46.     return sin(x);
  47.  
  48. }

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

  1. В функции main программа запрашивает у пользователя значения переменных a, b и eps с помощью функции scanf.
  2. Значения переменных a, b и eps сохраняются в соответствующих переменных.
  3. С помощью функции fix осуществляется поиск корня методом деления отрезка пополам.
  4. В цикле while происходит сравнение разности b-a с заданной точностью eps и проверка на ненулевой знаменатель функции f(x).
  5. Если знаменатель функции f(x) меняется знака при переходе от a к x, то b присваивается значение x.
  6. Если знаменатель функции f(x) не меняет знака при переходе от a к x, то a присваивается значение x.
  7. Значение x обновляется как среднее арифметическое a и b.
  8. В цикле while выполняется проверка условия и увеличивается счетчик i при каждом шаге итерации.
  9. Функция fix возвращает значение x как приближенное значение корня.
  10. Значение i выводится на экран с помощью функции printf.
  11. Значение x выводится на экран с помощью функции printf.
  12. В функции f реализуется вычисление значения функции sin(x).
  13. Значение функции f(x) выводится на экран с помощью функции printf.

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


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

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

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

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

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

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