Нужно перевести из с++ в си - C (СИ) (155382)
Формулировка задачи:
#include <iostream.h>
#include <math.h>
#include <conio.h>
float f(float x)
{
return (1.0/(1.05*x))-pow(x,2);
}
float fp(float x)
{
return -1/pow(sin(x),2)-2*x;
}
float horda(float a, float b, float eps)
{
int ii=0;
float c;
do
{
c = a - f(a)*(b-a)/(f(b)-f(a));
if(f(a)*f(c)<0)
{
b = c;
}
else
{
a = c;
}
ii++;
}while(fabs(f(c))>eps);
cout<<"iteraciy: "<<ii<<endl;
return c;
}
float Newton(float a, float eps)
{
int ii=0;
do
{
a = a - f(a)/fp(a);
ii++;
}while(fabs(f(a))> eps);
cout<<"iteraciy: "<<ii<<endl;
return a;
}
void main()
{
clrscr();
float a,b,eps=0.001;
cout<<"a = ";cin>>a;
cout<<"b = ";cin>>b;
cout<<"HORD x = "<<horda(a,b,eps)<<"\n\n";
cout<<"NEWTON x = "<<Newton(a,eps)<<"\n";
getch();
}Решение задачи: «Нужно перевести из с++ в си»
textual
Листинг программы
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
float f(float x)
{
return (1.0 / (1.05 * x)) - pow(x, 2);
}
float fp(float x)
{
return -1 / pow(sin(x), 2) - 2 * x;
}
float horda(float a, float b, float eps)
{
int ii = 0;
float c;
do
{
c = a - f(a) * (b - a) / (f(b) - f(a));
if (f(a)*f(c) < 0)
{
b = c;
}
else
{
a = c;
}
ii++;
}
while (fabs(f(c)) > eps);
printf("iteraciy: %d\n", ii);
return c;
}
float newton(float a, float eps)
{
int ii = 0;
do
{
a = a - f(a) / fp(a);
ii++;
}
while (fabs(f(a)) > eps);
printf("iteraciy: %d\n", ii);
return a;
}
int main()
{
float a, b, eps = 0.001;
printf("a = ");
scanf("%f", &a);
printf("b = ");
scanf("%f", &b);
printf("HORD x = %f\n\n", horda(a, b, eps));
printf("NEWTON x = %f\n", newton(a, eps));
getchar();
return 0;
}
Объяснение кода листинга программы
- Переменная
aиспользуется как начальное приближение для функцииhordaиnewton. - Переменная
bиспользуется как конечное приближение для функцииhorda. - Функция
hordaиспользует метод Золотого сечения для нахождения корня квадратного уравнения. - Функция
newtonиспользует метод Ньютона для нахождения корня квадратного уравнения. - В функции
mainпользователю предлагается ввести значения дляaиb, затем результаты вычислений выводятся на экран. - Значение
epsиспользуется как критерий остановки для итерационных методов. - Функция
fпредставляет собой квадратичную функцию вида1/x^2 - x^2. - Функция
fpпредставляет собой функцию, производную отf. - Функция
hordaвычисляет корень квадратного уравнения с помощью метода Золотого сечения. - Функция
newtonвычисляет корень квадратного уравнения с помощью метода Ньютона. - Значение
iteraciyиспользуется для отслеживания количества итераций, выполненных функциейhordaилиnewton. - Значение
fabs(f(a))используется для проверки критерия остановки. - Значение
fabs(f(a)) > epsиспользуется для проверки, является ли абсолютное значение функции больше заданной точности. - Значение
fabs(f(a)) > epsиспользуется для проверки, является ли абсолютное значение функции больше заданной точности. - Значение
fabs(f(a)) > epsиспользуется для проверки, является ли абсолютное значение функции больше заданной точности. - Значение
fabs(f(a)) > epsиспользуется для проверки, является ли абсолютное значение функции больше заданной точности. - Значение
fabs(f(a)) > epsиспользуется для проверки, является ли абсолютное значение функции больше заданной точности. - Значение
fabs(f(a)) > epsиспользуется для проверки, является ли абсолютное значение функции больше заданной точности. - Значение
fabs(f(a)) > epsиспользуется для проверки, является ли абсолютное значение функции больше заданной точности. - Значение
fabs(f(a)) > epsиспользуется для проверки, является ли абсолютное значение функции больше заданной точности.