HTML Diff
0 added 0 removed
Original 2026-01-01
Modified 2026-02-21
1 <p><a>#статьи</a></p>
1 <p><a>#статьи</a></p>
2 <ul><li>7 дек 2022</li>
2 <ul><li>7 дек 2022</li>
3 <li>0</li>
3 <li>0</li>
4 </ul><h2>Что такое алгоритмы и какими они бывают</h2>
4 </ul><h2>Что такое алгоритмы и какими они бывают</h2>
5 <p>Ты можешь разрабатывать микросервисы и знать все уровни модели OSI, но какой ты программист, если не можешь объяснить ребёнку, что такое алгоритм?</p>
5 <p>Ты можешь разрабатывать микросервисы и знать все уровни модели OSI, но какой ты программист, если не можешь объяснить ребёнку, что такое алгоритм?</p>
6 <p>Иллюстрация: Катя Павловская для Skillbox Media</p>
6 <p>Иллюстрация: Катя Павловская для Skillbox Media</p>
7 <p>Пишет об истории IT, разработке и советской кибернетике. Знает Python, JavaScript и немного C++, но предпочитает писать на русском.</p>
7 <p>Пишет об истории IT, разработке и советской кибернетике. Знает Python, JavaScript и немного C++, но предпочитает писать на русском.</p>
8 <p>Ведущий бэкенд-разработчик мобильного приложения "Альфа-Банка".</p>
8 <p>Ведущий бэкенд-разработчик мобильного приложения "Альфа-Банка".</p>
9 <p>Иногда совсем простые вопросы о профессии вводят в ступор даже опытных специалистов. Примерно так происходит, когда у разработчика с 5-10-летним стажем спрашивают: "Что такое алгоритм?"</p>
9 <p>Иногда совсем простые вопросы о профессии вводят в ступор даже опытных специалистов. Примерно так происходит, когда у разработчика с 5-10-летним стажем спрашивают: "Что такое алгоритм?"</p>
10 <p>Но для того мы здесь и собрались, чтобы дать понятные ответы на "глупые" вопросы. В этой статье расскажем, что такое алгоритмы, для чего они нужны и какими бывают.</p>
10 <p>Но для того мы здесь и собрались, чтобы дать понятные ответы на "глупые" вопросы. В этой статье расскажем, что такое алгоритмы, для чего они нужны и какими бывают.</p>
11 <p>Вы узнаете:</p>
11 <p>Вы узнаете:</p>
12 <ul><li><a>Что такое алгоритмы</a></li>
12 <ul><li><a>Что такое алгоритмы</a></li>
13 <li><a>Для чего их используют</a></li>
13 <li><a>Для чего их используют</a></li>
14 <li><a>Какие у них есть свойства</a></li>
14 <li><a>Какие у них есть свойства</a></li>
15 <li><a>Что такое псевдокод</a></li>
15 <li><a>Что такое псевдокод</a></li>
16 <li><a>Что такое блок-схемы и как их рисовать</a></li>
16 <li><a>Что такое блок-схемы и как их рисовать</a></li>
17 <li><a>Примеры линейных, ветвящихся, циклических и рекурсивных алгоритмов и блок-схем</a></li>
17 <li><a>Примеры линейных, ветвящихся, циклических и рекурсивных алгоритмов и блок-схем</a></li>
18 </ul><p>В широком смысле алгоритм - это последовательность действий, которые нужно выполнить, чтобы получить определённый результат.</p>
18 </ul><p>В широком смысле алгоритм - это последовательность действий, которые нужно выполнить, чтобы получить определённый результат.</p>
19 <p>Слово "алгоритм" произошло от имени персидского математика Абу Абдуллаха аль-Хорезми. В своём труде "Китаб аль-джебр валь-мукабала" учёный впервые дал описание десятичной системы счисления. А наука алгебра получила своё название в честь его книги.</p>
19 <p>Слово "алгоритм" произошло от имени персидского математика Абу Абдуллаха аль-Хорезми. В своём труде "Китаб аль-джебр валь-мукабала" учёный впервые дал описание десятичной системы счисления. А наука алгебра получила своё название в честь его книги.</p>
20 <p>Мы часто пользуемся алгоритмами в повседневной жизни. Например, когда хотим приготовить кофе в капсульной кофемашине, руководствуемся примерно таким алгоритмом:</p>
20 <p>Мы часто пользуемся алгоритмами в повседневной жизни. Например, когда хотим приготовить кофе в капсульной кофемашине, руководствуемся примерно таким алгоритмом:</p>
21 <p>1. Устанавливаем капсулу.</p>
21 <p>1. Устанавливаем капсулу.</p>
22 <p>2. Проверяем уровень воды в специальном отсеке.</p>
22 <p>2. Проверяем уровень воды в специальном отсеке.</p>
23 <p>3. Если воды недостаточно - доливаем.</p>
23 <p>3. Если воды недостаточно - доливаем.</p>
24 <p>4. Ставим чашку под кран кофемашины.</p>
24 <p>4. Ставим чашку под кран кофемашины.</p>
25 <p>5. Запускаем кофемашину.</p>
25 <p>5. Запускаем кофемашину.</p>
26 <p>6. Выключаем кофемашину, когда чашка наполнилась.</p>
26 <p>6. Выключаем кофемашину, когда чашка наполнилась.</p>
27 <p>7. Достаём кружку.</p>
27 <p>7. Достаём кружку.</p>
28 <p>Если не перепутать порядок шагов, то с помощью такой инструкции любой сможет порадовать себя чашкой горячего кофе. Достаточно лишь знать, как установить капсулу и включить/выключить кофемашину.</p>
28 <p>Если не перепутать порядок шагов, то с помощью такой инструкции любой сможет порадовать себя чашкой горячего кофе. Достаточно лишь знать, как установить капсулу и включить/выключить кофемашину.</p>
29 <p>С компьютерами намного сложнее. Им неизвестно, что значит "установить капсулу", "долить воду", "запустить кофемашину" и так далее. Чтобы запрограммировать робота-баристу под определённую модель бытовой техники, алгоритм придётся расписать более детально:</p>
29 <p>С компьютерами намного сложнее. Им неизвестно, что значит "установить капсулу", "долить воду", "запустить кофемашину" и так далее. Чтобы запрограммировать робота-баристу под определённую модель бытовой техники, алгоритм придётся расписать более детально:</p>
30 <p>1. Возьми штепсельную вилку шнура питания кофемашины.</p>
30 <p>1. Возьми штепсельную вилку шнура питания кофемашины.</p>
31 <p>2. Вставь штепсельную вилку в розетку.</p>
31 <p>2. Вставь штепсельную вилку в розетку.</p>
32 <p>3. Проверь, есть ли вода в отсеке для воды.</p>
32 <p>3. Проверь, есть ли вода в отсеке для воды.</p>
33 <p>4. Если воды недостаточно:</p>
33 <p>4. Если воды недостаточно:</p>
34 <p>4.1. Подними крышку отсека.</p>
34 <p>4.1. Подними крышку отсека.</p>
35 <p>4.2. Возьми кувшин с водой.</p>
35 <p>4.2. Возьми кувшин с водой.</p>
36 <p>4.3. Лей воду из кувшина в отсек, пока он не заполнится.</p>
36 <p>4.3. Лей воду из кувшина в отсек, пока он не заполнится.</p>
37 <p>4.4. Закрой крышку отсека.</p>
37 <p>4.4. Закрой крышку отсека.</p>
38 <p>4.5. Поставь кувшин с водой на стол.</p>
38 <p>4.5. Поставь кувшин с водой на стол.</p>
39 <p>5. Открой крышку кофемашины.</p>
39 <p>5. Открой крышку кофемашины.</p>
40 <p>6. Возьми из коробки капсулу с кофе.</p>
40 <p>6. Возьми из коробки капсулу с кофе.</p>
41 <p>7. Вставь капсулу в отсек для капсулы.</p>
41 <p>7. Вставь капсулу в отсек для капсулы.</p>
42 <p>8. Закрой крышку кофемашины.</p>
42 <p>8. Закрой крышку кофемашины.</p>
43 <p>9. Поверни рычаг кофемашины вправо.</p>
43 <p>9. Поверни рычаг кофемашины вправо.</p>
44 <p>10. Когда чашка наполнится, поверни рычаг кофемашины влево.</p>
44 <p>10. Когда чашка наполнится, поверни рычаг кофемашины влево.</p>
45 <p>11. Возьми кружку.</p>
45 <p>11. Возьми кружку.</p>
46 <p>12. Принеси кружку хозяину.</p>
46 <p>12. Принеси кружку хозяину.</p>
47 <p>Конечно, если мы собираем робота с нуля, то даже такой детализации будет недостаточно. Каждую процедуру ещё нужно будет реализовать на языке программирования (например, на C++ или Python), что само по себе - нетривиальная задача. Тем не менее описание стало более точным и формальным.</p>
47 <p>Конечно, если мы собираем робота с нуля, то даже такой детализации будет недостаточно. Каждую процедуру ещё нужно будет реализовать на языке программирования (например, на C++ или Python), что само по себе - нетривиальная задача. Тем не менее описание стало более точным и формальным.</p>
48 <p>C научной точки зрения определение алгоритма, которое мы дали выше, не совсем точное. Ведь не всякую последовательность действий, приводящую к результату, можно назвать алгоритмом.</p>
48 <p>C научной точки зрения определение алгоритма, которое мы дали выше, не совсем точное. Ведь не всякую последовательность действий, приводящую к результату, можно назвать алгоритмом.</p>
49 <p><strong>Алгоритм в информатике</strong> - это понятный исполнителю набор правил для решения конкретного множества задач, который получает входные данные и возвращает результат за конечное время.</p>
49 <p><strong>Алгоритм в информатике</strong> - это понятный исполнителю набор правил для решения конкретного множества задач, который получает входные данные и возвращает результат за конечное время.</p>
50 <p>У алгоритмов есть два замечательных качества: они позволяют эффективно решать задачи и не изобретать решения, которые кто-то уже придумал до нас. Это справедливо как для повседневной жизни, так и для IT.</p>
50 <p>У алгоритмов есть два замечательных качества: они позволяют эффективно решать задачи и не изобретать решения, которые кто-то уже придумал до нас. Это справедливо как для повседневной жизни, так и для IT.</p>
51 <p>Представьте, что оформляете загранпаспорт. Если будете всё делать сами и без инструкции, около 40 минут потратите только на выяснение необходимых справок и порядка оформления. Куда проще воспользоваться "Госуслугами", потому что алгоритм там уже составлен - делаете, что вам говорят, и ждёте результат. А ещё проще - обратиться к посреднику, который подготовит все справки и оформит паспорт за неделю.</p>
51 <p>Представьте, что оформляете загранпаспорт. Если будете всё делать сами и без инструкции, около 40 минут потратите только на выяснение необходимых справок и порядка оформления. Куда проще воспользоваться "Госуслугами", потому что алгоритм там уже составлен - делаете, что вам говорят, и ждёте результат. А ещё проще - обратиться к посреднику, который подготовит все справки и оформит паспорт за неделю.</p>
52 <p>Это очень бытовой пример, но программирование примерно так и работает. Разработчики изучают алгоритмы, чтобы писать быстрый и эффективный код, - распознают типовую задачу и подбирают для неё оптимальный алгоритм.</p>
52 <p>Это очень бытовой пример, но программирование примерно так и работает. Разработчики изучают алгоритмы, чтобы писать быстрый и эффективный код, - распознают типовую задачу и подбирают для неё оптимальный алгоритм.</p>
53 <p>Допустим, нужно отсортировать в порядке возрастания числа в списке из 1000 элементов. Можно пройтись по списку 1000 раз: на каждой итерации находить наименьшее число и переставлять его в начало списка. В этом случае общее количество шагов будет равно 1 000 000 - современный компьютер справится с этим за секунду.</p>
53 <p>Допустим, нужно отсортировать в порядке возрастания числа в списке из 1000 элементов. Можно пройтись по списку 1000 раз: на каждой итерации находить наименьшее число и переставлять его в начало списка. В этом случае общее количество шагов будет равно 1 000 000 - современный компьютер справится с этим за секунду.</p>
54 <p>А если нужно упорядочить массив из 10 000 000 элементов? Тогда компьютеру придётся выполнить 1014 шагов, что потребует гораздо больше времени. Надо оптимизировать!</p>
54 <p>А если нужно упорядочить массив из 10 000 000 элементов? Тогда компьютеру придётся выполнить 1014 шагов, что потребует гораздо больше времени. Надо оптимизировать!</p>
55 <p>Разработчик, не сведущий в computer science, начнёт ломать голову над более эффективным решением. А опытный специалист применит алгоритм быстрой сортировки, который в среднем случае даст "время" 16 × 107 шагов.</p>
55 <p>Разработчик, не сведущий в computer science, начнёт ломать голову над более эффективным решением. А опытный специалист применит алгоритм быстрой сортировки, который в среднем случае даст "время" 16 × 107 шагов.</p>
56 <p>Знатоки скажут, что ещё проще было бы воспользоваться библиотечной функцией сортировки (например, sorted() в Python). Тем не менее даже встроенные алгоритмы бывают недостаточно эффективными и разработчикам приходится писать собственные функции для сортировки. Но это уже совсем другая история ?</p>
56 <p>Знатоки скажут, что ещё проще было бы воспользоваться библиотечной функцией сортировки (например, sorted() в Python). Тем не менее даже встроенные алгоритмы бывают недостаточно эффективными и разработчикам приходится писать собственные функции для сортировки. Но это уже совсем другая история ?</p>
57 <p>Теперь представьте: вы живёте в XX веке где-нибудь в США и зарабатываете тем, что ездите по городам и продаёте мультимиксеры. Чтобы сэкономить время и деньги, вам нужно придумать кратчайший маршрут, который позволит заехать в каждый город хотя бы один раз и вернуться обратно.</p>
57 <p>Теперь представьте: вы живёте в XX веке где-нибудь в США и зарабатываете тем, что ездите по городам и продаёте мультимиксеры. Чтобы сэкономить время и деньги, вам нужно придумать кратчайший маршрут, который позволит заехать в каждый город хотя бы один раз и вернуться обратно.</p>
58 <em>Иллюстрация: Катя Павловская для Skillbox Media</em><p>Это знаменитая задача коммивояжёра, для которой практически невозможно подобрать лучшее решение. Простой перебор здесь не поможет. Уже при 10 городах количество возможных маршрутов будет равно 3,6 млн, а при 26 - даже самым мощным компьютерам понадобится несколько миллиардов лет, чтобы перебрать все варианты.</p>
58 <em>Иллюстрация: Катя Павловская для Skillbox Media</em><p>Это знаменитая задача коммивояжёра, для которой практически невозможно подобрать лучшее решение. Простой перебор здесь не поможет. Уже при 10 городах количество возможных маршрутов будет равно 3,6 млн, а при 26 - даже самым мощным компьютерам понадобится несколько миллиардов лет, чтобы перебрать все варианты.</p>
59 <p>Тем не менее каждый день миллионы устройств решают эту задачу: смартфоны строят маршруты между городами, а маршрутизаторы рассчитывают оптимальный путь для пакетов в сети. Дело в том, что существуют специальные алгоритмы, которые дают неидеальный, но достаточно эффективный результат. И их нужно знать, если вы хотите работать в компаниях, которые создают сложные, интересные проекты.</p>
59 <p>Тем не менее каждый день миллионы устройств решают эту задачу: смартфоны строят маршруты между городами, а маршрутизаторы рассчитывают оптимальный путь для пакетов в сети. Дело в том, что существуют специальные алгоритмы, которые дают неидеальный, но достаточно эффективный результат. И их нужно знать, если вы хотите работать в компаниях, которые создают сложные, интересные проекты.</p>
60 <p>Информатик и автор классических учебников по программированию Дональд Кнут выделял следующие свойства алгоритмов:</p>
60 <p>Информатик и автор классических учебников по программированию Дональд Кнут выделял следующие свойства алгоритмов:</p>
61 <ul><li>конечность,</li>
61 <ul><li>конечность,</li>
62 <li>определённость,</li>
62 <li>определённость,</li>
63 <li>наличие ввода,</li>
63 <li>наличие ввода,</li>
64 <li>наличие вывода, или результативность,</li>
64 <li>наличие вывода, или результативность,</li>
65 <li>универсальность,</li>
65 <li>универсальность,</li>
66 <li>эффективность.</li>
66 <li>эффективность.</li>
67 </ul><p>Рассмотрим каждое подробно.</p>
67 </ul><p>Рассмотрим каждое подробно.</p>
68 <p><strong>Конечность.</strong>Алгоритм должен решать задачу за конечное число шагов. Необходимость этого критерия очевидна: программа, которая решает задачу бесконечно долго, никогда не приведёт к результату.</p>
68 <p><strong>Конечность.</strong>Алгоритм должен решать задачу за конечное число шагов. Необходимость этого критерия очевидна: программа, которая решает задачу бесконечно долго, никогда не приведёт к результату.</p>
69 <p><strong>Определённость.</strong>Исполнитель (компьютер, операционная система) должен однозначно и верно интерпретировать каждый шаг алгоритма.</p>
69 <p><strong>Определённость.</strong>Исполнитель (компьютер, операционная система) должен однозначно и верно интерпретировать каждый шаг алгоритма.</p>
70 <p><strong>Наличие ввода.</strong>Как и у математической функции, результат работы алгоритма зависит от входных данных. Например, на вход алгоритма сортировки подаётся массив чисел. А функция, рассчитывающая факториал, принимает натуральное число.</p>
70 <p><strong>Наличие ввода.</strong>Как и у математической функции, результат работы алгоритма зависит от входных данных. Например, на вход алгоритма сортировки подаётся массив чисел. А функция, рассчитывающая факториал, принимает натуральное число.</p>
71 <p><strong>Наличие вывода, или результативность.</strong>Алгоритм должен выдавать конкретный результат. Например, если мы ищем подстроку в строке и такая подстрока в ней присутствует, то на выходе мы должны получить позицию этой строки. Если такой подстроки нет - алгоритм должен вернуть соответствующее значение, например -1.</p>
71 <p><strong>Наличие вывода, или результативность.</strong>Алгоритм должен выдавать конкретный результат. Например, если мы ищем подстроку в строке и такая подстрока в ней присутствует, то на выходе мы должны получить позицию этой строки. Если такой подстроки нет - алгоритм должен вернуть соответствующее значение, например -1.</p>
72 <p><strong>Универсальность.</strong>Алгоритм должен решать задачи с разными входными данными. Например, хорошая функция для сортировки массивов должна одинаково хорошо справляться с массивами из 10, 100 и 1 000 000 элементов.</p>
72 <p><strong>Универсальность.</strong>Алгоритм должен решать задачи с разными входными данными. Например, хорошая функция для сортировки массивов должна одинаково хорошо справляться с массивами из 10, 100 и 1 000 000 элементов.</p>
73 <p><strong>Эффективность.</strong>Это требование продиктовано ограниченными ресурсами компьютеров. На заре развития вычислительной техники каждая секунда работы процессора, каждый байт памяти были на счету. И хотя современные компьютеры гораздо мощнее своих предшественников, они тоже могут "тормозить" из-за неэффективных алгоритмов.</p>
73 <p><strong>Эффективность.</strong>Это требование продиктовано ограниченными ресурсами компьютеров. На заре развития вычислительной техники каждая секунда работы процессора, каждый байт памяти были на счету. И хотя современные компьютеры гораздо мощнее своих предшественников, они тоже могут "тормозить" из-за неэффективных алгоритмов.</p>
74 <p>Представьте, что вы изучили какой-нибудь язык программирования, например Go, и устроились бэкенд-разработчиком в IT-компанию. В вашей команде, помимо бэкендеров, есть фронтенд-разработчики, которые пишут код на JavaScript.</p>
74 <p>Представьте, что вы изучили какой-нибудь язык программирования, например Go, и устроились бэкенд-разработчиком в IT-компанию. В вашей команде, помимо бэкендеров, есть фронтенд-разработчики, которые пишут код на JavaScript.</p>
75 <p>Вы придумали крутой алгоритм, который ускорит работу приложения, и хотите рассказать о нём коллегам. Но как это сделать, если они программируют на другом языке?</p>
75 <p>Вы придумали крутой алгоритм, который ускорит работу приложения, и хотите рассказать о нём коллегам. Но как это сделать, если они программируют на другом языке?</p>
76 <p>Для таких ситуаций есть<strong>псевдокод</strong>. Он позволяет изложить логику программы с помощью понятных для всех команд, не углубляясь в детали реализации конкретного языка. В учебной литературе алгоритмы описывают в основном с помощью псевдокода.</p>
76 <p>Для таких ситуаций есть<strong>псевдокод</strong>. Он позволяет изложить логику программы с помощью понятных для всех команд, не углубляясь в детали реализации конкретного языка. В учебной литературе алгоритмы описывают в основном с помощью псевдокода.</p>
77 <p>У псевдокода нет общепринятых стандартов, и авторы используют собственные оригинальные нотации. Хотя часто они заимствуют названия операций из Python, Pascal и Java. Например, код ниже напоминает программу на Python:</p>
77 <p>У псевдокода нет общепринятых стандартов, и авторы используют собственные оригинальные нотации. Хотя часто они заимствуют названия операций из Python, Pascal и Java. Например, код ниже напоминает программу на Python:</p>
78 int linear_search(int[] arr, int x): if arr is empty: return -1 for i in 0..n: if arr[i] == x: return i return -1<p>Также псевдокод можно писать на русском языке, как в школьных учебниках по информатике:</p>
78 int linear_search(int[] arr, int x): if arr is empty: return -1 for i in 0..n: if arr[i] == x: return i return -1<p>Также псевдокод можно писать на русском языке, как в школьных учебниках по информатике:</p>
79 <p>ФУНКЦИЯ линейный_поиск(целое[]<strong>массив</strong>, целое<strong>x</strong>):</p>
79 <p>ФУНКЦИЯ линейный_поиск(целое[]<strong>массив</strong>, целое<strong>x</strong>):</p>
80 <p> ЕСЛИ<strong>массив</strong>ПУСТОЙ:</p>
80 <p> ЕСЛИ<strong>массив</strong>ПУСТОЙ:</p>
81 <p> ВЕРНУТЬ -1</p>
81 <p> ВЕРНУТЬ -1</p>
82 <p> ДЛЯ<strong>i</strong>В ДИАПАЗОНЕ ОТ <strong>0</strong>ДО ДЛИНА(<strong>массив</strong>):</p>
82 <p> ДЛЯ<strong>i</strong>В ДИАПАЗОНЕ ОТ <strong>0</strong>ДО ДЛИНА(<strong>массив</strong>):</p>
83 <p> ЕСЛИ<strong>массив[x]</strong>РАВНО<strong>x</strong>:</p>
83 <p> ЕСЛИ<strong>массив[x]</strong>РАВНО<strong>x</strong>:</p>
84 <p> ВЕРНУТЬ<strong>i</strong></p>
84 <p> ВЕРНУТЬ<strong>i</strong></p>
85 <p><strong></strong> ВЕРНУТЬ<strong>-1</strong></p>
85 <p><strong></strong> ВЕРНУТЬ<strong>-1</strong></p>
86 <p>Главное - чтобы тот, кто читает ваш алгоритм, понял его и воспроизвёл на своём языке программирования.</p>
86 <p>Главное - чтобы тот, кто читает ваш алгоритм, понял его и воспроизвёл на своём языке программирования.</p>
87 <p>Если у вас в школе были уроки по информатике, то вы наверняка рисовали и читали блок-схемы. Если нет, то знайте: алгоритмы можно описывать не только словесно, но и графически.</p>
87 <p>Если у вас в школе были уроки по информатике, то вы наверняка рисовали и читали блок-схемы. Если нет, то знайте: алгоритмы можно описывать не только словесно, но и графически.</p>
88 <p>Блок-схемы - это геометрические фигуры, соединённые между собой стрелками. Овалы, прямоугольники, ромбы и другие фигуры обозначают отдельные шаги алгоритма, а стрелки указывают направление потока данных. При этом в каждый блок записывается команда в виде логического или математического выражения.</p>
88 <p>Блок-схемы - это геометрические фигуры, соединённые между собой стрелками. Овалы, прямоугольники, ромбы и другие фигуры обозначают отдельные шаги алгоритма, а стрелки указывают направление потока данных. При этом в каждый блок записывается команда в виде логического или математического выражения.</p>
89 <p>В таблице ниже представлены основные элементы блок-схем:</p>
89 <p>В таблице ниже представлены основные элементы блок-схем:</p>
90 <p><strong>Графическое изображение</strong></p>
90 <p><strong>Графическое изображение</strong></p>
91 <p><strong>Значение</strong></p>
91 <p><strong>Значение</strong></p>
92 <p><strong>Элемент кода в Python</strong></p>
92 <p><strong>Элемент кода в Python</strong></p>
93 <p>Начало/конец программы</p>
93 <p>Начало/конец программы</p>
94 <p>Никак не обозначаетсяили обозначается как начало функции:</p>
94 <p>Никак не обозначаетсяили обозначается как начало функции:</p>
95 def foo(x): #код<p>Конец функции обозначается словом return</p>
95 def foo(x): #код<p>Конец функции обозначается словом return</p>
96 <p>Ввод/вывод данных</p>
96 <p>Ввод/вывод данных</p>
97 <p>Операторы ввода и вывода:</p>
97 <p>Операторы ввода и вывода:</p>
98 print("Hello!") word = input()<p>Арифметические операции</p>
98 print("Hello!") word = input()<p>Арифметические операции</p>
99 <p>Арифметические операторы:</p>
99 <p>Арифметические операторы:</p>
100 100 - 10 25 + 100 6 * 12.0<p>Условие</p>
100 100 - 10 25 + 100 6 * 12.0<p>Условие</p>
101 <p>Условный оператор:</p>
101 <p>Условный оператор:</p>
102 if n &lt; 5: sum += 10<p>Цикл со счётчиком</p>
102 if n &lt; 5: sum += 10<p>Цикл со счётчиком</p>
103 <p>Цикл for:</p>
103 <p>Цикл for:</p>
104 for k,v in enumerate(arr): print(k, v)<p>Ввод/вывод в файл</p>
104 for k,v in enumerate(arr): print(k, v)<p>Ввод/вывод в файл</p>
105 <p>Функции для работы с файлами:</p>
105 <p>Функции для работы с файлами:</p>
106 f = open("text.txt", 'r') f.close()<p>С помощью этого нехитрого набора фигур можно нарисовать схему практически любого алгоритма. Другие фигуры блок-схем вы найдёте в документации к <a>ГОСТ 19.701-90</a>.</p>
106 f = open("text.txt", 'r') f.close()<p>С помощью этого нехитрого набора фигур можно нарисовать схему практически любого алгоритма. Другие фигуры блок-схем вы найдёте в документации к <a>ГОСТ 19.701-90</a>.</p>
107 <p>Блок-схемы можно рисовать в Microsoft Visio и в Google Docs (<strong>Вставка</strong>→<strong>Рисунок</strong>→<strong>Новый +</strong>). Также есть специальные сервисы: например, облачный<a>Draw.io</a>и десктопные<a>Dia</a>и <a>yEd</a>.</p>
107 <p>Блок-схемы можно рисовать в Microsoft Visio и в Google Docs (<strong>Вставка</strong>→<strong>Рисунок</strong>→<strong>Новый +</strong>). Также есть специальные сервисы: например, облачный<a>Draw.io</a>и десктопные<a>Dia</a>и <a>yEd</a>.</p>
108 <p>А теперь разберёмся, какими бывают алгоритмы, напишем примеры на Python и нарисуем для них блок-схемы.</p>
108 <p>А теперь разберёмся, какими бывают алгоритмы, напишем примеры на Python и нарисуем для них блок-схемы.</p>
109 <p>По конструкции алгоритмы можно разделить на несколько групп.</p>
109 <p>По конструкции алгоритмы можно разделить на несколько групп.</p>
110 <p>В линейных алгоритмах действия идут последовательно, одно за другим. Такие программы - самые простые, но на практике они встречаются редко.</p>
110 <p>В линейных алгоритмах действия идут последовательно, одно за другим. Такие программы - самые простые, но на практике они встречаются редко.</p>
111 <p><strong>Пример.</strong>Напишите программу, которая умножает число, введённое пользователем, на 100 и выводит результат на экран.</p>
111 <p><strong>Пример.</strong>Напишите программу, которая умножает число, введённое пользователем, на 100 и выводит результат на экран.</p>
112 <p>Последовательность действий уже изложена в задании: ввести число → умножить на 100 → вывести результат. Переведём это на язык блок-схем:</p>
112 <p>Последовательность действий уже изложена в задании: ввести число → умножить на 100 → вывести результат. Переведём это на язык блок-схем:</p>
113 <em>Изображение: Skillbox Media</em><p>Ниже приведена реализация алгоритма на языке Python:</p>
113 <em>Изображение: Skillbox Media</em><p>Ниже приведена реализация алгоритма на языке Python:</p>
114 x = int(input()) x = x * 100 print(x) &gt;&gt;&gt; 5 &gt;&gt;&gt; 500<p>В ветвящихся алгоритмах ход программы зависит от значения логического выражения в блоке "Условие". По большому счёту, любое логическое выражение сводится к выбору между истиной (True, "1") или ложью (False, "0").</p>
114 x = int(input()) x = x * 100 print(x) &gt;&gt;&gt; 5 &gt;&gt;&gt; 500<p>В ветвящихся алгоритмах ход программы зависит от значения логического выражения в блоке "Условие". По большому счёту, любое логическое выражение сводится к выбору между истиной (True, "1") или ложью (False, "0").</p>
115 <p><strong>Пример.</strong>Напишите программу, которая запрашивает у пользователя возраст. Если он равен или больше 18, программа выводит приветствие, увеличивает значения счётчика посетителей на 1 и прощается, а если меньше - сразу прощается и завершает работу.</p>
115 <p><strong>Пример.</strong>Напишите программу, которая запрашивает у пользователя возраст. Если он равен или больше 18, программа выводит приветствие, увеличивает значения счётчика посетителей на 1 и прощается, а если меньше - сразу прощается и завершает работу.</p>
116 <p>Чтобы изобразить ход решения, воспользуемся условным блоком. Во всех схемах его обозначают ромбом с вписанным условием:</p>
116 <p>Чтобы изобразить ход решения, воспользуемся условным блоком. Во всех схемах его обозначают ромбом с вписанным условием:</p>
117 <em>Изображение: Skillbox Media</em><p>То же самое на Python:</p>
117 <em>Изображение: Skillbox Media</em><p>То же самое на Python:</p>
118 visits_counter = 0 answer = int(input("Сколько вам лет? ")) if answer &gt;= 18: print("Добро пожаловать!") visits_counter += 1 else: print("Доступ запрещён")<p>Когда пользователь вводит 18 или больше, программа выполняет часть кода, которая записана под оператором if. Если же возраст меньше 18, то на экран выводится сообщение "Доступ запрещён" и программа завершает работу.</p>
118 visits_counter = 0 answer = int(input("Сколько вам лет? ")) if answer &gt;= 18: print("Добро пожаловать!") visits_counter += 1 else: print("Доступ запрещён")<p>Когда пользователь вводит 18 или больше, программа выполняет часть кода, которая записана под оператором if. Если же возраст меньше 18, то на экран выводится сообщение "Доступ запрещён" и программа завершает работу.</p>
119 <p>Такие алгоритмы содержат циклы - наборы действий, которые выполняются несколько раз. Количество повторений может задаваться целым числом или условием. В некоторых случаях, например, в операционных системах и прошивках микроконтроллеров, используются бесконечные циклы.</p>
119 <p>Такие алгоритмы содержат циклы - наборы действий, которые выполняются несколько раз. Количество повторений может задаваться целым числом или условием. В некоторых случаях, например, в операционных системах и прошивках микроконтроллеров, используются бесконечные циклы.</p>
120 <p><strong>Пример.</strong>Напишите программу, которая циклично увеличивает значения счётчика на 1 и на каждом шаге выводит его значение. Когда значение счётчика достигнет 10, программа должна завершиться.</p>
120 <p><strong>Пример.</strong>Напишите программу, которая циклично увеличивает значения счётчика на 1 и на каждом шаге выводит его значение. Когда значение счётчика достигнет 10, программа должна завершиться.</p>
121 <p>В основе нашего решения будет лежать следующее условие: если значение счётчика меньше 10 - прибавить 1, иначе - завершить работу. Вот как это выглядит в виде блок-схемы:</p>
121 <p>В основе нашего решения будет лежать следующее условие: если значение счётчика меньше 10 - прибавить 1, иначе - завершить работу. Вот как это выглядит в виде блок-схемы:</p>
122 <em>Изображение: Skillbox Media</em><p>Переведём это в код на Python. Обратите внимание, что мы не прописываем отдельную ветвь для случая "Нет":</p>
122 <em>Изображение: Skillbox Media</em><p>Переведём это в код на Python. Обратите внимание, что мы не прописываем отдельную ветвь для случая "Нет":</p>
123 count = 0 #прибавлять 1 к count, пока count меньше 10 while count &lt; 10: count += 1 print(count) print("Переменная count равна 10!")<p>Результат работы программы:</p>
123 count = 0 #прибавлять 1 к count, пока count меньше 10 while count &lt; 10: count += 1 print(count) print("Переменная count равна 10!")<p>Результат работы программы:</p>
124 1 2 3 4 5 6 7 8 9 10<p>Рекурсия - это явление, при котором система вызывает саму себя, но с другими входными данными. Такие алгоритмы используют для обхода словарей в глубину, вычисления факториала, расчёта степеней и других практических задач. В целом всё это можно сделать с помощью циклов, но код рекурсивных функций более лаконичен и удобочитаем.</p>
124 1 2 3 4 5 6 7 8 9 10<p>Рекурсия - это явление, при котором система вызывает саму себя, но с другими входными данными. Такие алгоритмы используют для обхода словарей в глубину, вычисления факториала, расчёта степеней и других практических задач. В целом всё это можно сделать с помощью циклов, но код рекурсивных функций более лаконичен и удобочитаем.</p>
125 <p><strong>Пример.</strong>Пользователь вводит число n. Посчитайте его факториал и выведите результат на экран.</p>
125 <p><strong>Пример.</strong>Пользователь вводит число n. Посчитайте его факториал и выведите результат на экран.</p>
126 #функция, которая вызывает саму себя def factorial(n): if n == 1: return 1 #когда функция возвращает значение, #она вызывает себя, но с аргументом n - 1 return n * factorial(n - 1)<p>Вот как выглядит блок-схема рекурсивного алгоритма:</p>
126 #функция, которая вызывает саму себя def factorial(n): if n == 1: return 1 #когда функция возвращает значение, #она вызывает себя, но с аргументом n - 1 return n * factorial(n - 1)<p>Вот как выглядит блок-схема рекурсивного алгоритма:</p>
127 <em>Изображение: Skillbox Media</em><p>На практике чисто последовательные, условные или циклические алгоритмы встречаются редко, но вместе они позволяют создать решение любой сложности.</p>
127 <em>Изображение: Skillbox Media</em><p>На практике чисто последовательные, условные или циклические алгоритмы встречаются редко, но вместе они позволяют создать решение любой сложности.</p>
128 <p>Есть и другие классификации алгоритмов. Например, по множеству решаемых задач их можно разделить на численные, поисковые, сортировочные, строковые, сетевые и криптографические. А по точности получаемых результатов - на нормальные и стохастические (вероятностные).</p>
128 <p>Есть и другие классификации алгоритмов. Например, по множеству решаемых задач их можно разделить на численные, поисковые, сортировочные, строковые, сетевые и криптографические. А по точности получаемых результатов - на нормальные и стохастические (вероятностные).</p>
129 <p>Если хотите изучить алгоритмы более подробно, начните с простых и увлекательных книг по computer science:</p>
129 <p>Если хотите изучить алгоритмы более подробно, начните с простых и увлекательных книг по computer science:</p>
130 <ul><li>"Грокаем алгоритмы", Адитья Бхаргава;</li>
130 <ul><li>"Грокаем алгоритмы", Адитья Бхаргава;</li>
131 <li>"Теоретический минимум по Computer Science", Владстон Фило;</li>
131 <li>"Теоретический минимум по Computer Science", Владстон Фило;</li>
132 <li>"Гид по Computer Science", Вильям Спрингер.</li>
132 <li>"Гид по Computer Science", Вильям Спрингер.</li>
133 </ul><p>Когда познакомитесь с основными алгоритмами и научитесь решать с их помощью стандартные задачи, переходите к более серьёзной литературе. Например, прочитайте Computer Science Роберта Седжвика и "Алгоритмы" Рода Стивенса.</p>
133 </ul><p>Когда познакомитесь с основными алгоритмами и научитесь решать с их помощью стандартные задачи, переходите к более серьёзной литературе. Например, прочитайте Computer Science Роберта Седжвика и "Алгоритмы" Рода Стивенса.</p>
134 <p>У "Яндекса" есть<a>бесплатные тренировки</a>с разбором алгоритмических задач и распространённых ошибок. А попрактиковаться, закрепить теорию и подготовиться к техническому интервью можно на <a>LeetCode</a> - там есть сотни задач разной сложности и для разных языков программирования.</p>
134 <p>У "Яндекса" есть<a>бесплатные тренировки</a>с разбором алгоритмических задач и распространённых ошибок. А попрактиковаться, закрепить теорию и подготовиться к техническому интервью можно на <a>LeetCode</a> - там есть сотни задач разной сложности и для разных языков программирования.</p>
135 <a><b>Бесплатный курс по Python ➞</b>Мини-курс для новичков и для опытных кодеров. 4 крутых проекта в портфолио, живое общение со спикером. Кликните и узнайте, чему можно научиться на курсе. Смотреть программу</a>
135 <a><b>Бесплатный курс по Python ➞</b>Мини-курс для новичков и для опытных кодеров. 4 крутых проекта в портфолио, живое общение со спикером. Кликните и узнайте, чему можно научиться на курсе. Смотреть программу</a>