C/C++

Код программы на С++))

1. Составить таблицу значений функции при хн< х < хк с шагом h действительного типа.
2. Выполнить задание двумя способами:
- с использованием оператора for;
- с использованием оператора while.
// for
#include <iostream>
#include <cmath>

using namespace std;

int main()
{
double xn,xk,h,c,y,b;
cout << "xn = ";
cin >> xn;
do
{
cout << "xk = ";
cin >> xk;
}while(xk <= xn);
do
{
cout << "h = ";
cin >> h;
}while(h <= 0.0 || h > (xk - xn));
cout << "y = ";
cin >> y;
cout << "b = ";
cin >> b;

cout << "\tТаблица значений функции." << endl;
cout << 'x' << '\t' << 'c' << endl;
// for
for(double x = xn + h; x < xk; x += h)
{
// ОДЗ
if(b > 0.0)
{
if((x+y) == 0.0)
{
cerr << "Знаменатель равен нулю -- ошибка!" << endl;
return 1;
}
}
c = atan(x) - 3.0/5.0 * exp(x*y) + 0.5 * abs(x+y)/pow(x+y,b);
cout << x << '\t' << c << endl;
}

return 0;
}

// while // ********************************************************** //

#include <iostream>
#include <cmath>

using namespace std;

int main()
{
double xn,xk,h,c,y,b;
cout << "xn = ";
cin >> xn;
do
{
cout << "xk = ";
cin >> xk;
}while(xk <= xn);
do
{
cout << "h = ";
cin >> h;
}while(h <= 0.0 || h > (xk - xn));
cout << "y = ";
cin >> y;
cout << "b = ";
cin >> b;

cout << "\tТаблица значений функции." << endl;
cout << 'x' << '\t' << 'c' << endl;
// while
double x = xn + h;
while(x < xk)
{
// ОДЗ
if(b > 0.0)
{
if((x+y) == 0.0)
{
cerr << "Знаменатель равен нулю -- ошибка!" << endl;
return 1;
}
}
c = atan(x) - 3.0/5.0 * exp(x*y) + 0.5 * abs(x+y)/pow(x+y,b);
cout << x << '\t' << c << endl;
x += h;
}

return 0;
}
Рахимджон Рахимов
Рахимджон Рахимов
80 906
Лучший ответ
Рахимджон Рахимов Вероятно из-за неточности типа double, конечное значение в таблице для x может быть равно xn. Тут нужно что-то ещё придумать с округлением x при сравнении с xk в условии цикла.