{
 "cells": [
  {
   "cell_type": "markdown",
   "id": "dbb8100b",
   "metadata": {},
   "source": [
    "Лабораторная работа разработана Т.Ф. Долгих к.ф.-м.н., доц. кафедры ВМ и МФ мехмата ЮФУ &#128105;&#8205;&#127979;.\n",
    "\n",
    "-----------------------\n",
    "\n",
    "\n",
    "# <span style=\"color: red\">Внимание!</span>\n",
    "\n",
    "Перед началом работы переименуйте файл &#128105;&#8205;&#128187;\n",
    "\n",
    "Для этого выберите **File $\\to$ Rename...** и измените **NameStud** на свою фамилию, записанную латинскими буквами.\n",
    "\n",
    "-----------------------"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "3cb7d423",
   "metadata": {},
   "source": [
    "## Задание 1 &#128105;&#8205;&#127891;\n",
    "\n",
    "Дано натуральное число $n$. Проверить, есть ли в записи числа $n$ цифра 5.\n",
    "Как только условие будет нарушено, работу цикла прекратить.\n",
    " \n",
    "*Указание 1.* В программе запрещено использовать ЛЮБЫЕ выбирающие операторы или конструкции, а также оператор `break`.\n",
    " \n",
    "*Указание 2.* В программе обязательно должны присутствовать операторы для построения трассировочной таблицы и вывода ответа &mdash; `True` или `False`."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "id": "f5690b28",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "n = 1563\n",
      " 1563   True    True   True\n",
      "  156   True    True   True\n",
      "   15   True   False  False\n",
      "True\n"
     ]
    }
   ],
   "source": [
    "n = int(input('n = '))\n",
    "\n",
    "print(('%5d %6s  %6s %6s') % (n, n > 0, n % 10 != 5, n > 0 and n % 10 != 5))\n",
    "while n > 0 and n % 10 != 5:\n",
    "    n //= 10\n",
    "    print(('%5d %6s  %6s %6s') % (n, n > 0, n % 10 != 5, n > 0 and n % 10 != 5))\n",
    "    \n",
    "print(n > 0)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "ade0e549",
   "metadata": {},
   "source": [
    "## Задание 2 &#128105;&#8205;&#127891;\n",
    "\n",
    "Дано натуральное число $n$. Проверить, есть ли в записи числа $n$ цифра 5.\n",
    "Как только условие будет нарушено, работу цикла прекратить.\n",
    " \n",
    "*Указание 1.* В программе используйте по ОДНОМУ разу: `while`, `if`, `break`, `print()`.\n",
    " \n",
    "*Указание 2.* Не использовать булевские переменные.\n",
    "\n",
    "*Указание 3.* В программе обязательно должен присутствовать оператор для вывода ответа &mdash; `True` или `False`."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "id": "76a951c9",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "n = 51\n",
      "True\n"
     ]
    }
   ],
   "source": [
    "n = int(input('n = '))\n",
    "\n",
    "while n > 0:\n",
    "    if n % 10 == 5:\n",
    "        break\n",
    "    n //= 10\n",
    "    \n",
    "print(n > 0)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "ce364db4",
   "metadata": {},
   "source": [
    "## Задание 3 &#128105;&#8205;&#127891;\n",
    "\n",
    "Дано действительное $b < 0$. \n",
    "Найти первый положительный член последовательности $a_0$, $a_1$, $a_2$, $a_3$,$\\ldots$, образованной по закону:\n",
    "$$\n",
    "a_0 = b, \\quad\n",
    "a_i = a_{i-1} + \\frac{3i}{i^2 + 1}, \\quad\n",
    "i = 1, 2, 3, 4,\\ldots\n",
    "$$"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 23,
   "id": "0caaf83a",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "b (<0) = -5\n",
      "    0 -5.00000   True\n",
      "    1 -3.50000   True\n",
      "    2 -2.30000   True\n",
      "    3 -1.40000   True\n",
      "    4 -0.69412   True\n",
      "    5 -0.11719   True\n",
      "    6  0.36929  False\n",
      "a =  0.36929,   6\n"
     ]
    }
   ],
   "source": [
    "b = float(input('b (<0) = '))\n",
    "\n",
    "a, i = b, 0\n",
    "\n",
    "print('%5d %8.5f %6s' % (i, a, a <= 0))\n",
    "while a <= 0:\n",
    "    i += 1\n",
    "    a = a + 3*i / (i*i + 1)\n",
    "    print('%5d %8.5f %6s' % (i, a, a <= 0))\n",
    "    \n",
    "print('a = %8.5f, %3d' % (a, i))\n"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "fdd91978",
   "metadata": {},
   "source": [
    "## Задание 3* &#128105;&#8205;&#127891;\n",
    "\n",
    "Добавить в решение задачи 3 операторы для печати трассировочной таблицы."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "cba26893",
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "markdown",
   "id": "a8e05c72",
   "metadata": {},
   "source": [
    "## Задание 4 &#128105;&#8205;&#127891;\n",
    "\n",
    "Вычислить приближенное значение бесконечной суммы\n",
    "$$\n",
    "\\frac{1}{1 \\cdot 2} + \\frac{1}{2 \\cdot 3} + \\frac{1}{3 \\cdot 4} + \\ldots\n",
    "$$\n",
    "Вычисления продолжать до тех пор пока очередное слагаемое не окажется меньше числа $\\varepsilon = 10^{-6}$.\n",
    "\n",
    "*Указание.*  Осуществите проверку результата при помощи библиотеки `sympy`."
   ]
  },
  {
   "cell_type": "markdown",
   "id": "fb040736",
   "metadata": {},
   "source": [
    "$$\n",
    " \\sum_{i=1}^\\infty y_i, \\quad y_1 = \\frac{1}{1\\cdot 2}, \\ y_2 = \\frac{1}{2\\cdot 3}, \\ \\dots, \\ \n",
    " y_i = \\frac{1}{i(i+1)}\n",
    "$$\n",
    "\n",
    "$$\n",
    "  y_1 = \\frac{1}{1\\cdot 2}, \\ \\ y_i = \\frac{1}{i(i+1)}, \\ \\ i = 2, 3, \\dots\n",
    "$$"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 37,
   "id": "3accdb64",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "0.999000\n",
      "999\n"
     ]
    }
   ],
   "source": [
    "EPS = 1e-6\n",
    "\n",
    "s = 0\n",
    "\n",
    "y, i = 0.5, 1\n",
    "while y >= EPS:\n",
    "    s += y\n",
    "    i += 1\n",
    "    y = 1 / i / (i+1)\n",
    "    \n",
    "print('%8.6f' % s)     \n",
    "print(i-1)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 42,
   "id": "68f87ed3",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      " 999           \n",
      " ____          \n",
      " ╲             \n",
      "  ╲            \n",
      "   ╲      1    \n",
      "   ╱  ─────────\n",
      "  ╱   i⋅(i + 1)\n",
      " ╱             \n",
      " ‾‾‾‾          \n",
      "i = 1          \n",
      "0.999000\n"
     ]
    }
   ],
   "source": [
    "# для sympy\n",
    "from sympy import *\n",
    "\n",
    "i = Symbol('i')\n",
    "sm = Sum(1 / i / (i+1), (i, 1, 999))  # oo бесконечность\n",
    "\n",
    "#print(sm)  # Sum(1/(i*(i + 1)), (i, 1, 999))\n",
    "pprint(sm)\n",
    "\n",
    "print(sm.doit().evalf(6))\n"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "1a69cce0",
   "metadata": {},
   "source": [
    "## Задание 5 &#128105;&#8205;&#127891;\n",
    "\n",
    "Вычислить приближенное значение бесконечной суммы\n",
    "$$\n",
    "  1 - \\frac{1}{3} + \\frac{1}{5} - \\frac{1}{7} + \\ldots\n",
    "$$\n",
    "Вычисления продолжать до тех пор пока очередное слагаемое не окажется меньше числа $\\varepsilon = 10^{-4}$.\n",
    "\n",
    "*Указание.*  Осуществите проверку результата при помощи библиотеки `sympy`."
   ]
  },
  {
   "cell_type": "markdown",
   "id": "5049e78a",
   "metadata": {},
   "source": [
    "$$\n",
    "  y_0 = 1, \\ y_1 = -\\frac13, \\ y_2 = \\frac15,\\ \\dots, \\ y_i = \\frac{(-1)^i}{2i+1}  \n",
    "$$\n",
    "\n",
    "$$\n",
    "   y_0 = 1, \\ y_i = \\frac{(-1)^i}{2i+1}, \\ i = 1, 2, \\dots\n",
    "$$\n",
    "$$\n",
    "(-1)^i: \\ 1, \\ -1, \\ 1, \\ -1\n",
    "$$"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 54,
   "id": "0acb645a",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      " 0.78535\n",
      "4999\n"
     ]
    }
   ],
   "source": [
    "EPS = 1e-4\n",
    "\n",
    "s = 0\n",
    "y, i = 1, 0\n",
    "z = 1\n",
    "\n",
    "while abs(y) >= EPS:\n",
    "    s += y\n",
    "    z = -z\n",
    "    i += 1\n",
    "    y = z / (2*i+1)\n",
    "\n",
    "print('%8.5f' % s)     \n",
    "print(i-1)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 52,
   "id": "248a8d9c",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      " 4999        \n",
      " ____        \n",
      " ╲           \n",
      "  ╲        i \n",
      "   ╲   (-1)  \n",
      "   ╱  ───────\n",
      "  ╱   2⋅i + 1\n",
      " ╱           \n",
      " ‾‾‾‾        \n",
      "i = 0        \n",
      "0.7853\n"
     ]
    }
   ],
   "source": [
    "# для sympy\n",
    "from sympy import *\n",
    "\n",
    "i = Symbol('i')\n",
    "sm = Sum((-1)**i/(2*i+1), (i, 0, 4999))  # oo бесконечность\n",
    "\n",
    "pprint(sm)\n",
    "\n",
    "print(sm.doit().evalf(4))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "5e5743fe",
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3 (ipykernel)",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.9.7"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
