Ивная работа по информатике

СОДЕРЖАНИЕ: Алгоритмизация и программирование систем управления техническими средствами, должны основываться на единой методологии, позволяющей строить, читать, проверять алгоритмы и программы

Муниципальное общеобразовательное учреждение

средняя общеобразовательная школа № 12

городского округа Самара

«ОСНОВЫ АЛГОРИТМИЗАЦИИ»

(Реферативная работа по информатике)

Выполнила:

Сафронова Анна

10 класс «А»

Проверил:

Гальчинский Владислав Анатольевич

Самара 2010 г.

СОДЕРЖАНИЕ

I. Введение с.3

II. Основная часть:

1. Алгоритмы и величины:

1.1. Этапы решения задачи на ЭВМ с.5

1.2. Понятие алгоритма с.5

1.3. Данные и величины с.7

2. Линейные вычислительные алгоритмы с.9

3. Ветвления и циклы в вычислительных

алгоритмах с.12

4. Вспомогательные алгоритмы и

процедуры с.15

5. Использование циклов с параметром

для обработки массивов с.17

III. Заключение с.18

IV. Приложения с.19

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

ВВЕДЕНИЕ

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

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

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

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

ОСНОВНАЯ ЧАСТЬ

1. Алгоритмы и величины

1.1. Этапы решения задачи на ЭВМ. Работа по решению любой задачи с использованием компьютера делится на следующие этапы:

1. Постановка задачи. 2. Формализация задачи. 3. Построение алгоритма. 4. Составление программы на языке программирования. 5. Отладка и тестирование программы. 6. Проведение расчетов и анализ полученных результатов.

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

• уметь строить алгоритмы; • знать языки программирования; • уметь работать в соответствующей системе программирования.

Основой программистской грамотности является развитое алгоритмическое мышление.

1.2. Понятие алгоритма. Одним из фундаментальных понятий в информатике является понятие алгоритма. Происхождение самого термина «алгоритм» связано с математикой. Это слово происходит от Algorithm - латинского написания имени Мухаммеда аль-Хорезми (787- 850), выдающегося математика средневекового Востока. В XII в. был выполнен латинский перевод его математического трактата, из которого европейцы узнали о десятичной позиционной системе счисления и правилах арифметики многозначных чисел. Именно эти правила в то время называли алгоритмами. Сложение, вычитание, умножение столбиком, деление уголком многозначных чисел — вот первые алгоритмы в математике. Правила алгебраических преобразований, способы вычислений корней уравнений также можно отнести к математическим алгоритмам. В наше время понятие алгоритма трактуется шире. Алгоритм - это последовательность команд управления каким-либо исполнителем. В школьном курсе информатики с понятием алгоритма, с методами построения алгоритмов ученики знакомятся на примерах учебных исполнителей: Робота, Черепахи, Чертежника и т.д. Эти исполнители ничего не вычисляют. Они создают рисунки на экране, перемещаются в лабиринтах, перетаскивают предметы с места на место. Таких исполнителей принято называть исполнителями, работающими в обстановке. В разделе информатики под названием «Программирование» изучаются методы программного управления работой ЭВМ. Следовательно, в качестве исполнителя выступает компьютер. Компьютер работает с величинами - различными информационными объектами: числами, символами, кодами и т. п. Поэтому алгоритмы, предназначенные для управления компьютером, принято называть алгоритмами работы с величинами.

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

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

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

3. Целенаправленность.

4. Конечность.

5. Массовость.

Порядок выполнения алгоритма:

1. Действия в алгоритме выполняются в порядке их записи.

2. Нельзя менять местами никакие два действия алгоритма.

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

Для записи алгоритмов используются специальные языки:

1. Естественный язык (словесная запись).

2. Формулы.

3. Псевдокод.

4. Структурограммы.

5. Синтаксические диаграммы.

6. Графический (язык блок-схем).

1. Естественный язык:
если условие то действие1 иначе - действие2 2. Структурограмма (рис. 1) 3. Синтаксическая диаграмма (рис. 2) 4. Графический язык (рис. 3)

