Найти в Дзене
Артем Новожилов

Алгоритм и его свойства (Информатика 8 класс)

Для чего нужен алгоритм и что это такое?

Часто на практике мы сталкиваемся с решением каких-либо задач. И это не только задачи из математики, химии, физики и других школьных предметов; это также самые, что ни на есть, повседневные жизненные задачи, например – приготовить завтрак, добраться до работы, школы, в парк и т.д.

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

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

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

Это и есть алгоритм.

Научно, алгоритм – это сформулированные в каком-либо виде действия, которые приводят к решению определенной задачи.

Чтобы алгоритм реализовался, необходим исполнитель.

Им может быть человек (например – вы, если готовите себе завтрак).

А может быть компьютер, если алгоритм составлен с помощью языка программирования.

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

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

Результативность

Массовость

Дискретность

Понятность

Определенность

Несоблюдение хотя бы одного из свойств – приведет к ошибке (алгоритм будет неверный).

Поэтому всегда, когда создаете какой-либо алгоритм – не важно – для компьютерной программы или хотите решить жизненную ситуацию – помните эти свойства.

Пока только рассмотрим, что они значат. А потом будем разбирать их применение для решения задач по программированию исполнителя Робот в среде Кумир.

Результативность – получение ожидаемого результата.

Прежде, чем создавать что-либо, в данном случае алгоритм, вы должны знать или иметь представление о том, какой результат вы хотите получить. Я думаю – это логично. «Сделать то, не знаю чего» – это не про алгоритмы – запомните.

При этом, вопрос: «Как получить результат?» - не относится к этому свойству!

То есть, если у вас стоит задача посчитать среднюю скорость автомобиля, зная расстояние, которое он прошел за определенное время, и вы не знаете физику от слова совсем, но представляете, что должно получиться число, а не бублик, то свойство выполняется.

Второе свойство – это массовость. Оно не значит, что ваш алгоритм должен быть большой! Или подходить под все среды программирования!

Массовость – это обеспечение решение задачи с различными исходными данными, которые есть в условии задачи, т.е. вы должны разработать такой алгоритм, который будет решать задачу при ЛЮБЫХ ВАРИАНТАХ условия задачи.

Условия задачи могут предполагать – пять исходных данных, десять, сто и даже бесконечность! Не надо этого пугаться – а нужно разработать алгоритм. Если требуется решить задачу для бесконечного количества вариантов исходных данных – значит разработать! Пропустить из бесконечности хотя бы ОДИН вариант – значит «запороть» весь алгоритм.

Дискретность (состоящий из отдельных частей, прерывный, дробный) – что значит поэтапность.

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

Например, чтобы приготовить яичницу, нужно:

1. Положить чистую сковороду на плиту;

2. Включить плиту или зажечь газ на средний нагрев;

3. Отрезать кусочек сливочного масла и положить его в нагретую сковороду;

4. Подождать, пока масло растопится;

5. Распределить растопленное масло по поверхности сковороды;

6. Разбить и вылить необходимое количество яиц в сковороду;

7. Равномерно распределить лопаткой яичный белок по сковороде;

8. Добавить специи по вкусу;

9. Жарить до готовности и следить, чтобы не пригорало;

10. Выключить плиту и выложить яичницу в тарелку.

Соблюдение всех этапов в описанной выше последовательности позволит получить ожидаемый результат – яичницу на завтрак.

Обратите внимание - некоторые этапы – можно поменять местами – например 1 и 2 – и результат будет такой же – вариативность алгоритма. Это нормально.

Существуют алгоритмы вариативным выполнением этапов, а есть такие, что несоблюдение хотя бы одного этапа приведет к катастрофе. Представьте, что у оператора атомной станции есть инструкция по её управлению, и он на какой-то этап решил «забить» - что произойдет?

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

Это как всё вывалить в кучу – думаю понятно, что из этого ничего хорошего не выйдет.

Иными словами - всегда должна быть последовательность ПРАВИЛЬНЫХ действий.

Понятность – алгоритм должен быть описан на понятном для исполнителя языке.

Пример:

1. 在炉子上放一个干净的煎锅;

2. 打开炉子或点燃煤气进行中等加热;

3. 切下一块黄油,放入加热的煎锅中;

4. 等到黄油融化;

5. 将融化的黄油涂抹在煎锅中;

6. 打破并将所需数量的鸡蛋倒入锅中;

7. 用铲子将蛋清均匀地铺在锅上;

8. 添加香料调味;

9. 炒至熟,并确保它不会燃烧;

10. 关掉炉子,把炒鸡蛋放在盘子里.

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

То же самое компьютерная программа входит в «ступор», если вы пытаетесь задать ей команды на непонятном ДЛЯ НЕЕ языке.

У компьютера есть свой «язык» - чтобы с ним можно было «разговаривать» - этот язык использует всего два символа – 1 и 0. Да, не густо, но компьютер так работает.

Еще 70 лет назад вы бы управляли первыми компьютерами, через ввод команд состоящих из 0 и 1 – согласитесь – неудобно. Поэтому были придуманы среды для управления компьютером (среда для программирования).

У такой среды есть свой алфавит – называется он – системой команд исполнителя (СКИ). Сред для программирования – а соответственно языков программирования много и под каждый из них – своя СКИ.

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

Т.к. у такого переводчика настройка под свой язык, то если взять код алгоритма, написанный на языке Паскаль, который позволяет выполнять какую-либо программу – скопировать его и поместить уже в другой переводчик – в среду программирования, например, Питон – то она, как и вы с примером с яичницей на китайском, войдет в «ступор» и выдаст ошибку, что не понимает вас.

При этом компьютер не сможет разобрать орфографическую ошибку в команде СКИ, в отличие от человека: Если я напишу с ошибкой «пАставьте сковороду на плиту» - вы увидите ошибку, но вы поймете, что я имел в виду этим предложением. А вот компьютер – нет.

Если например в среде программирования команда, входящая в ее СКИ, будет написана с ошибкой, пусть даже с пропуском буквы – он уже не поймет и выдаст ошибку.

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

Определенность – действия алгоритма должны быть чётко определены.

При выполнении действия, не должно возникать путаницы; двоякого, троякого, четверякого смысла и т.д.! Иными словами – исполнитель должен ЧЕТКО ОСМЫСЛИВАТЬ, что делает, а кто придумывает алгоритм - ЧЕТКО ОСОЗНАВАТЬ, к какому результату будет приводить каждый этап его алгоритма.

Например, нет определенности в командах:

поверни налево или направо и иди прямо и придешь в школу;

сделай 10 шагов или 30 шагов, и ты дойдешь до нужной комнаты;

поверни налево или направо (там, где нет поворота!).

Понимаете о чем я?

Важно, чтобы свойство определенности выполнялось в КАЖДОМ шаге алгоритма – несло чёткий смысл. Если на каком-то шаге определенность «слетит», то всё – алгоритм не приведет к результату, будьте уверены!

Со смыслом, надеюсь, понятно, но что значит осознанность?

Это я уже добавил от себя. Это значит, что после совершения действий одного шага алгоритма – вы ОСОЗНАЕТЕ, что произошло. Более понятно, я покажу это на примере решения задач с Роботом. Пока что запомните, что если есть команда, например: «повернуться налево, сделать 20 шагов, повернуться направо» – то вы осознаете, что от начальной точки вы сместились влево на 20 шагов. Ни на 30, ни на 15, а на 20 и именно - влево.

Вы не только должны вносить смысл в ваш алгоритм, но еще осознавать, что будет происходить на ВСЕХ этапах алгоритма.

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