2. Алгоритмы и программы

2. Алгоритмы и программы

Когда мы говорим о программировании, то постоянно говорим о двух фундаментальных понятиях, на которых основано все программирование: программы и данные. Что такое данные, мы разберём чуть позже, на занятии 4. «Данные программ».  Сейчас нам очень важно понять, что такое программа. Потому что данные, информация, знания — существовали задолго до программирования, а вот появление такого понятия как «программа» — ознаменовало собой появление программирования…

Вкратце что же такое программа, вы уже читали в статье «Что такое программа и программирование?». Давайте теперь разберем этот вопрос более подробно.

Программа и алгоритм

Что же такое программа? Если вы скажете: это то, что пишут программисты, вы будете правы, хотя и не совсем, так как программисты пишут не только программы. Если вы скажете, что программа — это то, что выполняется на компьютере, вы тоже будете правы лишь отчасти, потому что далеко не все программы выполняются на компьютерах. Например, программу учебного курса можно выполнить человеку, но её нельзя выполнить на компьютере.

То есть, программа — это то, что можно выполнить. В результате выполнения программы должно что-то измениться, то есть, мы должны получить какой-то результат. Для достижения этих изменений (результата) должно быть что-то сделано.

Можно сказать, что у нас есть некое начальное состояние (исходные условия), а нам из него надо перейти в некое конечное состояние (получить результат). Для этого, разумеется, необходимо выполнить одно или несколько действий. Например, для того чтобы расколоть орех, по нему надо ударить так, чтобы он раскололся. Тогда в результате мы получим расколотый орех.

В этом примере у нас есть начальное состояние (целый орех), конечное состояние или результат, который нам надо получить (расколотый орех), а также есть понимание того, какое действие надо выполнить для перехода из начального состояния в конечное (ударить по ореху так, чтобы он раскололся).

Теперь давайте подробно опишем все необходимые для этого шаги:

  1. Взять целый орех.
  2. Закрепить орех.
  3. Взять молоток.
  4. Задать небольшую силу удара.
  5. Ударить молотком по ореху с заданной силой.
  6. Проверить, раскололся ли орех.
  7. Если нет, увеличить силу удара и вернуться к пункту 5.
  8. Если да, вынуть расколотый орех.
  9. Положить молоток на место.

Такая последовательность простых действий позволяет нам получить из целого ореха расколотый.

То, что мы сейчас написали, представляет собой алгоритм (или программу) раскалывания ореха. Пользуясь этим алгоритмом, мы можем колоть разные орехи.

В жизни нам встречается очень много алгоритмов: любая инструкция, любой рецепт, любое объяснение маршрута по городу — всё это алгоритмы.

Обратите внимание, что составляющими элементами алгоритма являются некие операции, которые могут быть простейшими, а могут быть и сами — в свою очередь — разложены на более простые операции.

Здесь вы можете сами придумать какой-нибудь алгоритм действий из вашей повседневной жизни, записать его по шагам, разбив на элементарные операции, а затем попытаться его выполнить, и заодно проверить его на правильность. Если у вас это получилось — поздравляем! Вы сейчас сделали свой первый осознанный шаг к программированию.

Свойства алгоритмов

Обратите внимание, что в алгоритме важен не только определенный набор действий, но также очень важен порядок следования этих действий: стоит переставить некоторые операции местами и алгоритм перестанет работать: перестанет приводить нас к нужному результату при тех же начальных условиях.

Пример:

  1. Проверить, раскололся ли орех.
  2. Закрепить орех.
  3. Положить молоток на место.
  4. Задать небольшую силу удара.
  5. Ударить молотком по ореху с заданной силой.
  6. Если нет, увеличить силу удара и перейти к пункту 5.
  7. Если да, вынуть расколотый орех.
  8. Взять молоток.
  9. Взять целый орех.

Достаточно переставить некоторые шаги местами как искажается сам смысл алгоритма, он перестанет работать как надо, а при определенных «усилиях» можно добиться того, что будет вообще непонятно, что делает данный алгоритм. Разумеется, можно создать сколько угодно подобных — бессмысленных, бесполезных, не работающих и т.п. алгоритмов. Только вот кому они нужны?

В случае изменения начальных условий алгоритм также может перестать работать. Достаточно заменить орех, например, камнем или гайкой и мы в результате никогда не получим расколотый орех.

Стоит упустить в разработке алгоритма какую-либо мелочь и результат может оказаться самым неожиданным (или неприятным).

Вспомните, насколько сложно в сказках получить магическую помощь от хитрого и недоброго джинна, насколько опасно подписывать договоры с нечистой силой: всегда какая-нибудь мелочь окажется неучтённой и в самый неподходящий момент сыграет свою решающую — строго зловредную роль. Точно так же и в программировании: «хочешь халявы — получишь в лоб», расслабишься и не учтешь какой-нибудь «мелочи» — жди беды…

Алгоритм может быть не только конечным, но и в принципе бесконечным. Достаточно представить себе, например, ситуацию, когда орехи подаются к нам непрерывным потоком — по конвейеру.

Достаточно очевидно, что один и тот же результат можно получить самыми разными способами даже при одинаковых начальных условиях.

Пример:

  1. Взять целый орех.
  2. Взять молоток.
  3. Задать большую силу удара.
  4. Ударить молотком по ореху.
  5. Положить молоток на место.
  6. Вынуть расколотый орех.

Здесь мы убрали из алгоритма проверку условия, зато задали сразу большую силу удара, при котором орех обязательно расколется. Конечно, при данном алгоритме будут встречаться орехи, которые даже сильный удар не расколет, но это уже — «дефект» данного конкретного алгоритма.

В дальнейшем мы будем называть алгоритмом описание последовательности действий, а программой — текст на языке программирования, реализующий некий алгоритм, или исполняемый файл. Для того чтобы понять как перейти от описания алгоритма к составлению правильной работоспособной программы мы рекомендуем вам бегло ознакомиться вот с этой методикой. Если вы в ней чего-то не поймёте — это не страшно: мы вернемся к этому материалу еще не один раз.

При создании алгоритмов и при написании программ возможно возникновение ошибок. Кроме того, далеко не все алгоритмы будут оптимальными, например один обеспечит решение задачи за одну секунду, а второй — только за 5. Задача любого хорошего программиста — всегда создавать такие алгоритмы,  которые обеспечивают получение правильных результатов наиболее оптимальным способом.

Кстати, алгоритмы появились в математике довольно давно: любой способ решения математической задачи сам по себе является алгоритмом. А само слово «Алгоритм»  произошло от имени  великого средневекового азиатского математика Аль-Хорезми.

Итак:

  1. Программа или алгоритм — это последовательность действий, которую надо выполнить, чтобы получить какой-то результат.
  2. Каждый алгоритм должен учитывать начальные условия и в результате своего выполнения приводить к требуемому результату.
  3. В каждом алгоритме важны не только сами операции, но и их порядок.
  4. Один и тот же результат при одних и тех же начальных условиях можно получить разными способами (с помощью разных алгоритмов).

На следующем занятии мы разберемся, что такое языки программирования.


Оглавление


Поделиться: 

Мы используем cookie-файлы для наилучшего представления нашего сайта. Продолжая использовать rubasic.ru, вы соглашаетесь на использование файлов cookie.
Понятно