В информатике псевдокод — это описание шагов алгоритма с использованием смеси соглашений языков программирования (например, оператор присваивания , условный оператор , цикл ) с неформальной, обычно понятной, нотацией действий и условий. [1] [2] Хотя псевдокод разделяет черты с обычными языками программирования , он предназначен для чтения человеком , а не для машинного управления. Псевдокод обычно опускает детали, которые необходимы для машинной реализации алгоритма, что означает, что псевдокод можно проверить только вручную. [3] Язык программирования дополняется подробностями описания естественного языка , где это удобно, или компактной математической нотацией . Цель использования псевдокода заключается в том, что его легче понять людям, чем код обычного языка программирования, и что он является эффективным и независимым от среды описанием ключевых принципов алгоритма. Он обычно используется в учебниках и научных публикациях для документирования алгоритмов и при планировании программного обеспечения и других алгоритмов.
Не существует широкого стандарта для синтаксиса псевдокода , поскольку программа на псевдокоде не является исполняемой программой; однако существуют определенные ограниченные стандарты (например, для академической оценки). Псевдокод напоминает скелетные программы , которые могут быть скомпилированы без ошибок. Блок-схемы , drakon-charts и диаграммы Unified Modeling Language (UML) можно рассматривать как графическую альтернативу псевдокоду, но для них требуется больше места на бумаге. Такие языки, как HAGGIS, заполняют разрыв между псевдокодом и кодом, написанным на языках программирования.
Учебники и научные публикации, связанные с компьютерной наукой и численными вычислениями , часто используют псевдокод для описания алгоритмов, чтобы все программисты могли их понять, даже если они не все знают одни и те же языки программирования. В учебниках обычно есть сопроводительное введение, объясняющее конкретные используемые соглашения. Уровень детализации псевдокода в некоторых случаях может приближаться к уровню формализованных языков общего назначения.
Программист , которому необходимо реализовать определенный алгоритм, особенно незнакомый, часто начинает с описания псевдокода, а затем «переводит» это описание на целевой язык программирования и изменяет его для корректного взаимодействия с остальной частью программы. Программисты также могут начать проект, набросав код в псевдокоде на бумаге, прежде чем писать его на реальном языке, как подход структурирования сверху вниз , с процессом шагов, которым нужно следовать в качестве уточнения.
Псевдокод также используется в стандартизации. Например, стандарты MPEG широко используют формальный псевдокод типа C и не могут быть поняты без понимания деталей кода. [4]
Псевдокод, как правило, на самом деле не подчиняется правилам синтаксиса какого-либо конкретного языка; систематической стандартной формы не существует. Некоторые авторы заимствуют стиль и синтаксис из управляющих структур некоторых традиционных языков программирования, хотя это не приветствуется. [5] [6] Некоторые источники синтаксиса включают Fortran , Pascal , BASIC , C , C++ , Java , Lisp и ALGOL . Объявления переменных обычно опускаются. Вызовы функций и блоки кода, такие как код, содержащийся в цикле, часто заменяются однострочным предложением на естественном языке.
В зависимости от автора псевдокод может существенно различаться по стилю: от почти точной имитации реального языка программирования на одном полюсе до описания, приближающегося к форматированной прозе, на другом.
Такая гибкость имеет как основные преимущества, так и недостатки: с положительной стороны, ни один исполняемый язык программирования «не может сравниться с удобством изобретения новых конструкций по мере необходимости и предоставления читателю возможности попытаться вывести их значение из неформальных объяснений», с отрицательной стороны, «непроверенный код обычно неверен» [7] .
В числовых вычислениях псевдокод часто состоит из математической нотации , как правило, из теории матриц и множеств , смешанной с управляющими структурами обычного языка программирования, а также, возможно, описаниями на естественном языке . Это компактная и часто неформальная нотация, понятная широкому кругу людей с математической подготовкой, и часто используемая как способ описания математических алгоритмов . Например, оператор суммы ( нотация с заглавной буквой «сигма» ) или оператор произведения ( нотация с заглавной буквой «пи» ) могут представлять цикл for и структуру выбора в одном выражении:
Возвращаться
Обычно для математических уравнений используется не- ASCII набор текста , например, с помощью языков разметки, таких как TeX или MathML , или фирменных редакторов формул .
Псевдокод в математическом стиле иногда называют пиджин-кодом , например, пиджин АЛГОЛ (происхождение концепции), пиджин Фортран , пиджин БЕЙСИК , пиджин Паскаль , пиджин С и пиджин Лисп .
Ниже приведен более длинный пример псевдокода в математическом стиле для алгоритма Форда–Фалкерсона :
Входные данные алгоритма Форда-Фулкерсона : График G с пропускной способностью c , исходный узел s , Выход приемного узла t : Поток f такой, что f максимален от s до t (Обратите внимание, что f (u,v) — это поток из узла u в узел v, а c (u,v) — это пропускная способность потока из узла u в узел v) для каждого ребра ( u , v ) в G E сделать f ( u , v ) ← 0 f ( v , u ) ← 0 в то время как существует путь p из s в t в остаточной сети G f do пусть c f будет пропускной способностью остаточной сети G f c f ( p ) ← min{ c f ( u , v ) | ( u , v ) в p } для каждого ребра ( u , v ) в p do f ( u , v ) ← f ( u , v ) + c f ( p ) f ( v , u ) ← − f ( u , v ) возвращение ф
Различные попытки привнести элементы грамматики естественного языка в компьютерное программирование привели к появлению таких языков программирования, как HyperTalk , Lingo , AppleScript , SQL , Inform и, в некоторой степени, Python . В этих языках скобки и другие специальные символы заменяются предлогами, что приводит к довольно многословному коду. Эти языки, как правило, динамически типизированы , что означает, что объявления переменных и другой шаблонный код могут быть опущены. Такие языки могут облегчить человеку, не имеющему знаний о языке, понимание кода и, возможно, также изучение языка. Однако сходство с естественным языком обычно скорее косметическое, чем подлинное. Правила синтаксиса могут быть такими же строгими и формальными, как и в обычном программировании, и не обязательно упрощают разработку программ.
Альтернативой использованию математического псевдокода (включая нотацию теории множеств или матричные операции) для документирования алгоритмов является использование формального математического языка программирования, который представляет собой смесь математической нотации, отличной от ASCII, и структур управления программой. Затем код может быть проанализирован и интерпретирован машиной.
Несколько формальных языков спецификации включают нотацию теории множеств с использованием специальных символов. Примеры:
Некоторые языки программирования массивов включают векторизованные выражения и матричные операции как не-ASCII формулы, смешанные с обычными управляющими структурами. Примеры:
Избегайте синтаксических элементов из целевого языка программирования.