Автор Анна Евкова
Преподаватель который помогает студентам и школьникам в учёбе.

АЛГОРИТМИЗАЦИЯ КАК ОБЯЗАТЕЛЬНЫЙ ЭТАП РАЗРАБОТКИ ПРОГРАММЫ (Понятие алгоритма. История возникновения)

Содержание:

Введение.

При создании ответственных технологических объектов одной из важнейших составляющих процесса их проектирования является комплексная автоматизация технических средств. Различная природа физических процессов, протекающих в объектах, сложный характер взаимодействия между ними и управляющими системами обуславливает трудности алгоритмизации и программирования задач управления. Вопросы унификации аппаратного обеспечения в настоящее время решаются достаточно успешно на основе микропроцессорных и микроконтроллерных комплектов, программируемых логических контроллеров и промышленных компьютеров. Однако при формировании общих подходов к созданию алгоритмического и программного обеспечения возникают трудности, связанные с необходимостью достижения их наглядности, структурированности, наблюдаемости и управляемости. Эти трудности усугубляются тем, что при создании различных систем управления обычно используются и различные технологии алгоритмизации и программирования.

Спектр таких технологий широк: от технологий на основе алгоритмических языков высокого уровня для промышленных компьютеров до технологий на основе специализированных языков для программируемых логических контроллеров (например, функциональных и лестничных схем). Очевидно, что алгоритмизация и программирование систем управления техническими средствами, должны основываться на единой методологии, позволяющей строить, читать, проверять, верифицировать алгоритмы и программы. До настоящего времени алгоритмы логического (основанные на истинности и ложности) управления задаются Проектантом (Технологом) в словесной форме, и поэтому они могут быть противоречивыми и неполными. Это вносит дополнительные трудности в процесс алгоритмизации и программирования управляющих устройств, так как каждый участник разработки понимает в силу неоднозначности и словесного описания алгоритмы логического управления по-своему. По этой причине даже самый "точный" словесный алгоритм может удовлетворять каждого из участников разработки в отдельности, но, в конечном счете, являться некорректным.

Ситуация усугубляется при создании систем управления, ядро которых представляет собой систему взаимосвязанных управляющих устройств. При этом, с одной стороны, совокупность таких устройств (вследствие большой размерности) становится плохо обозримой, наблюдаемой и управляемой, а с другой – плохо понимаемой Заказчиком и Проектантом (Технологом). Это во многом определяется тем, что обычно автоматизация каждого комплекса технических средств выполняется самостоятельным коллективом Разработчиков и Программистов, которые используют специфическую технологию алгоритмизации и программирования. В настоящее время в практике проектирования систем управления, наиболее часто употребляемыми языками спецификаций алгоритмов логического управления являются язык функциональных схем и язык блок-схем алгоритмов, называемых обычно схемами алгоритмов. Указанные языки удобны, как правило, только для одних участников разработки, но крайне неудобны для других участников. Так, например, наиболее часто при согласовании алгоритмов управления судовыми техническими средствами применяется язык функциональных схем, который достаточно хорошо понятен только Разработчику, так как такой язык для последовательностных алгоритмов, реализуемых схемами с обратными связями, описывает их структуру (статику), но не отражает в явном виде их поведение (динамику).

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

В данной курсовой работе я постараюсь осветить такие понятия, как алгоритм, исполнитель алгоритма, алгоритмизация, рассказать о свойствах и видах алгоритмов, о правилах построения алгоритмов, о методах их представления и классификации, о роли алгоритмизации в программировании.

Раздел 1. Понятие алгоритма. История возникновения.

Принято считать, что слово алгоритм произошло от имени одного из значимых персидских ученых Аль-Хорезми, жившего в 799-850 гг. на территории современного Узбекистана и Туркмении. Сочинение, написанное им в первой половине IX века и повествовавшее о придуманной в Индии позиционной десятичной системе счисления, положило начало начертанию цифр, которые ныне так привычны нашему глазу. Именно индийские цифры стали прародителями арабских, которые мы используем по сей день. Сочинение Аль-Хорезми так и называлось – «Книга об индийском счете» (лат. Algoritmi de numero Indorum). Латинское название сочинение получило в XII веке, когда проникло в Европу. Арабское название книги звучало как Китаб аль-джебр валь-мукабала. От названия этой книги пошло современное название науки алгебры. Так же Аль-Хорезми подарил нам еще одну книгу, о существовании которой узнали в середине XIX века, благодаря найденному в библиотеке Кембриджского университета латинскому переводу этой книги. Первые строки этой книги гласят: «Сказал Алгоритми. Воздадим должную хвалу Богу, нашему вождю и защитнику». Благодаря переводу Аль-Хоризми стал Алгоритми.

