|
|
@@ -329,9 +329,16 @@ fun main(){
|
|
|
|
|
|
В общем виде структурная команда цикл с постусловием или цикл — до представляется так:
|
|
|
|
|
|
-
|
|
|
+```mermaid
|
|
|
+flowchart TD
|
|
|
+ start([начало цикла])
|
|
|
+ start-->proc[серия]
|
|
|
+ proc-->if{условие}
|
|
|
+ if-->|нет|proc
|
|
|
+ if-->|да|finish([конец цикла])
|
|
|
+```
|
|
|
|
|
|
-```kt
|
|
|
+```cs
|
|
|
do {
|
|
|
//серия
|
|
|
} while (условие)
|
|
|
@@ -339,16 +346,28 @@ do {
|
|
|
|
|
|
Здесь используется условие окончания цикла. Когда оно становится истинным, цикл заканчивает работу.
|
|
|
|
|
|
-Составим алгоритм решения следующей задачи: даны два натуральных числа М и N. Требуется вычислить их наибольший общий делитель — НОД(M, N).
|
|
|
+Составим алгоритм решения следующей задачи: даны два натуральных числа `М` и `N`. Требуется вычислить их наибольший общий делитель — НОД(M, N).
|
|
|
|
|
|
-Эта задача решается с помощью метода, известного под названием алгоритма Евклида. Его идея основана на том свойстве, что если M>N, то НОД(М, N) = НОД(М-N,N). Другой факт, лежащий в основе алгоритма, тривиален — НОД(М, М) = М. Для «ручного» выполнения этот алгоритм можно описать в форме следующей инструкции:
|
|
|
+Эта задача решается с помощью метода, известного под названием алгоритма Евклида. Его идея основана на том свойстве, что если M>N, то НОД(М, N) = НОД(М-N, N). Другой факт, лежащий в основе алгоритма, тривиален — НОД(М, М) = М. Для «ручного» выполнения этот алгоритм можно описать в форме следующей инструкции:
|
|
|
|
|
|
1. Если числа равны, то взять их общее значение в качестве ответа; в противном случае продолжить выполнение алгоритма
|
|
|
2. Определить большее из чисел
|
|
|
3. Заменить большее число разностью большего и меньшего значений
|
|
|
4. Вернуться к выполнению пункта 1
|
|
|
|
|
|
-
|
|
|
+```mermaid
|
|
|
+flowchart TD
|
|
|
+ start([Начало])
|
|
|
+ start-->input[/Ввод N, N/]
|
|
|
+ input-->if1{$$M \neq N$$}
|
|
|
+ if1-->|Да|if2{$$M > N$$}
|
|
|
+ if2-->|Да|proc1[M := M - N]
|
|
|
+ proc1-->if1
|
|
|
+ if2-->|Нет|proc2[N := N - M]
|
|
|
+ proc2-->if1
|
|
|
+ if1-->|Нет|output[/Вывод M/]
|
|
|
+ output--->finish([Конец])
|
|
|
+```
|
|
|
|
|
|
```kt
|
|
|
fun main(){
|
|
|
@@ -369,13 +388,19 @@ fun main(){
|
|
|
|
|
|
В теории алгоритмов известно понятие вспомогательного алгоритма. Вспомогательным называется алгоритм решения некоторой подзадачи из основной решаемой задачи. В таком случае алгоритм решения исходной задачи называется основным алгоритмом.
|
|
|
|
|
|
-В качестве примера рассмотрим следующую задачу: требуется составить алгоритм вычисления степенной функции с целым показателем ***у = х<sup>к</sup>***, где к — целое число, х<>0. В алгебре такая функция определена следующим образом:
|
|
|
+В качестве примера рассмотрим следующую задачу: требуется составить алгоритм вычисления степенной функции с целым показателем $$у = х^к$$, где `к` — целое число, `х<>0`. В алгебре такая функция определена следующим образом:
|
|
|
|
|
|
-
|
|
|
+$$x^n =
|
|
|
+\begin{cases}
|
|
|
+1 & n = 0 \\\\
|
|
|
+\frac{1}{x^{-n}} & n < 0 \\\\
|
|
|
+x^n & n > 0
|
|
|
+\end{cases}
|
|
|
+$$
|
|
|
|
|
|
Для данной задачи в качестве подзадачи можно рассматривать возведение числа в целую положительную степень.
|
|
|
|
|
|
-Учитывая, что ***1/х<sup>-n</sup> = (1/х)<sup>-n</sup>***, запишем основной алгоритм решения этой задачи.
|
|
|
+Учитывая, что $$\frac{1}{х^{-n}} = (\frac{1}{х})^{-n}$$, запишем основной алгоритм решения этой задачи.
|
|
|
|
|
|
```kt
|
|
|
fun main(){
|
|
|
@@ -429,6 +454,7 @@ fun stepen(x: Float, n: Int): Float {
|
|
|
Использование процедур позволяет строить сложные алгоритмы методом *последовательной детализации*.
|
|
|
|
|
|
## Программы для графического отображения алгоритмов
|
|
|
+
|
|
|
https://draw.io (онлайн)
|
|
|
Microsoft Visio
|
|
|
Dia (бесплатная)
|