1.3. Данные и величины. Совокупность величин, с которыми работает компьютер, принято называть данными. По отношению к программе данные делятся на исходные, результаты (окончательные данные) и промежуточные (рис. 4), которые получаются в процессе вычислений. Например, при решении квадратного уравнения ax2 + bx + с = 0 исходными данными являются коэффициенты а, b, с, результатами — корни уравнения х1, х2, промежуточным данным — дискриминант уравнения D = b — 4aс. Для успешного освоения программирования необходимо усвоить следующее правило: всякая величина занимает свое определенное место в памяти ЭВМ (иногда говорят - ячейку памяти). Хотя термин «ячейка» с точки зрения архитектуры современных ЭВМ несколько устарел, однако в учебных целях его удобно использовать. У всякой величины имеются три основных свойства: имя, значение и тип. На уровне команд процессора величина идентифицируется при помощи адреса ячейки памяти, в которой она хранится. В алгоритмах и языках программирования величины делятся на константы и переменные Константа - неизменная величина, и в алгоритме она представляется собственным значением, например: 15, 34.7, k, true и т.д. Переменные величины могут изменять свои значения в ходе выполнения программы и представляются символическими именами - идентификаторами, например: X, S2, codl5. Любая константа, как и переменная, занимает ячейку памяти, а значение этих величин определяется двоичным кодом в этой ячейке. Теперь о типах величин - типах данных. Это понятие является фундаментальным для программирования. В каждом языке программирования существует своя концепция типов данных, своя система типов. Тем не менее, в любой язык входит минимально необходимый набор основных типов данных, к которому относятся: целый, вещественный , логический и символьный типы. С типом величины связаны три ее характеристики: множество допустимых значений , множество допустимых операций , форма внутреннего представления . В табл. 1 представлены эти характеристики основных типов данных. Типы констант определяются по контексту (т. е. по форме записи в тексте), а типы переменных устанавливаются в описаниях переменных. Есть еще один вариант классификации данных - классификация по структуре. Данные делятся на простые и структурированные . Для простых величин (их еще называют скалярными) справедливо утверждение: одна величина - одно значение , для структурированных: одна величина - множество значений . К структурированным величинам относятся массивы, строки, множества и т.д. ЭВМ - исполнитель алгоритмов. Как известно, всякий алгоритм (программа) составляется для конкретного исполнителя в рамках его системы команд. О каком же исполнителе идет речь при обсуждении вопроса о программировании для ЭВМ? Ответ очевиден: исполнителем является компьютер. Точнее говоря, исполнителем является комплекс ЭВМ + Система программирования (СП) . Программист составляет программу на том языке, на который ориентирована СП. Иногда в литературе такой комплекс называют виртуальной ЭВМ. Например, компьютер с работающей системой программирования на Бэйсике называют Бэйсик-машиной; компьютер с работающей системой программирования на Паскале называют Паскаль-машиной и т.п. Схематически это изображено на рис. 5. Входным языком такого исполнителя является язык программирования Паскаль. Независимо от того, на каком языке программирования будет написана программа, алгоритм решения любой задачи на ЭВМ может быть составлен из команд:

• присваивания; • ввода; • вывода; • обращения к вспомогательному алгоритму; • цикла; • ветвления.

2.1. Линейные вычислительные алгоритмы

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

1. Числитель первой дроби умножить на знаменатель второй дроби. 2. Знаменатель первой дроби умножить на числитель второй дроби. 3. Записать дробь, числитель которой есть результат выполнения пункта 1, а знаменатель — результат выполнения пункта 2. В алгебраической форме это выглядит следующим образом (см. рис. 6)

Построим алгоритм деления дробей для ЭВМ. В этом алгоритме сохраним те же обозначения для переменных, которые использованы в записанной выше формуле. Исходными данными являются целочисленные переменные а, b, с, d. Результатом — также целые величины тип. Блок-схема и текст алгоритма на учебном алгоритмическом языке приведены ниже (рис.7) (в дальнейшем для краткости будем обозначать учебный алгоритмический язык буквами АЯ). Формат команды присваивания следующий: переменная:=выражение. Знак «:=» нужно читать как «присвоить». Команда присваивания обозначает следующие действия, выполняемые компьютером:

1. Вычисляется выражение. 2. Полученное значение присваивается переменной.