Так что же есть алгоритм? Алгоритмом называется определённый порядок действий, который приводит к конечному результату за определённое количество шагов. В повседневной жизни мы очень часто используем алгоритмы. Покупая мебель, мы открываем инструкцию по сборке, что в своем роде тоже является алгоритмом. Просматривая кулинарные книги, мы тоже сталкиваемся с алгоритмами, только в виде рецептов.

В XX веке, с появлением первых вычислительных машин, термин алгоритм стал употребляться более активно. Этому в неменьшей степени поспособствовал английский математик и криптограф Алан Тьюринг, доказавший возможность создания машины, которая способна исполнять алгоритм. Впоследствии была создана машина Тьюринга, которая позволила взломать немецкий шифратор Энигма. С этих пор стал употребляться термин – исполнитель алгоритма. Этот термин не имеет четкого определения, ведь совершать действие над алгоритмом может кто угодно, начиная от программы и заканчивая человеком.

В информатике универсальным исполнителем алгоритмов является компьютер.

Исполнитель алгоритма - некоторая абстрактная или реальная (техническая, биологическая или биотехническая) система, способная выполнить действия, предписываемые алгоритмом.

Исполнителя характеризуют: среда; система команд; элементарные действия; отказы.

Среда (или обстановка) - "место обитания" исполнителя. Объекты, над которыми исполнитель может совершать действия. Для алгоритмов, встречающихся в математике, средой того или иного исполнителя могут быть числа разной природы - натуральные, действительные и т.п., буквы, буквенные выражения, уравнения, тождества и т. п.

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

Элементарное действие - те действия, которые может совершать исполнитель.

Отказы исполнителя возникают, если команда вызывается при недопустимом для нее состоянии среды.

Раздел 2. Виды и свойства алгоритмов.

Все алгоритмы должны быть составлены так, чтобы исполнитель мог однозначно следовать командам для получения определённого результата. Это накладывает на алгоритмы базовые требования, которые называются свойствами алгоритма. Существуют следующие свойства алгоритма:

  1. Дискретность - свойство алгоритма, требующее пошагового выполнения задачи. Каждое действие выполняется только после завершения предыдущего.
  2. Определенность. Каждый шаг должен быть однозначным. В алгоритме не должно присутствовать двоякого трактования. Благодаря этому свойству выполнение алгоритма носит механический характер и не требует никаких дополнительных указаний или сведений о решаемой задаче.
  3. Результативность. Алгоритм, в конечном итоге, должен приводить к решению задачи за определённое число шагов.
  4. Массовость. Алгоритм решения задачи разрабатывается в общем виде, то есть, он должен быть применим для некоторого класса задач, различающихся только исходными данными.

Представим себе следующую ситуацию:

У нас есть корзина, в которой лежат 15 яблок и 10 апельсинов. Нам необходимо взять острый нож, почистить все фрукты и разложить их в разные миски.

Выше я представил алгоритм чистки фруктов, в котором можно наглядно увидеть все обязательные свойства алгоритма. Например, дискретность. В алгоритме описан строгий порядок действий, нарушив который мы не получим конечного результата. Попробуйте убрать нож, а затем почистить фрукты. У вас ничего не получится. Теперь определенность. В нашем алгоритме присутствует точное определение ножа. Он должен быть острым. Если бы в нашем алгоритме не было этого условия, мы могли бы взять любой нож, в том числе и тупой, что в дальнейшем усложнило бы задачу чистки, если не сделала бы её невозможной. Далее результативность. Тут всё просто, фрукты почищены, разложены по мискам, результат получен. И наконец, массовость. Данный алгоритм мы можем применить не только для чистки яблок и апельсинов но и например для картофеля.

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

Правило 1. Для построения алгоритма необходимы объекты, с которыми он будет работать. Если эти объекты представлены в виде кода, они называются данными. Алгоритм берет некий объем данных, называемый входными данными, производит над ними работу и в конечном итоге представляет нам выходные данные.

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

