Перевести код из С++ в Си - C (СИ) (69518)
Формулировка задачи:
Помогите пожалуйста
Листинг программы
- #include "stdafx.h"
- #include <iostream>
- #include <math.h>
- using namespace std;
- double fix(double(*f)(double), double a, double b, double eps);
- double f(double x);
- int i;
- int _tmain(int argc, _TCHAR* argv[])
- {
- setlocale(LC_ALL, "");//подключение языков
- double a, b, eps;
- cout << "Нахождение приближенного значения корня методом деления отрезка пополам.\nВведите левую границу отрезка 'a' = ";
- cin >> a;//ввод левой границы отрезка 'a'
- cout << "Введите правую границу отрезка 'b' = ";
- cin >> b;//ввод правой границы отрезка 'b'
- cout << "Введите точность нахождения 'eps' = ";
- cin >> eps;//ввод точности нахождения 'eps'
- cout << "Приближенное значение корня = " << fix(f, a, b, eps) << endl;
- cout << "Приближенное значение корня найдено за " << i << " шагов" << endl;
- system("PAUSE");
- return 0;
- }
- double fix(double(*f)(double), double a, double b, double eps)
- {
- double x = (a + b) / 2;
- while ((abs(b - a)>eps) && (f(x) != 0))
- {
- if (f(a)*f(x)<0)
- b = x;
- else
- a = x;
- x = (a + b) / 2;
- cout << "x=" << x << endl;
- i++;
- }
- return x;
- }
- double f(double x)
- {
- return sin(x);
- }
Решение задачи: «Перевести код из С++ в Си»
textual
Листинг программы
- #include "stdafx.h"
- //#include <iostream>
- #include <math.h> /*библиотека матем. функций*/
- #include <stdio.h> /*printf*/
- #include <locale.h> /*библиотека выбора языка*/
- double fix(double a, double b, double eps);
- double f(double x);
- int i;
- int main()
- {
- double a, b, eps;
- setlocale(LC_CTYPE, "");//подключение языков
- printf("Нахождение приближенного значения корня методом деления отрезка пополам.\nВведите левую границу отрезка 'a' = ");
- scanf("%lf", &a);//ввод левой границы отрезка 'a'
- printf("Введите правую границу отрезка 'b' = ");
- scanf("%lf", &b);//ввод правой границы отрезка 'b'
- printf("Введите точность нахождения 'eps' = ");
- scanf("%lf", &eps);//ввод точности нахождения 'eps'
- printf("Приближенное значение корня = %lf\n", fix(a, b, eps));
- printf("Приближенное значение корня найдено за %d шагов\n", i);
- return 0;
- }
- double fix(double a, double b, double eps)
- {
- double x = (a + b) / 2;
- i = 0;
- while ((fabs(b - a)>eps) && (f(x) != 0))
- {
- if (f(a)*f(x)<0)
- b = x;
- else
- a = x;
- x = (a + b) / 2;
- printf("x=%lf\n", x);
- i++;
- }
- return x;
- }
- double f(double x)
- {
- return sin(x);
- }
Объяснение кода листинга программы
- В функции
main
программа запрашивает у пользователя значения переменныхa
,b
иeps
с помощью функцииscanf
. - Значения переменных
a
,b
иeps
сохраняются в соответствующих переменных. - С помощью функции
fix
осуществляется поиск корня методом деления отрезка пополам. - В цикле
while
происходит сравнение разностиb-a
с заданной точностьюeps
и проверка на ненулевой знаменатель функцииf(x)
. - Если знаменатель функции
f(x)
меняется знака при переходе отa
кx
, тоb
присваивается значениеx
. - Если знаменатель функции
f(x)
не меняет знака при переходе отa
кx
, тоa
присваивается значениеx
. - Значение
x
обновляется как среднее арифметическоеa
иb
. - В цикле
while
выполняется проверка условия и увеличивается счетчикi
при каждом шаге итерации. - Функция
fix
возвращает значениеx
как приближенное значение корня. - Значение
i
выводится на экран с помощью функцииprintf
. - Значение
x
выводится на экран с помощью функцииprintf
. - В функции
f
реализуется вычисление значения функцииsin(x)
. - Значение функции
f(x)
выводится на экран с помощью функцииprintf
.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д