В приведенном выше алгоритме присутствуют две команды присваивания. В блок-схемах команда присваивания записывается в прямоугольнике. Такой блок называется вычислительным блоком. В описаниях алгоритмов необязательно соблюдать строгие правила в записи выражений. Их можно писать в обычной математической форме. Это еще не язык программирования со строгим синтаксисом. В приведенном алгоритме присутствует команда ввода: ввод a,b,c,d. В блок-схеме команда ввода записывается в параллелограмме - блоке ввода-вывода. При выполнении данной команды процессор прерывает работу и ожидает действий пользователя. Пользователь должен набрать на устройстве ввода (клавиатуре) значения вводимых переменных и нажать на клавишу ввода Enter. Значения следует вводить в том же порядке, в каком соответствующие переменные расположены в списке ввода Обычно с помощью команды ввода присваиваются значения исходных данных, а команда присваивания используется для получения промежуточных и конечных величин. Полученные компьютером результаты решения задачи должны быть сообщены пользователю. Для этих целей предназначена команда вывода: вывод m,n. С помощью этой команды результаты выводятся на экран или на устройство печати на бумагу. Рассмотрим последовательное выполнение четырех команд присваивания, в которых участвуют две переменные величины а и b . В таблице 2.1. напротив каждой команды присваивания указываются значения переменных, которые устанавливаются после ее выполнения. Этот пример иллюстрирует три основных свойства команды присваивания:

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

Рассмотрим один очень полезный алгоритм, который приходится часто использовать при программировании. Даны две величины: X и Y . Требуется произвести между ними обмен значениями. Например, если первоначально было Х = 1, Y = 2, то после обмена должно стать: Х = 2, Y = 1. Хорошей моделью для решения этой задачи является следующая ситуация: имеются два стакана - один с молоком, другой с водой. Требуется произвести обмен их содержимым. Всякому ясно, что в этом случае нужен дополнительный третий пустой стакан. Последовательность действий будет следующей: 1) перелить из первого стакана в третий; 2) перелить из второго в первый; 3) перелить из третьего во второй. Цель достигнута! По аналогии для обмена значениями двух переменных нужна третья дополнительная переменная. Назовем ее Z . Тогда задача обмена решается последовательным выполнением трех команд присваивания (таб. 2.2). Аналогия со стаканами не совсем точна в том смысле, что при переливании из одного стакана в другой первый становится пустым. В результате же присваивания (Х: = Y) переменная, стоящая справа (Y), сохраняет свое значение. Алгоритм для деления дробей имеет линейную структуру. В нем все команды выполняются в строго однозначной последовательности, каждая по одному разу. Линейный алгоритм составляется из команд присваивания, ввода, вывода и обращения к вспомогательным алгоритмам. При описании алгоритмов в блок-схемах типы, как правило, не указываются (но подразумеваются). В алгоритмах на АЯ для всех переменных типы указываются явно. Описание типов переменных производится сразу после заголовка алгоритма. В них используются следующие обозначения типов: цел - целый тип, вещ - вещественный тип, лит - символьный (литерный) тип, лог - логический тип. В алгоритме для деления дробей для всех переменных указан целый тип.

3. Ветвления и циклы в вычислительных алгоритмах

Составим алгоритм решения квадратного уравнения

Задача хорошо знакома из математики. Исходными данными здесь являются коэффициенты а, b, с. Решением в общем случае будут два корня x1 и х2, которые вычисляются по формуле:

Все используемые в этой программе величины вещественного типа (см. рис. 8). Слабость такого алгоритма видна невооруженным глазом. Он не обладает важнейшим свойством, предъявляемым к качественным алгоритмам, — универсальностью по отношению к исходным данным. Какими бы ни были значения исходных данных, алгоритм должен приводить к определенному результату и завершать работу. Результатом может быть число, но может быть и сообщение о том, что при определенных данных задача решения не имеет. Недопустимы остановки в середине алгоритма из-за невозможности выполнить какую-то операцию. Упомянутое свойство в литературе по программированию называют результативностью алгоритма (в любом случае должен быть получен какой-то результат). Чтобы построить универсальный алгоритм, сначала требуется тщательно проанализировать математическое содержание задачи. Решение уравнения зависит от значений коэффициентов a, b, с. Вот анализ рассмотренной выше задачи (ограничиваемся только поиском вещественных корней):

если a = 0, b = 0, с = 0, то любое х - решение уравнения; если а = 0,b = 0, с 0,то уравнение действительных решений не имеет; если а = 0, b 0, то это линейное уравнение, которое имеет одно решение х = -с/b; если a 0 и d = b2- 4ас 0, то уравнение имеет два вещественных корня (формулы приведены выше); если а 0 и d 0, то уравнение не имеет вещественных корней.