Правило 3. – дискретность. Требование пошагового выполнения задачи.

Правило 4. – сходимость (результативность). Алгоритм должен завершать работу после определенного числа шагов.

Алгоритм применительно к ЭВМ – набор действий и правил их выполнения, с помощью которого можно решить определенную задачу имея некоторые входные данные. В зависимости от поставленной цели, условий задачи и возможных способах её решения алгоритмы подразделяются на следующие виды:

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

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

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

Линейные. Алгоритмы, шаги в которых выполняются последовательно, друг за другом.

Разветвляющиеся. В структуре такого алгоритма присутствует условие, которое подразумевает несколько дальнейших вариантов решения задачи.

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

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

Вернемся к ситуации с фруктами. Попробуем записать её разными видами алгоритмов. В детерминированном виде задача записана изначально. Шаг за шагом, последовательно мы приближаемся к результату в виде почищенных фруктов. Стохастический алгоритм я также же описывал. Вспомним про нож. Взяв в руки острый нож, мы однозначно почистим фрукты. Если возьмем тупой, то можем и не достигнуть результата. В виде эвристического алгоритма представим инструкцию по чистке яблок. Линейный алгоритм в нашем примере имеет некоторое сходство с детерминированным алгоритмом. В линейном алгоритме также задача решается последовательно, шаг за шагом, но однократно, т.е. мы взяли одно яблоко, взяли нож, почистили яблоко, положили в миску. В нашем примере в корзине лежит некоторое количество фруктов. Закончив чистить один плод, мы берём следующий, и начинаем сначала. Это пример циклического алгоритма. Пока сохраняется условие цикла (в корзине есть фрукты), алгоритм будет повторяться. Как только последний плод будет очищен, результат будет достигнут.

Давайте немного изменим вводные данные. Представим, что помимо чистки фруктов нам надо убедиться в их годности к употреблению. Здесь в игру вступает разветвляющийся алгоритм. Перед тем, как почистить яблоко нам необходимо визуально оценить его состояние, и если оно удовлетворяет нашим критериям, чистим его и складываем в миску. Если нет, то выбрасываем.

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

Раздел 3. Представление алгоритмов.

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

Словесный способ – способ представления алгоритма в виде слов.

Графический способ – наиболее популярный способ представления алгоритма. Благодаря своей наглядности логически понятен читателю или исполнителю. Графический способ представляет собой различные блоки, каждый из которых описывает отдельный этап алгоритма (Рис. 2.1). Совокупность этих блоков называется блок-схемой. Далее я остановлюсь на этом методе чуть подробнее.

Рис.2.1

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

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

В очередной раз вспомним пример с фруктами в корзине. Изначально он полностью был описан словесным способом. Теперь попробуем изобразить его в виде графического (Рис. 2.2).

Рис. 2.2

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

Пример:

Даны два целых положительных числа, найти их наибольший общий делитель (НОД).

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

Обозначим через M и N исходные целые числа, приняв в качестве их начальных значений заданные константы. Сведем деление к повторному вычитанию. Тогда алгоритм может быть сформулирован следующим образом:

1. задать два числа;

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

3. определить большее из чисел;

4. заменить большее из чисел разностью большего и меньшего из чисел;

5. повторить алгоритм с шага 2;

2. Ввести (М, N);

3. Если MN, то перейти к п.4, иначе перейти к п. 7;

4. Если M>N, то прейти к п. 5, иначе перейти к п. 6;

5. М: = М-N; перейти к п. 3;

6. N: = N-М; перейти к п. 3;

7. НОД: =М;

8. Печатать (НОД).

Словесно-формульный способ не имеет широкого распространения по следующим причинам:

- такие описания строго не формализуемы;

- страдают многословностью записей;

- допускают неоднозначность толкования отдельных предписаний.

Псевдокод представляет собой систему обозначений и правил, предназначенную для единообразной записи алгоритмов. Он занимает промежуточное место между естественным и формальным языками [7].

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

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

Пример:

Вычислить а+b.

Алг Нахождение суммы;

дано а и b;

надо с=а+b;

ввод а,b;

с:=а+b;

вывод с;

кон .

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

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

Раздел 4. Структурное программирование

На всех этапах подготовки к алгоритмизации задачи широко используется структурное представление алгоритма. В информатике процесс решения задачи распределяется между двумя субъектами: программистом и компьютером. Программист составляет алгоритм (программу), компьютер его исполняет. В традиционной математике такого разделения нет, задачу решает один человек, который составляет алгоритм решения задачи и сам выполняет его. Сущность алгоритмизации не в том, что решение задачи представляется в виде набора элементарных операций, а в том, что процесс решения задачи разбивается на два этапа: творческий (программирование) и не творческий (выполнение программы). И выполняют эти этапы разные субъекты – программист и исполнитель.

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

Практика программирования показала необходимость научно обоснованной методологии разработки и документирования алгоритмов и программ. Эта методология должна касаться анализа исходной задачи, разделения ее на достаточно самостоятельные части и программирования этих частей по возможности независимо друг от друга. Такой методологией, зародившейся в начале 70-х годов и получившей в последнее время широкое распространение, является структурное программирование. По своей сути оно воплощает принципы системного подхода в процессе создания и эксплуатации программного обеспечения ЭВМ. В основу структурного программирования положены следующие достаточно простые положения [8]:

1. алгоритм и программа должны составляться поэтапно (по шагам);

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

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

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

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

http://www.bestreferat.ru/images/paper/36/88/8298836.jpeg

Рис. 2.3

Первая (а) структура - тип последовательность (или просто последовательность), вторая (б) – структура выбора (ветвление), третья (в) – структура цикла с предусловием.

При словесной записи алгоритма указанные структуры имеют соответственно следующий смысл:

«выполнить S1; выполнить S2 »,

если P, то выполнить S1 , иначе выполнить S2 »,

«до тех пор, пока P, выполнять S »,

где P - условие; S, S1, S2 - действия.

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

Достаточно часто структурное программирование подразумевает использование более трех базисных структур. Применительно к языку Паскаль, в котором наиболее полно нашли свое отражение идеи структурного программирования, целесообразно при проектировании алгоритмов дополнительно использовать еще четыре элементарные структуры: сокращенную запись разветвления; структуру варианта структуру повторения или цикла с параметром; структуру цикла с постусловием (рис. 2.4 ). Каждая из этих структур имеет один вход и один выход. В языке Паскаль имеются средства, позволяющие непосредственно реализовывать в программе любую из этих структур, поэтому правильное использование типовых структур в процессе разработки алгоритма обеспечивает упрощение этапов решения задачи на ЭВМ.

http://www.bestreferat.ru/images/paper/44/88/8298844.gif

Рис 2.4

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

В зависимости от типа и числа проверяемых условий различают:

- ветвление с простым условием (условие - выражение отношения);

- ветвление с составным условием (условие - логическое выражение);

- сложное ветвление (несколько условий).

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

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

- - логическое сложение (ИЛИ), дизъюнкция;

-- логическое умножение (И), конъюнкция;

- | - отрицание (не).

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

Повторяющийся участок вычисления называется циклом. Операции, осуществляемые в цикле, составляют тело цикла.

Величина, изменяющая своё значение от цикла к циклу, называется параметром цикла.

Зависимость, связывающая текущее и предыдущее значения параметра цикла, определяет закон изменения параметра цикла.

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

Все циклические процессы по признаку определения количества повторений (М) разделяются на два класса.

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

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

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

- вход в цикл (формирование начального значения параметра цикла);

- вычисления в теле цикла (расчёт текущего значения функций, формирования нового значения параметра цикла, а также вспомогательные операции);

- выход из цикла (проверка условия, определяющего повторение вычислений, либо их прекращение).

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

В соответствии с видом задания (изменения) параметра цикла арифметические циклы подразделяются на:

- циклы с аналитическим изменением параметра;

- циклы с табличным заданием параметра.

Выполнение арифметических циклов, т.е. многократное вычисление значений функции при изменяющихся значениях аргумента, называется табуляцией функции.

Раздел 5. Предпрограммная подготовка задачи

На ЭВМ могут решаться задачи различного характера, например: научно-инженерные; разработки системного программного обеспечения; обучения; управления производственными процессами и т. д. В процессе подготовки и решения на ЭВМ научно-инженерных задач можно выделить следующие этапы:

1. постановка задачи;

