<?xml version="1.0" encoding="UTF-8"?>
<module name="Стандартные алгоритмы">
  Встроенные алгоритмы системы КуМир на все случаи жизни.
  <alg name="sqrt">
    <description>Возвращает квадратный корень из <arg id="1">x</arg> (<arg id="1">x</arg> &gt;= 0).</description>
    <example>
      вещ х
      алг
      нач
      . ввод х
      . х := sqrt (х)
      . вывод "корень квадратный из числа х равен ", х
      кон
    </example>
  </alg>
  <alg name="abs">
    <description>Абсолютная величина вещественного числа <arg id="1">x</arg> (|<arg id="1">x</arg>|).</description>
    <example>
      вещ а, б
      алг
      нач
      . ввод а,б
      . а := а+б
      . а := abs(а)
      . вывод "Модуль суммы чисел равен ", а
      кон
    </example>
  </alg>
  <alg name="iabs">
    <description>Абсолютная величина целого числа <arg id="1">x</arg> (|<arg id="1">x</arg>|).</description>
    <example>
      цел а, б
      алг
      нач
      . ввод а,б
      . а := iabs(а)
      . б := iabs(б)
      . вывод а+б
      кон
    </example>
  </alg>
  <alg name="sign">
    <description>Знак числа <arg id="1">x</arg> (-1, 0 или 1):
      <ul>
	<li>-1, если x &lt; 0</li>
	<li>0, если x = 0</li>
	<li>1, если x &gt; 0</li>
      </ul>
    </description>
    <example>
      цел а, б
      алг
      нач
      . ввод а
      . б := sign(а)
      . если б=-1
      . . то вывод а, "&lt;=0"
      . . иначе
      . . . если б=0
      . . . . то вывод а, "=0"
      . . . . иначе вывод а, "&gt;=0"
      . . . все
      . все
      кон
    </example>
  </alg>
  <alg name="sin">
    <description>Синус <arg id="1">x</arg>.</description>
    <example>
      вещ х
      алг
      нач
      . ввод х
      . х := sin (х)
      . вывод "синус угла х равен ", х
      кон
      вещ x, y
      алг
      нач
      . вывод "угол x="
      . ввод x
      . y := 2*sin(x)*cos(x)
      . вывод "sin2x = ", y
      кон
    </example>
  </alg>
  <alg name="cos">
    <description>Косинус <arg id="1">x</arg>.</description>
    <example>
      вещ х
      алг
      нач
      . ввод х
      . х := cos (х)
      . вывод "косинус угла х равен ", х
      кон
      23
      вещ x, y
      алг
      нач
      . вывод "угол x="
      . ввод x
      . y := 2*sin(x)*cos(x)
      . вывод "sin2x = ", y
      кон
    </example>
  </alg>
  <alg name="tg">
    <description>Тангенс <arg id="1">x</arg>.</description>
    <example>
      вещ х
      алг
      нач
      . ввод х
      . х := tg (х)
      . вывод "тангенс угла х равен ", х
      кон
    </example>
  </alg>
  <alg name="ctg">
    <description>Котангенс <arg id="1">x</arg>.</description>
    <example>
      вещ х
      алг
      нач
      . ввод х
      . х := ctg (х)
      . вывод "котангенс угла х равен ", х
      кон
    </example>
  </alg>
  <alg name="arcsin">
    <description>Арксинус <arg id="1">x</arg>.</description>
    <example>
      вещ х
      алг
      нач
      . ввод х
      . х := arcsin (х)
      . вывод "арксинус числа х равен ", х
      кон
    </example>
  </alg>
  <alg name="arccos">
    <description>Арккосинус <arg id="1">x</arg>.</description>
    <example>
      вещ х
      алг
      нач
      . ввод х
      . х := arccos (х)
      . вывод "арккосинус числа х равен ", х
      кон
    </example>
  </alg>
  <alg name="arctg">
    <description>Арктангенс <arg id="1">x</arg>.</description>
    <example>
      вещ х
      алг
      нач
      . ввод х
      . х := arctg (х)
      . вывод "арктангенс числа х равен ", х
      кон
    </example>
  </alg>
  <alg name="arcctg">
    <description>Арккотангенс <arg id="1">x</arg>.</description>
    <example>
      вещ х
      алг
      нач
      . ввод х
      . х := arcctg (х)
      . вывод "арккотангенс числа х равен ", х
      кон
    </example>
  </alg>
  <alg name="ln">
    <description>Натуральный логарифм <arg id="1">x</arg>.</description>
    <example>
      вещ а,б,с
      алг
      нач
      . ввод а, б
      . с := а+б
      . с := ln(с)
      . вывод "Натуральный логарифм от суммы чисел ",а," и ",б," равен ",с
      кон
    </example>
  </alg>
  <alg name="lg">
    <description>Десятичный логарифм <arg id="1">x</arg>.</description>
    <example>
      вещ а,б,с
      алг
      нач
      . ввод а, б
      . с := а+б
      . с := lg(с)
      . вывод "Десятичный логарифм от суммы чисел ",а," и ",б," равен ",с
      кон
    </example>
  </alg>
  <alg name="exp">
    <description><arg>e</arg> в степени числа <arg id="1">x</arg> (<arg>e</arg> ~ 2,718281828459045...).</description>
    <example>
      вещ x
      цел а
      алг
      нач
      . ввод а
      . x := exp(а)
      . вывод "число е в степени ", а, " равно ", x
      кон
    </example>
  </alg>
  <alg name="min">
    <description>Минимум из чисел <arg id="1">x</arg> и <arg id="2">y</arg>.</description>
    <example>
      вещ а,б,с1, с2
      алг
      нач
      . ввод а, б
      . с1 := max(а,б)
      . с2 := min(а,б)
      . вывод с1, нс
      . вывод с2, нс
      кон
    </example>
  </alg>
  <alg name="max">
    <description>Максимум из чисел <arg id="1">x</arg> и <arg id="2">y</arg>.</description>
    <example>
      вещ а,б,с1, с2
      алг
      нач
      . ввод а, б
      . с1 := max(а,б)
      . с2 := min(а,б)
      . вывод с1, нс
      . вывод с2, нс
      кон
    </example>
  </alg>
  <alg name="imin">
    <description>Минимум из целых чисел <arg id="1">x</arg> и <arg id="2">y</arg>.</description>
    <example>
      цел а,б,с1, с2
      алг
      нач
      . ввод а, б
      . с1 := max(а,б)
      . с2 := min(а,б)
      . вывод с1, нс
      . вывод с2, нс
      кон
    </example>
  </alg>
  <alg name="imax">
    <description>Максимум из целых чисел <arg id="1">x</arg> и <arg id="2">y</arg>.</description>
    <example>
      цел а,б,с1, с2
      алг
      нач
      . ввод а, б
      . с1 := max(а,б)
      . с2 := min(а,б)
      . вывод с1, нс
      . вывод с2, нс
      кон
    </example>
  </alg>
  <alg name="mod">
    <description>Остаток от деления <arg id="1">x</arg> на <arg id="2">y</arg>.
    (<arg>x</arg>, <arg>y</arg> - целые, <arg>y</arg>&gt;0).
    </description>
    <example>
      цел а, б, x, y
      алг
      нач
      . ввод а, б
      . x := div(а,б)
      . y := mod(а,б)
      . вывод "а/б=", x, " с остатком ", y
      кон
    </example>
  </alg>
  <alg name="div">
    <description>Частное от деления <arg id="1">x</arg> на <arg id="2">y</arg>.
    (<arg>x</arg>, <arg>y</arg> - целые, <arg>y</arg>&gt;0).
    </description>
    <example>
      цел а, б, x, y
      алг
      нач
      . ввод а, б
      . x := div(а,б)
      . y := mod(а,б)
      . вывод "а/б=", x, " с остатком ", y
      кон
    </example>
  </alg>
  <alg name="int">
    <description>Целая часть <arg id="1">x</arg>: максимальное целое число,
    не превосходящее <arg>x</arg>.
    </description>
    <example>
      вещ а,б
      алг
      нач
      . ввод а
      . б := int(а)
      . вывод "Целая часть ", а, " равна ", б
      кон
    </example>
  </alg>
  <alg name="rnd">
    <description>Случайное число от <arg>0</arg> до <arg id="1">x</arg>:
    при последовательных вызовах этой функции получается
    последовательность случайных чисел, равномерно распределенных на
    [<arg>0</arg>, <arg>х</arg>].
    </description>
    <example>
      алг Построение последовательности случайных вещественных чисел
      нач
      . вещ таб а [1:10]
      . цел л
      . вещ б
      . ввод б
      . нц для л от 1 до 10
      . . а[л] := rnd(б)
      . кц
      . нц для л от 1 до 10
      . . вывод а[л], " "
      . кц
      кон
    </example>
  </alg>
  <alg name="rand">
    <description>Случайное число от <arg id="1">a</arg> до <arg id="2">b</arg>:
    при последовательных вызовах этой функции получается
    последовательность случайных чисел, равномерно распределенных на
    [<arg>a</arg>, <arg>b</arg>].
    </description>
  </alg>
  <alg name="irnd">
    <description>Случайное целое число от <arg>0</arg> до <arg id="1">x</arg>:
    при последовательных вызовах этой функции получается
    последовательность случайных чисел, равномерно распределенных на
    [<arg>0</arg>, <arg>x</arg>].
    </description>
  </alg>
  <alg name="irand">
    <description>Случайное целое число от <arg id="1">a</arg> до <arg id="2">b</arg>:
    при последовательных вызовах этой функции получается
    последовательность случайных чисел, равномерно распределенных на
    [<arg>a</arg>, <arg>b</arg>].
    </description>
  </alg>
  <alg name="МАКСВЕЩ">
    <description>Максимально допустимое вешественное число, больше которого в
    КуМире нет чисел. Это число приблизительно равно <arg>1.797693<sup>308</sup></arg>.
    </description>
  </alg>
  <alg name="МАКСЦЕЛ">
    <description>Максимально допустимое для 32-битных процессоров целое число, больше которого в
    КуМире нет чисел (в том числе и на 64-битных компьютерах).
    Это число равно <arg>2147483647</arg>.
    </description>
  </alg>
  <alg name="длин">
    <description>Возвращает количество символов в строке <arg id="1">S</arg>.
    </description>
    <example>
      алг
      нач
      . лит а
      . цел ц
      . вывод "введите строку"
      . ввод а
      . ц := длин(а)
      . вывод ц
      кон
    </example>
  </alg>
  <alg name="код">
    <description>Возвращает номер символа <arg id="1">c</arg> в таблице КОИ-8r. (стандарт RFC 1489).
    </description>
    <example>
      алг
      нач
      . сим а
      . цел ц
      . вывод "введите символ"
      . ввод а
      . ц := код(а)
      . вывод ц
      кон
    </example>
  </alg>
  <alg name="символ">
    <description>Возвращает символ, соответствующий номеру <arg id="1">N</arg> в таблице КОИ-8r (стандарт RFC
1489).
    </description>
    <example>
      алг
      нач
      . цел а
      . сим б
      . ввод а
      . б := символ(а)
      . вывод б
      кон
    </example>
  </alg>
  <alg name="юникод">
    <description>Возвращает номер символа <arg id="1">c</arg> в таблице Юникода.
    </description>
  </alg>
  <alg name="символ2">
    <description>Возвращает символ, соответствующий номеру <arg id="1">N</arg> в таблице Юникода.
    </description>
    <example>
      алг
      нач
      . цел а
      . сим б
      . ввод а
      . б := символ2(а)
      . вывод б
      кон
    </example>
  </alg>
  <alg name="цел_в_лит">
    <description>
      Возвращает строковое представление <arg id="1">x</arg>.
    </description>
    <example>
      алг
      нач
      цел а
      . лит б
      . а := 5
      . б := цел_в_лит(а)
      . вывод б
      кон
    </example>
  </alg>
  <alg name="вещ_в_лит">
    <description>
      Возвращает строковое представление <arg id="1">x</arg>.
    </description>
    <example>
      алг
      нач
      . вещ а
      . лит б
      . а := 5.9999
      . б := вещ_в_лит(а)
      . вывод б
      кон
    </example>
  </alg>
  <alg name="лит_в_вещ">
    <description>
      Переводит строку <arg id="1">СТРОКА</arg> в вещественное представление.
      Если <arg>СТРОКА</arg> содержит только вещественное число,
      то в <arg id="2">УСПЕХ</arg> записывается <arg>Да</arg> и алгоритм возвращает
      вещественное значение, иначе в <arg>УСПЕХ</arg> записывается <arg>Нет</arg> и
      алгоритм возвращает значение <arg>0</arg>.
    </description>
    <example>
      алг
      нач
      . лит а
      . вещ б
      . лог усп
      . а := "5.9999"
      . б := лит_в_вещ(а, усп)
      . вывод б, " ", усп
      кон
    </example>
  </alg>
  <alg name="лит_в_цел">
    <description>
      Переводит строку <arg id="1">СТРОКА</arg> в целочисленное представление.
      Если <arg>СТРОКА</arg> содержит только вещественное число,
      то в <arg id="2">УСПЕХ</arg> записывается <arg>Да</arg> и алгоритм возвращает
      вещественное значение, иначе в <arg>УСПЕХ</arg> записывается <arg>Нет</arg> и
      алгоритм возвращает значение <arg>0</arg>.
    </description>
    <example>
      алг
      нач
      . лит а
      . цел б
      . лог усп
      . а := "5"
      . б := лит_в_цел(а, усп)
      . вывод б, " ", усп
      кон
    </example>
  </alg>
  <alg name="время">
    <description>
      Возвращает текущее время (местное) в сотых долях секунды, прошедшее с начала
