Псевдокод (язык описания алгоритмов)
Псевдоко́д — компактный (зачастую неформальный) язык описания алгоритмов, использующий ключевые слова императивных языков программирования, но опускающий несущественные подробности и специфический синтаксис. Псевдокод обычно опускает детали, несущественные для понимания алгоритма человеком. Такими несущественными деталями могут быть описания переменных, системно-зависимый код и подпрограммы. Главная цель использования псевдокода — обеспечить понимание алгоритма человеком, сделать описание более воспринимаемым, чем исходный код на языке программирования. Псевдокод широко используется в учебниках и научно-технических публикациях, а также на начальных стадиях разработки компьютерных программ.
Блок-схемы можно рассматривать как графическую альтернативу псевдокоду. В отличие от стандартизации синтаксиса языков программирования, на синтаксис псевдокода обычно не устанавливается стандартов, так как последний непосредственно не компилируется в исполняемую программу. Поэтому можно сказать, что обычно автор каждой публикации применяет свой оригинальный псевдокод, однако чтобы быть максимально понятным читателям, авторы публикаций содержащих псевдокод, как правило, заимствуют нужные им конструкции из какого-либо языка программирования. Зачастую источником псевдокода служат несколько языков, и таким образом псевдокод часто не содержит специфических признаков конкретного языка программирования. Кроме того, математические выражения часто включаются в псевдокод в том виде, как их принято записывать в математике, а не в языках программирования, а некоторые фрагменты псевдокода могут быть фразами естественного языка (русского, английского и т. д.). Однако при этом конструкции некоторых языков программирования чаще используются для псевдокода. Так, например, очень часто используется синтаксис, похожий на синтаксис языка Паскаль. Это объясняется тем, что Паскаль создавался как язык, ориентированный на задачи обучения программированию, и поэтому синтаксис этого языка особенно приспособлен для восприятия человеком. Часто используются и другие языки: Си, Алгол, Фортран и другие. Их использование можно объяснить как личными симпатиями автора, так и распространенностью на момент написания публикации. В случае русскоязычных публикаций в качестве псевдокода часто используется перевод ключевых слов языков программирования с английского на русский. Такой подход практикуется, в частности, в учебниках по информатике.
На практике же программист может выбирать язык, который максимально подробно описывает то, чего ему нужно точно получить от машины, чтобы избежать разногласий с заказчиком.
В ряде случаев псевдокодом называют систему команд абстрактной машины, например, P-код, псевдокод вымышленной машины MIX и т. д. В отличие от псевдокода неформального характера, такой псевдокод уже строго формализован, труднее для понимания человеком, но может быть транслирован в работающую программу и запущен в программе-эмуляторе данной гипотетической машины.
Базовые управляющие структуры
Название структуры | Псевдокод |
---|---|
присваивание, ввод, вывод | переменная = 0, ввод (переменная), вывод (переменная) |
ветвление | если условие то (серия1 иначе серия 2) |
цикл ПОКА | пока условие нц серия кц |
Пример программы «Здравствуй, Мир!»
См. также
«Python, делай Print»: что такое псевдокод и зачем его писать
Псевдокод — это построчное неформальное описание кода будущей программы. Он полезен, когда нужно:
- Описать работу алгоритма. С помощью псевдокода можно объяснить, где и как в программе появляется определенная структура, механизм или прием.
- Объяснить устройство программы пользователям, которые плохо разбираются в разработке. При написании программы используется строгий синтаксис — иначе она не смогла бы правильно работать. Людям, особенно новичкам, проще воспринимать код на более простом и естественном языке, где понятна задача каждой строки.
- Работать над кодом в команде. Сеньор-разработчики часто используют псевдокод для решения сложных проблем, с которыми сталкиваются мидлы и джуны, или просто чтобы объяснить свои действия.
Псевдокод будет действительно полезен и упростит разработку, если его правильно написать. Разберем основные правила работы с ним.
Описываем цель программы
Писать псевдокод лучше в простом текстовом редакторе, ему не потребуется сложное форматирование.
Сначала нужно обозначить цель кода в одной или двух строках. Краткое описание цели позволяет структурировать документ и объясняет задачи программы каждому читателю псевдокода.
Позднее такой псевдокод будет преобразован в код на языке программирования, что необходимо учитывать при обдумывании его структуры.
Составляя псевдокод, легко забыться и перейти на язык программирования. Чтобы этого не произошло, нужно всегда помнить про задачи псевдокода — объяснять, для чего нужна каждая строка программы.
Используем стандартные конструкции разработки
Хотя единых требований к псевдокоду не существует, проще понять текст, в котором используются конструкции из языков программирования. Команды «если» ( if ), «то» ( then ), «пока» ( while ), «иначе» ( else ) и «цикл» ( loop ) можно применять так же, как и в любом языке программирования. Часто используются следующие конструкции:
- Если Условие , то Инструкция — инструкция выполняется только при соблюдении условия. Она означает действие, выполняемое программой. Условие формулирует требования, в соответствии с которыми выполняется действие.
- Пока Условие выполнять Инструкцию — инструкция повторяется многократно, пока выполняется условие. Программа проверяет условие, а затем выполняет инструкцию.
- Выполнять Инструкцию пока Условие — Эта конструкция похожа на предыдущую, но программа сначала выполняет инструкцию и только потом проверяет условие. Поэтому Инструкция выполняется один раз без проверки условия.
- Функция Имя (Аргументы): Инструкция — При каждом упоминании в коде указанного имени запускается инструкция. Аргументы обозначают список переменных, которые уточняют инструкцию.
Делаем разделы текста заметнее
Псевдокод удобнее читать, если его разделы упорядочены. Большой фрагмент текста, который относится к другому фрагменту того же раздела, можно заключить в фигурные скобки или выделить другим образом.
Каждая строка псевдокода содержит один оператор, который описывает одно действие. Если список задач составлен грамотно, каждая из них соответствует одной строке псевдокода. Полезно составить список задач, написать псевдокод, а затем постепенно преобразовать его в исполняемый код программы.
Используем пустые строки и отступы
Чтобы читать псевдокод было проще, рекомендуем эффективно использовать свободное пространство. Пустые строки позволяют разделить псевдокод на отдельные фрагменты, а отступы — обозначить отношения между этими фрагментами.
Если один фрагмент кода посвящен вводу числа, а следующий — выводу, их можно разделить пустой строкой.
Для удобства можно сразу выделять ключевые команды заглавными буквами и записывать их на английском языке. В зависимости от требований к псевдокоду или целей его использования, так можно поступать с командами, которые останутся в неизменном виде при переходе на язык программирования.
Если в псевдокоде используются команды «если» и «то», их можно сразу заменить на IF и THEN : « IF ввод числа THEN вывод результата ».
Подробно и последовательно описываем действия программы
Псевдокод — это описание задач проекта, а не краткое содержание кода. Об этом особенно важно помнить, если код предназначен для читателя, который плохо разбирается в программировании. Например, чтобы рассказать о программе клиенту или подготовить учебный проект для начинающего разработчика.
Каждый этап процесса должен быть подробно описан. Операторы псевдокода похожи на предложения на естественном языке. Обычно в них не используются переменные. Вместо этого псевдокод описывает действия программы с реальными объектами, такими как номера счетов, имена или суммы операций.
Последовательность действий в псевдокоде очень важна. Хотя для пошагового описания лучше использовать простые формулировки, они должны идти именно в том порядке, в котором они выполняются.
Иногда можно отказаться от команд на языке программирования и описать порядок действий на человеческом языке. Вместо «если ввод равен нечетному числу, вывод ‘Y’» можно написать «если пользователь вводит нечетное число, на экране отображается ‘Y’».
Проверяем себя
После завершения работы над документом нужно проверить, насколько он понятен и легко ли читается. Для этого можно задать себе следующие вопросы:
- Понятен ли псевдокод человеку, который не знаком с процессом?
- Легко ли будет преобразовать псевдокод в код на вашем языке программирования?
- Описан ли процесс полностью, с учетом всех деталей?
- Понятны ли читателям имена всех объектов?
Если какой-то раздел псевдокода не доработан или шаг пропущен, нужно вернуться к тексту и добавить необходимую информацию.
Так выглядит псевдокод — пример нахождения факториала:
= 1, i := 1 WHILE i = number DO COMPUTE factorial := factorial * i INCREASE i by 1 END LOOP PRINT factorial
Продолжайте учиться: На Хекслете есть несколько больших профессий, интенсивов и треков для джуниоров, мидлов и даже сеньоров: они позволят не только узнать новые технологии, но и прокачать уже существующие навыки
Руководство по написанию псевдокода для начинающих
Перевод статьи «How to write Pseudocode: A beginner’s guide».
Зачем вообще писать псевдокод?
Первый образец, модель или пробный выпуск продукта, созданный для проверки концепции или с учебными целями это прототип. Благодаря прототипам мы можем учиться писать код и при этом не реализовывать полное решение. Разрабатывая пользовательские интерфейсы для приложений, мы создаем несколько прототипов, прежде чем получим финальный вариант.
То же самое касается и кода. Если вы будете сразу писать настоящий код какого-то сложного функционала, вы можете в результате напрасно потерять много времени. Такое может произойти, например, при использовании неподходящего алгоритма или при непродуманном дизайне программы. Чтобы этого избежать, мы пишем псевдокод.
Что такое псевдокод?
Псевдокод это неформальное высокоуровневое описание компьютерной программы или алгоритма. Чтобы написанная вами программа могла выполняться, псевдокод должен быть преобразован в обычный код, написанный на каком-либо языке программирования.
Есть ли альтернатива написанию псевдокода?
Да, есть и другие варианты. Вы можете пользоваться диаграммами UML, блок-схемами, а также языком ДРАКОН. Все это может быть использовано с теми же целями, но потребует больше ресурсов по сравнению с псевдокодом.
Операторы
Операторы это инструкции, предписывающие компьютеру выполнить определенное действие.
При написании псевдокода мы исходим из того, что все инструкции будут выполняться по порядку, сверху вниз. Но при использовании функций и обработке исключений порядок может меняться.
Математические операторы
Математические операторы — неотъемлемая часть разработки решения. Они позволяют нам производить различные манипуляции с хранимыми значениями. Вот как используются распространенные математические символы:
Присваивание: ← или := Пример: c ← 2πr, c := 2πr Сравнение: =, ≠, , ≤, ≥ Арифметические действия: +, −, ×, /, mod Пол/потолок: ⌊, ⌋, ⌈, ⌉ Пример: a ← ⌊b⌋ + ⌈c⌉ Логические: and, or Сумма, произведение: Σ Π Пример: h ← Σa∈A 1/a
Ключевые слова
Ключевое слово это слово, «зарезервированное» за программой и имеющее специальное значение. Ключевые слова могут быть командами или параметрами. В каждом языке программирования есть свои ключевые (зарезервированные) слова. Они не могут использоваться в качестве имен для переменных.
В псевдокоде ключевые слова используются, чтобы показать обычный input-output и процедурные операции. Эти слова пишутся исключительно в верхнем регистре.
START: это начало вашего псевдокода. INPUT: это данные, полученные от пользователя (путем ввода на клавиатуре или через устройство ввода). READ / GET: это input, используемый при чтении данных из файла. PRINT, DISPLAY, SHOW: Вывод вашего output на экран или соответствующее устройство вывода. COMPUTE, CALCULATE, DETERMINE: Эти слова используются для вычисления результата выражения. SET, INIT: используются для инициализации значений. INCREMENT, BUMP: используются для увеличения значения переменной. DECREMENT: используется для уменьшения значения переменной.
Условия
При разработке алгоритмов нам нужно оценивать выражения и делать так, чтобы инструкции выполнялись в зависимости от того, является ли значение выражения истиной или ложью (True или False).
Вот некоторые распространенные условия, используемые в псевдокоде:
IF — ELSE IF — ELSE
При помощи этих слов указывается, что инструкции должны быть выполнены при соблюдении определенных условий. (Сами слова в буквальном переводе означают IF — «если», ELSE IF — «еще если», ELSE — «в противном случае», THEN — «тогда, в таком случае», — прим. перев.). Условий при этом может быть несколько, как и переменных.
Вот if-блок с одним условием:
IF вы счастливы THEN улыбайтесь ENDIF
Вот if-блок с разделом else. ELSE позволяет запустить выполнение каких-то инструкций, если первое условие, заданное при помощи IF, не соблюдено.
IF вы счастливы THEN улыбайтесь ELSE хмурьтесь ENDIF
Мы можем добавлять дополнительные условия для выполнения разных инструкций.
IF вы счастливы THEN улыбайтесь ELSE IF вам грустно хмурьтесь ELSE сохраняйте обычное выражение лица ENDIF
CASE
Case-структуры используются, если нужно проверить одну переменную на совпадение с несколькими условиями.
INPUT цвет CASE цвет — красный: PRINT "красный" зеленый: PRINT "зеленый" синий: PRINT "синий" OTHERS PRINT "Пожалуйста, введите значение цвета" ENDCASE
Вариант OTHERS опционален. Условия обычно бывают в виде чисел или букв.
Итерации
«Итерировать» означает повторять набор инструкций, чтобы получить последовательность результатов (для достижения какой-то цели).
Структура FOR
Цикл FOR принимает группу элементов и запускает код в цикле для каждого отдельного элемента.
FOR каждый месяц года Вычислить количество дней ENDFOR
Структура WHILE
Цикл WHILE похож на цикл FOR. Но цикл FOR это способ повторять блок кода до того момента, как определенное условие станет истиной. В отличие от цикла FOR, цикл WHILE длится, пока какое-то условие является истиной.
Чтобы цикл while не стал бесконечным, мы добавляем какую-то инструкцию для манипуляций со значением в каждой итерации. Например, значение может увеличиваться или уменьшаться.
PRECONDITION: переменная X равна 1 WHILE Население < Ограничение Compute Население as Население + Рождения - Смерти ENDWHILE
Функции
При решении сложных задач необходимо разделять инструкции на блоки, расположенные в разных местах. Это особенно верно, когда ряд инструкций служит для какой-то одной конкретной цели. Чтобы использовать этот код повторно, мы создаем функции. Эти функции мы можем вызывать каждый раз, когда нам нужно запустить содержащийся в них код.
Function очисти монитор Pass In: ничего Укажи операционной системе очистить монитор Pass Out: ничего Endfunction
Чтобы имитировать вызов функции в псевдокоде, используется ключевое слово Call.
call: очисти монитор
Обертывание программ
Когда мы написали несколько функций в нашем псевдокоде, возникает необходимость поместить все это в один контейнер. Это улучшает читаемость и делает выполнение программы более простым для понимания.
Для этого мы обертываем код и делаем из него программу. Программа может быть определена как набор инструкций, выполнение которых позволяет решить какую-то задачу.
PROGRAM сделайчашкучая END
Обработка исключений
Исключение это событие, которое происходит во время выполнения программы и прерывает нормальное выполнение инструкций. Эти события нежелательны. Их нужно отслеживать и выполнять определенные блоки кода в качестве ответной реакции на их возникновение. Это называется обработкой исключений.
BEGIN инструкции EXCEPTION WHEN тип исключения инструкции для обработки исключения WHEN другой тип исключения инструкции для обработки исключения END
Заключение
Для написания псевдокода нет каких-то технических правил. Главное — писать псевдокод так, чтобы людям было легко его читать, а ход программы был понятен.
Есть различные руководства по написанию псевдокода, более специфичного для какого-то определенного языка программирования. Например, есть правила стиля псевдокода для языков Fortran, Pascal, C, Basic.
Псевдокод - Pseudocode
В информатике, псевдокод - это простое языковое описание шагов в алгоритме или другой системе. Псевдокод часто использует структурные соглашения обычного языка программирования, но предназначен для чтения человеком, а не машинным. Обычно в нем опускаются детали, которые необходимы для машинного понимания алгоритма, такие как объявления переменных и код для конкретного языка. Язык программирования дополнен подробностями описания естественного языка, где это удобно, или компактными математическими обозначениями. Цель использования псевдокода заключается в том, что его легче понять, чем код обычного языка программирования, и что он является эффективным и независимым от среды описанием ключевых принципов алгоритма. Он обычно используется в учебниках и научных публикациях для документирования алгоритмов и при планировании программного обеспечения и других алгоритмов.
Не существует широкого стандарта для синтаксиса псевдокода , поскольку программа в псевдокоде не является исполняемой программой, однако существуют определенные ограниченные стандарты (например, для академической оценки). Псевдокод напоминает скелетные программы, которые могут быть скомпилированы без ошибок. Блок-схемы, drakon-charts и Диаграммы Unified Modeling Language (UML) можно рассматривать как графическую альтернативу псевдокоду, но на бумаге они более просторны. Такие языки, как HAGGIS, устраняют разрыв между псевдокодом и кодом, написанным на языках программирования.
- 1 Приложение
- 2 Синтаксис
- 3 Псевдокод в математическом стиле
- 3.1 Общие математические символы
- 3.2 Пример
- 4.1 Грамматика естественного языка в языках программирования
- 4.2 Математические языки программирования
Приложение
Учебники и научные публикации, относящиеся к информатика и числовые вычисления часто используют псевдокод в описании алгоритмов, чтобы все программисты могли их понять, даже если они не все знают одни и те же языки программирования. В учебниках обычно есть сопроводительное введение, объясняющее конкретные используемые условные обозначения. Уровень детализации псевдокода может в некоторых случаях приближаться к уровню детализации формализованных языков общего назначения.
A программист, которому необходимо реализовать определенный алгоритм, особенно незнакомый, часто начинает с описания псевдокода, а затем «переводит» это описание на целевой язык программирования и модифицирует его для правильного взаимодействия с остальной частью программа. Программисты также могут начать проект с наброска кода в псевдокоде на бумаге, прежде чем писать его на его фактическом языке, в качестве структурного подхода сверху вниз с процессом шагов, которые необходимо выполнить в качестве уточнения.
Синтаксис
Псевдокод обычно фактически не подчиняется правилам синтаксиса какого-либо конкретного языка; не существует систематической стандартной формы. Некоторые авторы заимствуют стиль и синтаксис управляющих структур из некоторых традиционных языков программирования, хотя это не рекомендуется. Некоторые источники синтаксиса включают Fortran, Pascal, BASIC, C, C ++, Java, Lisp и АЛГОЛ. Объявления переменных обычно опускаются. Вызовы функций и блоки кода, такие как код, содержащийся в цикле, часто заменяются однострочными предложениями на естественном языке.
В зависимости от автора, псевдокод может сильно различаться по стилю, от почти точной имитации реального языка программирования, с одной стороны, до описания, приближающегося к форматированной прозе, с другой.
псевдокод в стиле Fortran
программа fizzbuzz Do i = от 1 до 100 установить print_number в true Если i делится на 3 print "Fizz" установить print_number на false Если i делится на 5 print "Buzz" установить print_number на false Если print_number, напечатать i напечатать конец новой строки do
Псевдокод в стиле Паскаля
процедура fizzbuzz Для i: = от 1 до 100 установите для print_number значение true; Если i делится на 3, выведите «Fizz»; установите для print_number значение false; Если i делится на 5, выведите «Buzz»; установите для print_number значение false; Если print_number, выведите i; напечатать новую строку; end
Псевдокод в стиле C:
void function fizzbuzz If i is divisible by 5 < print "Buzz"; set print_number to false; >If print_number, print i; print a newline; > >
Псевдокод в стиле Structured Basic
Sub fizzbuzz () For i = от 1 до 100 print_number = True Если i делится на 3 Затем выведите «Fizz» print_number = False End, если i делится на 5, тогда выведите «Buzz» print_number = False End, если если print_number = True Затем напечатайте i Распечатайте новую строку Next i End Sub
Псевдокод математического стиля
В числовых вычислениях псевдокод часто состоит из математической нотации, обычно из набора и теории матрицы, смешанной с управляющими структурами обычного языка программирования, а также, возможно, естественного языка описания. Это компактная и часто неформальная нотация, которую может понять широкий круг математически подготовленных людей, и часто используется как способ описания математических алгоритмы. Например, оператор суммы (заглавная сигма-нотация ) или оператор произведения (заглавная -pi нотация ) может представлять цикл for и структуру выбора в одном выражении:
Return
Обычно не ASCII набор текста используется для математических уравнений, например, с помощью языков разметки, таких как TeX или MathML или проприетарный.
Псевдокод математического стиля иногда упоминается как код пиджина, например пиджин АЛГОЛ (происхождение концепции), пиджин Фортран, pidgin BASIC, pidgin Pascal, pidgin C и pidgin Lisp.
Общие математические символы
Тип операции Символ Пример Назначение ← или: = c ← 2πr , c: = 2πr Сравнение =, ≠, , ≤, ≥ Арифметика +, -, ×, /, mod Пол / потолок ⌊, ⌋, ⌈, ⌉ a ← ⌊b⌋ + ⌈c⌉ Логические и, or Суммы, произведения Σ Π h ← Σ a∈A 1 / a Пример
Далее следует более длинный пример псевдокода в математическом стиле для алгоритма Форда – Фалкерсона :
алгоритма входных данных ford-fulkerson is: График G с пропускной способностью c, исходным узлом s, приемным узлом t вывод: поток f такой, что f является максимальным от s до t (обратите внимание, что f (u, v) - это поток от узла u к узлу v, а c (u, v) - поток пропускная способность от узла u до узла v) для каждого ребра (u, v) inGEdof(u, v) ← 0 f (v, u) ← 0 в то время как существует путь p от s до t в остаточной сети G fdo, пусть c f будет пропускной способностью потока остаточной сети G fcf(p) ← min для каждого ребра (u, v) inp dof(u, v) ← f (u, v) + c f (p) f (v, u) ← −f (u, v) return f
Машинная компиляция Языки в стиле псевдокода
Грамматика естественного языка в языках программирования
Различные попытки привнести элементы грамматики естественного языка в компьютерное программирование привели к появлению таких языков программирования, как HyperTalk, Lingo, AppleScript, SQL, Inform и в некоторой степени Python. В этих языках круглые скобки и другие специальные символы заменены предлогами, что приводит к довольно разговорчивому коду. Эти языки обычно динамически типизированы, что означает, что объявления переменных и другой шаблонный код можно опустить. Такие языки могут облегчить человеку без знания языка понимание кода и, возможно, также выучить язык. Однако сходство с естественным языком обычно скорее косметическое, чем подлинное. Правила синтаксиса могут быть такими же строгими и формальными, как и в обычном программировании, и не обязательно облегчают разработку программ.
Математические языки программирования
Альтернативой использованию математического псевдокода (включая нотацию теории множеств или матричные операции) для документирования алгоритмов является использование формального математического языка программирования, который представляет собой смесь не-ASCII математические обозначения и программные управляющие структуры. Затем код может быть проанализирован и интерпретирован машиной.
Некоторые формальные языки спецификации включают обозначение теории множеств с использованием специальных символов. Примеры:
- Z-нотация
- Венский метод разработки Язык спецификации (VDM-SL).
Некоторые языки программирования массивов включают векторизованные выражения и матричные операции как формулы, отличные от ASCII, смешанный с обычными структурами управления. Примеры:
- язык программирования (APL) и его диалекты APLX и A+.
- MathCAD.
См. Также
- Концептуальное программирование
- Drakon-chart
- Блок-схема
- Грамотное программирование
- Язык разработки программ
- Короткий код
- Структурированный английский
Ссылки
- Зобель, Джастин (2013). «Алгоритмы». Writing for Computer Science (Second ed.). Springer. ISBN 1-85233-802-4 .
Внешние ссылки
Найдите псевдокод в Wiktionary, бесплатном словаре. - Стандарт псевдокода
- Собранные алгоритмыACM
- Руководства по псевдокоду, PDF-файл.
- Инструмент генерации псевдокода из дерева модели узнает, как сгенерировать псевдокод за секунду
- Интерпретатор псевдокода PSEINT для Android-OS