


ЯП c++. Составить алгоритм (блок-схему) и написать программу табулирования функции

Составить алгоритм (блок-схему) и написать программу
табулирования функции на заданном промежутке с шагом 0.2.
Произвести выравнивание результатов по колонкам.
#include <cmath>
#include <iomanip>
#include <iostream>
using namespace std;
struct Table {
double xn = 0;
double xk = 0;
double h = 0;
void set(const double _xn, const double _xk, const double _h) {
xn = _xn;
xk = _xk;
h = _h;
}
private:
double f(const double x) const {
return log(x * x) - x + 4.0;
}
friend ostream& operator<<(ostream& out, const Table& table) {
const auto end = table.xk + table.h / 10.0;
cout.setf(ios::fixed);
for (auto x = table.xn; x < end; x += table.h) {
auto result = table.f(x);
out << setw(6) << setprecision(2) << x;
out << setw(21) << setprecision(15) << result << '\n';
}
return out;
}
};
int main() {
constexpr auto xn = 0.1;
constexpr auto xk = 29.0;
constexpr auto h = 0.2;
Table table;
table.set(xn, xk, h);
cout << table;
}
### Алгоритм (блок-схема)
1. **Начало**
2. **Ввод данных**
- Ввести начальное значение \( a \)
- Ввести конечное значение \( b \)
- Ввести шаг \( h \) (в данном случае \( h = 0.2 \))
3. **Инициализация**
- Установить \( x = a \)
4. **Цикл**
- Пока \( x \leq b \):
- Вычислить значение функции \( f(x) \)
- Вывести \( x \) и \( f(x) \) с выравниванием по колонкам
- Увеличить \( x \) на \( h \)
5. **Конец**
### Программа на C++
Ниже приведена программа на языке C++, которая табулирует функцию \( f(x) = x^2 \) на заданном промежутке с шагом 0.2 и выводит результаты с выравниванием по колонкам.
```cpp
#include <iostream>
#include <iomanip>
#include <cmath>
int main() {
double a, b, h = 0.2;
double x, y;
// Ввод начального и конечного значений
std::cout << "Введите начальное значение a: ";
std::cin >> a;
std::cout << "Введите конечное значение b: ";
std::cin >> b;
// Вывод заголовков колонок
std::cout << std::setw(10) << "x" << std::setw(15) << "f(x)" << std::endl;
std::cout << std::setw(10) << std::setfill('-') << "" << std::setw(15) << "" << std::setfill(' ') << std::endl;
// Табулирование функции
for (x = a; x <= b; x += h) {
y = x * x; // Функция f(x) = x^2
std::cout << std::fixed << std::setprecision(2)
<< std::setw(10) << x
<< std::setw(15) << y
<< std::endl;
}
return 0;
}
```
### Объяснение
- **Ввод данных**: Программа запрашивает у пользователя начальное значение \( a \) и конечное значение \( b \).
- **Инициализация**: Шаг \( h \) установлен на 0.2, как указано в задании.
- **Цикл**: Программа использует цикл `for` для перебора значений \( x \) от \( a \) до \( b \) с шагом \( h \).
- **Вычисление и вывод**: Для каждого значения \( x \) вычисляется \( f(x) = x^2 \), и результаты выводятся с выравниванием по колонкам с помощью `std::setw` и `std::setprecision`.
Эта программа обеспечивает табулирование функции на заданном промежутке с шагом 0.2 и выводит результаты в удобном для чтения формате.