Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Algorytm.doc
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
865.28 Кб
Скачать

3.2. Строчная словесная запись алгоритма

В представлении алгоритмов можно выделить две основные формы: символьную (словесную) и графическую.

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

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

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

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

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

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

Рассмотрим еще раз алгоритм Евклида нахождения наибольшего общего делителя двух натуральных чисел (a и b); его пошагово-словесное описание выглядит следующим образом:

  1. Если a = b, результатом считать a; закончить вычисления.

  2. Если a > b, найти разность a – b; новым значением a считать значение разности; перейти к п.1.

  3. Если b > a, найти разность b – a; новым значением b считать значение разности; перейти к п.1.

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

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

Формулы, предназначенные для исполнителя «человек», не обязательно могут быть строчными. Это приводит к некоторой неоднозначности порядка действий, не сказывающейся, однако, на результат вычислений вследствие дистрибутивного и сочетательного законов. Пример:

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

Приведенная выше формула, записанная в соответствии с приоритетами и правилом, будет выглядеть следующим образом:

y:= (a*b*b+c*sqrt(d))/(sin(f)+h)

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

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

Например, для записи управляющих структур можно принять следующие обозначения:

  1. Внешнее оформление: АЛГ – начало алгоритма, ПРОЦ – начало процедуры, КНЦ; – конец процедуры, КНЦ. – конец алгоритма.

  2. Ветвление: ЕСЛИ …ТО…ИНАЧЕ…ВСЕ (или ВСЕ-ЕСЛИ); После ЕСЛИ ставится описание логического условия, по которому происходит ветвление, после ТО – описание действий (их может быть несколько), которые исполняются при значении условия TRUE, если ветвление полное – после ИНАЧЕ описываются альтернативные действия. В любом случае в конце ставится слово ВСЕ (ВСЕ-ЕСЛИ), которое служит признаком окончания данной конструкции.

  3. Цикл: ПОКА…ПОВТОРЯТЬ…КЦ (или ВСЕ-ПОКА); После ПОКА ставится описание логического условия выполнения команд цикла, после ПОВТОРЯТЬ – описание действий (тела цикла), КЦ (ВСЕ-ПОКА) – признак конца циклической конструкции.

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

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

АЛГ Евклид;

ПОКА а ≠ b ПОВТОРЯТЬ

ЕСЛИ a > b ТО

a:= a-b

ИНАЧЕ

b:= b-a

ВСЕ_ПОКА;

ПЕЧАТЬ а

КНЦ.

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

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

ЕСЛИ - IF ВСЕ-ПОКА - END-WHILE

ТО - THEN ДО - UNTIL

ИНАЧЕ - ELSE ЦИКЛ - DO

ВСЕ-ЕСЛИ - END-IF ВСЕ-ДО - END-UNTIL

ПОКА - WHILE ВСЕ-ЦИКЛ - END-DO

4. Язык программирования – искусственный формализованный язык, предназначенный для записи алгоритма для исполнителя «компьютер», метаязыком которого является естественный язык.

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

Различают языки низкого уровня (машинно-ориентированные) и высокого уровня (машинно-независимые). К языкам первого типа относятся:

  1. машинный язык (язык машинных кодов) – совокупность команд, интерпретируемых и исполняемых компьютером; каждый оператор программы на этом языке является машинной командой, а все данные отыскиваются по абсолютным значениям адресов, по которым они располагаются в ОЗУ;

  2. ассемблер (макроассемблер) – язык символического кодирования – операторами языка являются машинные команды, которым приписываются мнемонические обозначения, а в качестве операндов используются не конкретные адреса в ОЗУ, а их символические имена.

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

По функциональному назначению языки программирования высокого уровня различают на проблемно-ориентированные и универсальные. Из названий классов ясно, что первые предназначены для решения каких-то специфических задач из некоторой отрасли знаний. Примерами являются язык FORTRAN (FORmula TRANslator) – язык решения сложных научных и инженерных задач (кстати, это был первый язык программирования высокого уровня); COBOL (Common Business Oriented Language) – язык для решения экономических и коммерческих задач; LISP (List Processing Language) – язык, используемый в решении задач искусственного интеллекта. К универсальным языкам относятся PASCAL (Philips Automatic Sequence CALculator), BASIC (Beginner ALL-purpose Symbolic Instruction Code), C (C++), Jawa, а также современные среды визуального программирования DELPHI, VISUAL BASIC и др. Эти языки позволяют решить, вообще говоря, любую задачу, хотя трудоемкость решения конкретной задачи в разных языках будет различаться.

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

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

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]