суток.
    </description>
    <example>
      алг
      нач
      . цел мс
      . мс := время
      цел с, ч, м
      . с := div(мс, 100)
      . м := div(с, 60)
      . ч := div(м, 60)
      . с := с - м*60
      . м := м - ч*60
      . вывод "Текущее время: ", ч, " часов, ", м, " минут ", с, " секунд"
      кон
    </example>
  </alg>
  <alg name="клав">
    <description>
      Ожидает нажатия на клавишу и возвращает её код.
      <br/>
      Коды клавиш, имеющих символьное представление, совпадают с Юникодами
      соответствующих клавиш. Коды клавиш, не имеющих символьное представление,
      приведены в таблице:
      <br/>
      <table style="text-align:center;">
	<tr style="font-weight:bold;">
	  <td>Клавиша</td>
	  <td>Код</td>
	</tr>
	<tr>
	  <td>Tab</td>
	  <td>16777217</td>
	</tr>
	<tr>
	  <td>Backspace</td>
	  <td>16777219</td>
	</tr>
	<tr>
	  <td>Enter</td>
	  <td>16777220</td>
	</tr>
	<tr>
	  <td>Enter на цифровом блоке</td>
	  <td>16777221</td>
	</tr>
	<tr>
	  <td>Insert</td>
	  <td>16777222</td>
	</tr>
	<tr>
	  <td>Delete</td>
	  <td>16777223</td>
	</tr>
	<tr>
	  <td>Pause</td>
	  <td>16777224</td>
	</tr>
	<tr>
	  <td>Print Screen</td>
	  <td>16777225</td>
	</tr>
	<tr>
	  <td>Home</td>
	  <td>16777232</td>
	</tr>
	<tr>
	  <td>End</td>
	  <td>16777233</td>
	</tr>
	<tr>
	  <td>Стрелка влево</td>
	  <td>16777234</td>
	</tr>
	<tr>
	  <td>Стрелка вверх</td>
	  <td>16777235</td>
	</tr>
	<tr>
	  <td>Стрелка вправо</td>
	  <td>16777236</td>
	</tr>
	<tr>
	  <td>Стрелка вниз</td>
	  <td>16777237</td>
	</tr>
	<tr>
	  <td>Page Up</td>
	  <td>16777238</td>
	</tr>
	<tr>
	  <td>Page Down</td>
	  <td>16777239</td>
	</tr>
	<tr>
	  <td>Shift</td>
	  <td>16777248</td>
	</tr>
	<tr>
	  <td>Ctrl (или Command на Mac)</td>
	  <td>16777249</td>
	</tr>
	<tr>
	  <td>Meta - логотип Windows (или Control на Mac)</td>
	  <td>16777250</td>
	</tr>
	<tr>
	  <td>Alt</td>
	  <td>16777251</td>
	</tr>
	<tr>
	  <td>Caps Lock</td>
	  <td>16777252</td>
	</tr>
	<tr>
	  <td>Num Lock</td>
	  <td>16777253</td>
	</tr>
	<tr>
	  <td>Scroll Lock</td>
	  <td>16777254</td>
	</tr>
	<tr>
	  <td>F1</td>
	  <td>16777264</td>
	</tr>
	<tr>
	  <td>F2</td>
	  <td>16777265</td>
	</tr>
	<tr>
	  <td>F3</td>
	  <td>16777266</td>
	</tr>
	<tr>
	  <td>F4</td>
	  <td>16777267</td>
	</tr>
	<tr>
	  <td>F5</td>
	  <td>16777268</td>
	</tr>
	<tr>
	  <td>F6</td>
	  <td>16777269</td>
	</tr>
	<tr>
	  <td>F7</td>
	  <td>16777270</td>
	</tr>
	<tr>
	  <td>F8</td>
	  <td>16777271</td>
	</tr>
	<tr>
	  <td>F9</td>
	  <td>16777272</td>
	</tr>
	<tr>
	  <td>F10</td>
	  <td>16777273</td>
	</tr>
	<tr>
	  <td>F11</td>
	  <td>16777274</td>
	</tr>
	<tr>
	  <td>F12</td>
	  <td>16777275</td>
	</tr>
	<tr>
	  <td>F13</td>
	  <td>16777276</td>
	</tr>
	<tr>
	  <td>F14</td>
	  <td>16777277</td>
	</tr>
	<tr>
	  <td>F15</td>
	  <td>16777278</td>
	</tr>
      </table>
    </description>
    <example>
      алг
      нач
      . цел а
      . вывод "Нажмите клавишу...", нс
      . а := клав
      . вывод "Код нажатой клавиши равен ", а, нс
      кон
    </example>
  </alg>
  <alg name="delay">
    <description>
      Приостанавливает выполнение программы на <arg id="1">s</arg> миллисекунд.
      1&nbsp;мсек=10<sup>-3</sup>&nbsp;сек.
    </description>
  </alg>
  <example>
    алг
    нач
    . вывод "КуМир не завис. "
    . вывод "Он решил поспать 5 секунд...", нс
    . delay(5000)
    . вывод "КуМир проснулся!", нс
    кон
  </example>
</module>