В согласовании с рассмотренными выше методами описания формальных языков в представлении алгоритмов можно выделить две главные формы: символьную (словесную) и графическую.
Строчная запись, как ясно из наименования, представляет собой последовательность строк, любая из которых содержит описание 1-го либо нескольких простых действий. Эти строчки могут иметь метки в виде букв либо порядковых числовых номеров. Логика метода, т.е. порядок выполнения действий, задается или в очевидном виде методом указания метки следующей строчки, или в неявном — по дефолту управление передается строке, последующей за выполненной. «Элементарность» деяния определяется способностями исполнителя.
Данный метод представления метода следует считать главным, так как последовательностью строк может быть записана алгоритмическая нотация для хоть какого исполнителя — как человека, так и технического устройства. Для человека строчная алгоритмическая запись может быть очень приближена к естественному языку. Для технического устройства запись делается на спец формализованном языке.
Недочетом строчной формы представления метода является неудобство целостного восприятия его логической структуры. Указание об изменении естественной последовательности действий в строчной записи смотрится в виде ссылки на строчку с меткой. В случае довольно сложного метода такие ссылки затрудняют уяснение логики и последовательности действий, что нужно при проверке и отладке метода.
Разглядим несколько примеров строчной записи алгоритмов для разных исполнителей.
Пошагово-словесная форма представляет собой пронумерованную последовательность строк, любая из которых содержит описания определенных действий на естественном языке. Данная форма применяется в этом случае, если исполнителем является человек. Обычно в качестве примеров алгоритмов, представленных в таковой форме, приводят кулинарные рецепты, аннотации по использованию каких-то устройств, указания по посадке деревьев и т.п. Но примеры эти нельзя признать корректными, так как в их речь идет не об обработке инфы, а об управлении действиями, направленными на получение некого вещественного результата. Примерами данной формы представления могут служить методы математических вычислений над конечными числами. Разглядим отлично узнаваемый со школы метод Евклида нахождения большего общего делителя 2-ух натуральных чисел (а и b); его пошагово-словесное описание смотрится последующим образом:
- Если а = b, результатом считать а; окончить вычисления.
- Если а > b, отыскать разность а — b; новым значением а считать значение разности; перейти к п. 1;
- Если b > а, отыскать разность b — а; новым значением b считать значение разности; перейти к п. 1;
Удобство пошагово-словесной формы — в ее универсальности (по отношению к классам описываемых алгоритмов), использовании естественного государственного языка для записи конструкций, отсутствии серьезной формализации. Форма обширно употребляется для представления разных учебных алгоритмов.
Формула — строчная запись действий, обеспечивающих обработку числовых, символьных либо логических данных. Формулы, созданные для исполнителя «человек», не непременно могут быть строчными — это приводит к некой неоднозначности порядка действий, не сказывающейся, но, на итог вычислений вследствие дистрибутивного и сочетательного законов.
Пример:
Если же формула записывается для вычисления компом, она представляется строго в строчной форме, а для однозначности выполнения действий инсталлируются ценности операций. К примеру, в языке PASCAL для математических и логических операций приняты последующие ценности:
- операции в скобках;
- строительство в степень, вычисление значения стандартных функций и процедур-функций;
- логическое отрицание NOT;
- умножение, деление, целочисленное деление (div), остаток от целочисленного деления (mod), логическое И (AND);
- сложение, вычитание, логическое Либо (OR);
- операции дела (>, <, =, >=, <=,< >).
Кроме обозначенных ценностей принимается дополнительное правило:
- при наличии операций равного приоритета они производятся в порядке слева вправо.
Приведенная выше формула, записанная в согласовании с ценностями и правилом, будет смотреться последующим образом:
Обработка символьной инфы делается созданными для этого функциями и процедурами.
Псевдокод — направленный на исполнителя «человек» отчасти формализованный язык, позволяющий записывать методы в форме, очень близкой к алголоподобным языкам программирования. Термин «частично формализованный» в этом случае значит, что в псевдокоде строго определены только правила записи управляющих структур, а описание самих действий остается естественным. Псевдокод имеет русскую базу и употребляется, в главном, при обучении азам программирования.
Метод представленный при помощи автокода, представляет собой последовательность строк, в каждой из которых содержится описание действий или по обработке данных, или по управлению процессом обработки. Для записи управляющих структур приняты последующие обозначения:
- наружное оформление: АЛГ — начало метода, ПРОЦ — начало процедуры, КНЦ; — конец процедуры, КНЦ. — конец метода;
- ветвление: ЕСЛИ …ТО…По другому…ВСЕ; после ЕСЛИ ставится описание логического условия, по которому происходит ветвление, после ТО — описание действий (их может быть несколько), которые исполняются при значении условия TRUE, если ветвление полное — после По другому описываются другие деяния, в любом случае в конце ставится слово ВСЕ, которое служит признаком окончания данной конструкции;
- цикл: ПОКА…ПОВТОРЯТЬ…КЦ; после ПОКА ставится описание логического условия выполнения команд цикла, после ПОВТОРЯТЬ — описание действий (тела цикла), КЦ — признак конца повторяющейся конструкции.
Нередко при записи метода отдельные деяния завершаются разделителем (к примеру, «;») — это дает возможность избежать ошибок в случае, если описание деяния занимает не одну строчку. Кроме этого, для удобочитаемости и наглядности применяется так именуемая «структурная запись», при которой запись отдельных частей структур делается не с начала строчки, а с отступом, показывающим вложенность и подчиненность этих частей.
В качестве примера метода, записанного при помощи псевдокода, приведем рассмотренный выше метод Евклида нахождения НОД 2-ух целых чисел (а и b).
Удобство использования псевдокода — в сочетании относительной строгости синтаксических конструкций и их русской базы. Близость конструкций псевдокода языкам программирования позволяет просто перейти от 1-го к другому. Но отсутствие формальных правил записи действий не позволяет использовать псевдокод для составления алгоритмов, исполнителями которых являются технические устройства.
Язык программирования — искусственный формализованный язык, созданный для записи метода для исполнителя «компьютер», метаязыком которого является естественный язык. Язык программирования строго фиксирует (т.е. определяет) и изображение управляющих структур, и описание допустимых действий, и синтаксические правила построения сложных структур.
Различают языки малого уровня (машинно-ориентированные) и высочайшего уровня (машинно-независимые). К языкам первого типа относятся:
- машинный язык (язык машинных кодов) — совокупа команд, интерпретируемых и исполняемых компом; каждый оператор программки на этом языке является машинной командой, а все данные отыскиваются по абсолютным значениям адресов, по которым они размещаются в ОЗУ;
- ассемблер (макроассемблер) — язык символического кодировки — операторами языка являются машинные команды, которым приписываются мнемонические обозначения, а в качестве операндов употребляются не определенные адреса в ОЗУ, а их символические имена.
Пример команд ассемблера:
- CLA — очистить один из регистров сумматора (аккумулятор);
- ADD — сложение содержимого ячейки, номер которой написан после команды, с содержимым аккума; итог остается в аккуме;
- MOV — содержимое аккума пересылается в ячейку с номером, записанным прямо за командой;
- HLT — стоп.
Непременно, ассемблеры содержат и другие команды.
Разглядим обычный пример сложения чисел a, b и с. Итог должен присваиваться переменной d.
Запись метода делается в редакторе текста с ASC-кодировкой. Ясно, что для преобразования текста в последовательность машинных команд нужна еще одна промежная программка — она именуется компилятор. На шаге компиляции делается также рассредотачивание данных в ОЗУ; при всем этом заместо имен переменных подставляются относительные адреса ячеек, в каких данные размещаются. Абсолютные адреса данным присваивает операционная система при размещении программки в ОЗУ компьютера перед ее внедрением.
Ассемблер является машинно-зависимым языком, т.е. записанная на нем программка может исполняться только на той технике, поточнее тем типом микропроцессора, ассемблер которого был применен.
Для всех языков высочайшего уровня общим будет то, что нацелены они не на систему команд той либо другой машины, а на систему операторов, соответствующих для записи определенного класса алгоритмов. Примерами таких операторов, содержащихся во всех языках программирования, являются операторы присваивания, условные операторы и операторы циклов — причина этого будет дискуссироваться дальше; кроме этого непременно имеются операторы ввода-вывода для организации взаимодействия программки с юзером.
По многофункциональному предназначению языки программирования высочайшего уровня различают на проблемно-ориентированные и универсальные. Из заглавий классов ясно, что 1-ые созданы для решения каких-либо специфичных задач из некой отрасли познаний.
Примерами являются язык FORTRAN (FORmula TRANslator) —язык решения сложных научных и инженерных задач (кстати, это был 1-ый язык программирования высочайшего уровня); COBOL (Common Business Oriented Language) — язык для решения экономических и коммерческих задач; LISP (List Processing Language) —язык, применяемый в решении задач искусственного ума. К универсальным языкам относятся PASCAL (Philips Automatic Sequence CALculator), BASIC (Beginner ALL-purpose Symbolic Instruction Code), С (C++), Jawa, также современные среды зрительного программирования DELPHI, VISUAL BASIC и др. Эти языки позволяют решить, вообщем говоря, всякую задачку, хотя трудозатратность решения определенной задачки в различных языках будет различаться.
Другой признак, в согласовании с которым вероятна систематизация языков программирования, является парадигма (концепция) программирования, т.е. совокупа основополагающих мыслях и подходов, определяющих модель представления данных и их обработки, также методологии программирования.
В текущее время в распоряжении программера имеется очень широкий диапазон языков-инструментов, из которых для хоть какой определенной задачки можно избрать тот, что позволит решить ее хорошим методом. Опять приходим к высказанной ранее мысли: компьютер по отношению к юзеру оказывается не единственным исполнителем, а предоставляется обилием исполнителей, из которых следует избрать более подходящий для задачки.