\documentclass[a4paper,12pt]{article}
\usepackage[left=2cm,right=2cm,
    top=2cm,bottom=2cm,bindingoffset=0cm]{geometry}
\usepackage{amsmath, amssymb}
\usepackage{graphicx}
\usepackage{hyperref}
\usepackage[utf8]{inputenc}
\usepackage[russian]{babel}
\usepackage{cite}
\usepackage{listings}
\lstset{extendedchars=\true, inputencoding=utf8}
\usepackage{color}
\usepackage{float}
\usepackage{caption}

\definecolor{mygreen}{rgb}{0,0.6,0}
\definecolor{mygray}{rgb}{0.5,0.5,0.5}
\definecolor{mymauve}{rgb}{0.58,0,0.82}

\lstset{
    language=C++,
    aboveskip=3mm,
    belowskip=3mm,
    showstringspaces=false,
    columns=flexible,
    basicstyle={\small\ttfamily},
    numbers=left,
    numberstyle=\tiny\color{mygray},
    keywordstyle=\color{blue},
    commentstyle=\color{mygreen},
    stringstyle=\color{mymauve},
    breaklines=true,
    breakatwhitespace=true,
    tabsize=4
}

\begin{document}

\begin{titlepage}
    \begin{center}
        \vspace*{2cm}
        \Large{\textbf{Отчёт о получении значений ординат при
помощи аппроксимирующей функции}}\\[1.5cm]
        
        \normalsize
        \textbf{Выполнил:} Давыдов Даниил Андреевич\\
        \textbf{Проверил:} Малыхин Дмитрий Андреевич\\[2cm]
        
        \textbf{Дата:} \today
    \end{center}
\end{titlepage}

\tableofcontents
\newpage

\section{Реализация программы}

Ниже представлена программа, реализующая вычисление ординат аппроксимации:

\begin{lstlisting}
#include <iostream>
#include <cmath>
#include <vector>
#include <iomanip>

using namespace std;

// плотность воздуха ro(H)
double ro(double H)
{
    return 1.3661924862989573034545085 - 0.0001418065280049439870457 * H + 0.0000000067724452175195049 * pow(H, 2) - 0.0000000000000901906541734 * pow(H, 3);
}

// скорости звука a(H)
double a(double H)
{
    return 342.8873180441046321920151030 - 0.0035032436716794758557481 * H - 0.0000000518023700664785279 * pow(H, 2);
}

// коэффициент подъемной силы Cy(alpha)
double Cy(double alpha)
{
    return -0.2234285714285730306549738 + 0.1278571428571436963128605 * alpha - 0.0035714285714287135643785 * pow(alpha, 2) + 0.0000000000000000077098821 * pow(alpha, 3);
}

// лобовое сопротивление Cx(alpha)
double Cx(double alpha)
{
    return 19.0500000000000397903932026 - 12.7708333333333623471617102 * alpha + 3.2104166666666742457891814 * pow(alpha, 2) - 0.3541666666666675733488034 * pow(alpha, 3) + 0.0145833333333333717285463 * pow(alpha, 4);
}

// сила тяги двигателей P(M)
double P(double M)
{
    return 47589.0511051998255425132811069 - 26183.6352466731186723336577415 * M - 79976.5836117977305548265576363 * pow(M, 2) + 62418.6378453120341873727738857 * pow(M, 3);
}

int get_k()
{
    int k;
    cout << "Введите количество разбиений (от 1 до 99): ";
    cin >> k;

    if (k <= 0 || k >= 100)
    {
        cout << "Ошибка: количество разбиений должно быть от 1 до 99.\n";
        return get_k();
    }
    return k;
}

int main()
{
    int k = get_k();

    vector<double> M(k + 1);
    vector<double> H(k + 1);
    vector<double> V(k + 1);
    vector<double> alpha(k + 1);

    V[0] = 310 / 3.6;
    V[k] = 700 / 3.6;

    H[0] = 300;
    H[k] = 6000;

    cout << "Введите начальное число Маха: ";
    cin >> M[0];
    cout << "Введите конечное число Маха: ";
    cin >> M[k];

    for (int i = 0; i < k; ++i)
    {
        H[i + 1] = H[i] + (H[k] - H[0]) / k;
        V[i + 1] = V[i] + (V[k] - V[0]) / k;
        M[i + 1] = M[i] + (M[k] - M[0]) / k;
    }

    cout << "Введите начальный угол атаки (градусы): ";
    cin >> alpha[0];
    for (int i = 0; i < k; ++i)
    {
        alpha[i + 1] = alpha[i] + 1.0;
    }

    cout << fixed;
    cout << "\nРезультаты:\n";
    cout << left << setw(7) << "№"
         << right << setw(10) << "H (м)"
         << right << setw(15) << "V (м/с)"
         << right << setw(12) << "alpha (°)"
         << right << setw(12) << "M"
         << right << setw(12) << "a (м/с)"
         << right << setw(12) << "ro (кг/м^3)"
         << right << setw(12) << "Cy"
         << right << setw(10) << "Cx"
         << right << setw(15) << "P (кгс)"
         << endl;

    cout << string(107, '-') << endl;

    for (int i = 0; i <= k; ++i)
    {
        cout << left << setw(5) << (i + 1);
        cout << right << setw(10) << setprecision(0) << H[i];
        cout << right << setw(10) << setprecision(2) << V[i];
        cout << right << setw(12) << setprecision(2) << alpha[i];
        cout << right << setw(10) << setprecision(4) << M[i];
        cout << right << setw(10) << setprecision(2) << a(H[i]);
        cout << right << setw(15) << setprecision(6) << ro(H[i]);
        cout << right << setw(10) << setprecision(4) << Cy(alpha[i]);
        cout << right << setw(10) << setprecision(4) << Cx(alpha[i]);
        cout << right << setw(15) << setprecision(2) << P(M[i]);
        cout << endl;
    }

    return 0;
}
\end{lstlisting}

\section{Графики}

\subsection{График зависимости плотности воздуха от высоты}

\begin{figure}[H]
    \centering
    \includegraphics[width=0.7\textwidth]{images/1.png}
    \caption{График зависимости плотности воздуха $\rho(H)$ от высоты $H$}
    \label{fig:ro_vs_H}
\end{figure}

\subsection{График зависимости скорости звука от высоты}

\begin{figure}[H]
    \centering
    \includegraphics[width=0.7\textwidth]{images/2.png}
    \caption{График зависимости скорости звука $V(H)$ от высоты $H$}
    \label{fig:a_vs_H}
\end{figure}

\subsection{График зависимости коэффициента подъёмной силы от угла атаки}

\begin{figure}[H]
    \centering
    \includegraphics[width=0.7\textwidth]{images/3.png}
    \caption{График зависимости коэффициента подъёмной силы $C_y(\alpha)$ от угла атаки $\alpha$}
    \label{fig:Cy_vs_alpha}
\end{figure}

\subsection{График зависимости коэффициента лобового сопротивления от угла атаки}

\begin{figure}[H]
    \centering
    \includegraphics[width=0.7\textwidth]{images/4.png}
    \caption{График зависимости коэффициента лобового сопротивления $C_x(\alpha)$ от угла атаки $\alpha$}
    \label{fig:Cx_vs_alpha}
\end{figure}

\subsection{График зависимости силы тяги от числа Маха}

\begin{figure}[H]
    \centering
    \includegraphics[width=0.7\textwidth]{images/5.png}
    \caption{График зависимости силы тяги $P(M)$ от числа Маха}
    \label{fig:P_vs_M}
\end{figure}

\end{document}
 