Информатика. Курс лекций. Громов Ю.Ю - 83 стр.

UptoLike

ным параметром.
В нашем псевдокоде мы будем записывать формальные параметры в скобках сразу после имени процедуры. Например,
процедура с именем Сортировка, которая сортирует любой список имен, будет начинаться следующей инструкцией
Procedure Сортировка (список)
Если дальше в представлении упоминается сортируемый список, то для него используется имя Список. А когда мы вы-
зываем процедуру Сортировка, мы задаем, какой именно список нужно отсортировать. Для этого можно использовать,
например, следующий синтаксис:
Применить процедуру Сортировка к списку членов организации.
В зависимости от наших потребностей, мы можем применить другой вариант синтаксиса:
Применить процедуру Сортировка к списку гостей на свадьбе.
Не забывайте, что назначение нашего псевдокода состоит в предоставлении средств, позволяющих записывать схемы
алгоритмов лишь в общих чертах, а не в написании законченных формальных программ. Поэтому мы не связаны запретом
использования неформальных фраз, запрашивающих такие действия, детали которых не определены достаточно строго. (Как
именно будут разрешены эти детали, не столь уж важно для описания алгоритма, поскольку это касается только свойств
языка, на котором будет написана формальная программа).
В то же время, если позже мы обнаружим, что определенная идея повторяется в обсуждаемых нами схемах, то мы при-
мем соответствующий синтаксис для ее представления и этим расширим наш псевдокод.
Вопросы для самопроверки
1. То, что является примитивом в одном контексте, может, в свою очередь, быть составлено из примитивов другого
контекста. Например, инструкция while является примитивом в нашем псевдокоде, хотя она является сложной конструк-
цией из нескольких команд машинного языка. Приведите два примера подобных явлений из области, не связанной с компь-
ютерами.
2. В каком смысле построение процедур является построением примитивов?
3. Алгоритм Евклида позволяет найти наибольший общий делитель двух положительных целых чисел X и Y с помо-
щью следующего процесса:
до тех пор, пока значения X и Y отличны от нуля, выполнять деление большей величины на меньшую и присваивать
переменным X и Y значения делителя и остатка, соответственно. (Конечное значение X является наибольшим общим дели-
телем.)
Запишите этот алгоритм с помощью нашего псевдокода.
4. Опишите набор примитивов, используемых не в программировании, а в какой-либо другой области.
4.3. СОЗДАНИЕ АЛГОРИТМА
Разработка программы состоит из двух различных действийсоздания алгоритма ее работы и представления этого ал-
горитма в виде программы. До настоящего момента мы рассматривали только способы представления алгоритмов и не каса-
лись вопроса, как, собственно, эти алгоритмы создаются. Однако создание алгоритмаэто, как правило, наиболее сложный
этап в процессе разработки программного обеспечения. В конце концов, создать алгоритмозначает найти метод решения
задачи, в решении которой и состоит назначение этого алгоритма. Поэтому, чтобы понять, как создаются алгоритмы, необ-
ходимо понять процесс решения задач.
Теория решения задач. Рассмотрение методов решения задач и их подробное изучение не являются аспектами, специ-
фическими только для компьютерных наук. Напротив, это важно практически для любой области науки. Тесная связь между
процессом создания алгоритмов и общей проблемой поиска решения задач привела к сотрудничеству специалистов в облас-
ти компьютерных систем и ученых из других областей науки в поисках лучших методов решения задач. В конечном счете,
желательно было бы свести проблему решения задач к алгоритмам как таковым, но это оказалось невозможным. (В главе 11
будет показано, что существуют задачи, не имеющие алгоритмических решений.) Таким образом, способность решать зада-
чи в значительной степени является профессиональным навыком, который необходимо развивать, а не точной наукой, кото-
рую можно изучить.
Решение задач является скорее искусством, чем наукой. Доказательством этого может служить тот факт, что представ-
ленные ниже, весьма расплывчато определенные фазы решения задач, предложенные математиком Дж. Полиа (G. Polya) в
1945 г., остаются теми основными принципами, на которых и сегодня базируется обучение навыкам решения задач.
Фаза 1. Понять существо задачи.
Фаза 2. Разработать план решения задачи.
Фаза 3. Выполнить план.
Фаза 4. Оценить точность решения, а также его потенциал в качестве средства для решения других задач.
Применительно к процессу разработки программ эти фазы выглядят следующим образом.
Фаза 1. Понять существо задачи.
Фаза 2. Предложить идею, какая алгоритмическая процедура позволяет решить задачу.
Фаза 3. Сформулировать алгоритм и представить его в виде программы.
Фаза 4. Оценить точность программы и ее потенциал в качестве средства для решения других задач.
Необходимо подчеркнуть, что предложенные математиком Полиа фазы не являются этапами, которым надо следовать
при решении задачи. Скорее, это те фазы, которые должны быть когда-либо выполнены в процессе ее решения. Здесь ключе-
вое словоследовать, т.е. просто "следуя", вы не сможете решить задачу. Напротив, чтобы решить задачу, необходимо про-
являть инициативу и двигаться вперед. Если подходить к решению задачи по принципу: "Ну вот, я закончил фазу 1, пора
переходить к фазе 2", то вряд ли вам будет сопутствовать успех. Однако если вы с головой окунетесь в решение задачи и, в
конечном счете, решите ее, то, оглянувшись назад, обязательно увидите, что выполнили все четыре фазы, предложенные
математиком Полиа.