Top.Mail.Ru
Ответы
Аватар пользователя
Аватар пользователя
Аватар пользователя
Аватар пользователя
Программирование
+4

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

Составить алгоритм (блок-схему) и написать программу
табулирования функции на заданном промежутке с шагом 0.2.
Произвести выравнивание результатов по колонкам.

По дате
По рейтингу
Аватар пользователя
Высший разум
6мес
123456789101112131415161718192021222324252627282930313233343536373839
 #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; 
} 
Аватар пользователя
Мыслитель
6мес

### Алгоритм (блок-схема)

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 и выводит результаты в удобном для чтения формате.