Загрузка данных


================================================================================
ФАЙЛ 1: tab_func.h
(Положить в папку: "Заголовочные файлы")
================================================================================
#pragma once // защита от повторного включения заголовочного файла

// прототип функции вычисления значения кусочной функции
double calculate_y(double x);



================================================================================
ФАЙЛ 2: tab_func.cpp
(Положить в папку: "Файлы исходного кода")
================================================================================
#include "tab_func.h" // подключение собственного заголовочного файла
#include <cmath>      // подключение математических функций (exp, log)

// реализация вычисления кусочной функции для заданного x
double calculate_y(double x)
{
    /*предусловие: x - вещественное число (текущая точка аргумента)*/
    /*постусловие: функция возвращает вычисленное значение y в зависимости от диапазона x*/

    double y; // локальная переменная для результата

    if (x < 0.0) // первая ветвь: x < 0
    {
        y = exp(-x); // экспонента в степени (-x)
    }
    else if (x <= 4.5) // вторая ветвь: 0 <= x <= 4.5
    {
        y = 1.0 - log(1.0 + x * x); // вычисление 1 - ln(1 + x^2)
    }
    else // третья ветвь: x > 4.5
    {
        y = 2.0 * x; // вычисление 2 * x
    }

    return y; // возврат полученного значения
}



================================================================================
ФАЙЛ 3: Исходный код.cpp (main.cpp)
(Положить в папку: "Файлы исходного кода")
================================================================================
#include <iostream>     // библиотека для потокового ввода-вывода (cin, cout)
#include <iomanip>      // библиотека для форматирования таблицы (setw, setprecision, fixed)
#include <clocale>      // библиотека для поддержки русского языка
#include "tab_func.h"   // подключение нашего заголовочного файла с функцией calculate_y

using namespace std;    // использование стандартного пространства имен

int main()
{
    /*предусловие: начальная точка x_start, конечная точка x_end и шаг dx вводятся с клавиатуры*/
    /*постусловие: на экран выводится таблица значений x и y на заданном интервале*/

    setlocale(LC_ALL, "Russian"); // установка русской локали в консоли

    double x_start; // начальная точка промежутка табуляции
    double x_end;   // конечная точка промежутка табуляции
    double dx;      // шаг изменения аргумента x
    double x;       // текущее значение аргумента
    double y;       // текущее значение функции

    // ввод граничных параметров и шага
    cout << "Введите начальную точку (x_start): ";
    cin >> x_start;

    cout << "Введите конечную точку (x_end): ";
    cin >> x_end;

    cout << "Введите шаг табуляции (dx): ";
    cin >> dx;

    // вывод шапки таблицы
    cout << "\n-----------------------------\n";
    cout << "      x      |      y      \n";
    cout << "-----------------------------\n";

    cout << fixed; // включение вывода с фиксированной точкой

    x = x_start; // инициализация начального значения аргумента перед циклом

    // цикл с постусловием do-while для построения таблицы
    do
    {
        y = calculate_y(x); // вызов функции вычисления из отдельного файла tab_func.cpp

        // вывод строки таблицы с выравниванием по ширине и 4 знаками после запятой
        cout << setw(12) << setprecision(4) << x << " |"
             << setw(13) << setprecision(4) << y << "\n";

        x = x + dx; // переход к следующей точке с заданным шагом
    }
    while (x <= x_end + dx / 2.0); // условие продолжения цикла с защитой от погрешности float

    cout << "-----------------------------\n"; // подвал таблицы

    system("pause"); // задержка окна консоли для просмотра результатов
    return 0;        // успешное завершение программы
}