2. формирование математической модели задачи;

3. выбор и обоснование метода решения;

4. алгоритмизация вычислительного процесса;

5. программирование;

6. отладка и тестирование программы;

7. решение задачи на ЭВМ и анализ результатов;

8. сопровождение программы.

В задачах другого класса некоторые этапы могут отсутствовать, например, в задачах разработки системного программного обеспечения отсутствует математическое описание. Перечисленные этапы связаны друг с другом. Например, анализ результатов может показать необходимость внесения изменений в программу; алгоритм или даже в постановку задачи. Для уменьшения числа подобных изменений необходимо на каждом этапе по возможности учитывать требования, предъявляемые последующими этапами. В некоторых случаях связь между различными этапами, например, между постановкой задачи и выбором метода решения, между составлением алгоритма и программированием, может быть настолько тесной, что разделение их становится затруднительным.

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

- четкая формулировка цели с указанием вида и характеристик конечных результатов;

- представление значений и размерностей исходных данных;

- определение всех возможных вариантов решения, условий выбора каждого;

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

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

Формирование математической модели задачи - этап перевода словесной постановки задачи в совокупность математических зависимостей, описывающих исходные данные и вычисления промежуточных и конечных результатов.

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

Математическая модель должна удовлетворять по крайней мере двум требованиям: реалистичности и реализуемости. Под реалистичностью понимается правильное отражение моделью наиболее существенных черт исследуемого явления.

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

Полученная математическая модель должна отвечать следующим требованиям:

- вначале составляется модель исходных данных, затем - расчетные зависимости;

- в модели исходных данных не изменяются размерности данных и не используются никакие математические операции;

- обозначение всех входящих в зависимости величин именами, определяющими их суть;

- указание размерностей всех используемых величин для контроля и дальнейшей модернизации решения;

Выбор и обоснование метода решения - этап разработки или выбора из уже имеющихся метода решения, в том числе выбор стандартных структур вычислительных процессов (линейной, ветвящейся, циклической). Критерии выбора определяются математической моделью решения (предыдущий этап), требованиями к универсальности метода и точности результата, ограничениями технического и программного обеспечении. При обосновании выбора метода необходимо учитывать различные факторы и условия, в том числе точность вычислений, время решения задачи на ЭВМ, требуемый объем памяти и другие. Здесь следует указать альтернативные методы и аргументы сделанного выбора. Одну и ту же задачу можно решить различными методами, при этом в рамках каждого метода можно составить различные алгоритмы.

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

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

1. Программа должна быть универсальной, то есть не зависящей от конкретного набора данных. Например, если количество обрабатываемых данных может меняться, то следует предусмотреть хранение максимально возможного их количества. Универсальная программа должна уметь обрабатывать ошибки, которые могут возникнуть в процессе обработки информации.

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

3. Некоторые простые приемы позволяют повысить эффективность программы (то есть уменьшить количество выполняемых операций и время работы программы). К таким приемам относится:

- использование операции умножения вместо возведения в степень ();

- если некоторое арифметическое выражение встречается в вычислениях несколько раз, то его следует вычислить заранее и хранить в памяти ЭВМ, а по мере необходимости использовать;

- при организации циклов в качестве границ индексов использовать переменные, а не выражения, которые вычислялись бы при каждом прохождении цикла;

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

4. Программа должна содержать комментарии, позволяющие легко проследить за логической взаимосвязью и функциями отдельных ее частей.

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

Отладка программы – процесс выявления и исправления синтаксических и логических ошибок в программе. Суть отладки заключается в том, что выбирается некоторый набор исходных данных, называемый тестовым набором (тестом), и задача с этим набором решается дважды: один раз – исполнением программы, второй раз – каким-либо иным способом, исходя из условия задачи, так сказать, «вручную». При совпадении результатов алгоритм считается верным. В качестве тестового набора можно выбрать любые данные, которые позволяют:

- обеспечить проверку выполнения всех операций алгоритма;

- свести количество вычислений к минимуму.

В ходе синтаксического контроля программы транслятором выявляются конструкции и сочетания символов, недопустимые с точки зрения правил их построения или написания, принятых в данном языке. Сообщения об ошибках ЭВМ выдает программисту, при этом вид и форма выдачи подобных сообщений зависят от вида языка и версии используемого транслятора.