Блок-схема алгоритма приведена на рис. 9. Этот же алгоритм на алгоритмическом языке представлен на рис. 10.

В этом алгоритме многократно использована структурная команда ветвления. Общий вид команды ветвления в блок-схемах и на алгоритмическом языке представлен на рис. 11. Вначале проверяется условие (вычисляется отношение, логическое выражение). Если условие истинно, то выполняется серия 1 - последовательность команд, на которую указывает стрелка с надписью «да» (положительная ветвь). В противном случае выполняется серия 2 (отрицательная ветвь). В АЯ условие записывается после служебного слова если, положительная ветвь — после слова то, отрицательная — после слова иначе. Буквы кв обозначают конец ветвления. Если на ветвях одного ветвления содержатся другие ветвления, то такой алгоритм имеет структуру вложенных ветвлений. Именно такую структуру имеет алгоритм «Корни квадратного уравнения». Рассмотрим следующую задачу: дано целое положительное число п . Требуется вычислить n! (n-факториал). Определение факториала:

На рис. 4 приведена блок-схема алгоритма. В нем используются три переменные целого типа: п - аргумент; i - промежуточная переменная; F - результат. Для проверки правильности алгоритма построена трассировочная таблица. В такой таблице для конкретных значений исходных данных по шагам прослеживается изменение переменных, входящих в алгоритм. Данная таблица составлена для случая п = 3 (табл. 3). Трассировка доказывает правильность алгоритма. Алгоритм на алгоритмическом языке (рис. 12). Этот алгоритм имеет циклическую структуру. В алгоритме использована структурная команда цикл-пока , или цикл с предусловием. Общий вид команды цикл-пока в блок-схемах и в АЯ на рис. 13.

пока условие, повторять:

нц

серия

кц

Выполнение серии команд (тела цикла) повторяется, пока условие цикла истинно. Когда условие становится ложным, цикл заканчивает выполнение. Служебные слова нц и кц обозначают начало цикла и конец цикла соответственно. Цикл с предусловием - это основная, но не единственная форма организации циклических алгоритмов. Другим вариантом является цикл с постусловием. Вернемся к алгоритму решения квадратного уравнения. К нему можно подойти с такой позиции: если а = 0, то это уже не квадратное уравнение и его можно не рассматривать. В таком случае будем считать, что пользователь ошибся при вводе данных, и следует предложить ему повторить ввод. Иначе говоря, в алгоритме будет предусмотрен контроль достоверности исходных данных с предоставлением пользователю возможности исправить ошибку. Наличие такого контроля - еще один признак хорошего качества программы (рис. 14). В общем виде структурная команда цикл с постусловием или цикл—до представляется на рис. 15. Здесь используется условие окончания цикла. Когда оно становится истинным, цикл заканчивает работу. Составим алгоритм решения следующей задачи: даны два натуральных числа М и N. Требуется вычислить их наибольший общий делитель — НОД(М, N). Эта задача решается с помощью метода, известного под названием алгоритма Евклида . Его идея основана на том свойстве, что если M N , то НОД(М, N) = НОД(М — N,N). Другой факт, лежащий в основе алгоритма, тривиален НОД(М, M) = М. Для «ручного» выполнения этот алгоритм можно описать в форме следующей инструкции:

1. Если числа равны, то взять их общее значение в качестве ответа; в противном случае продолжить выполнение алгоритма. 2. Определить большее из чисел. 3. Заменить большее число разностью большего и меньшего значений. 4. Вернуться к выполнению пункта 1.

Блок-схема и алгоритм на АЯ будут на рис. 16.

4. Вспомогательные алгоритмы и процедуры

