{"id":477676,"date":"2026-04-27T22:21:08","date_gmt":"2026-04-27T22:21:08","guid":{"rendered":"https:\/\/savepearlharbor.com\/?p=477676"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=477676","title":{"rendered":"\u0412\u044b\u0441\u043e\u043a\u043e\u044d\u043d\u0442\u0440\u043e\u043f\u0438\u0439\u043d\u044b\u0439 \u0432\u0430\u0439\u0431\u043a\u043e\u0434\u0438\u043d\u0433"},"content":{"rendered":"<div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\">\n<p>\u0412 \u043d\u0430\u0441\u0442\u043e\u044f\u0449\u0435\u0435 \u0432\u0440\u0435\u043c\u044f \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442 \u043c\u043d\u043e\u0433\u043e \u043c\u0430\u043d\u0443\u0430\u043b\u043e\u0432 \u043a\u0430\u043a \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e \u0434\u0435\u043b\u0430\u0442\u044c \u0437\u0430\u043f\u0440\u043e\u0441\u044b, \u0432 \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u043c \u043e\u043d\u0438 \u043a\u0430\u0441\u0430\u044e\u0442\u0441\u044f \u043f\u0440\u0438\u0432\u044b\u0447\u043d\u043e\u0433\u043e \u0432\u0441\u0435\u043c \u044f\u0437\u044b\u043a\u0430, \u043f\u0440\u0438\u0447\u0451\u043c, \u043d\u0435\u0432\u0430\u0436\u043d\u043e \u043a\u0430\u043a\u043e\u0439 \u043e\u043d, \u043c\u043e\u0434\u0435\u043b\u044c \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u0443\u0435\u0442 \u0435\u0433\u043e \u0432 \u0432\u0435\u043a\u0442\u043e\u0440 \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043e\u0434\u0438\u043d\u0430\u043a\u043e\u0432 \u0434\u043b\u044f \u0431\u043e\u043b\u044c\u0448\u0438\u043d\u0441\u0442\u0432\u0430 \u043b\u044e\u0434\u0435\u0439. \u041d\u044e\u0430\u043d\u0441\u044b \u0432\u0440\u043e\u0434\u0435 \u0441\u0438\u0441\u0442\u0435\u043c\u044b \u0432\u0440\u0435\u043c\u0451\u043d, \u043f\u0430\u0434\u0435\u0436\u0435\u0439, \u0444\u0438\u043a\u0441\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0439 \u0438\u043b\u0438 \u0433\u0438\u0431\u043a\u043e\u0439 \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438 \u0441\u043b\u043e\u0432 \u043c\u0430\u043b\u043e \u0432\u043b\u0438\u044f\u044e\u0442 \u043d\u0430 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u0432\u044b\u0432\u043e\u0434 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c, \u0432 \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u043c \u043e\u043d\u0438 \u043d\u0443\u0436\u043d\u044b \u043b\u0438\u0448\u044c \u0434\u043b\u044f \u0445\u0443\u0434\u043e\u0436\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0439 \u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u0438 \u0438\u043b\u0438 \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0438 \u0441\u043c\u044b\u0441\u043b\u0430 \u0442\u0435\u043a\u0441\u0442\u0430 \u043e\u0442 \u0447\u0435\u043b\u043e\u0432\u0435\u043a\u0430 \u043a \u0447\u0435\u043b\u043e\u0432\u0435\u043a\u0443. <\/p>\n<p><em>\u0417\u0430\u0434\u0430\u0447\u0430 \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u043f\u0440\u043e\u0441\u0442\u0430\u044f &#8212; \u043a\u0430\u043a \u0441 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435\u043c \u043c\u0438\u043d\u0438\u043c\u0430\u043b\u044c\u043d\u043e \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0433\u043e \u043d\u0430\u0431\u043e\u0440\u0430 \u0441\u043b\u043e\u0432 \u0431\u0435\u0437 \u043f\u0440\u0438\u0441\u0442\u0430\u0432\u043e\u043a, \u0441\u0443\u0444\u0444\u0438\u043a\u0441\u043e\u0432, \u043e\u043a\u043e\u043d\u0447\u0430\u043d\u0438\u0439 \u0438\u043b\u0438 \u0441 \u0438\u0445 \u043c\u0438\u043d\u0438\u043c\u0443\u043c\u043e\u043c, \u0430 \u0442\u0430\u043a\u0436\u0435 \u0441\u043e\u044e\u0437\u043e\u0432 \u0438 \u0434\u0440\u0443\u0433\u0438\u0445 \u0432\u0441\u043f\u043e\u043c\u043e\u0433\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0445 \u0440\u0435\u0447\u0435\u0432\u044b\u0445 \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0439 \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u043d\u0430 \u0432\u044b\u0445\u043e\u0434\u0435 \u0433\u043e\u0434\u043d\u044b\u0439 \u043a\u043e\u0434 \u0441 0% \u043e\u0448\u0438\u0431\u043e\u043a \u0438 90% \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u0430 \u0441\u043e\u0433\u043b\u0430\u0441\u043d\u043e \u0442\u0430\u043a\u043e\u043c\u0443 \u043f\u0440\u043e\u043c\u043f\u0442-\u0422\u0417.<\/em><\/p>\n<p>\u0418\u0442\u0430\u043a, \u043f\u0440\u0438\u0441\u0442\u0443\u043f\u0438\u043c. \u0411\u0443\u0434\u0435\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c VS Code\/\u0431\u043b\u043e\u043a\u043d\u043e\u0442 \u0441 \u043f\u0443\u0441\u0442\u043e\u0439 \u043f\u0430\u043f\u043a\u043e\u0439. <\/p>\n<p>\u0414\u043b\u044f \u043d\u0430\u0447\u0430\u043b\u0430 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0440\u0430\u0437\u0432\u0435\u0440\u043d\u0443\u0442\u044c \u0432\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u043e\u0435 \u043e\u043a\u0440\u0443\u0436\u0435\u043d\u0438\u0435. \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u043f\u0438\u0448\u0435\u043c \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439 \u043f\u0440\u043e\u043c\u043f\u0442. &gt;\u0417\u0430\u043c\u0435\u0447\u0430\u043d\u0438\u0435 &#8212; \u043f\u043e\u0440\u0430 \u043d\u0430 \u0425\u0430\u0431\u0440\u0435 \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0432 \u044f\u0437\u044b\u043a \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f &#171;\u041f\u0440\u043e\u043c\u043f\u0442\u0438\u043d\u0433&#187;&lt;<\/p>\n<details class=\"spoiler\">\n<summary>\u0420\u0430\u0437\u0432\u0451\u0440\u0442\u044b\u0432\u0430\u043d\u0438\u0435 \u0432\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u043e\u043a\u0440\u0443\u0436\u0435\u043d\u0438\u044f<\/summary>\n<div class=\"spoiler__content\">\n<p><strong>\u0425\u043e\u0442\u0435\u0442\u044c \u0431\u044d\u0448 \u0441\u043a\u0440\u0438\u043f\u0442 \u043f\u0440\u043e\u0432\u0435\u0440\u044c .venv \u0435\u0441\u043b\u0438 \u043d\u0435\u0442 \u0441\u043e\u0437\u0434\u0430\u0442\u044c, \u043e\u0431\u043d\u043e\u0432\u0438\u0442\u044c pip \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u044f\u044f \u0432\u0435\u0440\u0441\u0438\u044f \u043d\u0430\u0439\u0442\u0438 requirements.txt \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 \u0444\u0430\u0439\u043b \u044d\u0442\u043e\u0442. \u041e\u043f\u0446\u0438\u044f \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442 \u0438\u043c\u044f \u0444\u0430\u0439\u043b\u0430.py \u0441\u043a\u0440\u0438\u043f\u0442 \u043f\u0440\u043e\u0432\u0435\u0440\u044c \u043d\u0430\u043b\u0438\u0447\u0438\u0435 \u043e\u043a\u0440\u0443\u0436\u0435\u043d\u0438\u044f .\u0432\u044d\u043d\u0432 \u0435\u0441\u043b\u0438 \u043d\u0435\u0442 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438 \u0440\u0435\u043a\u0432\u0430\u0440\u0435\u043c\u0435\u043d\u0442\u0441.txt. \u0415\u0441\u043b\u0438 .\u0432\u044d\u043d\u0432 \u0443\u0436\u0435 \u0435\u0441\u0442\u044c \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0439  \u043f\u0438\u0442\u043e\u043d 3 \u0441\u043a\u0440\u0438\u043f\u0442 \u043f\u0440\u043e\u0432\u0435\u0440\u044c \u0447\u0442\u043e \u0437\u0430\u043f\u0443\u0441\u043a \u0432\u043d\u0443\u0442\u0440\u0438 \u0432\u044d\u043d\u0432. \u0425\u043e\u0442\u0435\u0442\u044c \u0441\u043f\u0438\u0441\u043e\u043a \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0435\u0439 \u0444\u043b\u0430\u0433 &#8212;g \u0441\u043e\u0445\u0440\u0430\u043d\u0438\u0442\u044c \u0432 \u0444\u0430\u0439\u043b requirements-\u0442\u0435\u043a\u0443\u0449\u0430\u044f \u0434\u0430\u0442\u0430-\u0432\u0440\u0435\u043c\u044f.txt \u0438\u0437\u043c\u0435\u043d\u0438\u0442\u044c \u0432\u0435\u0440\u0441\u0438\u044f == \u043d\u0430 &gt;=.  \u0432\u044b\u0439\u0434\u0438 \u0438\u0437 \u0432\u044d\u043d\u0432 \u043f\u043e \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u0438\u044e \u043f\u0438\u0442\u043e\u043d\u0430.<\/strong><\/p>\n<p>\u0414\u0430\u043d\u043d\u044b\u0439 \u043f\u0440\u043e\u043c\u043f\u0442 \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u0435\u0442 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439 \u043a\u043e\u0434<\/p>\n<pre><code class=\"python\">#!\/bin\/bash# \u0418\u043c\u044f \u0432\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u043e\u043a\u0440\u0443\u0436\u0435\u043d\u0438\u044fVENV_DIR=\".venv\"# \u0418\u043c\u044f \u0444\u0430\u0439\u043b\u0430 \u0441\u043a\u0440\u0438\u043f\u0442\u0430 \u0438\u0437 \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u0430PY_SCRIPT=$1# 1. \u0415\u0441\u043b\u0438 \u043f\u0435\u0440\u0435\u0434\u0430\u043d \u0444\u043b\u0430\u0433 --g, \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0435\u043c \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u0438 \u0432\u044b\u0445\u043e\u0434\u0438\u043cif [[ \"$1\" == \"--g\" ]]; then    if [ -d \"$VENV_DIR\" ]; then        source \"$VENV_DIR\/bin\/activate\"        FILENAME=\"requirements-$(date +'%Y%m%d-%H%M%S').txt\"        # \u0421\u043e\u0445\u0440\u0430\u043d\u044f\u0435\u043c, \u043c\u0435\u043d\u044f\u044f == \u043d\u0430 &gt;=        pip freeze | sed 's\/==\/&gt;=\/g' &gt; \"$FILENAME\"        echo \"\u0417\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u044b \u0432 $FILENAME\"        deactivate    else        echo \"\u041e\u0448\u0438\u0431\u043a\u0430: .venv \u043d\u0435 \u043d\u0430\u0439\u0434\u0435\u043d. \u041d\u0435\u0447\u0435\u0433\u043e \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0442\u044c.\"    fi    exit 0fi# 2. \u041f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u0438 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0435 .venvif [ ! -d \"$VENV_DIR\" ]; then    echo \"\u0421\u043e\u0437\u0434\u0430\u044e \u0432\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u043e\u0435 \u043e\u043a\u0440\u0443\u0436\u0435\u043d\u0438\u0435...\"    python3 -m venv \"$VENV_DIR\"    source \"$VENV_DIR\/bin\/activate\"        echo \"\u041e\u0431\u043d\u043e\u0432\u043b\u044f\u044e pip...\"    pip install --upgrade pip        if [ -f \"requirements.txt\" ]; then        echo \"\u0423\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u044e \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 \u0438\u0437 requirements.txt...\"        pip install -r requirements.txt    fielse    source \"$VENV_DIR\/bin\/activate\"fi# 3. \u0417\u0430\u043f\u0443\u0441\u043a Python \u0441\u043a\u0440\u0438\u043f\u0442\u0430 (\u0435\u0441\u043b\u0438 \u043f\u0435\u0440\u0435\u0434\u0430\u043d \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442)if [ -n \"$PY_SCRIPT\" ]; then    if [ -f \"$PY_SCRIPT\" ]; then        echo \"\u0417\u0430\u043f\u0443\u0441\u043a $PY_SCRIPT \u0432\u043d\u0443\u0442\u0440\u0438 $(which python)...\"        python3 \"$PY_SCRIPT\"    else        echo \"\u041e\u0448\u0438\u0431\u043a\u0430: \u0424\u0430\u0439\u043b $PY_SCRIPT \u043d\u0435 \u043d\u0430\u0439\u0434\u0435\u043d.\"    fielse    echo \"\u041e\u043a\u0440\u0443\u0436\u0435\u043d\u0438\u0435 \u0433\u043e\u0442\u043e\u0432\u043e. \u0418\u043c\u044f \u0441\u043a\u0440\u0438\u043f\u0442\u0430 \u0434\u043b\u044f \u0437\u0430\u043f\u0443\u0441\u043a\u0430 \u043d\u0435 \u0443\u043a\u0430\u0437\u0430\u043d\u043e.\"fi# 4. \u0412\u044b\u0445\u043e\u0434 \u0438\u0437 venvdeactivate<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:87px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u0437\u0430\u043f\u0443\u0441\u043a\u0430\u044f \u043a\u043e\u043c\u0430\u043d\u0434\u043e\u0439 .\/generate_requirements.sh my.py \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0437\u0430\u043f\u0443\u0441\u043a \u0441\u043a\u0440\u0438\u043f\u0442\u0430 \u0441 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u043e\u0439 \u0432\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u043e\u043a\u0440\u0443\u0436\u0435\u043d\u0438\u044f \u043d\u0430 \u043e\u0441\u043d\u043e\u0432\u0435 \u0444\u0430\u0439\u043b\u0430 requirements.txt \u043a\u043e\u0433\u0434\u0430 \u0432\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u043e\u0435 \u043e\u043a\u0440\u0443\u0436\u0435\u043d\u0438\u0435 \u0443\u0436\u0435 \u0441\u043e\u0437\u0434\u0430\u043d\u043e \u0438 \u0438\u043c\u0435\u0435\u0442\u0441\u044f \u043f\u043e\u0432\u0442\u043e\u0440\u043d\u044b\u0439 \u0437\u0430\u043f\u0443\u0441\u043a \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u0435\u0442\u0441\u044f \u0443\u0436\u0435 \u043a \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u043d\u043e\u043c\u0443 venv. \u041f\u0440\u0438\u043c\u0435\u0440 \u0444\u0430\u0439\u043b\u0430 requirements.txt<br \/><em>pygame <br \/>PyOpenGL <br \/>PyOpenGL_accelerate <br \/>numpy<\/em><br \/><em>matplotlib<\/em><br \/>\u0415\u0441\u043b\u0438 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0441\u043a\u0430\u043d\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043f\u0430\u043a\u0435\u0442\u044b \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u044b, \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u0442\u0441\u044f \u0441\u043a\u0440\u0438\u043f\u0442 \u0441 \u0444\u043b\u0430\u0433\u043e\u043c &#8212;g, \u0441\u043e\u0437\u0434\u0430\u0451\u0442\u0441\u044f \u0444\u0430\u0439\u043b \u0441 \u0442\u0430\u0439\u043c\u0441\u0442\u0435\u043c\u043f\u043e\u043c  requirements-20260427-213724.txt <br \/>  \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0449\u0438\u0439<br \/>contourpy&gt;=1.3.3 <br \/>cycler&gt;=0.12.1 <br \/>fonttools&gt;=4.62.1 <br \/>kiwisolver&gt;=1.5.0 <br \/>matplotlib&gt;=3.10.9 <br \/>numpy&gt;=2.4.4 <br \/>&#8230;<\/p>\n<p>  \u043f\u043e\u0434\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u043d\u044b\u0435 \u0432\u0435\u0440\u0441\u0438\u0438 \u0441 \u0442\u043e\u0447\u043a\u0438 \u0437\u0440\u0435\u043d\u0438\u044f \u043f\u043e\u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0439 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u043e\u0439 \u043d\u043e\u0432\u044b\u0445 <\/p>\n<p> my.py  &#8212; \u043b\u044e\u0431\u043e\u0439 hello world, \u043d\u043e \u043b\u0443\u0447\u0448\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043f\u0440\u043e\u043c\u043f\u0442 <br \/><strong>\u043f\u0440\u0438\u043c\u0435\u0440<\/strong> <strong>\u041f\u0438\u0442\u043e\u043d numpy \u0432\u0435\u043a\u0442\u043e\u0440 \u0432\u044b\u0432\u043e\u0434 \u0443\u043c\u043d\u043e\u0436\u0435\u043d\u0438\u0435 \u0447\u0438\u0441\u043b\u043e<\/strong><\/p>\n<pre><code class=\"python\">import numpy as np# \u0421\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u0432\u0435\u043a\u0442\u043e\u0440\u0430vector = np.array([1, 2, 3])# \u0423\u043c\u043d\u043e\u0436\u0435\u043d\u0438\u0435 \u043d\u0430 \u0447\u0438\u0441\u043b\u043eresult = vector * 5print(result)# \u0412\u044b\u0432\u043e\u0434: [ 5 10 15]<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<\/div>\n<\/details>\n<p>\u041e\u0431\u0440\u0430\u0442\u0438\u0442\u044c \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435 \u043d\u0430 \u0445\u0430\u0440\u0430\u043a\u0442\u0435\u0440 \u0444\u0440\u0430\u0437 \u0438 \u0432\u0432\u0435\u0434\u0435\u043d\u0438\u0435 &#171;\u043f\u0440\u043e\u043c\u043f\u0442&#187; \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445 \u0442\u0430\u043a\u043e\u0439 \u043a\u0430\u043a \u0432\u044d\u043d\u0432 \u0438 \u0441\u043a\u0440\u0438\u043f\u0442. <br \/>\u0421\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439 \u043f\u0440\u0438\u043c\u0435\u0440 &#8212; \u0441\u043e\u0437\u0434\u0430\u0451\u043c \u0446\u0438\u0444\u0440\u043e\u0432\u043e\u0439 \u0444\u0438\u043b\u044c\u0442\u0440 \u0441 \u0411\u0418\u0425 \u0445\u0430\u0440\u0430\u043a\u0442\u0435\u0440\u0438\u0441\u0442\u0438\u043a\u043e\u0439 \u043d\u0430 \u044f\u0437\u044b\u043a\u0435 \u0421 \u0438 \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u043c \u0435\u0433\u043e \u0441 \u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u0435\u0439 \u0432\u044b\u0445\u043e\u0434\u043d\u043e\u0433\u043e csv \u0444\u0430\u0439\u043b\u0430 \u0441 \u043e\u0442\u0441\u0447\u0451\u0442\u0430\u043c\u0438 \u0438 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f\u043c\u0438 \u043a\u043e\u044d\u0444\u0444\u0438\u0446\u0438\u0435\u043d\u0442\u043e\u0432.<\/p>\n<details class=\"spoiler\">\n<summary>\u0426\u0438\u0444\u0440\u043e\u0432\u043e\u0439 \u0444\u0438\u043b\u044c\u0442\u0440 &#8212; \u044f\u0434\u0440\u043e<\/summary>\n<div class=\"spoiler__content\">\n<p><strong>\u0445\u043e\u0442\u0435\u0442\u044c \u0446\u0438\u0444\u0440\u043e\u0432\u043e\u0439 \u0444\u0438\u043b\u044c\u0442\u0440 \u0447\u0438\u0441\u0442\u044b\u0439 \u0421 \u0444\u0430\u0439\u043b \u043a\u0430\u043b\u044c\u043a\u044e\u043b\u044f\u0439\u0442 \u0441\u0438 \u0444\u0443\u043d\u043a\u0446\u0438\u044f \u043a\u0430\u043b\u044c\u043a\u0443\u043b\u044f\u0439\u0442 \u0446\u0438\u043a\u043b \u043f\u043e n \u043e\u0442\u0441\u0447\u0451\u0442\u0430\u043c \u0432\u0445\u043e\u0434 n, \u043c\u0430\u0441\u0441\u0438\u0432 \u0432\u044b\u0445\u043e\u0434\u043e\u0432 \u0440\u0430\u0437\u043c\u0435\u0440 n, \u043c\u0430\u0441\u0441\u0438\u0432 \u043e\u0442\u0441\u0447\u0451\u0442\u043e\u0432 \u0445, \u0438 \u043a\u043e\u044d\u0444\u0444\u0438\u0446\u0438\u0435\u043d\u0442\u043e\u0432 \u0441\u0445 \u043e\u0434\u0438\u043d\u0430\u043a\u043e\u0432\u044b\u0435 \u0440\u0430\u0437\u043c\u0435\u0440, \u0447\u0438\u0441\u043b\u043e \u043a\u043e\u044d\u0444\u0444\u0438\u0446\u0438\u0435\u043d\u0442\u043e\u0432 \u044d\u043d\u0438\u043a\u0441, \u043c\u0430\u0441\u0441\u0438\u0432 \u043e\u0442\u0441\u0447\u0451\u0442\u043e\u0432 \u0443, \u0438 \u043a\u043e\u044d\u0444\u0444\u0438\u0446\u0438\u0435\u043d\u0442\u043e\u0432 \u0441\u0443 \u043e\u0434\u0438\u043d\u0430\u043a\u043e\u0432\u044b\u0435 \u0440\u0430\u0437\u043c\u0435\u0440, \u0447\u0438\u0441\u043b\u043e \u043a\u043e\u044d\u0444\u0444\u0438\u0446\u0438\u0435\u043d\u0442\u043e\u0432 \u044d\u043d\u0438\u0433\u0440\u0435\u043a, \u043e\u0442\u0441\u0447\u0451\u0442\u044b \u0438 \u043a\u043e\u044d\u0444\u0444\u0438\u0446\u0438\u0435\u043d\u0442\u044b \u0444\u043b\u043e\u0430\u0442 \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u043e\u0435 \u0438\u043d\u0442 \u0440\u0430\u0437\u043c\u0435\u0440. \u0432\u043d\u0443\u0442\u0440\u0438 \u0430\u043a\u043a\u0443\u043c\u0443\u043b\u044f\u0442\u043e\u0440 \u0430\u043a\u043a \u043d\u043e\u043b\u044c, \u0432\u0445\u043e\u0434 \u0445 \u043d\u0443\u043b\u0435\u0432\u043e\u0439 \u043a\u043e\u043d\u0441\u0442\u0430\u043d\u0442\u0430 \u0437\u0430\u0434\u0430\u0442\u044c 1 \u0437\u0430\u0442\u0435\u043c \u0446\u0438\u043a\u043b \u0443\u043c\u043d\u043e\u0436\u0435\u043d\u0438\u0435 \u0441 \u043d\u0430\u043a\u043e\u043f\u043b\u0435\u043d\u0438\u0435\u043c \u0441\u0445 \u0438 \u0441 \u0446\u0438\u043a\u043b \u0443\u043c\u043d\u043e\u0436\u0435\u043d\u0438\u0435 \u0441 \u043d\u0430\u043a\u043e\u043f\u043b\u0435\u043d\u0438\u0435\u043c \u0441\u0443 \u0438 \u0443 \u0432 \u0430\u043a\u043a\u0443\u043c\u0443\u043b\u044f\u0442\u043e\u0440. \u0441\u0434\u0432\u0438\u0433\u0430\u0442\u044c \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u044b \u043c\u0430\u0441\u0441\u0438\u0432\u044b \u0445 \u0438 \u0443 \u043f\u0440\u044f\u043c\u043e\u0439 \u043f\u043e\u0440\u044f\u0434\u043e\u043a \u043e\u0442\u0441\u0447\u0451\u0442\u043e\u0432 \u043d\u0430 \u043e\u0434\u0438\u043d \u0442\u043e\u043b\u044c\u043a\u043e \u0438\u043d\u043a\u0440\u0435\u043c\u0435\u043d\u0442 \u0438\u043d\u0434\u0435\u043a\u0441\u0430 \u043f\u043b\u044e\u0441 \u043f\u043b\u044e\u0441, \u043d\u0430\u0447\u0430\u0442\u044c \u0438\u043d\u0434\u0435\u043a\u0441 \u043d\u043e\u043b\u044c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0432\u0440\u0435\u043c\u0435\u043d\u043d\u0430\u044f \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0430\u044f t1 t2 \u043e\u0431\u043c\u0435\u043d \u0441\u043e\u0445\u0440\u0430\u043d\u0438\u0442\u044c \u0430\u043a\u043a\u0443\u043c\u0443\u043b\u044f\u0442\u043e\u0440 \u043c\u0430\u0441\u0441\u0438\u0432 \u0432\u044b\u0445\u043e\u0434\u043e\u0432<\/strong><\/p>\n<p>\u041f\u043e \u0434\u0430\u043d\u043d\u043e\u043c\u0443 \u043f\u0440\u043e\u043c\u043f\u0442\u0443 \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439 \u043a\u043e\u0434, \u043f\u0440\u0438\u0447\u0451\u043c, +- \u043e\u0434\u0438\u043d\u0430\u043a\u043e\u0432\u044b\u0439 \u0434\u043b\u044f \u043b\u044e\u0431\u044b\u0445 \u043c\u043e\u0434\u0435\u043b\u0435\u0439. <\/p>\n<pre><code class=\"cpp\">void calculate(int n, float* outputs, float* x, float* cx, int nx, float* y, float* cy, int ny) {    for (int i = 0; i &lt; n; i++) {        float acc = 0.0f;                \/\/ \u0412\u0445\u043e\u0434\u043d\u043e\u0439 \u043e\u0442\u0441\u0447\u0435\u0442 x[0] \u043a\u043e\u043d\u0441\u0442\u0430\u043d\u0442\u0430 1 (\u0441\u043e\u0433\u043b\u0430\u0441\u043d\u043e \u0437\u0430\u043f\u0440\u043e\u0441\u0443)        x[0] = 1.0f;        \/\/ \u0426\u0438\u043a\u043b \u0443\u043c\u043d\u043e\u0436\u0435\u043d\u0438\u044f \u0441 \u043d\u0430\u043a\u043e\u043f\u043b\u0435\u043d\u0438\u0435\u043c \u0434\u043b\u044f \u0432\u0445\u043e\u0434\u043e\u0432 (\u0441\u0445 \u0438 \u0445)        for (int j = 0; j &lt; nx; j++) {            acc += cx[j] * x[j];        }        \/\/ \u0426\u0438\u043a\u043b \u0443\u043c\u043d\u043e\u0436\u0435\u043d\u0438\u044f \u0441 \u043d\u0430\u043a\u043e\u043f\u043b\u0435\u043d\u0438\u0435\u043c \u0434\u043b\u044f \u0432\u044b\u0445\u043e\u0434\u043e\u0432 (\u0441\u0443 \u0438 \u0443)        \/\/ \u041e\u0431\u044b\u0447\u043d\u043e \u0443[0] \u043d\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0432 \u0441\u0443\u043c\u043c\u0435 \u0434\u043b\u044f \u0440\u0430\u0441\u0447\u0435\u0442\u0430 \u0442\u0435\u043a\u0443\u0449\u0435\u0433\u043e \u0443[0],         \/\/ \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u043c \u0441 1, \u0435\u0441\u043b\u0438 \u0441\u0443[0] \u043d\u0435 \u043f\u0440\u0435\u0434\u0443\u0441\u043c\u043e\u0442\u0440\u0435\u043d \u043a\u0430\u043a \u043e\u0431\u0440\u0430\u0442\u043d\u0430\u044f \u0441\u0432\u044f\u0437\u044c        for (int j = 1; j &lt; ny; j++) {            acc += cy[j] * y[j];        }        \/\/ \u0421\u043e\u0445\u0440\u0430\u043d\u044f\u0435\u043c \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442        outputs[i] = acc;        y[0] = acc;        \/\/ \u0421\u0434\u0432\u0438\u0433 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432 \u043c\u0430\u0441\u0441\u0438\u0432\u043e\u0432 \u0445 \u0438 \u0443 (\u043f\u0440\u044f\u043c\u043e\u0439 \u043f\u043e\u0440\u044f\u0434\u043e\u043a, \u0438\u043d\u043a\u0440\u0435\u043c\u0435\u043d\u0442 ++)        \/\/ \u0418\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c \u0432\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 t1, t2 \u0434\u043b\u044f \u043e\u0431\u043c\u0435\u043d\u0430 (\u0441\u0434\u0432\u0438\u0433\u0430)        float t1, t2;        \/\/ \u0421\u0434\u0432\u0438\u0433 X        t1 = x[0];        for (int j = 1; j &lt; nx; j++) {            t2 = x[j];            x[j] = t1;            t1 = t2;        }        \/\/ \u0421\u0434\u0432\u0438\u0433 Y        t1 = y[0];        for (int j = 1; j &lt; ny; j++) {            t2 = y[j];            y[j] = t1;            t1 = t2;        }    }}<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u041e\u0442\u043b\u0438\u0447\u043d\u044b\u0439 \u0444\u0438\u043b\u044c\u0442\u0440! \u041a\u0430\u043a \u0438 \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f &#8212; \u0443\u043c\u043d\u043e\u0436\u0435\u043d\u0438\u0435 \u0441 \u043d\u0430\u043a\u043e\u043f\u043b\u0435\u043d\u0438\u0435\u043c, \u0441\u0434\u0432\u0438\u0433 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432 \u043d\u0430 1 \u0442\u043e\u043b\u044c\u043a\u043e \u0441 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435\u043c \u0438\u043d\u043a\u0440\u0435\u043c\u0435\u043d\u0442\u0430 \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044f. \u041d\u0430 \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0430\u0445 DSP \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440\u043e\u0432 \u0435\u0441\u0442\u044c  \u043a\u043e\u043c\u0430\u043d\u0434\u044b, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442 \u043f\u043e\u0441\u0442-\u0438\u043d\u043a\u0440\u0435\u043c\u0435\u043d\u0442 \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044f. \u041f\u0440\u0438\u043c\u0435\u0440 \u043a\u043e\u0434\u0430 \u0430\u0441\u0441\u0435\u043c\u0431\u043b\u0435\u0440\u0430 \u0438 \u043f\u0440\u043e\u043c\u043f\u0442 \u0434\u043b\u044f \u044d\u0442\u043e\u0433\u043e:<\/p>\n<p><strong>\u0445\u043e\u0442\u0435\u0442\u044c \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u0441\u0434\u0432\u0438\u0433 \u043c\u0430\u0441\u0441\u0438\u0432\u043e\u0432 \u0425 \u0438 \u0423 \u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442 \u043a\u043e\u0434\u0430 \u0430\u0441\u0441\u0435\u043c\u0431\u043b\u0435\u0440 \u0434\u043b\u044f \u0422\u0435\u0445\u0430\u0441 \u0418\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u044b \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440 \u0441\u0435\u043c\u0435\u0439\u0441\u0442\u0432\u0430 \u04212000 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0439 \u043f\u043e\u0441\u0442-\u0438\u043d\u043a\u0440\u0435\u043c\u0435\u043d\u0442<\/strong><\/p>\n<pre><code class=\"assembly\">; \u041f\u0440\u0435\u0434\u043f\u043e\u043b\u043e\u0436\u0438\u043c:; XAR4 \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442 \u043d\u0430 \u043d\u0430\u0447\u0430\u043b\u043e \u043c\u0430\u0441\u0441\u0438\u0432\u0430 (X[0]); XAR5 \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442 \u043d\u0430 X[1]; AL \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u043a\u0430\u043a \u0432\u0440\u0435\u043c\u0435\u043d\u043d\u0430\u044f \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0430\u044f (T1); PH \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u043a\u0430\u043a \u0441\u0447\u0435\u0442\u0447\u0438\u043a (NX - 1)        MOVZ    AR6, @NX        ; \u0417\u0430\u0433\u0440\u0443\u0436\u0430\u0435\u043c NX        SUBB    XAR6, #1        ; \u041d\u0430\u043c \u043d\u0443\u0436\u043d\u043e NX-1 \u0438\u0442\u0435\u0440\u0430\u0446\u0438\u0439 \u0434\u043b\u044f \u0441\u0434\u0432\u0438\u0433\u0430        MOVZ    AR0, @AR6       ; \u041f\u0435\u0440\u0435\u043d\u043e\u0441\u0438\u043c \u0432 AR0 \u0434\u043b\u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u0432 BANZ        ; \u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u0435\u0439        MOVL    XAR4, #_X       ; \u0410\u0434\u0440\u0435\u0441 X[0]        MOVL    XAR5, #_X       ; \u0410\u0434\u0440\u0435\u0441 X[0]        ADDB    XAR5, #1        ; \u0422\u0435\u043f\u0435\u0440\u044c XAR5 \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442 \u043d\u0430 X[1]SHIFT_LOOP:        MOV     AL, *XAR4       ; T1 = X[i]        MOV     AH, *XAR5       ; \u0412\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0439 \u0431\u0443\u0444\u0435\u0440 \u0434\u043b\u044f \u043e\u0431\u043c\u0435\u043d\u0430 (T2)        MOV     *XAR4++, AH     ; X[i] = X[i+1], \u0438\u043d\u043a\u0440\u0435\u043c\u0435\u043d\u0442 \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044f i        MOV     *XAR5++, AL     ; X[i+1] = T1, \u0438\u043d\u043a\u0440\u0435\u043c\u0435\u043d\u0442 \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044f i+1                BANZ    SHIFT_LOOP, AR0-- ; \u0426\u0438\u043a\u043b, \u043f\u043e\u043a\u0430 AR0 \u043d\u0435 \u0441\u0442\u0430\u043d\u0435\u0442 0<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u0414\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u043d\u0435\u043f\u043b\u043e\u0445\u043e, \u043d\u043e \u0442\u0440\u0435\u0431\u0443\u0435\u0442 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438, \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u043e\u0441\u0442\u0430\u0432\u0438\u043c \u0437\u0430 \u043a\u0430\u0434\u0440\u043e\u043c. \u0427\u0442\u043e \u043a\u0430\u0441\u0430\u0435\u0442\u0441\u044f \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u0438 \u0442\u043e \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u043a\u043b\u0430\u0441\u0441\u0438\u0447\u0435\u0441\u043a\u043e\u0435 \u0440\u0435\u0448\u0435\u043d\u0438\u0435<\/p>\n<p><strong>\u0445\u043e\u0442\u0435\u0442\u044c \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u0430\u0441\u0441\u0435\u043c\u0431\u043b\u0435\u0440 \u043a\u043e\u0434 \u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442 \u0444\u0438\u043b\u044c\u0442\u0440 \u0434\u043b\u044f \u0422\u0435\u0445\u0430\u0441 \u0418\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u044b \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440 \u0441\u0435\u043c\u0435\u0439\u0441\u0442\u0432\u0430 \u04212000 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0439 \u0440\u044d\u043f \u0438 \u043c\u0430\u043a<\/strong><\/p>\n<pre><code class=\"assembly\">; \u041d\u0430 \u0432\u0445\u043e\u0434\u0435:; XAR4 - \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c \u043d\u0430 \u043c\u0430\u0441\u0441\u0438\u0432 \u0434\u0430\u043d\u043d\u044b\u0445 (X); XAR5 - \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c \u043d\u0430 \u043c\u0430\u0441\u0441\u0438\u0432 \u043a\u043e\u044d\u0444\u0444\u0438\u0446\u0438\u0435\u043d\u0442\u043e\u0432 (CX); PH   - \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u043a\u043e\u044d\u0444\u0444\u0438\u0446\u0438\u0435\u043d\u0442\u043e\u0432 (NX); ACC  - \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 (\u0430\u043a\u043a\u0443\u043c\u0443\u043b\u044f\u0442\u043e\u0440)        ZAPA                    ; \u041e\u0431\u043d\u0443\u043b\u0438\u0442\u044c ACC \u0438 P (\u0440\u0435\u0433\u0438\u0441\u0442\u0440 \u043f\u0440\u043e\u0438\u0437\u0432\u0435\u0434\u0435\u043d\u0438\u044f)        MOVZ    AR0, @NX        ; \u0417\u0430\u0433\u0440\u0443\u0437\u0438\u0442\u044c \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0438\u0442\u0435\u0440\u0430\u0446\u0438\u0439 (NX)        SUBB    XAR0, #1        ; RPT \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442 N+1 \u0440\u0430\u0437, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0432\u044b\u0447\u0438\u0442\u0430\u0435\u043c 1        ; --- \u0426\u0438\u043a\u043b \u0443\u043c\u043d\u043e\u0436\u0435\u043d\u0438\u044f \u0441 \u043d\u0430\u043a\u043e\u043f\u043b\u0435\u043d\u0438\u0435\u043c (MAC) ---        ; RPT \u043f\u043e\u0432\u0442\u043e\u0440\u044f\u0435\u0442 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0443\u044e \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u044e AR0 \u0440\u0430\u0437        ; *XAR4++ : \u0431\u0435\u0440\u0435\u0442 X[i], \u043f\u043e\u0441\u0442-\u0438\u043d\u043a\u0440\u0435\u043c\u0435\u043d\u0442 \u0430\u0434\u0440\u0435\u0441\u0430        ; *XAR5++ : \u0431\u0435\u0440\u0435\u0442 CX[i], \u043f\u043e\u0441\u0442-\u0438\u043d\u043a\u0440\u0435\u043c\u0435\u043d\u0442 \u0430\u0434\u0440\u0435\u0441\u0430        RPT     @AR0        MAC     *XAR4++, *XAR5++, ACC                ADDL    ACC, P          ; \u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0439 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u043f\u0440\u043e\u0438\u0437\u0432\u0435\u0434\u0435\u043d\u0438\u044f \u0432 ACC<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u0414\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u043f\u043e\u043f\u0440\u043e\u0441\u0438\u0442\u044c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043a\u043e\u043c\u0430\u043d\u0434\u044b RPT (\u0440\u044d\u043f) &#8212; \u043f\u043e\u0432\u0442\u043e\u0440\u0435\u043d\u0438\u0435 \u0437\u0430\u0434\u0430\u043d\u043d\u043e\u0433\u043e \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u0430 \u0440\u0430\u0437 \u0432 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0435 \u0438 MAC (\u043c\u0430\u043a) &#8212; \u0443\u043c\u043d\u043e\u0436\u0435\u043d\u0438\u0435 \u0441 \u043d\u0430\u043a\u043e\u043f\u043b\u0435\u043d\u0438\u0435\u043c. \u041f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u043d\u0430 \u0430\u0441\u0441\u0435\u043c\u0431\u043b\u0435\u0440\u0435 RPT-MAC \u043e\u0437\u043d\u0430\u0447\u0430\u0435\u0442 \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u044c \u044d\u0442\u0443 \u043a\u043e\u043c\u0430\u043d\u0434\u0443 \u0437\u0430\u0434\u0430\u043d\u043d\u043e\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0440\u0430\u0437, \u043e\u0447\u0435\u043d\u044c \u0443\u0434\u043e\u0431\u043d\u043e \u0434\u043b\u044f \u043f\u043e\u0432\u0442\u043e\u0440\u044f\u044e\u0449\u0438\u0445\u0441\u044f \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0439. <br \/>\u0414\u043b\u044f \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u0438 \u043f\u043e\u043f\u0440\u043e\u0441\u0438\u0442\u044c MACD. \u041e\u043f\u0442\u0438\u043c\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u0430\u044f \u0432\u0435\u0440\u0441\u0438\u044f<\/p>\n<p><strong>\u0445\u043e\u0442\u0435\u0442\u044c \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u0430\u0441\u0441\u0435\u043c\u0431\u043b\u0435\u0440 \u043a\u043e\u0434 \u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442 \u0444\u0438\u043b\u044c\u0442\u0440 \u0434\u043b\u044f \u0422\u0435\u0445\u0430\u0441 \u0418\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u044b \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440 \u0441\u0435\u043c\u0435\u0439\u0441\u0442\u0432\u0430 \u04212000 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0439 \u043a\u043e\u043c\u0430\u043d\u0434\u0443 \u041c\u0430\u043a\u0434\u043e\u043d\u0430\u043b\u044c\u0434\u0441 \u0432\u043c\u0435\u0441\u0442\u043e \u04221 \u04222<\/strong><\/p>\n<pre><code class=\"assembly\">; XAR4 \u2014 \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442 \u043d\u0430 \u041f\u041e\u0421\u041b\u0415\u0414\u041d\u0418\u0419 \u044d\u043b\u0435\u043c\u0435\u043d\u0442 \u043c\u0430\u0441\u0441\u0438\u0432\u0430 \u0434\u0430\u043d\u043d\u044b\u0445 X (X[NX-1]); XAR5 \u2014 \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442 \u043d\u0430 \u041f\u041e\u0421\u041b\u0415\u0414\u041d\u0418\u0419 \u044d\u043b\u0435\u043c\u0435\u043d\u0442 \u043c\u0430\u0441\u0441\u0438\u0432\u0430 \u043a\u043e\u044d\u0444\u0444\u0438\u0446\u0438\u0435\u043d\u0442\u043e\u0432 CX (CX[NX-1]); ACC  \u2014 \u0430\u043a\u043a\u0443\u043c\u0443\u043b\u044f\u0442\u043e\u0440 (\u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442); \u041e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u043e: \u043c\u0430\u0441\u0441\u0438\u0432\u044b \u0434\u043e\u043b\u0436\u043d\u044b \u0438\u0434\u0442\u0438 \"\u0437\u0430\u0434\u043e\u043c \u043d\u0430\u043f\u0435\u0440\u0435\u0434\" \u0434\u043b\u044f \u043b\u043e\u0433\u0438\u043a\u0438 \u0441\u0434\u0432\u0438\u0433\u0430 MACD        SETC    SXM             ; \u0412\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u0437\u043d\u0430\u043a\u043e\u0432\u043e\u0435 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u0435        ZAPA                    ; \u041e\u0431\u043d\u0443\u043b\u0438\u0442\u044c ACC \u0438 P        MOVZ    AR0, @NX        ; \u0417\u0430\u0433\u0440\u0443\u0436\u0430\u0435\u043c \u0447\u0438\u0441\u043b\u043e \u043a\u043e\u044d\u0444\u0444\u0438\u0446\u0438\u0435\u043d\u0442\u043e\u0432        SUBB    XAR0, #1        ; \u041a\u043e\u0440\u0440\u0435\u043a\u0442\u0438\u0440\u043e\u0432\u043a\u0430 \u0434\u043b\u044f RPT (\u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442 N+1 \u0440\u0430\u0437)        ; --- \u0413\u043b\u0430\u0432\u043d\u044b\u0439 \u0446\u0438\u043a\u043b \u0444\u0438\u043b\u044c\u0442\u0440\u0430\u0446\u0438\u0438 ---        ; MACD \u0434\u0435\u043b\u0430\u0435\u0442: P = *XAR4 * *XAR5, ACC = ACC + P,         ; \u0437\u0430\u0442\u0435\u043c \u043a\u043e\u043f\u0438\u0440\u0443\u0435\u0442: *(XAR4+1) = *XAR4 (\u0441\u0434\u0432\u0438\u0433!)        ; \u0438 \u0434\u0435\u043b\u0430\u0435\u0442 \u0434\u0435\u043a\u0440\u0435\u043c\u0435\u043d\u0442: XAR4--, XAR5-- (\u043f\u043e\u0441\u0442-\u0434\u0435\u043a\u0440\u0435\u043c\u0435\u043d\u0442)                RPT     @AR0        MACD    ACC, *XAR4--, *XAR5--        ADDL    ACC, P          ; \u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0444\u0438\u043d\u0430\u043b\u044c\u043d\u043e\u0435 \u043f\u0440\u043e\u0438\u0437\u0432\u0435\u0434\u0435\u043d\u0438\u0435 \u0432 ACC<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u041f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u043f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u0432\u0430\u0440\u0438\u0430\u043d\u0442. \u041d\u043e \u044d\u0442\u043e \u0443\u0436\u0435 \u0434\u0440\u0443\u0433\u0430\u044f \u0438\u0441\u0442\u043e\u0440\u0438\u044f, \u043a\u0430\u043a\u043e\u0439 \u043a\u043e\u043c\u0430\u043d\u0434\u043e\u0439 \u043e\u0431\u043d\u0443\u043b\u0438\u0442\u044c \u0430\u043a\u043a\u0443\u043c\u0443\u043b\u044f\u0442\u043e\u0440. <\/p>\n<p>\u0421\u043e\u0437\u0434\u0430\u0451\u043c \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u0447\u043d\u0438\u043a<br \/><strong>\u0445\u043e\u0442\u0435\u0442\u044c \u043a\u0430\u043b\u044c\u043a\u044e\u043b\u044f\u0439\u0442 \u0430\u0448 \u0441 \u043f\u0440\u043e\u0442\u043e\u0442\u0438\u043f\u043e\u043c \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u043a\u0430\u043b\u044c\u043a, \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442 \u0438 \u043a\u0438\u0441\u043b\u043e\u0440\u043e\u0434 \u043d\u043e \u0431\u0443\u0434\u044c \u043e\u0441\u0442\u043e\u0440\u043e\u0436\u0435\u043d \u0441 \u0442\u0438\u043f\u0430\u043c\u0438 \u0438 \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044f\u043c\u0438<\/strong><\/p>\n<pre><code class=\"cpp\">\/** * @file calculate.h * @brief \u0420\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u0446\u0438\u0444\u0440\u043e\u0432\u043e\u0433\u043e \u0444\u0438\u043b\u044c\u0442\u0440\u0430 (\u041f\u0440\u044f\u043c\u0430\u044f \u0444\u043e\u0440\u043c\u0430 I). *\/#ifndef CALCULATE_H#define CALCULATE_H\/** * @brief \u0412\u044b\u0447\u0438\u0441\u043b\u044f\u0435\u0442 \u0432\u044b\u0445\u043e\u0434\u043d\u044b\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0446\u0438\u0444\u0440\u043e\u0432\u043e\u0433\u043e \u0444\u0438\u043b\u044c\u0442\u0440\u0430. *  * \u0424\u0443\u043d\u043a\u0446\u0438\u044f \u043f\u0440\u043e\u0445\u043e\u0434\u0438\u0442 \u0446\u0438\u043a\u043b\u043e\u043c \u043f\u043e n \u043e\u0442\u0441\u0447\u0435\u0442\u0430\u043c, \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u044f \u0443\u043c\u043d\u043e\u0436\u0435\u043d\u0438\u0435 \u0441 \u043d\u0430\u043a\u043e\u043f\u043b\u0435\u043d\u0438\u0435\u043c (MAC) * \u0438 \u043e\u0431\u043d\u043e\u0432\u043b\u044f\u044f \u043b\u0438\u043d\u0438\u0438 \u0437\u0430\u0434\u0435\u0440\u0436\u043a\u0438 x \u0438 y. *  * @param n        [in]  \u041a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0438\u0442\u0435\u0440\u0430\u0446\u0438\u0439 (\u043e\u0442\u0441\u0447\u0435\u0442\u043e\u0432). * @param outputs  [out] \u041c\u0430\u0441\u0441\u0438\u0432 \u0434\u043b\u044f \u0437\u0430\u043f\u0438\u0441\u0438 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u043e\u0432 (\u0440\u0430\u0437\u043c\u0435\u0440 n). * @param x        [in,out] \u041c\u0430\u0441\u0441\u0438\u0432 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0438\u0445 \u0432\u0445\u043e\u0434\u043d\u044b\u0445 \u043e\u0442\u0441\u0447\u0435\u0442\u043e\u0432 (\u0440\u0430\u0437\u043c\u0435\u0440 nx). * @param cx       [in]  \u041c\u0430\u0441\u0441\u0438\u0432 \u043a\u043e\u044d\u0444\u0444\u0438\u0446\u0438\u0435\u043d\u0442\u043e\u0432 \u0434\u043b\u044f \u0432\u0445\u043e\u0434\u043e\u0432 (\u0440\u0430\u0437\u043c\u0435\u0440 nx). * @param nx       [in]  \u041a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0432\u0445\u043e\u0434\u043d\u044b\u0445 \u043a\u043e\u044d\u0444\u0444\u0438\u0446\u0438\u0435\u043d\u0442\u043e\u0432. * @param y        [in,out] \u041c\u0430\u0441\u0441\u0438\u0432 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0438\u0445 \u0432\u044b\u0445\u043e\u0434\u043d\u044b\u0445 \u043e\u0442\u0441\u0447\u0435\u0442\u043e\u0432 (\u0440\u0430\u0437\u043c\u0435\u0440 ny). * @param cy       [in]  \u041c\u0430\u0441\u0441\u0438\u0432 \u043a\u043e\u044d\u0444\u0444\u0438\u0446\u0438\u0435\u043d\u0442\u043e\u0432 \u043e\u0431\u0440\u0430\u0442\u043d\u043e\u0439 \u0441\u0432\u044f\u0437\u0438 (\u0440\u0430\u0437\u043c\u0435\u0440 ny). * @param ny       [in]  \u041a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0432\u044b\u0445\u043e\u0434\u043d\u044b\u0445 \u043a\u043e\u044d\u0444\u0444\u0438\u0446\u0438\u0435\u043d\u0442\u043e\u0432. *\/void calculate(int n, float* outputs, float* x, float* cx, int nx, float* y, float* cy, int ny);#endif \/\/ CALCULATE_H<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u041b\u044e\u0431\u0435\u0437\u043d\u043e \u043f\u043e\u0437\u0430\u0431\u043e\u0442\u0438\u043b\u0441\u044f \u0441\u0434\u0435\u043b\u0430\u0432 Doxygen \u0444\u043e\u0440\u043c\u0430\u0442 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u044f, \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b\u0439 \u043a\u0430\u043a \u0432\u043e\u0437\u0434\u0443\u0445 (\u043a\u0438\u0441\u043b\u043e\u0440\u043e\u0434)<\/p>\n<\/div>\n<\/details>\n<p>\u0414\u0430\u043b\u0435\u0435 \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0430\u0435\u043c \u0441 \u043d\u043e\u0432\u044b\u043c \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u043d\u044b\u043c \u043e\u043a\u043d\u043e\u043c. \u041f\u0440\u043e\u0431\u0443\u0435\u043c \u0441\u043e\u043f\u0440\u044f\u0436\u0435\u043d\u0438\u0435 \u0431\u0435\u0437 \u0437\u0430\u043f\u043e\u043c\u0438\u043d\u0430\u043d\u0438\u044f \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0435\u0433\u043e, \u043e\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u043c \u043f\u0440\u043e\u0442\u043e\u0442\u0438\u043f \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u043f\u0440\u043e\u043c\u043f\u0442\u043e\u043c \u0432\u043c\u0435\u0441\u0442\u043e \u043a\u043e\u0434\u0430. \u0420\u0430\u0441\u0441\u0447\u0438\u0442\u044b\u0432\u0430\u0435\u043c \u043a\u043e\u044d\u0444\u0444\u0438\u0446\u0438\u0435\u043d\u0442\u044b \u0446\u0438\u0444\u0440\u043e\u0432\u043e\u0433\u043e \u0444\u0438\u043b\u044c\u0442\u0440\u0430 &#8212; \u043d\u0435\u0440\u0435\u043a\u0443\u0440\u0440\u0435\u043d\u0442\u043d\u0430\u044f \u0447\u0430\u0441\u0442\u044c \u0441\u043a\u043e\u043b\u044c\u0437\u044f\u0449\u0435\u0435 \u0441\u0440\u0435\u0434\u043d\u0435\u0435, \u0440\u0435\u043a\u0443\u0440\u0440\u0435\u043d\u0442\u043d\u0430\u044f &#8212; \u043a\u043e\u043c\u043f\u043b\u0435\u043a\u0441\u043d\u043e \u0441\u043e\u043f\u0440\u044f\u0436\u0451\u043d\u043d\u044b\u0435 (\u043a\u043e\u043b\u0435\u0431\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0435) \u043f\u043e\u043b\u044e\u0441\u0430, \u0440\u0430\u0441\u043f\u043e\u043b\u043e\u0436\u0435\u043d\u043d\u044b\u0435 \u0441\u043b\u0443\u0447\u0430\u0439\u043d\u044b\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c \u043d\u0430 \u043a\u043e\u043c\u043f\u043b\u0435\u043a\u0441\u043d\u043e\u0439 \u043e\u043a\u0440\u0443\u0436\u043d\u043e\u0441\u0442\u0438.<\/p>\n<details class=\"spoiler\">\n<summary>\u0413\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u044f \u043a\u043e\u044d\u0444\u0444\u0438\u0446\u0438\u0435\u043d\u0442\u043e\u0432 \u0446\u0438\u0444\u0440\u043e\u0432\u043e\u0433\u043e \u0444\u0438\u043b\u044c\u0442\u0440\u0430 \u0438 \u0433\u043b\u0430\u0432\u043d\u0430\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u044f<\/summary>\n<div class=\"spoiler__content\">\n<p><strong>\u0425\u043e\u0442\u0435\u0442\u044c \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0443 \u0447\u0438\u0441\u0442\u044b\u0439 \u0421 \u0432\u044b\u0437\u043e\u0432\u0438 \u0433\u043e\u0442\u043e\u0432\u0430\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u044f \u043a\u0430\u043b\u044c\u043a\u044e\u043b\u044f\u0439\u0442  \u043f\u0440\u043e\u0442\u043e\u0442\u0438\u043f \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u044b \u0432\u0445\u043e\u0434 N, \u043c\u0430\u0441\u0441\u0438\u0432 \u0432\u044b\u0445\u043e\u0434\u043e\u0432 \u0432\u044b\u0445 \u0440\u0430\u0437\u043c\u0435\u0440 N, \u043c\u0430\u0441\u0441\u0438\u0432 \u043e\u0442\u0441\u0447\u0451\u0442\u043e\u0432 \u0425, \u0438 \u043a\u043e\u044d\u0444\u0444\u0438\u0446\u0438\u0435\u043d\u0442\u043e\u0432 \u0421\u0425 \u043e\u0434\u0438\u043d\u0430\u043a\u043e\u0432\u044b\u0435 \u0440\u0430\u0437\u043c\u0435\u0440, \u0447\u0438\u0441\u043b\u043e \u043a\u043e\u044d\u0444\u0444\u0438\u0446\u0438\u0435\u043d\u0442\u043e\u0432 \u042d\u043d\u0418\u043a\u0441, \u043c\u0430\u0441\u0441\u0438\u0432 \u043e\u0442\u0441\u0447\u0451\u0442\u043e\u0432 \u0423, \u0438 \u043a\u043e\u044d\u0444\u0444\u0438\u0446\u0438\u0435\u043d\u0442\u043e\u0432 \u0421\u0423 \u043e\u0434\u0438\u043d\u0430\u043a\u043e\u0432\u044b\u0435 \u0440\u0430\u0437\u043c\u0435\u0440, \u0447\u0438\u0441\u043b\u043e \u043a\u043e\u044d\u0444\u0444\u0438\u0446\u0438\u0435\u043d\u0442\u043e\u0432 \u042d\u043d\u0418\u0433\u0440\u0435\u043a, \u043e\u0442\u0441\u0447\u0451\u0442\u044b \u043a\u043e\u044d\u0444\u0444\u0438\u0446\u0438\u0435\u043d\u0442\u044b \u0444\u043b\u043e\u0430\u0442 \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u043e\u0435 \u0438\u043d\u0442, \u0438\u043d\u043a\u043b\u0443\u0434 \u043a\u0430\u043b\u044c\u043a\u044e\u043b\u044f\u0439\u0442 \u0430\u0448 \u0431\u0435\u0437 \u0437\u0430\u0433\u043b\u0443\u0448\u0435\u043a. \u0421\u0434\u0435\u043b\u0430\u0442\u044c \u0444\u043e\u0440\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u043a\u043e\u044d\u0444\u0444\u0438\u0446\u0438\u0435\u043d\u0442\u043e\u0432 \u0421\u0425 \u0438 \u0421\u0423 \u0442\u0430\u043a \u0447\u0442\u043e \u0421\u0423 \u0438\u043d\u0434\u0435\u043a\u0441 \u043d\u043e\u043b\u044c \u0432\u0441\u0435\u0433\u0434\u0430 \u043d\u043e\u043b\u044c. \u041a\u043e\u044d\u0444\u0444\u0438\u0446\u0438\u0435\u043d\u0442\u044b \u0421\u0425 \u043e\u0434\u0438\u043d\u0430\u043a\u043e\u0432\u043e \u0435\u0434\u0438\u043d\u0438\u0446\u0430 \u0434\u0435\u043b\u0451\u043d\u043d\u0430\u044f \u043d\u0430 \u042d\u043d\u0418\u043a\u0441 \u0440\u0430\u0437\u043c\u0435\u0440. \u041a\u043e\u044d\u0444\u0444\u0438\u0446\u0438\u0435\u043d\u0442\u044b \u0421\u0423 \u0444\u0443\u043d\u043a\u0446\u0438\u044f \u0440\u0430\u043d\u0434\u043e\u043c \u0432\u043d\u0443\u0442\u0440\u0438 \u0435\u0434\u0438\u043d\u0438\u0447\u043d\u043e\u0439 \u043a\u043e\u043c\u043f\u043b\u0435\u043a\u0441\u043d\u0430\u044f \u043e\u043a\u0440\u0443\u0436\u043d\u043e\u0441\u0442\u044c \u0443\u0441\u0442\u043e\u0439\u0447\u0438\u0432\u043e\u0441\u0442\u044c \u0443\u0447\u0442\u0438, \u0430\u043b\u044c\u0444\u0430 \u0430\u043c\u043f\u043b\u0438\u0442\u0443\u0434\u0430 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u043f\u043e \u0440\u0430\u0437\u043c\u0435\u0440\u0443 \u042d\u043d\u0418\u0433\u0440\u0435\u043a. \u0425\u0430\u0440\u0434\u043a\u043e\u0434 \u041f\u0438. \u041e\u0431\u043d\u0443\u043b\u0438 \u043c\u0430\u0441\u0441\u0438\u0432\u044b \u0425 \u0438 \u0423.  \u041c\u0430\u0441\u0441\u0438\u0432\u044b \u0441\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u043c\u0430\u043a\u0440\u043e\u0441\u044b \u042d\u043d\u0418\u043a\u0441 5 \u042d\u043d\u0418\u0433\u0440\u0435\u043a 7 \u042d\u043d 50. \u0414\u0430\u0439 \u0432\u044b\u0432\u043e\u0434 CSV \u0444\u0430\u0439\u043b \u0438 \u043d\u0430 \u044d\u043a\u0440\u0430\u043d \u0441\u043d\u0430\u0447\u0430\u043b\u0430 \u043a\u043e\u044d\u0444\u0444\u0438\u0446\u0438\u0435\u043d\u0442\u044b \u0421\u0425 \u0421\u0423 \u043f\u043e\u0442\u043e\u043c \u043e\u0442\u0441\u0447\u0451\u0442\u044b \u0432\u044b\u0445 \u042d\u043d \u0441 \u0438\u043d\u0434\u0435\u043a\u0441. \u0412\u043d\u0438\u043c\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u0432\u044b\u0437\u043e\u0432 \u043a\u0430\u043b\u044c\u043a\u044e\u043b\u044f\u0439\u0442 \u0447\u0438\u0441\u043b\u043e \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u043e\u0432 \u0442\u0438\u043f\u044b \u0438 \u043c\u0430\u0441\u0441\u0438\u0432\u044b \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c.<\/strong><\/p>\n<p>\u0412\u044b\u0432\u043e\u0434 <\/p>\n<pre><code class=\"cpp\">#include &lt;stdio.h&gt;#include &lt;stdlib.h&gt;#include &lt;math.h&gt;#include &lt;time.h&gt;#include \"calculate.h\"#define NX 5#define NY 7#define N  50#define PI 3.14159265358979323846int main() {    \/\/ \u0421\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u043c\u0430\u0441\u0441\u0438\u0432\u044b    float out[N];    float x[NX] = {0};    float cx[NX];    float y[NY] = {0};    float cy[NY];    srand((unsigned int)time(NULL));    \/\/ 1. \u0424\u043e\u0440\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 CX: 1\/NX    for (int i = 0; i &lt; NX; i++) {        cx[i] = 1.0f \/ NX;    }    \/\/ 2. \u0424\u043e\u0440\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 CY: \u0443\u0441\u0442\u043e\u0439\u0447\u0438\u0432\u044b\u0435 \u043a\u043e\u044d\u0444\u0444\u0438\u0446\u0438\u0435\u043d\u0442\u044b    \/\/ CY[0] \u0432\u0441\u0435\u0433\u0434\u0430 0 \u043f\u043e \u0443\u0441\u043b\u043e\u0432\u0438\u044e    cy[0] = 0.0f;    \/\/ \u0413\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u0435\u043c \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u0435 \u043a\u0430\u043a \u043c\u0430\u043b\u044b\u0435 \u0441\u043b\u0443\u0447\u0430\u0439\u043d\u044b\u0435 \u0432\u0435\u043b\u0438\u0447\u0438\u043d\u044b \u0434\u043b\u044f \u0443\u0441\u0442\u043e\u0439\u0447\u0438\u0432\u043e\u0441\u0442\u0438    \/\/ (\u0421\u0443\u043c\u043c\u0430 \u043c\u043e\u0434\u0443\u043b\u0435\u0439 CY &lt; 1 \u2014 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e\u0435 \u0443\u0441\u043b\u043e\u0432\u0438\u0435 \u0443\u0441\u0442\u043e\u0439\u0447\u0438\u0432\u043e\u0441\u0442\u0438)    for (int i = 1; i &lt; NY; i++) {        float alpha = (float)rand() \/ RAND_MAX; \/\/ \u0430\u043c\u043f\u043b\u0438\u0442\u0443\u0434\u0430 &lt; 1        float phase = (float)rand() \/ RAND_MAX * 2.0f * PI;        \/\/ \u0411\u0435\u0440\u0435\u043c \u043f\u0440\u043e\u0435\u043a\u0446\u0438\u044e \u043d\u0430 \u0432\u0435\u0449\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u0443\u044e \u043e\u0441\u044c \u0438 \u043d\u043e\u0440\u043c\u0438\u0440\u0443\u0435\u043c, \u0447\u0442\u043e\u0431\u044b \u0441\u0438\u0441\u0442\u0435\u043c\u0430 \u043d\u0435 \"\u0440\u0430\u0437\u043b\u0435\u0442\u0435\u043b\u0430\u0441\u044c\"        cy[i] = (alpha * cosf(phase)) \/ NY;     }    \/\/ 3. \u0412\u044b\u0437\u043e\u0432 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 calculate    \/\/ \u041f\u0440\u043e\u0442\u043e\u0442\u0438\u043f: void calculate(int n, float *out, int nx, float *x, float *cx, int ny, float *y, float *cy);    calculate(N, out, x, cx, NX, y, cy, NY);    \/\/ 4. \u0412\u044b\u0432\u043e\u0434 \u043d\u0430 \u044d\u043a\u0440\u0430\u043d    printf(\"Coefficients CX:\\n\");    for (int i = 0; i &lt; NX; i++) printf(\"%.4f \", cx[i]);        printf(\"\\n\\nCoefficients CY:\\n\");    for (int i = 0; i &lt; NY; i++) printf(\"%.4f \", cy[i]);    printf(\"\\n\\nResults (Index, Value):\\n\");    for (int i = 0; i &lt; N; i++) {        printf(\"%d, %.6f\\n\", i, out[i]);    }    \/\/ 5. \u0412\u044b\u0432\u043e\u0434 \u0432 CSV \u0444\u0430\u0439\u043b    FILE *f = fopen(\"output.csv\", \"w\");    if (f) {        fprintf(f, \"Type,Index,Value\\n\");        for (int i = 0; i &lt; NX; i++) fprintf(f, \"CX,%d,%.6f\\n\", i, cx[i]);        for (int i = 0; i &lt; NY; i++) fprintf(f, \"CY,%d,%.6f\\n\", i, cy[i]);        for (int i = 0; i &lt; N; i++)  fprintf(f, \"OUT,%d,%.6f\\n\", i, out[i]);        fclose(f);        printf(\"\\nData saved to output.csv\\n\");    }    return 0;}<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u0421\u043e\u0437\u0434\u0430\u0451\u043c \u0444\u0430\u0439\u043b Main.c \u0438 \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0435\u043c<\/p>\n<\/div>\n<\/details>\n<p>\u041f\u043e\u0441\u043b\u0435 \u0447\u0435\u0433\u043e \u043a\u043e\u043d\u0435\u0447\u043d\u043e \u0436\u0435 \u043c\u044b \u043d\u0435 \u0431\u0443\u0434\u0435\u043c \u0434\u043e\u043b\u0433\u043e \u0434\u0443\u043c\u0430\u0442\u044c \u043a\u0430\u043a \u0441\u043e\u0437\u0434\u0430\u0442\u044c Makefile \u0434\u043b\u044f gcc<\/p>\n<details class=\"spoiler\">\n<summary>Makefile<\/summary>\n<div class=\"spoiler__content\">\n<p><strong>\u0425\u043e\u0442\u0435\u0442\u044c Makefile \u0434\u043b\u044f \u0430\u043d\u0442\u0438\u043b\u043e\u043f\u044b \u0430 \u0442\u0430\u043a\u0436\u0435 \u0421\u0438 \u043d\u0435 \u0445\u0443\u0436\u0435 2011 \u0433\u043e\u0434\u0430, \u0441\u043a\u0430\u043d\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0432\u0441\u0435 \u0444\u0430\u0439\u043b\u044b \u0441 \u0438 \u043a\u043e\u043c\u043f\u0438\u043b\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0432 \u043e\u0443\u0442 \u0438\u0441\u043f\u043e\u043b\u043d\u044f\u0435\u043c\u044b\u0439 \u0430 \u0442\u0430\u043a\u0436\u0435 \u043c\u0430\u0442\u0435\u043c\u0430\u0442\u0438\u043a\u0430 \u043b\u0438\u0431\u0430<\/strong><\/p>\n<pre><code class=\"cmake\"># \u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440\u0430CC = gccCFLAGS = -Wall -Wextra -std=c11 -O2LDFLAGS = -lm# \u0418\u043c\u044f \u0432\u044b\u0445\u043e\u0434\u043d\u043e\u0433\u043e \u0444\u0430\u0439\u043b\u0430TARGET = out# \u0410\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u043f\u043e\u0438\u0441\u043a \u0432\u0441\u0435\u0445 .c \u0444\u0430\u0439\u043b\u043e\u0432 \u0432 \u0442\u0435\u043a\u0443\u0449\u0435\u0439 \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u0438SRCS = $(wildcard *.c)# \u041f\u0440\u0435\u0432\u0440\u0430\u0449\u0435\u043d\u0438\u0435 \u0441\u043f\u0438\u0441\u043a\u0430 .c \u0432 \u0441\u043f\u0438\u0441\u043e\u043a .oOBJS = $(SRCS:.c=.o)# \u0413\u043b\u0430\u0432\u043d\u0430\u044f \u0446\u0435\u043b\u044call: $(TARGET)# \u0421\u0431\u043e\u0440\u043a\u0430 \u0438\u0441\u043f\u043e\u043b\u043d\u044f\u0435\u043c\u043e\u0433\u043e \u0444\u0430\u0439\u043b\u0430$(TARGET): $(OBJS)        $(CC) $(OBJS) -o $(TARGET) $(LDFLAGS)# \u041f\u0440\u0430\u0432\u0438\u043b\u043e \u0434\u043b\u044f \u043e\u0431\u044a\u0435\u043a\u0442\u043d\u044b\u0445 \u0444\u0430\u0439\u043b\u043e\u0432%.o: %.c        $(CC) $(CFLAGS) -c $&lt; -o $@# \u041e\u0447\u0438\u0441\u0442\u043a\u0430clean:        rm -f $(OBJS) $(TARGET).PHONY: all clean<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u043c make, \u0432\u0438\u0434\u0438\u043c<br \/>gcc -Wall -Wextra -std=c11 -O2 -c calculate.c -o calculate.o <br \/>gcc -Wall -Wextra -std=c11 -O2 -c Main.c -o Main.o <br \/>gcc calculate.o Main.o -o out -lm<br \/>\u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u043c \u0438\u0441\u043f\u043e\u043b\u043d\u044f\u0435\u043c\u044b\u0439 \u0444\u0430\u0439\u043b .\/out<\/p>\n<details class=\"spoiler\">\n<summary>\u0412\u044b\u0432\u043e\u0434 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b<\/summary>\n<div class=\"spoiler__content\">\n<p>Type,Index,Value <br \/>CX,0,0.200000 <br \/>CX,1,0.200000 <br \/>CX,2,0.200000 <br \/>CX,3,0.200000 <br \/>CX,4,0.200000 <br \/>CY,0,0.000000 <br \/>CY,1,0.049448 <br \/>CY,2,-0.008871 <br \/>CY,3,0.092645 <br \/>CY,4,0.083334 <br \/>CY,5,-0.053389 <br \/>CY,6,-0.077179 <br \/>OUT,0,0.200000 <br \/>OUT,1,0.409890 <br \/>OUT,2,0.618494 <br \/>OUT,3,0.845476 <br \/>OUT,4,1.090962 <br \/>OUT,5,1.127226 <br \/>OUT,6,1.138613 <br \/>OUT,7,1.153176 <br \/>OUT,8,1.149394 <br \/>OUT,9,1.122531 <br \/>OUT,10,1.102652 <br \/>OUT,11,1.099363 <br \/>OUT,12,1.094917 <br \/>OUT,13,1.089723 <br \/>OUT,14,1.089271 <br \/>OUT,15,1.091743<\/p>\n<p>  &#8230;.<\/p>\n<\/div>\n<\/details>\n<\/div>\n<\/details>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c \u043f\u0440\u0438\u0441\u0442\u0443\u043f\u0438\u043c \u043a \u0432\u0438\u0437\u0443\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u043e\u0432 \u043d\u0430\u0448\u0435\u0433\u043e csv. \u0422\u0430\u043a\u0436\u0435 \u043e\u0447\u0438\u0449\u0430\u0435\u043c \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442 \u0434\u043b\u044f \u0441\u0442\u0430\u0440\u0442\u0430 \u0441 \u043d\u0443\u043b\u044f<\/p>\n<details class=\"spoiler\">\n<summary>\u0412\u0438\u0437\u0443\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440 \u041f\u0438\u0442\u043e\u043d<\/summary>\n<div class=\"spoiler__content\">\n<p><strong>\u0445\u043e\u0442\u0435\u0442\u044c \u043f\u0438\u0442\u043e\u043d \u0432\u0438\u0437\u0443\u0430\u043b\u0438\u0437\u0438\u0440\u0443\u0439 \u043a\u043e\u043c\u043f\u043b\u0435\u043a\u0441\u043d\u0430\u044f \u043f\u043b\u043e\u0441\u043a\u043e\u0441\u0442\u044c \u0435\u0441\u043b\u0438 \u043a\u043e\u044d\u0444\u0444\u0438\u0446\u0438\u0435\u043d\u0442\u044b \u043e\u0442\u0441\u0447\u0451\u0442\u043e\u0432 \u0432\u0445\u043e\u0434\u0430 X \u043a\u0430\u043a CX \u0430 \u0432\u044b\u0445\u043e\u0434\u043e\u0432 Y \u043a\u0430\u043a \u0421\u0423 \u043f\u043e\u043b\u044f \u0430 \u043d\u0430 \u0433\u0440\u0430\u0444\u0438\u043a\u0435 \u043e\u0442 \u043e\u0442\u0441\u0447\u0451\u0442\u043e\u0432 \u0440\u0430\u0437\u043c\u0435\u0441\u0442\u0438 \u043f\u043e\u043b\u0435 OUT. \u0427\u0438\u0442\u0430\u0439 csv \u0444\u043e\u0440\u043c\u0430\u0442 \u0442\u0438\u043f CX \u0438\u043b\u0438 CY \u0438\u043b\u0438 OUT ,index,value. \u0418\u043d\u0434\u0435\u043a\u0441 \u043a\u043e\u044d\u0444\u0444\u0438\u0446\u0438\u0435\u043d\u0442\u043e\u0432 \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u044b\u0439 \u0435\u0441\u0442\u044c \u043f\u043e\u0440\u044f\u0434\u043e\u043a \u0444\u0438\u043b\u044c\u0442\u0440\u0430. \u041f\u0435\u0440\u0435\u0441\u0447\u0438\u0442\u0430\u0442\u044c \u043a\u043e\u044d\u0444\u0444\u0438\u0446\u0438\u0435\u043d\u0442\u044b \u0432 \u043d\u0443\u043b\u0438 \u0438 \u043f\u043e\u043b\u044e\u0441\u0430 \u0434\u043b\u044f \u0441\u0442\u0440\u043e\u0438\u0442\u044c \u0433\u0440\u0430\u0444\u0438\u043a \u043a\u043e\u043c\u043f\u043b\u0435\u043a\u0441\u043d\u0430\u044f \u043f\u043b\u043e\u0441\u043a\u043e\u0441\u0442\u044c \u0438 \u0435\u0434\u0438\u043d\u0438\u0447\u043d\u0430\u044f \u043e\u043a\u0440\u0443\u0436\u043d\u043e\u0441\u0442\u044c \u0441\u043f\u0440\u0430\u0432\u0430 \u043f\u043e\u043b\u043e\u0432\u0438\u043d\u0430 \u0441\u043b\u0435\u0432\u0430 \u043f\u043e\u043b\u043e\u0432\u0438\u043d\u0430 \u0433\u0440\u0430\u0444\u0438\u043a \u043e\u0442\u0441\u0447\u0451\u0442\u043e\u0432 \u041e\u0423\u0422 \u043e\u0442 \u0438\u043d\u0434\u0435\u043a\u0441\u0430. \u043c\u0430\u0442\u043f\u043b\u043e\u0442\u043b\u0438\u0431 \u0431\u0435\u0437 \u043f\u0430\u043d\u0434\u0430\u0441. \u043e\u0442\u043a\u0440\u043e\u0439 \u043b\u044e\u0431\u043e\u0439 csv \u043f\u0430\u043f\u043a\u0430 \u0442\u0435\u043a\u0443\u0449\u0430\u044f. \u0434\u0430\u043d\u043d\u044b\u0435 \u0438\u0434\u0443\u0442 \u0441\u043f\u0438\u0441\u043a\u043e\u043c \u0432 \u0441\u0442\u043e\u043b\u0431\u0435\u0446, \u043f\u0435\u0440\u0432\u044b\u0439 \u0441\u0442\u043e\u043b\u0431\u0435\u0446 \u0442\u0438\u043f, \u043f\u0435\u0440\u0432\u0430\u044f \u0441\u0442\u0440\u043e\u043a\u0430 \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a<\/strong><\/p>\n<pre><code class=\"python\">import matplotlib.pyplot as pltimport numpy as npimport glob# 1. \u0427\u0442\u0435\u043d\u0438\u0435 CSV (\u0431\u0435\u0437 pandas)csv_files = glob.glob(\"*.csv\")if not csv_files:    raise FileNotFoundError(\"CSV \u0444\u0430\u0439\u043b \u043d\u0435 \u043d\u0430\u0439\u0434\u0435\u043d \u0432 \u0442\u0435\u043a\u0443\u0449\u0435\u0439 \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u0438.\")filename = csv_files[0]cx_dict, cy_dict, out_dict = {}, {}, {}with open(filename, 'r') as f:    next(f)  # \u041f\u0440\u043e\u043f\u0443\u0441\u043a \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u0430    for line in f:        parts = line.strip().split(',')        if len(parts) &lt; 3: continue        label, idx, val = parts[0], int(parts[1]), float(parts[2])        if label == 'CX': cx_dict[idx] = val        elif label == 'CY': cy_dict[idx] = val        elif label == 'OUT': out_dict[idx] = val# 2. \u041f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u043a\u0430 \u043c\u0430\u0441\u0441\u0438\u0432\u043e\u0432def to_arr(d):    if not d: return np.array([1.0])    res = np.zeros(max(d.keys()) + 1)    for k, v in d.items(): res[k] = v    return resb = to_arr(cx_dict)  # \u0427\u0438\u0441\u043b\u0438\u0442\u0435\u043b\u044c (\u043d\u0443\u043b\u0438)a = to_arr(cy_dict)  # \u0417\u043d\u0430\u043c\u0435\u043d\u0430\u0442\u0435\u043b\u044c (\u043f\u043e\u043b\u044e\u0441\u0430)# 3. \u0420\u0430\u0441\u0447\u0435\u0442 \u043d\u0443\u043b\u0435\u0439 \u0438 \u043f\u043e\u043b\u044e\u0441\u043e\u0432zeros = np.roots(b) if len(b) &gt; 1 else []poles = np.roots(a) if len(a) &gt; 1 else []# 4. \u0412\u0438\u0437\u0443\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044ffig, (ax_out, ax_z) = plt.subplots(1, 2, figsize=(12, 5))# \u0421\u043b\u0435\u0432\u0430: \u0413\u0440\u0430\u0444\u0438\u043a \u043e\u0442\u0441\u0447\u0435\u0442\u043e\u0432 OUTindices = sorted(out_dict.keys())values = [out_dict[i] for i in indices]ax_out.stem(indices, values)ax_out.set_title(\"\u041e\u0442\u0441\u0447\u0435\u0442\u044b OUT\")ax_out.grid(True)# \u0421\u043f\u0440\u0430\u0432\u0430: \u041a\u043e\u043c\u043f\u043b\u0435\u043a\u0441\u043d\u0430\u044f \u043f\u043b\u043e\u0441\u043a\u043e\u0441\u0442\u044cunit_circle = plt.Circle((0,0), 1, color='black', fill=False, linestyle='--', alpha=0.5)ax_z.add_artist(unit_circle)ax_z.scatter(np.real(zeros), np.imag(zeros), s=60, marker='o', edgecolors='blue', facecolors='none', label='\u041d\u0443\u043b\u0438 (CX)')ax_z.scatter(np.real(poles), np.imag(poles), s=60, marker='x', color='red', label='\u041f\u043e\u043b\u044e\u0441\u0430 (CY)')ax_z.axhline(0, color='black', lw=1)ax_z.axvline(0, color='black', lw=1)ax_z.set_xlim([-1.5, 1.5])ax_z.set_ylim([-1.5, 1.5])ax_z.set_aspect('equal')ax_z.set_title(\"\u041a\u043e\u043c\u043f\u043b\u0435\u043a\u0441\u043d\u0430\u044f \u043f\u043b\u043e\u0441\u043a\u043e\u0441\u0442\u044c\")ax_z.legend()ax_z.grid(True)plt.tight_layout()plt.show()<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<figure class=\"full-width \"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/e5e\/8fb\/f81\/e5e8fbf81da0c19c94b1f7943142ca2a.png\" width=\"1198\" height=\"567\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/e5e\/8fb\/f81\/e5e8fbf81da0c19c94b1f7943142ca2a.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/e5e\/8fb\/f81\/e5e8fbf81da0c19c94b1f7943142ca2a.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/figure>\n<p>\u041d\u0443 \u0447\u0442\u043e-\u0436, \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u043d\u0435\u043f\u043b\u043e\u0445\u043e \u0432\u0430\u0439\u0431-\u0426\u041e\u0421 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0430\u043d\u0430\u043b\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0435 \u0444\u0438\u043b\u044c\u0442\u0440\u044b, \u0445\u043e\u0440\u043e\u0448\u043e \u0432\u0438\u0434\u043d\u0430 \u041a\u0418\u0425-\u0441\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u044e\u0449\u0430\u044f \u0432\u043d\u0430\u0447\u0430\u043b\u0435 \u043f\u044f\u0442\u043e\u0433\u043e \u043f\u043e\u0440\u044f\u0434\u043a\u0430 (5 \u043e\u0442\u0441\u0447\u0451\u0442\u043e\u0432) \u0438 \u0411\u0418\u0425 \u0441 \u0437\u0430\u0442\u0443\u0445\u0430\u043d\u0438\u0435\u043c, \u043f\u043e\u0441\u0442\u0440\u043e\u0435\u043d\u0430 \u0435\u0434\u0438\u043d\u0438\u0447\u043d\u0430\u044f \u043e\u043a\u0440\u0443\u0436\u043d\u043e\u0441\u0442\u044c, \u043d\u0430\u043d\u0435\u0441\u0435\u043d\u044b \u043d\u0443\u043b\u0438-\u043f\u043e\u043b\u044e\u0441\u0430. <\/p>\n<\/div>\n<\/details>\n<p> \u0414\u0430\u043b\u0435\u0435 \u0441\u043b\u0435\u0434\u0443\u044e\u0442 \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u0438\u0435 \u043f\u0440\u0438\u043c\u0435\u0440\u044b \u0434\u043b\u044f \u043c\u0435\u0442\u043e\u0434\u043e\u0432 \u0441 \u043a\u043e\u043d\u0435\u0447\u043d\u044b\u043c\u0438 \u0440\u0430\u0437\u043d\u043e\u0441\u0442\u044f\u043c\u0438<\/p>\n<details class=\"spoiler\">\n<summary>\u0421\u0442\u043e\u043b\u043a\u043d\u043e\u0432\u0435\u043d\u0438\u0435 \u0422\u0435\u0439\u0438 \u0438 \u0417\u0435\u043c\u043b\u0438. \u041b\u0443\u043d\u0430 \u043d\u0435 \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u0430\u0441\u044c<\/summary>\n<div class=\"spoiler__content\">\n<p><strong>\u042f\u0437\u044b\u043a \u0417\u043c\u0435\u0439 \u0413\u043e\u0440\u044b\u043d\u044b\u0447 \u043c\u043e\u0434\u0435\u043b\u044c \u043e\u043a\u0440\u0443\u0436\u043d\u043e\u0441\u0442\u044c 1 \u043e\u043a\u0440\u0443\u0436\u043d\u043e\u0441\u0442\u044c 2 \u043d\u0430\u0432\u0441\u0442\u0440\u0435\u0447\u0443 \u0434\u0440\u0443\u0433 \u0434\u0440\u0443\u0433\u0443 \u0434\u0438\u0430\u043c\u0435\u0442\u0440\u044b \u043e\u0442\u043d\u043e\u0448\u0435\u043d\u0438\u0435 \u043e\u0434\u0438\u043d \u043a \u0447\u0435\u0442\u044b\u0440\u0451\u043c \u043e\u043a\u0440\u0443\u0436\u043d\u043e\u0441\u0442\u044c \u0435\u0441\u0442\u044c 64 \u0442\u043e\u0447\u043a\u0438 \u043e\u0442\u0440\u0435\u0437\u043a\u043e\u0432 \u0430\u043f\u043f\u0440\u043e\u043a\u0441\u0438\u043c\u0430\u0446\u0438\u044f \u043a\u0430\u0436\u0434\u044b\u0439 \u043e\u0442\u0440\u0435\u0437\u043e\u043a \u043c\u0430\u0441\u0441\u0430 \u043e\u0442\u0440\u0435\u0437\u043a\u0438 \u0441\u0432\u044f\u0437\u0430\u043d\u044b \u0432 \u0442\u043e\u0447\u043a\u0430\u0445 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u0438\u0435 \u0438\u043c\u043f\u0443\u043b\u044c\u0441\u0430 \u0437\u0430\u043a\u043e\u043d \u041d\u044c\u044e\u0442\u043e\u043d\u0430 \u0441\u0442\u043e\u043b\u043a\u043d\u043e\u0432\u0435\u043d\u0438\u0435 \u0431\u0435\u0437 \u0440\u0430\u0441\u0441\u0435\u044f\u043d\u0438\u044f \u043e\u0442\u0440\u0435\u0437\u043a\u0438 \u043c\u0435\u0436\u0434\u0443 \u0441\u043e\u0431\u043e\u0439 \u0437\u0430\u043a\u043e\u043d \u0413\u0443\u043a\u0430 \u043f\u0440\u0443\u0436\u0438\u043d\u044f\u0442 \u043a\u043e\u043d\u0435\u0447\u043d\u044b\u0435 \u0440\u0430\u0437\u043d\u043e\u0441\u0442\u0438 \u0440\u0430\u0441\u0447\u0451\u0442 \u0448\u0430\u0433 \u0441\u0447\u0451\u0442\u0430 \u043f\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u043f\u0440\u0438\u043c\u0435\u0440\u043d\u043e \u043e\u0434\u043d\u0430 \u043e\u043a\u0440\u0443\u0436\u043d\u043e\u0441\u0442\u044c \u0432 \u0441\u0435\u043a\u0443\u043d\u0434e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043c\u0430\u0442\u043f\u043b\u043e\u0442\u043b\u0438\u0431 \u0432\u0438\u0437\u0443\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f  \u043c\u044b\u0448\u044c \u0441\u043b\u0430\u0439\u0434\u0435\u0440 \u0431\u044b\u0441\u0442\u0440\u0435\u0435 \u043c\u0435\u0434\u043b\u0435\u043d\u043d\u0435\u0435 \u043b\u043e\u0433\u0430\u0440\u0438\u0444\u043c<\/strong><\/p>\n<pre><code class=\"python\">import numpy as npimport matplotlib.pyplot as pltfrom matplotlib.widgets import Sliderfrom matplotlib.animation import FuncAnimation# \u041f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u0441\u0438\u0441\u0442\u0435\u043c\u044bN = 64              # \u041a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0442\u043e\u0447\u0435\u043a \u0432 \u043e\u043a\u0440\u0443\u0436\u043d\u043e\u0441\u0442\u0438K_SPRING = 5000.0   # \u0416\u0435\u0441\u0442\u043a\u043e\u0441\u0442\u044c \u043f\u0440\u0443\u0436\u0438\u043dMASS = 0.1          # \u041c\u0430\u0441\u0441\u0430 \u043e\u0434\u043d\u043e\u0439 \u0442\u043e\u0447\u043a\u0438R1, R2 = 1.0, 4.0   # \u0420\u0430\u0434\u0438\u0443\u0441\u044b (1:4)V_INIT = 2.5        # \u041d\u0430\u0447\u0430\u043b\u044c\u043d\u0430\u044f \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u044c \u0441\u0431\u043b\u0438\u0436\u0435\u043d\u0438\u044f# \u0418\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442 \u0438 \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u0435\u0439theta = np.linspace(0, 2 * np.pi, N, endpoint=False)# \u041e\u043a\u0440\u0443\u0436\u043d\u043e\u0441\u0442\u044c 1 (\u041c\u0430\u043b\u0430\u044f)pos1 = np.stack([R1 * np.cos(theta) - 7.0, R1 * np.sin(theta)], axis=1)vel1 = np.zeros_like(pos1)vel1[:, 0] = V_INIT# \u041e\u043a\u0440\u0443\u0436\u043d\u043e\u0441\u0442\u044c 2 (\u0411\u043e\u043b\u044c\u0448\u0430\u044f)pos2 = np.stack([R2 * np.cos(theta) + 7.0, R2 * np.sin(theta)], axis=1)vel2 = np.zeros_like(pos2)vel2[:, 0] = -V_INIT# \u0414\u043b\u0438\u043d\u044b \u043f\u043e\u043a\u043e\u044f (\u043e\u0442\u0440\u0435\u0437\u043a\u0438 \u0430\u043f\u043f\u0440\u043e\u043a\u0441\u0438\u043c\u0430\u0446\u0438\u0438)def get_lengths(p):    diff = np.roll(p, -1, axis=0) - p    return np.sqrt(np.sum(diff**2, axis=1))L1, L2 = get_lengths(pos1), get_lengths(pos2)# \u0412\u0438\u0437\u0443\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044ffig, ax = plt.subplots(figsize=(10, 6))plt.subplots_adjust(bottom=0.2)line1, = ax.plot([], [], 'r-o', markersize=3, lw=1.5, label='Small (1x)')line2, = ax.plot([], [], 'b-o', markersize=3, lw=1.5, label='Large (4x)')ax.set_xlim(-12, 12)ax.set_ylim(-6, 6)ax.set_aspect('equal')ax.legend()# \u0421\u043b\u0430\u0439\u0434\u0435\u0440 \u0434\u043b\u044f \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u0438 (\u043b\u043e\u0433\u0430\u0440\u0438\u0444\u043c\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u0448\u0430\u0433)ax_speed = plt.axes([0.25, 0.05, 0.5, 0.03])slider = Slider(ax_speed, 'Time Step (log)', -4.0, -1.5, valinit=-3.0)def compute_physics(p, v, L_rest):    # \u0421\u0438\u043b\u044b \u0443\u043f\u0440\u0443\u0433\u043e\u0441\u0442\u0438 (\u0417\u0430\u043a\u043e\u043d \u0413\u0443\u043a\u0430)    diff = np.roll(p, -1, axis=0) - p    dist = np.sqrt(np.sum(diff**2, axis=1))    f_mag = K_SPRING * (dist - L_rest)    f_vec = (diff \/ dist[:, None]) * f_mag[:, None]        # \u0420\u0435\u0437\u0443\u043b\u044c\u0442\u0438\u0440\u0443\u044e\u0449\u0430\u044f \u0441\u0438\u043b\u0430 \u043d\u0430 \u043a\u0430\u0436\u0434\u0443\u044e \u0442\u043e\u0447\u043a\u0443 (\u0441\u043e\u0441\u0435\u0434\u043d\u0438\u0435 \u0441\u0435\u0433\u043c\u0435\u043d\u0442\u044b)    net_f = f_vec - np.roll(f_vec, 1, axis=0)        # \u0423\u0441\u043a\u043e\u0440\u0435\u043d\u0438\u0435 (\u0417\u0430\u043a\u043e\u043d \u041d\u044c\u044e\u0442\u043e\u043d\u0430)    a = net_f \/ MASS    return adef update(frame):    global pos1, vel1, pos2, vel2        # \u0422\u0435\u043a\u0443\u0449\u0438\u0439 \u0448\u0430\u0433 \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u0438\u0437 \u0441\u043b\u0430\u0439\u0434\u0435\u0440\u0430    dt = 10**slider.val        # \u0420\u0430\u0441\u0447\u0435\u0442 \u0441\u0438\u043b \u0438 \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0435 (\u043c\u0435\u0442\u043e\u0434 \u042d\u0439\u043b\u0435\u0440\u0430-\u041a\u0440\u043e\u043c\u0435\u0440\u0430 \u0434\u043b\u044f \u0441\u0442\u0430\u0431\u0438\u043b\u044c\u043d\u043e\u0441\u0442\u0438)    for _ in range(5): # \u0412\u043b\u043e\u0436\u0435\u043d\u043d\u044b\u0435 \u0438\u0442\u0435\u0440\u0430\u0446\u0438\u0438 \u0434\u043b\u044f \u0442\u043e\u0447\u043d\u043e\u0441\u0442\u0438 \u043f\u0440\u0438 \u0431\u043e\u043b\u044c\u0448\u0438\u0445 dt        # \u0424\u0438\u0437\u0438\u043a\u0430 \u0441\u0432\u044f\u0437\u0435\u0439        vel1 += compute_physics(pos1, vel1, L1) * dt        vel2 += compute_physics(pos2, vel2, L2) * dt                # \u041e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0430 \u0441\u0442\u043e\u043b\u043a\u043d\u043e\u0432\u0435\u043d\u0438\u044f (\u0421\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u0438\u0435 \u0438\u043c\u043f\u0443\u043b\u044c\u0441\u0430)        # \u041f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u0440\u0430\u0441\u0441\u0442\u043e\u044f\u043d\u0438\u044f \u043c\u0435\u0436\u0434\u0443 \u0432\u0441\u0435\u043c\u0438 \u043f\u0430\u0440\u0430\u043c\u0438 \u0442\u043e\u0447\u0435\u043a \u043e\u043a\u0440\u0443\u0436\u043d\u043e\u0441\u0442\u0435\u0439        dist_matrix = np.linalg.norm(pos1[:, None, :] - pos2[None, :, :], axis=2)        collisions = np.where(dist_matrix &lt; 0.25)                for i, j in zip(*collisions):            normal = (pos1[i] - pos2[j]) \/ dist_matrix[i, j]            v_rel = vel1[i] - vel2[j]            v_norm = np.dot(v_rel, normal)            if v_norm &lt; 0:                # \u041e\u0431\u043c\u0435\u043d \u0438\u043c\u043f\u0443\u043b\u044c\u0441\u0430\u043c\u0438 (\u043c\u0430\u0441\u0441\u044b \u0440\u0430\u0432\u043d\u044b, \u0431\u0435\u0437 \u0440\u0430\u0441\u0441\u0435\u044f\u043d\u0438\u044f)                impulse = v_norm * normal                vel1[i] -= impulse                vel2[j] += impulse                pos1 += vel1 * dt        pos2 += vel2 * dt    # \u041e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0435 \u0433\u0440\u0430\u0444\u0438\u043a\u0438 (\u0437\u0430\u043c\u044b\u043a\u0430\u0435\u043c \u043a\u043e\u043b\u044c\u0446\u043e \u0434\u043b\u044f \u043e\u0442\u0440\u0438\u0441\u043e\u0432\u043a\u0438)    p1_plot = np.vstack([pos1, pos1[0]])    p2_plot = np.vstack([pos2, pos2[0]])    line1.set_data(p1_plot[:, 0], p1_plot[:, 1])    line2.set_data(p2_plot[:, 0], p2_plot[:, 1])    return line1, line2ani = FuncAnimation(fig, update, interval=20, blit=True)plt.show()<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u041a\u0430\u043a \u043e\u0431\u044b\u0447\u043d\u043e \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u043c \u0440\u0430\u043d\u0435\u0435 \u043d\u0430\u0432\u0430\u0439\u0431\u043a\u043e\u0436\u0435\u043d\u043d\u044b\u043c .\/generate_requirements.sh zmei.py \u0441 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u043f\u043e\u0434\u0446\u0435\u043f\u043a\u043e\u0439 \u0432\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u043e\u043a\u0440\u0443\u0436\u0435\u043d\u0438\u044f<\/p>\n<figure class=\"full-width \"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/84c\/421\/858\/84c421858a2d1ed0a6ffe27bbecd8854.png\" width=\"998\" height=\"667\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/84c\/421\/858\/84c421858a2d1ed0a6ffe27bbecd8854.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/84c\/421\/858\/84c421858a2d1ed0a6ffe27bbecd8854.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/figure>\n<p>  <\/p>\n<\/div>\n<\/details>\n<p>\u0420\u043e\u0431\u043e\u0442-\u043c\u0430\u043d\u0438\u043f\u0443\u043b\u044f\u0442\u043e\u0440 \u0434\u0432\u0443\u0437\u0432\u0435\u043d\u043d\u044b\u0439. \u0418\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u043c\u0430\u0442\u043c\u043e\u0434\u0435\u043b\u044c, \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u043d\u0430\u0434\u043e \u0434\u0430\u0442\u044c \u0438\u043d\u044a\u0435\u043a\u0446\u0438\u044e \u0432 \u0432\u0438\u0434\u0435 \u043f\u043e\u0434\u0441\u043a\u0430\u0437\u043e\u043a \u043f\u0440\u043e \u0430\u0440\u043a\u0442\u0430\u043d\u0433\u0435\u043d\u0441 \u0434\u0432\u043e\u0439\u043d\u043e\u0433\u043e \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u0430 (\u043e\u0442 0 \u0434\u043e 360) \u0438 sqrt &#8212; \u0442\u0435\u043e\u0440\u0435\u043c\u0443 \u041f\u0438\u0444\u0430\u0433\u043e\u0440\u0430, \u0430 \u0442\u0430\u043a\u0436\u0435 \u0447\u0442\u043e \u043e\u0434\u043d\u043e\u0439 \u0442\u043e\u0447\u043a\u0435 \u043c\u043e\u0436\u0435\u0442 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u043e\u0432\u0430\u0442\u044c 2 \u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u044f (\u043f\u043b\u044e\u0441 \u043c\u0438\u043d\u0443\u0441 \u0434\u0438\u0441\u043a\u0440\u0438\u043c\u0438\u043d\u0430\u043d\u0442), \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0442\u0435\u043c \u0431\u043e\u043b\u044c\u0448\u0435 \u0447\u0435\u043c \u0431\u043e\u043b\u044c\u0448\u0435 \u0437\u0432\u0435\u043d\u044c\u0435\u0432. <\/p>\n<details class=\"spoiler\">\n<summary>\u0410\u0432\u0442\u043e\u0431\u043e\u0442\u044b \u0438 \u0414\u0435\u0441\u0435\u043f\u0442\u0438\u043a\u043e\u043d\u044b<\/summary>\n<div class=\"spoiler__content\">\n<p><strong>\u041f\u0440\u043e\u043f\u0438\u0442\u043e\u043d\u044c \u0434\u0432\u0443\u0437\u0432\u0435\u043d\u043d\u044b\u0439 \u043c\u0430\u043d\u0438\u043f\u0443\u043b\u044f\u0442\u043e\u0440 \u0434\u0430 \u0434\u0430\u0439-\u043a\u0430 \u0432 \u043d\u0435\u0433\u043e PyGame numpy \u043d\u043e \u0431\u0443\u0434\u044c \u043e\u0441\u0442\u043e\u0440\u043e\u0436\u0435\u043d \u0441 \u0434\u0438\u0441\u043a\u0440\u0438\u043c\u0438\u043d\u0430\u043d\u0442 sqrt \u0430 \u0443\u0433\u043e\u043b atan2 \u043a\u043b\u0430\u0432\u0438\u0430\u0442\u0443\u0440\u0430 \u043c\u0435\u043d\u044f\u0439 \u0437\u043d\u0430\u043a \u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u0435. \u041c\u044b\u0448\u044c \u0442\u043e\u0447\u043a\u0430 \u0437\u0430\u0434\u0430\u043d\u0438\u044f \u0444\u0438\u043a\u0441\u0430\u0446\u0438\u044f \u043f\u0435\u0440\u0432\u043e\u0433\u043e \u0437\u0432\u0435\u043d\u0430 \u0446\u0435\u043d\u0442\u0440 \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u044b \u043e\u0440\u0442\u043e\u0433\u043e\u043d\u0430\u043b\u044c\u043d\u044b\u0435 \u0441\u0446\u0435\u043d\u044b \u0441\u0435\u0442\u043a\u0430 \u0438\u043c\u0435\u0435\u0442\u0441\u044f. \u0410\u0439 \u0434\u0430 \u043e\u0431\u0440\u0430\u0442\u043d\u0430\u044f \u043a\u0438\u043d\u0435\u043c\u0430\u0442\u0438\u043a\u0430! \u0423\u0445 \u0441\u043e\u043b\u044c\u0432\u0435\u0440 \u0442\u0440\u0438\u0433\u043e\u043d\u043e\u043c\u0435\u0442\u0440\u0438\u0447\u0435\u0441\u043a\u0438\u0439.<\/strong><\/p>\n<pre><code class=\"python\">import pygameimport numpy as npimport math# \u041a\u043e\u043d\u0441\u0442\u0430\u043d\u0442\u044b \u0441\u0446\u0435\u043d\u044bWIDTH, HEIGHT = 800, 600L1, L2 = 180, 140  # \u0414\u043b\u0438\u043d\u044b \u0437\u0432\u0435\u043d\u044c\u0435\u0432ORIGIN = np.array([WIDTH \/\/ 2, HEIGHT \/\/ 2])def solve_ik(target, l1, l2, sign):    tx, ty = target    dist_sq = tx**2 + ty**2    dist = math.sqrt(dist_sq)    # \u041e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u0435 \u0440\u0430\u0431\u043e\u0447\u0435\u0439 \u0437\u043e\u043d\u044b    if dist &gt; l1 + l2:        dist_sq = (l1 + l2)**2        dist = l1 + l2        # \u0417\u0430\u043a\u043e\u043d \u043a\u043e\u0441\u0438\u043d\u0443\u0441\u043e\u0432 \u0434\u043b\u044f \u0432\u0442\u043e\u0440\u043e\u0433\u043e \u0443\u0433\u043b\u0430    cos_a2 = (dist_sq - l1**2 - l2**2) \/ (2 * l1 * l2)    cos_a2 = np.clip(cos_a2, -1, 1) # \u0417\u0430\u0449\u0438\u0442\u0430 \u043e\u0442 \u043e\u0448\u0438\u0431\u043e\u043a \u0432 sqrt        # \u0412\u044b\u0431\u043e\u0440 \u0437\u043d\u0430\u043a\u0430 \u043b\u043e\u043a\u0442\u044f \u0447\u0435\u0440\u0435\u0437 atan2    sin_a2 = math.sqrt(1 - cos_a2**2) * sign    a2 = math.atan2(sin_a2, cos_a2)    # \u0423\u0433\u043e\u043b \u043f\u0435\u0440\u0432\u043e\u0433\u043e \u0437\u0432\u0435\u043d\u0430    a1 = math.atan2(ty, tx) - math.atan2(l2 * sin_a2, l1 + l2 * cos_a2)        return a1, a2def run():    pygame.init()    screen = pygame.display.set_mode((WIDTH, HEIGHT))    clock = pygame.time.Clock()    elbow_sign = 1        while True:        for event in pygame.event.get():            if event.type == pygame.QUIT: return            if event.type == pygame.KEYDOWN:                if event.key == pygame.K_SPACE: elbow_sign *= -1        screen.fill((30, 30, 30))                # \u0421\u0435\u0442\u043a\u0430        for i in range(0, WIDTH, 40): pygame.draw.line(screen, (50,50,50), (i,0), (i,HEIGHT))        for i in range(0, HEIGHT, 40): pygame.draw.line(screen, (50,50,50), (0,i), (WIDTH,i))        # \u0422\u0430\u0440\u0433\u0435\u0442 \u043e\u0442 \u043c\u044b\u0448\u043a\u0438 \u043e\u0442\u043d\u043e\u0441\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0446\u0435\u043d\u0442\u0440\u0430        m_pos = np.array(pygame.mouse.get_pos()) - ORIGIN                # \u0420\u0430\u0441\u0447\u0435\u0442        a1, a2 = solve_ik(m_pos, L1, L2, elbow_sign)        # \u041a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u044b \u0441\u0443\u0441\u0442\u0430\u0432\u043e\u0432        joint = ORIGIN + np.array([L1 * math.cos(a1), L1 * math.sin(a1)])        end_eff = joint + np.array([L2 * math.cos(a1 + a2), L2 * math.sin(a1 + a2)])        # \u041e\u0442\u0440\u0438\u0441\u043e\u0432\u043a\u0430 (\u041e\u0440\u0442\u043e\u0433\u043e\u043d\u0430\u043b\u044c\u043d\u043e \u0438\u0437 \u0446\u0435\u043d\u0442\u0440\u0430)        pygame.draw.line(screen, (0, 255, 0), ORIGIN, joint, 6)   # \u041f\u043b\u0435\u0447\u043e        pygame.draw.line(screen, (255, 100, 0), joint, end_eff, 6) # \u041f\u0440\u0435\u0434\u043f\u043b\u0435\u0447\u044c\u0435        pygame.draw.circle(screen, (255, 255, 255), ORIGIN, 8)        pygame.draw.circle(screen, (200, 0, 0), end_eff.astype(int), 5)        pygame.display.flip()        clock.tick(60)if __name__ == \"__main__\":    run()<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<figure class=\"full-width \"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/920\/712\/48a\/92071248a1b8721305422607e7d65996.png\" width=\"795\" height=\"623\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/920\/712\/48a\/92071248a1b8721305422607e7d65996.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/920\/712\/48a\/92071248a1b8721305422607e7d65996.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/figure>\n<p>\u041f\u0440\u043e\u0431\u0435\u043b\u043e\u043c \u043c\u043e\u0436\u043d\u043e \u043c\u0435\u043d\u044f\u0442\u044c \u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u043b\u043e\u043a\u0442\u044f, \u043c\u044b\u0448\u044c\u044e &#8212; \u043a\u0440\u0443\u0442\u0438\u0442\u044c \u0440\u043e\u0431\u043e\u0442\u043e\u043c \u043e\u0431\u0435\u0441\u043f\u0435\u0447\u0438\u0432\u0430\u044f \u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0437\u0432\u0435\u043d\u044c\u0435\u0432<\/p>\n<\/div>\n<\/details>\n<p>\u0412\u0430\u0439\u0431-\u043a\u043e\u0434-\u0441\u0442\u0438\u0445. \u041f\u0440\u043e\u043f\u0430\u0440\u0441\u0438\u043c \u0441 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435\u043c \u043f\u0438\u0442\u043e\u043d\u0430 C-\u0444\u0430\u0439\u043b\u044b \u0441\u0434\u0435\u043b\u0430\u043d\u043d\u044b\u0435 \u0432\u044b\u0448\u0435 \u0438 \u0432\u044b\u0431\u0435\u0440\u0435\u043c \u0438\u043c\u0435\u043d\u0430 \u0444\u0443\u043d\u043a\u0446\u0438\u0439.<\/p>\n<details class=\"spoiler\">\n<summary>\u0420\u0438\u0444\u043c\u043e-\u043f\u0430\u0440\u0441\u0435\u0440<\/summary>\n<div class=\"spoiler__content\">\n<p><strong>\u041f\u0438\u0442\u043e\u043d\u043e\u043c \u044f \u0434\u043e\u0432\u043e\u043b\u0435\u043d  <br \/>\u0424\u0430\u0439\u043b \u043e\u0442\u043a\u0440\u044b\u0442\u044c \u043b\u044e\u0431\u043e\u0439 <br \/>\u0422\u0430\u043c \u0421 \u043a\u043e\u0434 \u0441\u0442\u0440\u043e\u0439\u043d\u044b\u0439 <br \/>\u0427\u0438\u0442\u0430\u0439 \u0435\u0433\u043e \u043b\u044e\u0431\u043e\u0439 <br \/>\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0439 regexp \u0434\u043e\u0440\u043e\u0433\u043e\u0439 <br \/>\u0418 \u0438\u0437\u0432\u043b\u0435\u043a\u0430\u0439 \u0418\u043c\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u0438 () \u043a\u0430\u043a \u0440\u043e\u0434\u043d\u043e\u0439 <br \/>\u0422\u0435 \u0447\u0442\u043e \u0432 \u0441\u043a\u043e\u0431\u043a\u0430\u0445 \u0438 <br \/>\u0424\u0438\u0433\u0443\u0440\u043d\u044b\u0445 \u0440\u0430\u0441\u043f\u0438\u0441\u043d\u044b\u0445 <br \/>\u0421\u0442\u0440\u043e\u0439 \u0441\u043f\u0438\u0441\u043e\u043a \u043c\u043d\u0435 \u0438\u043c\u0451\u043d <br \/>\u0414\u043e\u0432\u043e\u043b\u044c\u043d\u044b\u0439 \u0438 \u043d\u0430 \u044d\u043a\u0440\u0430\u043d \u0432\u044b\u0432\u043e\u0434\u0438 <br \/>\u041c\u043e\u0439 \u0444\u0430\u0439\u043b \u043f\u0430\u0439 \u043c\u043d\u0435 \u0437\u0430\u0434\u0430\u0439 <br \/>\u0418\u0449\u0435\u043c \u043c\u044b \u0432\u0441\u0451 \u0432 \u043a\u0430\u0442\u0430\u043b\u043e\u0433\u0435 \u0442\u0435\u043a\u0443\u0449\u0435\u043c  <br \/>\u0412\u0441\u0451 \u0447\u0442\u043e \u0421\u0438 \u0438\u043c\u0435\u0435\u0442 \u0442\u0435\u043a\u0441\u0442 \u0433\u0440\u044f\u0434\u0443\u0449\u0438\u0439 <br \/>\u041d\u043e \u0442\u044b \u0437\u0430 \u043a\u043b\u044e\u0447\u0435\u0432\u044b\u043c \u0441\u043b\u043e\u0432\u043e\u043c \u0441\u043b\u0435\u0434\u0438 <br \/>\u0412\u0441\u044f\u043a\u0438\u0435 \u0444\u043e\u0440\u044b \u0438 \u0438\u0444\u044b \u0443\u0431\u0435\u0440\u0438! <br \/>\u0423\u0441\u0442\u0440\u043e\u0438\u0442 \u043c\u0435\u043d\u044f \u043d\u0435 \u0438\u043c\u043f\u043b\u0435\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u044f<br \/>\u0410 \u0442\u043e\u043b\u044c\u043a\u043e \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f<\/strong><\/p>\n<p>\u0420\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442:<\/p>\n<pre><code class=\"python\">import reimport os# \u0420\u0435\u0433\u0443\u043b\u044f\u0440\u043a\u0430: \u0438\u0449\u0435\u0442 \u043f\u043e\u0442\u0435\u043d\u0446\u0438\u0430\u043b\u044c\u043d\u043e\u0435 \u0438\u043c\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u043f\u0435\u0440\u0435\u0434 \u0441\u043a\u043e\u0431\u043a\u0430\u043c\u0438,# \u0438\u0433\u043d\u043e\u0440\u0438\u0440\u0443\u044f \u043a\u043b\u044e\u0447\u0435\u0432\u044b\u0435 \u0441\u043b\u043e\u0432\u0430 C, \u0438 \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u0442 \u043d\u0430\u043b\u0438\u0447\u0438\u0435 \u043e\u0442\u043a\u0440\u044b\u0432\u0430\u044e\u0449\u0435\u0439 \u0444\u0438\u0433\u0443\u0440\u043d\u043e\u0439 \u0441\u043a\u043e\u0431\u043a\u0438pattern = r'\\b(?!if|while|for|switch|return|void|int|char|float|double|static|struct|else)\\w+\\s*\\([^)]*\\)\\s*\\{'def find_functions():    # \u0418\u0449\u0435\u043c \u0444\u0430\u0439\u043b\u044b \u0441 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u0435\u043c .c \u0432 \u0442\u0435\u043a\u0443\u0449\u0435\u0439 \u043f\u0430\u043f\u043a\u0435    c_files = [f for f in os.listdir('.') if f.endswith('.c')]    if not c_files:        print(\"\u0421\u0438-\u0444\u0430\u0439\u043b\u043e\u0432 \u0432 \u043e\u043a\u0440\u0443\u0433\u0435 \u043d\u0435 \u0432\u0438\u0434\u0430\u0442\u044c...\")        return    for filename in c_files:        print(f\"--- \u0424\u0430\u0439\u043b: {filename} ---\")        try:            with open(filename, 'r', encoding='utf-8') as f:                content = f.read()                # \u041d\u0430\u0445\u043e\u0434\u0438\u043c \u0432\u0441\u0435 \u0441\u043e\u0432\u043f\u0430\u0434\u0435\u043d\u0438\u044f                matches = re.findall(pattern, content)                for match in matches:                    # \u041e\u0447\u0438\u0449\u0430\u0435\u043c \u0438\u043c\u044f \u043e\u0442 \u0441\u043a\u043e\u0431\u043e\u043a \u0438 \u043b\u0438\u0448\u043d\u0438\u0445 \u0441\u0438\u043c\u0432\u043e\u043b\u043e\u0432                    func_name = match.split('(')[0].strip()                    # \u041d\u0430 \u0441\u043b\u0443\u0447\u0430\u0439, \u0435\u0441\u043b\u0438 \u0432 match \u043f\u043e\u043f\u0430\u043b \u0442\u0438\u043f \u0434\u0430\u043d\u043d\u044b\u0445 (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \"int main\")                    func_name = func_name.split()[-1]                    print(f\"\u041d\u0430\u0439\u0434\u0435\u043d\u0430 \u0444\u0443\u043d\u043a\u0446\u0438\u044f: {func_name}\")        except Exception as e:            print(f\"\u041e\u0448\u0438\u0431\u043a\u0430 \u043f\u0440\u0438 \u0447\u0442\u0435\u043d\u0438\u0438 {filename}: {e}\")if __name__ == \"__main__\":    find_functions()<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u0412 \u0441\u043e\u0437\u0434\u0430\u043d\u043d\u044b\u0445 \u0432\u044b\u0448\u0435 \u0444\u0430\u0439\u043b\u0430\u0445 \u043e\u043d \u043f\u0440\u0435\u043a\u0440\u0430\u0441\u043d\u043e \u043d\u0430\u0445\u043e\u0434\u0438\u0442 \u043d\u0430\u0448\u0438 \u0444\u0443\u043d\u043a\u0446\u0438\u0438<br \/>&#8212; \u0424\u0430\u0439\u043b: Main.c &#8212; <br \/>\u041d\u0430\u0439\u0434\u0435\u043d\u0430 \u0444\u0443\u043d\u043a\u0446\u0438\u044f: main <br \/>&#8212; \u0424\u0430\u0439\u043b: calculate.c &#8212; <br \/>\u041d\u0430\u0439\u0434\u0435\u043d\u0430 \u0444\u0443\u043d\u043a\u0446\u0438\u044f: calculate  <\/p>\n<\/div>\n<\/details>\n<p>\u041f\u0440\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0432\u0441\u0435 \u043c\u043e\u0434\u0435\u043b\u0438 \u043e\u0431\u043b\u0430\u0434\u0430\u044e\u0442 +- \u043e\u0434\u0438\u043d\u0430\u043a\u043e\u0432\u044b\u043c \u0432\u044b\u0432\u043e\u0434\u043e\u043c, \u0442\u0430\u043a \u043a\u0430\u043a \u043e\u0431\u0443\u0447\u0430\u044e\u0449\u0438\u0435 \u0432\u044b\u0431\u043e\u0440\u043a\u0438 \u043d\u0430\u0432\u0435\u0440\u043d\u044f\u043a\u0430 \u0432 \u0431\u043e\u043b\u044c\u0448\u0438\u043d\u0441\u0442\u0432\u0435 \u0441\u0432\u043e\u0451\u043c \u043f\u0440\u0438\u043c\u0435\u0440\u043d\u043e \u043e\u0434\u043d\u0438 \u0438 \u0442\u0435 \u0436\u0435, \u0441\u043e\u0431\u0440\u0430\u043d\u044b \u0438\u0437 \u0438\u0441\u0445\u043e\u0434\u043d\u0438\u043a\u043e\u0432, \u0444\u043e\u0440\u0443\u043c\u043e\u0432 \u0438 \u043f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u043b\u0435\u043d\u044b \u043f\u043e \u0438\u0437\u0432\u0435\u0441\u0442\u043d\u044b\u043c \u0448\u0430\u0431\u043b\u043e\u043d\u0430\u043c \u0434\u0430\u0442\u0430\u0441\u0435\u0442\u043e\u0432.  \u041f\u0440\u043e\u043c\u043f\u0442\u044b \u0440\u0430\u0431\u043e\u0447\u0438\u0435 \u0441 \u043f\u0435\u0440\u0432\u043e\u0433\u043e \u0440\u0430\u0437\u0430 \u0437\u0430 \u0440\u0435\u0434\u043a\u0438\u043c \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435\u043c. <\/p>\n<\/div>\n<p>\u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b \u0441\u0442\u0430\u0442\u044c\u0438 <a href=\"https:\/\/habr.com\/ru\/articles\/1028834\/\">https:\/\/habr.com\/ru\/articles\/1028834\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u0412 \u043d\u0430\u0441\u0442\u043e\u044f\u0449\u0435\u0435 \u0432\u0440\u0435\u043c\u044f \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442 \u043c\u043d\u043e\u0433\u043e \u043c\u0430\u043d\u0443\u0430\u043b\u043e\u0432 \u043a\u0430\u043a \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e \u0434\u0435\u043b\u0430\u0442\u044c \u0437\u0430\u043f\u0440\u043e\u0441\u044b, \u0432 \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u043c \u043e\u043d\u0438 \u043a\u0430\u0441\u0430\u044e\u0442\u0441\u044f \u043f\u0440\u0438\u0432\u044b\u0447\u043d\u043e\u0433\u043e \u0432\u0441\u0435\u043c \u044f\u0437\u044b\u043a\u0430, \u043f\u0440\u0438\u0447\u0451\u043c, \u043d\u0435\u0432\u0430\u0436\u043d\u043e \u043a\u0430\u043a\u043e\u0439 \u043e\u043d, \u043c\u043e\u0434\u0435\u043b\u044c \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u0443\u0435\u0442 \u0435\u0433\u043e \u0432 \u0432\u0435\u043a\u0442\u043e\u0440 \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043e\u0434\u0438\u043d\u0430\u043a\u043e\u0432 \u0434\u043b\u044f \u0431\u043e\u043b\u044c\u0448\u0438\u043d\u0441\u0442\u0432\u0430 \u043b\u044e\u0434\u0435\u0439. \u041d\u044e\u0430\u043d\u0441\u044b \u0432\u0440\u043e\u0434\u0435 \u0441\u0438\u0441\u0442\u0435\u043c\u044b \u0432\u0440\u0435\u043c\u0451\u043d, \u043f\u0430\u0434\u0435\u0436\u0435\u0439, \u0444\u0438\u043a\u0441\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0439 \u0438\u043b\u0438 \u0433\u0438\u0431\u043a\u043e\u0439 \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438 \u0441\u043b\u043e\u0432 \u043c\u0430\u043b\u043e \u0432\u043b\u0438\u044f\u044e\u0442 \u043d\u0430 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u0432\u044b\u0432\u043e\u0434 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c, \u0432 \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u043c \u043e\u043d\u0438 \u043d\u0443\u0436\u043d\u044b \u043b\u0438\u0448\u044c \u0434\u043b\u044f \u0445\u0443\u0434\u043e\u0436\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0439 \u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u0438 \u0438\u043b\u0438 \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0438 \u0441\u043c\u044b\u0441\u043b\u0430 \u0442\u0435\u043a\u0441\u0442\u0430 \u043e\u0442 \u0447\u0435\u043b\u043e\u0432\u0435\u043a\u0430 \u043a \u0447\u0435\u043b\u043e\u0432\u0435\u043a\u0443. \u0417\u0430\u0434\u0430\u0447\u0430 \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u043f\u0440\u043e\u0441\u0442\u0430\u044f &#8212; \u043a\u0430\u043a \u0441 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435\u043c \u043c\u0438\u043d\u0438\u043c\u0430\u043b\u044c\u043d\u043e \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0433\u043e \u043d\u0430\u0431\u043e\u0440\u0430 \u0441\u043b\u043e\u0432 \u0431\u0435\u0437 \u043f\u0440\u0438\u0441\u0442\u0430\u0432\u043e\u043a, \u0441\u0443\u0444\u0444\u0438\u043a\u0441\u043e\u0432, \u043e\u043a\u043e\u043d\u0447\u0430\u043d\u0438\u0439 \u0438\u043b\u0438 \u0441 \u0438\u0445 \u043c\u0438\u043d\u0438\u043c\u0443\u043c\u043e\u043c, \u0430 \u0442\u0430\u043a\u0436\u0435 \u0441\u043e\u044e\u0437\u043e\u0432 \u0438 \u0434\u0440\u0443\u0433\u0438\u0445 \u0432\u0441\u043f\u043e\u043c\u043e\u0433\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0445 \u0440\u0435\u0447\u0435\u0432\u044b\u0445 \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0439 \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u043d\u0430 \u0432\u044b\u0445\u043e\u0434\u0435 \u0433\u043e\u0434\u043d\u044b\u0439 \u043a\u043e\u0434 \u0441 0% \u043e\u0448\u0438\u0431\u043e\u043a \u0438 90% \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u0430 \u0441\u043e\u0433\u043b\u0430\u0441\u043d\u043e \u0442\u0430\u043a\u043e\u043c\u0443 \u043f\u0440\u043e\u043c\u043f\u0442-\u0422\u0417.\u0418\u0442\u0430\u043a, \u043f\u0440\u0438\u0441\u0442\u0443\u043f\u0438\u043c. \u0411\u0443\u0434\u0435\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c VS Code\/\u0431\u043b\u043e\u043a\u043d\u043e\u0442 \u0441 \u043f\u0443\u0441\u0442\u043e\u0439 \u043f\u0430\u043f\u043a\u043e\u0439. \u0414\u043b\u044f \u043d\u0430\u0447\u0430\u043b\u0430 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0440\u0430\u0437\u0432\u0435\u0440\u043d\u0443\u0442\u044c \u0432\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u043e\u0435 \u043e\u043a\u0440\u0443\u0436\u0435\u043d\u0438\u0435. \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u043f\u0438\u0448\u0435\u043c \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439 \u043f\u0440\u043e\u043c\u043f\u0442. &gt;\u0417\u0430\u043c\u0435\u0447\u0430\u043d\u0438\u0435 &#8212; \u043f\u043e\u0440\u0430 \u043d\u0430 \u0425\u0430\u0431\u0440\u0435 \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0432 \u044f\u0437\u044b\u043a \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f &#171;\u041f\u0440\u043e\u043c\u043f\u0442\u0438\u043d\u0433&#187;&lt;\u0420\u0430\u0437\u0432\u0451\u0440\u0442\u044b\u0432\u0430\u043d\u0438\u0435 \u0432\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u043e\u043a\u0440\u0443\u0436\u0435\u043d\u0438\u044f\u0425\u043e\u0442\u0435\u0442\u044c \u0431\u044d\u0448 \u0441\u043a\u0440\u0438\u043f\u0442 \u043f\u0440\u043e\u0432\u0435\u0440\u044c .venv \u0435\u0441\u043b\u0438 \u043d\u0435\u0442 \u0441\u043e\u0437\u0434\u0430\u0442\u044c, \u043e\u0431\u043d\u043e\u0432\u0438\u0442\u044c pip \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u044f\u044f \u0432\u0435\u0440\u0441\u0438\u044f \u043d\u0430\u0439\u0442\u0438 requirements.txt \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 \u0444\u0430\u0439\u043b \u044d\u0442\u043e\u0442. \u041e\u043f\u0446\u0438\u044f \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442 \u0438\u043c\u044f \u0444\u0430\u0439\u043b\u0430.py \u0441\u043a\u0440\u0438\u043f\u0442 \u043f\u0440\u043e\u0432\u0435\u0440\u044c \u043d\u0430\u043b\u0438\u0447\u0438\u0435 \u043e\u043a\u0440\u0443\u0436\u0435\u043d\u0438\u044f .\u0432\u044d\u043d\u0432 \u0435\u0441\u043b\u0438 \u043d\u0435\u0442 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438 \u0440\u0435\u043a\u0432\u0430\u0440\u0435\u043c\u0435\u043d\u0442\u0441.txt. \u0415\u0441\u043b\u0438 .\u0432\u044d\u043d\u0432 \u0443\u0436\u0435 \u0435\u0441\u0442\u044c \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0439  \u043f\u0438\u0442\u043e\u043d 3 \u0441\u043a\u0440\u0438\u043f\u0442 \u043f\u0440\u043e\u0432\u0435\u0440\u044c \u0447\u0442\u043e \u0437\u0430\u043f\u0443\u0441\u043a \u0432\u043d\u0443\u0442\u0440\u0438 \u0432\u044d\u043d\u0432. \u0425\u043e\u0442\u0435\u0442\u044c \u0441\u043f\u0438\u0441\u043e\u043a \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0435\u0439 \u0444\u043b\u0430\u0433 &#8212;g \u0441\u043e\u0445\u0440\u0430\u043d\u0438\u0442\u044c \u0432 \u0444\u0430\u0439\u043b requirements-\u0442\u0435\u043a\u0443\u0449\u0430\u044f \u0434\u0430\u0442\u0430-\u0432\u0440\u0435\u043c\u044f.txt \u0438\u0437\u043c\u0435\u043d\u0438\u0442\u044c \u0432\u0435\u0440\u0441\u0438\u044f == \u043d\u0430 &gt;=.  \u0432\u044b\u0439\u0434\u0438 \u0438\u0437 \u0432\u044d\u043d\u0432 \u043f\u043e \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u0438\u044e \u043f\u0438\u0442\u043e\u043d\u0430.\u0414\u0430\u043d\u043d\u044b\u0439 \u043f\u0440\u043e\u043c\u043f\u0442 \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u0435\u0442 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439 \u043a\u043e\u0434#!\/bin\/bash# \u0418\u043c\u044f \u0432\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u043e\u043a\u0440\u0443\u0436\u0435\u043d\u0438\u044fVENV_DIR=&#187;.venv&#187;# \u0418\u043c\u044f \u0444\u0430\u0439\u043b\u0430 \u0441\u043a\u0440\u0438\u043f\u0442\u0430 \u0438\u0437 \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u0430PY_SCRIPT=$1# 1. \u0415\u0441\u043b\u0438 \u043f\u0435\u0440\u0435\u0434\u0430\u043d \u0444\u043b\u0430\u0433 &#8212;g, \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0435\u043c \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u0438 \u0432\u044b\u0445\u043e\u0434\u0438\u043cif [[ &#171;$1&#187; == &#171;&#8212;g&#187; ]]; then    if [ -d &#171;$VENV_DIR&#187; ]; then        source &#171;$VENV_DIR\/bin\/activate&#187;        FILENAME=&#187;requirements-$(date +&#8217;%Y%m%d-%H%M%S&#8217;).txt&#187;        # \u0421\u043e\u0445\u0440\u0430\u043d\u044f\u0435\u043c, \u043c\u0435\u043d\u044f\u044f == \u043d\u0430 &gt;=        pip freeze | sed &#8216;s\/==\/&gt;=\/g&#8217; &gt; &#171;$FILENAME&#187;        echo &#171;\u0417\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u044b \u0432 $FILENAME&#187;        deactivate    else        echo &#171;\u041e\u0448\u0438\u0431\u043a\u0430: .venv \u043d\u0435 \u043d\u0430\u0439\u0434\u0435\u043d. \u041d\u0435\u0447\u0435\u0433\u043e \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0442\u044c.&#187;    fi    exit 0fi# 2. \u041f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u0438 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0435 .venvif [ ! -d &#171;$VENV_DIR&#187; ]; then    echo &#171;\u0421\u043e\u0437\u0434\u0430\u044e \u0432\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u043e\u0435 \u043e\u043a\u0440\u0443\u0436\u0435\u043d\u0438\u0435&#8230;&#187;    python3 -m venv &#171;$VENV_DIR&#187;    source &#171;$VENV_DIR\/bin\/activate&#187;        echo &#171;\u041e\u0431\u043d\u043e\u0432\u043b\u044f\u044e pip&#8230;&#187;    pip install &#8212;upgrade pip        if [ -f &#171;requirements.txt&#187; ]; then        echo &#171;\u0423\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u044e \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 \u0438\u0437 requirements.txt&#8230;&#187;        pip install -r requirements.txt    fielse    source &#171;$VENV_DIR\/bin\/activate&#187;fi# 3. \u0417\u0430\u043f\u0443\u0441\u043a Python \u0441\u043a\u0440\u0438\u043f\u0442\u0430 (\u0435\u0441\u043b\u0438 \u043f\u0435\u0440\u0435\u0434\u0430\u043d \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442)if [ -n &#171;$PY_SCRIPT&#187; ]; then    if [ -f &#171;$PY_SCRIPT&#187; ]; then        echo &#171;\u0417\u0430\u043f\u0443\u0441\u043a $PY_SCRIPT \u0432\u043d\u0443\u0442\u0440\u0438 $(which python)&#8230;&#187;        python3 &#171;$PY_SCRIPT&#187;    else        echo &#171;\u041e\u0448\u0438\u0431\u043a\u0430: \u0424\u0430\u0439\u043b $PY_SCRIPT \u043d\u0435 \u043d\u0430\u0439\u0434\u0435\u043d.&#187;    fielse    echo &#171;\u041e\u043a\u0440\u0443\u0436\u0435\u043d\u0438\u0435 \u0433\u043e\u0442\u043e\u0432\u043e. \u0418\u043c\u044f \u0441\u043a\u0440\u0438\u043f\u0442\u0430 \u0434\u043b\u044f \u0437\u0430\u043f\u0443\u0441\u043a\u0430 \u043d\u0435 \u0443\u043a\u0430\u0437\u0430\u043d\u043e.&#187;fi# 4. \u0412\u044b\u0445\u043e\u0434 \u0438\u0437 venvdeactivate\u0437\u0430\u043f\u0443\u0441\u043a\u0430\u044f \u043a\u043e\u043c\u0430\u043d\u0434\u043e\u0439 .\/generate_requirements.sh my.py \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0437\u0430\u043f\u0443\u0441\u043a \u0441\u043a\u0440\u0438\u043f\u0442\u0430 \u0441 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u043e\u0439 \u0432\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u043e\u043a\u0440\u0443\u0436\u0435\u043d\u0438\u044f \u043d\u0430 \u043e\u0441\u043d\u043e\u0432\u0435 \u0444\u0430\u0439\u043b\u0430 requirements.txt \u043a\u043e\u0433\u0434\u0430 \u0432\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u043e\u0435 \u043e\u043a\u0440\u0443\u0436\u0435\u043d\u0438\u0435 \u0443\u0436\u0435 \u0441\u043e\u0437\u0434\u0430\u043d\u043e \u0438 \u0438\u043c\u0435\u0435\u0442\u0441\u044f \u043f\u043e\u0432\u0442\u043e\u0440\u043d\u044b\u0439 \u0437\u0430\u043f\u0443\u0441\u043a \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u0435\u0442\u0441\u044f \u0443\u0436\u0435 \u043a \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u043d\u043e\u043c\u0443 venv. \u041f\u0440\u0438\u043c\u0435\u0440 \u0444\u0430\u0439\u043b\u0430 requirements.txtpygame PyOpenGL PyOpenGL_accelerate numpymatplotlib\u0415\u0441\u043b\u0438 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0441\u043a\u0430\u043d\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043f\u0430\u043a\u0435\u0442\u044b \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u044b, \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u0442\u0441\u044f \u0441\u043a\u0440\u0438\u043f\u0442 \u0441 \u0444\u043b\u0430\u0433\u043e\u043c &#8212;g, \u0441\u043e\u0437\u0434\u0430\u0451\u0442\u0441\u044f \u0444\u0430\u0439\u043b \u0441 \u0442\u0430\u0439\u043c\u0441\u0442\u0435\u043c\u043f\u043e\u043c  requirements-20260427-213724.txt   \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0449\u0438\u0439contourpy&gt;=1.3.3 cycler&gt;=0.12.1 fonttools&gt;=4.62.1 kiwisolver&gt;=1.5.0 matplotlib&gt;=3.10.9 numpy&gt;=2.4.4 &#8230;   \u043f\u043e\u0434\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u043d\u044b\u0435 \u0432\u0435\u0440\u0441\u0438\u0438 \u0441 \u0442\u043e\u0447\u043a\u0438 \u0437\u0440\u0435\u043d\u0438\u044f \u043f\u043e\u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0439 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u043e\u0439 \u043d\u043e\u0432\u044b\u0445   my.py  &#8212; \u043b\u044e\u0431\u043e\u0439 hello world, \u043d\u043e \u043b\u0443\u0447\u0448\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043f\u0440\u043e\u043c\u043f\u0442 \u043f\u0440\u0438\u043c\u0435\u0440 \u041f\u0438\u0442\u043e\u043d numpy \u0432\u0435\u043a\u0442\u043e\u0440 \u0432\u044b\u0432\u043e\u0434 \u0443\u043c\u043d\u043e\u0436\u0435\u043d\u0438\u0435 \u0447\u0438\u0441\u043b\u043eimport numpy as np# \u0421\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u0432\u0435\u043a\u0442\u043e\u0440\u0430vector = np.array([1, 2, 3])# \u0423\u043c\u043d\u043e\u0436\u0435\u043d\u0438\u0435 \u043d\u0430 \u0447\u0438\u0441\u043b\u043eresult = vector * 5print(result)# \u0412\u044b\u0432\u043e\u0434: [ 5 10 15]\u041e\u0431\u0440\u0430\u0442\u0438\u0442\u044c \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435 \u043d\u0430 \u0445\u0430\u0440\u0430\u043a\u0442\u0435\u0440 \u0444\u0440\u0430\u0437 \u0438 \u0432\u0432\u0435\u0434\u0435\u043d\u0438\u0435 &#171;\u043f\u0440\u043e\u043c\u043f\u0442&#187; \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445 \u0442\u0430\u043a\u043e\u0439 \u043a\u0430\u043a \u0432\u044d\u043d\u0432 \u0438 \u0441\u043a\u0440\u0438\u043f\u0442. \u0421\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439 \u043f\u0440\u0438\u043c\u0435\u0440 &#8212; \u0441\u043e\u0437\u0434\u0430\u0451\u043c \u0446\u0438\u0444\u0440\u043e\u0432\u043e\u0439 \u0444\u0438\u043b\u044c\u0442\u0440 \u0441 \u0411\u0418\u0425 \u0445\u0430\u0440\u0430\u043a\u0442\u0435\u0440\u0438\u0441\u0442\u0438\u043a\u043e\u0439 \u043d\u0430 \u044f\u0437\u044b\u043a\u0435 \u0421 \u0438 \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u043c \u0435\u0433\u043e \u0441 \u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u0435\u0439 \u0432\u044b\u0445\u043e\u0434\u043d\u043e\u0433\u043e csv \u0444\u0430\u0439\u043b\u0430 \u0441 \u043e\u0442\u0441\u0447\u0451\u0442\u0430\u043c\u0438 \u0438 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f\u043c\u0438 \u043a\u043e\u044d\u0444\u0444\u0438\u0446\u0438\u0435\u043d\u0442\u043e\u0432.\u0426\u0438\u0444\u0440\u043e\u0432\u043e\u0439 \u0444\u0438\u043b\u044c\u0442\u0440 &#8212; \u044f\u0434\u0440\u043e\u0445\u043e\u0442\u0435\u0442\u044c \u0446\u0438\u0444\u0440\u043e\u0432\u043e\u0439 \u0444\u0438\u043b\u044c\u0442\u0440 \u0447\u0438\u0441\u0442\u044b\u0439 \u0421 \u0444\u0430\u0439\u043b \u043a\u0430\u043b\u044c\u043a\u044e\u043b\u044f\u0439\u0442 \u0441\u0438 \u0444\u0443\u043d\u043a\u0446\u0438\u044f \u043a\u0430\u043b\u044c\u043a\u0443\u043b\u044f\u0439\u0442 \u0446\u0438\u043a\u043b \u043f\u043e n \u043e\u0442\u0441\u0447\u0451\u0442\u0430\u043c \u0432\u0445\u043e\u0434 n, \u043c\u0430\u0441\u0441\u0438\u0432 \u0432\u044b\u0445\u043e\u0434\u043e\u0432 \u0440\u0430\u0437\u043c\u0435\u0440 n, \u043c\u0430\u0441\u0441\u0438\u0432 \u043e\u0442\u0441\u0447\u0451\u0442\u043e\u0432 \u0445, \u0438 \u043a\u043e\u044d\u0444\u0444\u0438\u0446\u0438\u0435\u043d\u0442\u043e\u0432 \u0441\u0445 \u043e\u0434\u0438\u043d\u0430\u043a\u043e\u0432\u044b\u0435 \u0440\u0430\u0437\u043c\u0435\u0440, \u0447\u0438\u0441\u043b\u043e \u043a\u043e\u044d\u0444\u0444\u0438\u0446\u0438\u0435\u043d\u0442\u043e\u0432 \u044d\u043d\u0438\u043a\u0441, \u043c\u0430\u0441\u0441\u0438\u0432 \u043e\u0442\u0441\u0447\u0451\u0442\u043e\u0432 \u0443, \u0438 \u043a\u043e\u044d\u0444\u0444\u0438\u0446\u0438\u0435\u043d\u0442\u043e\u0432 \u0441\u0443 \u043e\u0434\u0438\u043d\u0430\u043a\u043e\u0432\u044b\u0435 \u0440\u0430\u0437\u043c\u0435\u0440, \u0447\u0438\u0441\u043b\u043e \u043a\u043e\u044d\u0444\u0444\u0438\u0446\u0438\u0435\u043d\u0442\u043e\u0432 \u044d\u043d\u0438\u0433\u0440\u0435\u043a, \u043e\u0442\u0441\u0447\u0451\u0442\u044b \u0438 \u043a\u043e\u044d\u0444\u0444\u0438\u0446\u0438\u0435\u043d\u0442\u044b \u0444\u043b\u043e\u0430\u0442 \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u043e\u0435 \u0438\u043d\u0442 \u0440\u0430\u0437\u043c\u0435\u0440. \u0432\u043d\u0443\u0442\u0440\u0438 \u0430\u043a\u043a\u0443\u043c\u0443\u043b\u044f\u0442\u043e\u0440 \u0430\u043a\u043a \u043d\u043e\u043b\u044c, \u0432\u0445\u043e\u0434 \u0445 \u043d\u0443\u043b\u0435\u0432\u043e\u0439 \u043a\u043e\u043d\u0441\u0442\u0430\u043d\u0442\u0430 \u0437\u0430\u0434\u0430\u0442\u044c 1 \u0437\u0430\u0442\u0435\u043c \u0446\u0438\u043a\u043b \u0443\u043c\u043d\u043e\u0436\u0435\u043d\u0438\u0435 \u0441 \u043d\u0430\u043a\u043e\u043f\u043b\u0435\u043d\u0438\u0435\u043c \u0441\u0445 \u0438 \u0441 \u0446\u0438\u043a\u043b \u0443\u043c\u043d\u043e\u0436\u0435\u043d\u0438\u0435 \u0441 \u043d\u0430\u043a\u043e\u043f\u043b\u0435\u043d\u0438\u0435\u043c \u0441\u0443 \u0438 \u0443 \u0432 \u0430\u043a\u043a\u0443\u043c\u0443\u043b\u044f\u0442\u043e\u0440. \u0441\u0434\u0432\u0438\u0433\u0430\u0442\u044c \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u044b \u043c\u0430\u0441\u0441\u0438\u0432\u044b \u0445 \u0438 \u0443 \u043f\u0440\u044f\u043c\u043e\u0439 \u043f\u043e\u0440\u044f\u0434\u043e\u043a \u043e\u0442\u0441\u0447\u0451\u0442\u043e\u0432 \u043d\u0430 \u043e\u0434\u0438\u043d \u0442\u043e\u043b\u044c\u043a\u043e \u0438\u043d\u043a\u0440\u0435\u043c\u0435\u043d\u0442 \u0438\u043d\u0434\u0435\u043a\u0441\u0430 \u043f\u043b\u044e\u0441 \u043f\u043b\u044e\u0441, \u043d\u0430\u0447\u0430\u0442\u044c \u0438\u043d\u0434\u0435\u043a\u0441 \u043d\u043e\u043b\u044c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0432\u0440\u0435\u043c\u0435\u043d\u043d\u0430\u044f \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0430\u044f t1 t2 \u043e\u0431\u043c\u0435\u043d \u0441\u043e\u0445\u0440\u0430\u043d\u0438\u0442\u044c \u0430\u043a\u043a\u0443\u043c\u0443\u043b\u044f\u0442\u043e\u0440 \u043c\u0430\u0441\u0441\u0438\u0432 \u0432\u044b\u0445\u043e\u0434\u043e\u0432\u041f\u043e \u0434\u0430\u043d\u043d\u043e\u043c\u0443 \u043f\u0440\u043e\u043c\u043f\u0442\u0443 \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439 \u043a\u043e\u0434, \u043f\u0440\u0438\u0447\u0451\u043c, +- \u043e\u0434\u0438\u043d\u0430\u043a\u043e\u0432\u044b\u0439 \u0434\u043b\u044f \u043b\u044e\u0431\u044b\u0445 \u043c\u043e\u0434\u0435\u043b\u0435\u0439. void calculate(int n, float* outputs, float* x, float* cx, int nx, float* y, float* cy, int ny) {    for (int i = 0; i &lt; n; i++) {        float acc = 0.0f;                \/\/ \u0412\u0445\u043e\u0434\u043d\u043e\u0439 \u043e\u0442\u0441\u0447\u0435\u0442 x[0] \u043a\u043e\u043d\u0441\u0442\u0430\u043d\u0442\u0430 1 (\u0441\u043e\u0433\u043b\u0430\u0441\u043d\u043e \u0437\u0430\u043f\u0440\u043e\u0441\u0443)        x[0] = 1.0f;        \/\/ \u0426\u0438\u043a\u043b \u0443\u043c\u043d\u043e\u0436\u0435\u043d\u0438\u044f \u0441 \u043d\u0430\u043a\u043e\u043f\u043b\u0435\u043d\u0438\u0435\u043c \u0434\u043b\u044f \u0432\u0445\u043e\u0434\u043e\u0432 (\u0441\u0445 \u0438 \u0445)        for (int j = 0; j &lt; nx; j++) {            acc += cx[j] * x[j];        }        \/\/ \u0426\u0438\u043a\u043b \u0443\u043c\u043d\u043e\u0436\u0435\u043d\u0438\u044f \u0441 \u043d\u0430\u043a\u043e\u043f\u043b\u0435\u043d\u0438\u0435\u043c \u0434\u043b\u044f \u0432\u044b\u0445\u043e\u0434\u043e\u0432 (\u0441\u0443 \u0438 \u0443)        \/\/ \u041e\u0431\u044b\u0447\u043d\u043e \u0443[0] \u043d\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0432 \u0441\u0443\u043c\u043c\u0435 \u0434\u043b\u044f \u0440\u0430\u0441\u0447\u0435\u0442\u0430 \u0442\u0435\u043a\u0443\u0449\u0435\u0433\u043e \u0443[0],         \/\/ \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u043c \u0441 1, \u0435\u0441\u043b\u0438 \u0441\u0443[0] \u043d\u0435 \u043f\u0440\u0435\u0434\u0443\u0441\u043c\u043e\u0442\u0440\u0435\u043d \u043a\u0430\u043a \u043e\u0431\u0440\u0430\u0442\u043d\u0430\u044f \u0441\u0432\u044f\u0437\u044c        for (int j = 1; j &lt; ny; j++) {            acc += cy[j] * y[j];        }        \/\/ \u0421\u043e\u0445\u0440\u0430\u043d\u044f\u0435\u043c \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442        outputs[i] = acc;        y[0] = acc;        \/\/ \u0421\u0434\u0432\u0438\u0433 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432 \u043c\u0430\u0441\u0441\u0438\u0432\u043e\u0432 \u0445 \u0438 \u0443 (\u043f\u0440\u044f\u043c\u043e\u0439 \u043f\u043e\u0440\u044f\u0434\u043e\u043a, \u0438\u043d\u043a\u0440\u0435\u043c\u0435\u043d\u0442 ++)        \/\/ \u0418\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c \u0432\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 t1, t2 \u0434\u043b\u044f \u043e\u0431\u043c\u0435\u043d\u0430 (\u0441\u0434\u0432\u0438\u0433\u0430)        float t1, t2;        \/\/ \u0421\u0434\u0432\u0438\u0433 X        t1 = x[0];        for (int j = 1; j &lt; nx; j++) {            t2 = x[j];            x[j] = t1;            t1 = t2;        }        \/\/ \u0421\u0434\u0432\u0438\u0433 Y        t1 = y[0];        for (int j = 1; j &lt; ny; j++) {            t2 = y[j];            y[j] = t1;            t1 = t2;        }    }}\u041e\u0442\u043b\u0438\u0447\u043d\u044b\u0439 \u0444\u0438\u043b\u044c\u0442\u0440! \u041a\u0430\u043a \u0438 \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f &#8212; \u0443\u043c\u043d\u043e\u0436\u0435\u043d\u0438\u0435 \u0441 \u043d\u0430\u043a\u043e\u043f\u043b\u0435\u043d\u0438\u0435\u043c, \u0441\u0434\u0432\u0438\u0433 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432 \u043d\u0430 1 \u0442\u043e\u043b\u044c\u043a\u043e \u0441 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435\u043c \u0438\u043d\u043a\u0440\u0435\u043c\u0435\u043d\u0442\u0430 \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044f. \u041d\u0430 \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0430\u0445 DSP \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440\u043e\u0432 \u0435\u0441\u0442\u044c  \u043a\u043e\u043c\u0430\u043d\u0434\u044b, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442 \u043f\u043e\u0441\u0442-\u0438\u043d\u043a\u0440\u0435\u043c\u0435\u043d\u0442 \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044f. \u041f\u0440\u0438\u043c\u0435\u0440 \u043a\u043e\u0434\u0430 \u0430\u0441\u0441\u0435\u043c\u0431\u043b\u0435\u0440\u0430 \u0438 \u043f\u0440\u043e\u043c\u043f\u0442 \u0434\u043b\u044f \u044d\u0442\u043e\u0433\u043e:\u0445\u043e\u0442\u0435\u0442\u044c \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u0441\u0434\u0432\u0438\u0433 \u043c\u0430\u0441\u0441\u0438\u0432\u043e\u0432 \u0425 \u0438 \u0423 \u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442 \u043a\u043e\u0434\u0430 \u0430\u0441\u0441\u0435\u043c\u0431\u043b\u0435\u0440 \u0434\u043b\u044f \u0422\u0435\u0445\u0430\u0441 \u0418\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u044b \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440 \u0441\u0435\u043c\u0435\u0439\u0441\u0442\u0432\u0430 \u04212000 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0439 \u043f\u043e\u0441\u0442-\u0438\u043d\u043a\u0440\u0435\u043c\u0435\u043d\u0442; \u041f\u0440\u0435\u0434\u043f\u043e\u043b\u043e\u0436\u0438\u043c:; XAR4 \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442 \u043d\u0430 \u043d\u0430\u0447\u0430\u043b\u043e \u043c\u0430\u0441\u0441\u0438\u0432\u0430 (X[0]); XAR5 \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442 \u043d\u0430 X[1]; AL \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u043a\u0430\u043a \u0432\u0440\u0435\u043c\u0435\u043d\u043d\u0430\u044f \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0430\u044f (T1); PH \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u043a\u0430\u043a \u0441\u0447\u0435\u0442\u0447\u0438\u043a (NX &#8212; 1)        MOVZ    AR6, @NX        ; \u0417\u0430\u0433\u0440\u0443\u0436\u0430\u0435\u043c NX        SUBB    XAR6, #1        ; \u041d\u0430\u043c \u043d\u0443\u0436\u043d\u043e NX-1 \u0438\u0442\u0435\u0440\u0430\u0446\u0438\u0439 \u0434\u043b\u044f \u0441\u0434\u0432\u0438\u0433\u0430        MOVZ    AR0, @AR6       ; \u041f\u0435\u0440\u0435\u043d\u043e\u0441\u0438\u043c \u0432 AR0 \u0434\u043b\u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u0432 BANZ        ; \u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u0435\u0439        MOVL    XAR4, #_X       ; \u0410\u0434\u0440\u0435\u0441 X[0]        MOVL    XAR5, #_X       ; \u0410\u0434\u0440\u0435\u0441 X[0]        ADDB    XAR5, #1        ; \u0422\u0435\u043f\u0435\u0440\u044c XAR5 \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442 \u043d\u0430 X[1]SHIFT_LOOP:        MOV     AL, *XAR4       ; T1 = X[i]        MOV     AH, *XAR5       ; \u0412\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0439 \u0431\u0443\u0444\u0435\u0440 \u0434\u043b\u044f \u043e\u0431\u043c\u0435\u043d\u0430 (T2)        MOV     *XAR4++, AH     ; X[i] = X[i+1], \u0438\u043d\u043a\u0440\u0435\u043c\u0435\u043d\u0442 \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044f i        MOV     *XAR5++, AL     ; X[i+1] = T1, \u0438\u043d\u043a\u0440\u0435\u043c\u0435\u043d\u0442 \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044f i+1                BANZ    SHIFT_LOOP, AR0&#8212; ; \u0426\u0438\u043a\u043b, \u043f\u043e\u043a\u0430 AR0 \u043d\u0435 \u0441\u0442\u0430\u043d\u0435\u0442 0\u0414\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u043d\u0435\u043f\u043b\u043e\u0445\u043e, \u043d\u043e \u0442\u0440\u0435\u0431\u0443\u0435\u0442 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438, \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u043e\u0441\u0442\u0430\u0432\u0438\u043c \u0437\u0430 \u043a\u0430\u0434\u0440\u043e\u043c. \u0427\u0442\u043e \u043a\u0430\u0441\u0430\u0435\u0442\u0441\u044f \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u0438 \u0442\u043e \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u043a\u043b\u0430\u0441\u0441\u0438\u0447\u0435\u0441\u043a\u043e\u0435 \u0440\u0435\u0448\u0435\u043d\u0438\u0435\u0445\u043e\u0442\u0435\u0442\u044c \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u0430\u0441\u0441\u0435\u043c\u0431\u043b\u0435\u0440 \u043a\u043e\u0434 \u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442 \u0444\u0438\u043b\u044c\u0442\u0440 \u0434\u043b\u044f \u0422\u0435\u0445\u0430\u0441 \u0418\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u044b \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440 \u0441\u0435\u043c\u0435\u0439\u0441\u0442\u0432\u0430 \u04212000 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0439 \u0440\u044d\u043f \u0438 \u043c\u0430\u043a; \u041d\u0430 \u0432\u0445\u043e\u0434\u0435:; XAR4 &#8212; \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c \u043d\u0430 \u043c\u0430\u0441\u0441\u0438\u0432 \u0434\u0430\u043d\u043d\u044b\u0445 (X); XAR5 &#8212; \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c \u043d\u0430 \u043c\u0430\u0441\u0441\u0438\u0432 \u043a\u043e\u044d\u0444\u0444\u0438\u0446\u0438\u0435\u043d\u0442\u043e\u0432 (CX); PH   &#8212; \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u043a\u043e\u044d\u0444\u0444\u0438\u0446\u0438\u0435\u043d\u0442\u043e\u0432 (NX); ACC  &#8212; \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 (\u0430\u043a\u043a\u0443\u043c\u0443\u043b\u044f\u0442\u043e\u0440)        ZAPA                    ; \u041e\u0431\u043d\u0443\u043b\u0438\u0442\u044c ACC \u0438 P (\u0440\u0435\u0433\u0438\u0441\u0442\u0440 \u043f\u0440\u043e\u0438\u0437\u0432\u0435\u0434\u0435\u043d\u0438\u044f)        MOVZ    AR0, @NX        ; \u0417\u0430\u0433\u0440\u0443\u0437\u0438\u0442\u044c \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0438\u0442\u0435\u0440\u0430\u0446\u0438\u0439 (NX)        SUBB    XAR0, #1        ; RPT \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442 N+1 \u0440\u0430\u0437, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0432\u044b\u0447\u0438\u0442\u0430\u0435\u043c 1        ; &#8212; \u0426\u0438\u043a\u043b \u0443\u043c\u043d\u043e\u0436\u0435\u043d\u0438\u044f \u0441 \u043d\u0430\u043a\u043e\u043f\u043b\u0435\u043d\u0438\u0435\u043c (MAC) &#8212;        ; RPT \u043f\u043e\u0432\u0442\u043e\u0440\u044f\u0435\u0442 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0443\u044e \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u044e AR0 \u0440\u0430\u0437        ; *XAR4++ : \u0431\u0435\u0440\u0435\u0442 X[i], \u043f\u043e\u0441\u0442-\u0438\u043d\u043a\u0440\u0435\u043c\u0435\u043d\u0442 \u0430\u0434\u0440\u0435\u0441\u0430        ; *XAR5++ : \u0431\u0435\u0440\u0435\u0442 CX[i], \u043f\u043e\u0441\u0442-\u0438\u043d\u043a\u0440\u0435\u043c\u0435\u043d\u0442 \u0430\u0434\u0440\u0435\u0441\u0430        RPT     @AR0        MAC     *XAR4++, *XAR5++, ACC                ADDL    ACC, P          ; \u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0439 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u043f\u0440\u043e\u0438\u0437\u0432\u0435\u0434\u0435\u043d\u0438\u044f \u0432 ACC\u0414\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u043f\u043e\u043f\u0440\u043e\u0441\u0438\u0442\u044c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043a\u043e\u043c\u0430\u043d\u0434\u044b RPT (\u0440\u044d\u043f) &#8212; \u043f\u043e\u0432\u0442\u043e\u0440\u0435\u043d\u0438\u0435 \u0437\u0430\u0434\u0430\u043d\u043d\u043e\u0433\u043e \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u0430 \u0440\u0430\u0437 \u0432 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0435 \u0438 MAC (\u043c\u0430\u043a) &#8212; \u0443\u043c\u043d\u043e\u0436\u0435\u043d\u0438\u0435 \u0441 \u043d\u0430\u043a\u043e\u043f\u043b\u0435\u043d\u0438\u0435\u043c. \u041f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u043d\u0430 \u0430\u0441\u0441\u0435\u043c\u0431\u043b\u0435\u0440\u0435 RPT-MAC \u043e\u0437\u043d\u0430\u0447\u0430\u0435\u0442 \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u044c \u044d\u0442\u0443 \u043a\u043e\u043c\u0430\u043d\u0434\u0443 \u0437\u0430\u0434\u0430\u043d\u043d\u043e\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0440\u0430\u0437, \u043e\u0447\u0435\u043d\u044c \u0443\u0434\u043e\u0431\u043d\u043e \u0434\u043b\u044f \u043f\u043e\u0432\u0442\u043e\u0440\u044f\u044e\u0449\u0438\u0445\u0441\u044f \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0439. \u0414\u043b\u044f \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u0438 \u043f\u043e\u043f\u0440\u043e\u0441\u0438\u0442\u044c MACD. \u041e\u043f\u0442\u0438\u043c\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u0430\u044f \u0432\u0435\u0440\u0441\u0438\u044f\u0445\u043e\u0442\u0435\u0442\u044c \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u0430\u0441\u0441\u0435\u043c\u0431\u043b\u0435\u0440 \u043a\u043e\u0434 \u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442 \u0444\u0438\u043b\u044c\u0442\u0440 \u0434\u043b\u044f \u0422\u0435\u0445\u0430\u0441 \u0418\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u044b \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440 \u0441\u0435\u043c\u0435\u0439\u0441\u0442\u0432\u0430 \u04212000 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0439 \u043a\u043e\u043c\u0430\u043d\u0434\u0443 \u041c\u0430\u043a\u0434\u043e\u043d\u0430\u043b\u044c\u0434\u0441 \u0432\u043c\u0435\u0441\u0442\u043e \u04221 \u04222; XAR4 \u2014 \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442 \u043d\u0430 \u041f\u041e\u0421\u041b\u0415\u0414\u041d\u0418\u0419 \u044d\u043b\u0435\u043c\u0435\u043d\u0442 \u043c\u0430\u0441\u0441\u0438\u0432\u0430 \u0434\u0430\u043d\u043d\u044b\u0445 X (X[NX-1]); XAR5 \u2014 \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442 \u043d\u0430 \u041f\u041e\u0421\u041b\u0415\u0414\u041d\u0418\u0419 \u044d\u043b\u0435\u043c\u0435\u043d\u0442 \u043c\u0430\u0441\u0441\u0438\u0432\u0430 \u043a\u043e\u044d\u0444\u0444\u0438\u0446\u0438\u0435\u043d\u0442\u043e\u0432 CX (CX[NX-1]); ACC  \u2014 \u0430\u043a\u043a\u0443\u043c\u0443\u043b\u044f\u0442\u043e\u0440 (\u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442); \u041e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u043e: \u043c\u0430\u0441\u0441\u0438\u0432\u044b \u0434\u043e\u043b\u0436\u043d\u044b \u0438\u0434\u0442\u0438 &#171;\u0437\u0430\u0434\u043e\u043c \u043d\u0430\u043f\u0435\u0440\u0435\u0434&#187; \u0434\u043b\u044f \u043b\u043e\u0433\u0438\u043a\u0438 \u0441\u0434\u0432\u0438\u0433\u0430 MACD        SETC    SXM             ; \u0412\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u0437\u043d\u0430\u043a\u043e\u0432\u043e\u0435 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u0435        ZAPA                    ; \u041e\u0431\u043d\u0443\u043b\u0438\u0442\u044c ACC \u0438 P        MOVZ    AR0, @NX        ; \u0417\u0430\u0433\u0440\u0443\u0436\u0430\u0435\u043c \u0447\u0438\u0441\u043b\u043e \u043a\u043e\u044d\u0444\u0444\u0438\u0446\u0438\u0435\u043d\u0442\u043e\u0432        SUBB    XAR0, #1        ; \u041a\u043e\u0440\u0440\u0435\u043a\u0442\u0438\u0440\u043e\u0432\u043a\u0430 \u0434\u043b\u044f RPT (\u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442 N+1 \u0440\u0430\u0437)        ; &#8212; \u0413\u043b\u0430\u0432\u043d\u044b\u0439 \u0446\u0438\u043a\u043b \u0444\u0438\u043b\u044c\u0442\u0440\u0430\u0446\u0438\u0438 &#8212;        ; MACD \u0434\u0435\u043b\u0430\u0435\u0442: P = *XAR4 * *XAR5, ACC = ACC + P,         ; \u0437\u0430\u0442\u0435\u043c \u043a\u043e\u043f\u0438\u0440\u0443\u0435\u0442: *(XAR4+1) = *XAR4 (\u0441\u0434\u0432\u0438\u0433!)        ; \u0438 \u0434\u0435\u043b\u0430\u0435\u0442 \u0434\u0435\u043a\u0440\u0435\u043c\u0435\u043d\u0442: XAR4&#8212;, XAR5&#8212; (\u043f\u043e\u0441\u0442-\u0434\u0435\u043a\u0440\u0435\u043c\u0435\u043d\u0442)                RPT     @AR0        MACD    ACC, *XAR4&#8212;, *XAR5&#8212;        ADDL    ACC, P          ; \u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0444\u0438\u043d\u0430\u043b\u044c\u043d\u043e\u0435 \u043f\u0440\u043e\u0438\u0437\u0432\u0435\u0434\u0435\u043d\u0438\u0435 \u0432 ACC\u041f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u043f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u0432\u0430\u0440\u0438\u0430\u043d\u0442. \u041d\u043e \u044d\u0442\u043e \u0443\u0436\u0435 \u0434\u0440\u0443\u0433\u0430\u044f \u0438\u0441\u0442\u043e\u0440\u0438\u044f, \u043a\u0430\u043a\u043e\u0439 \u043a\u043e\u043c\u0430\u043d\u0434\u043e\u0439 \u043e\u0431\u043d\u0443\u043b\u0438\u0442\u044c \u0430\u043a\u043a\u0443\u043c\u0443\u043b\u044f\u0442\u043e\u0440. \u0421\u043e\u0437\u0434\u0430\u0451\u043c \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u0447\u043d\u0438\u043a\u0445\u043e\u0442\u0435\u0442\u044c \u043a\u0430\u043b\u044c\u043a\u044e\u043b\u044f\u0439\u0442 \u0430\u0448 \u0441 \u043f\u0440\u043e\u0442\u043e\u0442\u0438\u043f\u043e\u043c \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u043a\u0430\u043b\u044c\u043a, \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442 \u0438 \u043a\u0438\u0441\u043b\u043e\u0440\u043e\u0434 \u043d\u043e \u0431\u0443\u0434\u044c \u043e\u0441\u0442\u043e\u0440\u043e\u0436\u0435\u043d \u0441 \u0442\u0438\u043f\u0430\u043c\u0438 \u0438 \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044f\u043c\u0438\/** * @file calculate.h * @brief \u0420\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u0446\u0438\u0444\u0440\u043e\u0432\u043e\u0433\u043e \u0444\u0438\u043b\u044c\u0442\u0440\u0430 (\u041f\u0440\u044f\u043c\u0430\u044f \u0444\u043e\u0440\u043c\u0430 I). *\/#ifndef CALCULATE_H#define&#8230;<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[],"tags":[],"class_list":["post-477676","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/477676","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=477676"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/477676\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=477676"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=477676"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=477676"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}