Вычислить значение выражения - C (СИ) (71255)

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

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

Листинг программы
  1. Program Zz;
  2. function f(x:real):real;
  3. begin
  4. f:=1.32-1.43*x+1.32*sin(x)-0.8*ln(1+x);
  5. end;
  6. var a,b,x,c,eps:real;
  7. n:integer;
  8. begin
  9. writeln('Введите левую границу');
  10. readln(a);
  11. writeln('Введите правую границу');
  12. readln(b);
  13. writeln('Введите Эпсилон');
  14. readln(eps);
  15. n:=0;
  16. while abs(a-b)>eps do
  17. begin
  18. c:=(a+b)/2;
  19. if f(a)*f(c)<=0 then b:=c
  20. else a:=c;
  21. x:=(a+b)/2;
  22. n:=n+1
  23. end;
  24. writeln('x=',x:0:5,' f(x)=',f(x):0:3,' ','Количество итераций=',n);
  25. end.
_____ Дан код на паскале, перевидите, кому не сложно на СИ.Спасибо.

Решение задачи: «Вычислить значение выражения»

textual
Листинг программы
  1. #include <stdlib.h>
  2. #include <stdio.h>
  3. #include <math.h>
  4. #include <locale.h>
  5.  
  6. double f(double x);
  7.  
  8. int main(){
  9.     setlocale(LC_ALL, "RUSSIAN");
  10.     double a, b, x, c, eps;
  11.     int n=0;
  12.  
  13.     printf("Введите левую границу: ");
  14.     scanf("%lf", &a);
  15.     fflush(stdin);
  16.  
  17.     printf("Введите правую границу: ");
  18.     scanf("%lf", &b);
  19.     fflush(stdin);
  20.  
  21.     printf("Введите Эпсилон: ");
  22.     scanf("%lf", &eps);
  23.     fflush(stdin);
  24.  
  25.     while(abs(a-b)>eps){
  26.         c=(a+b)/2;
  27.  
  28.         if(f(a)*f(c)<=0){
  29.             b=c;
  30.         }else{
  31.             a=c;
  32.         }
  33.  
  34.         x=(a+b)/2;
  35.         n++;
  36.     }
  37.  
  38.     printf("x=%.5lf, f(x)=%.3lf, Количество итераций=%i.\n", x, f(x), n);
  39.  
  40.     return 0;
  41. }
  42.  
  43. double f(double x){
  44.     return 1.32-1.43*x+1.32*sin(x)-0.8*log(1+x);
  45. }

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

  1. Объявлены переменные: a, b, x, c, epsions,nтипаdouble, а также переменнаяintтипаn`.
  2. Выполняется функция setlocale(LC_ALL,RUSSIAN), которая задает русскоязычную локализацию.
  3. Определена функция f(double x).
  4. В главном цикле программы выполняется поиск корня методом деления отрезка пополам.
  5. На каждой итерации цикла вычисляется значение функции f(a), f(b), f(c), f(x).
  6. Если выполняется условие f(a)*f(c)<=0, то значение переменной b заменяется на значение переменной c.
  7. Если условие не выполняется, то значение переменной a заменяется на значение переменной c.
  8. После каждой итерации значение переменной x обновляется как среднее арифметическое a и b.
  9. Каждое значение x выводится на экран с помощью printf(x=%.5lf, x).
  10. Каждое значение функции f(x) выводится на экран с помощью printf(f(x)=%.3lf, f(x)).
  11. Каждое количество итераций выводится на экран с помощью printf(Количество итераций=%i.\n, n).
  12. В конце программы выполняется оператор return 0, который завершает выполнение программы.
  13. Функция f(double x) вычисляет значение функции, которую необходимо приблизить к нулю.
  14. Значение функции f(x) вычисляется с помощью формулы 1.32-1.43*x+1.32*sin(x)-0.8*log(1+x).
  15. Значение функции f(x) вычисляется с помощью формулы 1.32-1.43*x+1.32*sin(x)-0.8*log(1+x).
  16. Значение функции f(x) вычисляется с помощью формулы 1.32-1.43*x+1.32*sin(x)-0.8*log(1+x).
  17. Значение функции f(x) вычисляется с помощью формулы 1.32-1.43*x+1.32*sin(x)-0.8*log(1+x).
  18. Значение функции f(x) вычисляется с помощью формулы 1.32-1.43*x+1.32*sin(x)-0.8*log(1+x).
  19. Значение функции f(x) вычисляется с помощью формулы 1.32-1.43*x+1.32*sin(x)-0.8*log(1+x).
  20. Значение функции f(x) вычисляется с помощью формулы 1.32-1.43*x+1.32*sin(x)-0.8*log(1+x).

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


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

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

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

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

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

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