После устранения синтаксических ошибок проверяется логика работы программы в процессе ее выполнения с конкретными исходными данными. Для этого используются специальные методы, например, в программе выбираются контрольные точки, для которых вручную рассчитываются промежуточные результаты. Эти результаты сверяются со значениями, получаемыми ЭВМ в данных точках при выполнении отлаживаемой программы. Кроме того, для поиска ошибок могут быть использованы отладчики, выполняющие специальные действия на этапе отладки, например, удаление, замена или вставка отдельных операторов или целых фрагментов программы, вывод или изменение значений заданных переменных.

Тестирование - это испытание, проверка правильности работы программы в целом, либо её составных частей.

Отладка и тестирование (англ. test - испытание) - это два четко различимых и непохожих друг на друга этапа:

- при отладке происходит локализация и устранение синтаксических ошибок и явных ошибок кодирования;

- в процессе же тестирования проверяется работоспособность программы, не содержащей явных ошибок.

Тестирование устанавливает факт наличия ошибок, а отладка выясняет ее причину. Английский термин debugging ("отладка") буквально означает "вылавливание жучков". Термин появился в 1945 г., когда один из первых компьютеров - "Марк-1" прекратил работу из-за того, что в его электрические цепи попал мотылек и заблокировал своими останками одно из тысяч реле машины.

В современных программных системах (Turbo Basic, Turbo Pascal, Turbo C и др.) отладка осуществляется часто с использованием специальных программных средств, называемых отладчиками. Эти средства позволяют исследовать внутреннее поведение программы.

Программа-отладчик обычно обеспечивает следующие возможности:

- пошаговое исполнение программы с остановкой после каждой команды (оператора);

- просмотр текущего значения любой переменной или нахождение значения любого выражения, в том числе, с использованием стандартных функций; при необходимости можно установить новое значение переменной;

- установку в программе "контрольных точек", т.е. точек, в которых программа временно прекращает свое выполнение, так что можно оценить промежуточные результаты, и др.

При отладке программ важно помнить следующее:

- в начале процесса отладки надо использовать простые тестовые данные;

- возникающие затруднения следует четко разделять и устранять строго поочередно;

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

Список используемой литературы.

1. Акулов О.А. Информатика: учебник / О.А. Акулов, Н.В. Медведев. – М.: Омега-П, 2007. – 270 с.

2. Алексеев А.П. Информатика 2007 / А.П. Алексеев. – М.: СОЛОН-ПРЕСС, 2007. – 608 с.

3. Вьюхин В.В. Информатика и вычислительная техника: учеб. пособие для инженерных специальностей / В.В. Вьюхин; под ред. В.Н. Ларионова. - М.: Дрофа, 1992. – 286 с.

4. Гейн А.Г. Основы информатики и вычислительной техники / А.Г. Гейн. - М.: Просвещение, 1992. – 245 с.

5. Информатика: практикум по технологии работы на компьютере / под ред. Н.В. Макаровой. - 2-е изд. - М.: Финансы и статистика, 1998. – 384 с.

6. Макарова Н.В. Информатика: практикум по технологии работы на компьютере / Н.В. Макарова, С.Н. Рамин. – М.: Академия, 1997. – 384 с.

7. Макарова Н.В. Информатика: учеб. пособие для вузов / Н.В. Макарова, Н.В. Бройдо. – М.: Академия, 2003. – 768 с.

8. Могилев А.В. Информатика: учеб. пособие для вузов / А.В. Могилев, Н.И. Пак, Е.К. Хеннер; под ред. Е.К. Хеннера. - М.: Академия, 2000. – 346 с.

9. Острейковский В.А. Информатика / В.А. Острейковский. М.: Высш. шк., 2000. – 235 с.

10. Угринович Н.Д. Практикум по информатике и информационным технологиям: учеб. пособие для общеобразовательных учреждений / Н.Д. Угринович, Л.Л. Босова, Н.И. Михайлова. – М.: Бином, 2002. – 400 с.

11. Аузяк А.Г., Богомолов Ю.А., Маликов А.И., Старостин Б.А. Программирование и основы алгоритмизации учебное пособие, 2013 – 153 с.

12. Потопахин В. В. Искусство алгоритмизации - ДМК Пресс, 2011 г. – 320 с.