Перевести код из С++ в Си - 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);
 
}

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

  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