В теории алгоритмов известно понятие вспомогательного алгоритма. Вспомогательным называется алгоритм решения некоторой подзадачи из основной решаемой задачи. В таком случае алгоритм решения исходной задачи называется основным алгоритмом. Пример . Требуется составить алгоритм вычисления степенной функции с целым показателем у = хk, где k - целое число, х 0. В алгебре такая функция определена на рис. 17. Для данной задачи в качестве подзадачи можно рассматривать возведение числа в целую положительную степень. Условие: 1/х-n = (1/х) -n, основной алгоритм решения этой задачи на рис. 18. Здесь дважды присутствует команда обращения к вспомогательному алгоритму с именем СТЕПЕНЬ. Это алгоритм возведения вещественного основания в целую положительную степень путем его многократного перемножения. Величины, стоящие в скобках в команде обращения к вспомогательному алгоритму, называются фактическими параметрами. В учебном алгоритмическом языке вспомогательные алгоритмы оформляются в виде процедур. На АЯ процедура СТЕПЕНЬ выглядит как на рис. 19. Заголовок вспомогательного алгоритма начинается со слова «процедура», после которого следует имя процедуры и в скобках - список формальных параметров. В этом списке перечисляются переменные-аргументы и переменные-результаты с указанием их типов. Здесь а и k - формальные параметры-аргументы , z - параметр-результат . Следовательно, процедура степень производит вычисления по формуле z = аk. В основном алгоритме «Степенная функция» обращение к процедуре производится путем указания ее имени с последующим в скобках списком фактических параметров. Между формальными и фактическими параметрами процедуры должны выполняться следующие правила соответствия:

• по количеству (сколько формальных, столько и фактических параметров); • по последовательности (первому формальному соответствует первый фактический параметр, второму — второй и т.д.); • по типам (типы соответствующих формальных и фактических параметров должны совпадать).

Фактические параметры-аргументы могут быть выражениями соответствующего типа. Обращение к процедуре инициирует следующие действия:

1. Значения параметров-аргументов присваиваются соответствующим формальным параметрам. 2. Выполняется тело процедуры (команды внутри процедуры). 3. Значение результата передается соответствующему фактическому параметру, и происходит переход к выполнению следующей команды основного алгоритма.

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

5. Использование циклов с параметром для обработки массивов.

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

ЗАКЛЮЧЕНИЕ

Алгоритм может быть записан словами и изображён схематически. Обычно сначала (на уровне идеи) алгоритм описывается словами, но по мере приближения к реализации он обретает всё более формальные очертания и формулировку на языке, понятном исполнителю (например, машинный код). Например, для описания алгоритма применяются блок-схемы. Другим вариантом описания, не зависимым от языка программирования, является псевдокод. Хотя в определении алгоритма требуется лишь конечность числа шагов, требуемых для достижения результата, на практике выполнение даже хотя бы миллиарда шагов является слишком медленным. Также обычно есть другие ограничения (на размер программы, на допустимые действия). В связи с этим вводят такие понятия как сложность алгоритма (временная, по размеру программы, вычислительная и др.). Для каждой задачи может существовать множество алгоритмов, приводящих к цели. Увеличение эффективности алгоритмов составляет одну из задач современной информатики. В 50-х гг. XX века появилась даже отдельная её область — быстрые алгоритмы. В частности, в известной всем с детства задаче об умножении десятичных чисел обнаружился ряд алгоритмов, позволяющих существенно ускорить нахождение произведения.

ПРИЛОЖЕНИЯ

Рис. 1

Рис. 2

Рис. 3

Рис. 4

Рис. 5

Рис. 6

Рис. 7

Рис. 8

Рис. 9

Рис. 10

Рис. 11

Рис. 12

Рис. 13

Рис. 14

Рис. 15

Рис. 16

Рис. 17

Рис. 18

Рис. 19

Табл. 1

Табл. 2.1

Таб. 2.2

Таб. 3

СПИСОК ИСПОЛЬЗУЕМОЙ ЛИТЕРАТУРЫ

1. Томас Х. Кормен, Чарльз И. Лейзерсон, Рональд Л. Ривест, Клиффорд Штайн Алгоритмы: построение и анализ = INTRODUCTION TO ALGORITHMS. 2-е изд. М.: Вильямс, 2006. с. 1296 2. Дональд Кнут Искусство программирования, том 1. Основные алгоритмы = The Art of Computer Programming, vol.1. Fundamental Algorithms. 3-е изд. М.: Вильямс, 2006. с. 720. 3. Порублев Илья Николаевич, Ставровский Андрей Борисович Алгоритмы и программы. Решение олимпиадных задач. М.: «Вильямс», 2007. с. 480 4. Н.А. Криницкий. Алгоритмы вокруг нас. М.: Наука, 1977. с. 224 5. Касаткин В. Н. Информация, Алгоритмы ЭВМ. М.: Просвещение, 1991. с. 192

Скачать архив с текстом документа