Содержание | Назад | Далее

4. Алгоритмы и языки программирования

4.1. Понятие алгоритма

Понятие алгоритма относится к основным понятиям информатики. Рассмотрим основные понятия, связанные с понятием алгоритма.

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

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

Предписание – приказ на выполнение действий из указанного конечного набора.

Система предписаний – совокупность допустимых приказов.

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

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

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

Составлению программы предшествует разработка алгоритма.

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

Любой алгоритм обладает следующими свойствами:

  1. Дискретность. Выполнение алгоритма разбивается на последовательность элементарных действий – шагов. Каждое действие должно быть закончено исполнителем прежде, чем он перейдет к выполнению следующего действия. Произвести каждое отдельное действие исполнителю предписывает специальное указание в записи алгоритма, называемое командой.
  2. Точность или детерминированность. Запись алгоритма должна быть такой, чтобы, выполнив очередную команду, исполнитель точно знал, какую команду надо выполнять следующей.
  3. Понятность. Каждый алгоритм строится в расчете на конкретного исполнителя, который должен быть в состоянии выполнить каждую команду алгоритма в строгом соответствии с ее назначением.
  4. Результативность. При точном исполнении всех предписаний алгоритма процесс должен завершится за конечное число шагов и при этом должен быть получен какой-либо ответ на поставленную задачу. В качестве одного из возможных решений может быть установление того факта, что задача не имеет решения
  5. Массовость. помощью одного и того же алгоритма можно решать однотипные задачи и делать это неоднократно. Свойство массовости значительно увеличивает практическую ценность алгоритмов.

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

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

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

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

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

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

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

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

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

Следование. Представляет собой последовательное выполнение действий (рис. 12).

Рис. 12. Следование.

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

Рис. 13. Развилка.

Действия 1 и 2 могут, в свою очередь, включать в себя другие алгоритмические структуры.

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

Цикл До. Применяется, когда некоторые операции надо повторять до тех пор, пока некоторое условие не станет ложным (рис. 14).

Рис. 14. Цикл До.

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

Цикл Пока. Применяется, когда некоторые операции надо повторять до тех пор, пока некоторое условие не станет истинным (рис. 15).

Рис. 15. Цикл Пока.

4.2. Понятие языка

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

Кроме естественного языка существуют искусственные языки, целенаправленно сконструированные для:

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

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

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

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

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

Кравченко пришел домой

зависит от того, является ли Кравченко мужчиной или женщиной.

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

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

Я вижу косу.

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

Пример парадоксального предложения:

Если у состава отцепить последний вагон, то у состава не будет последнего вагона.

 

4.3. Языки программирования

Искусственные языки, предназначенные для записи программ, называются языками программирования или алгоритмическими языками. Все языки программирования делятся машинно-зависимые и машинно-независимые.

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

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

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

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

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

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

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

При программировании на процедурно-ориентированных языках не требуется детального знания устройства компьютера. Наиболее широко используемыми языками высокого уровня являются БЭЙСИК, ПАСКАЛЬ, СИ.

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

 

4.4. Процесс выполнения программы на ЭВМ

Для того чтобы программа могла быть выполненной, она должна быть помещена в оперативную память компьютера. Туда же должны быть помещены и исходные данные. Как правило, программа вводится в оперативную память с жесткого диска. Исходные данные вводятся с клавиатуры либо также с жесткого диска, куда они должны быть заранее помещены с помощью другой программы. Результаты своей работы программа помещает в определенную область оперативной памяти, откуда они могут быть выведены на какое-либо внешнее устройство, которым может быть жесткий диск, экран дисплея, печатающее устройство (рис.16).

Рис. 16. Распределение памяти при выполнении программы.

Процесс выполнения программы на ЭВМ разбивается на ряд этапов (рис. 17).

Рис.17. Процесс выполнения программы на ЭВМ.

Программа пишется программистом на одном из языков программирования. Процессор ЭВМ может реально выполнять только команды машинного языка. Преобразование исходного текста программы в машинные коды выполняется специальной программой – транслятором. Рассмотренный выше ассемблер является одной из разновидностей транслятора.

Трансляторы бывают двух видов: компиляторы и интерпретаторы.

Компилятор преобразует исходную программу на любом языке высокого уровня в некоторую стандартную форму на машинном языке, называемую объектным модулем.

Интерпретатор преобразует отдельные предложения исходного языка в машинный код и немедленно их исполняет. Интерпретатор не создает объектный модуль.

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

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

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

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

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

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

 

Содержание | Назад | Далее

Hosted by uCoz