Подтвердить что ты не робот

Стандарты для псевдокода?

Мне нужно перевести некоторые подпрограммы python и java в псевдокод для моей магистерской диссертации, но у меня возникнут проблемы с синтаксисом/стилем, который:

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

Как вы пишете псевдокод? Существуют ли какие-либо стандартные рекомендации?

4b9b3361

Ответ 1

Я рекомендую посмотреть книгу "Введение в алгоритмы" (Cormen, Leiserson и Rivest). Я всегда находил его псевдокод описание алгоритмов очень ясным и последовательным.

Пример:

DIJKSTRA(G, w, s)
1  INITIALIZE-SINGLE-SOURCE(G, s)
2  S ← Ø
3  Q ← V[G]
4  while Q ≠ Ø
5      do u ← EXTRACT-MIN(Q)
6         S ← S ∪{u}
7         for each vertex v ∈ Adj[u]
8             do RELAX(u, v, w)

Ответ 2

Отвечая на мой собственный вопрос, я просто хотел привлечь внимание к записи часто задаваемых вопросов по TeX псевдокоду в LaTeX. Он описывает ряд различных стилей, перечисляя преимущества и недостатки. Между прочим, существуют две таблицы стилей для написания псевдокода способом, использованным Cormen в "Введении в алгоритмы", как рекомендовано выше: newalg и clrscode. Последний был написан самим Корменом.

Ответ 3

Я предлагаю вам взглянуть на Язык программирования Fortress.

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

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

Вот пример использования кода Fortress из NAS (суперкомпьютер NASA Advanced Supercomputing). Для забавного опыта сравните спецификацию эталона с реализацией в Fortress и обратите внимание на то, что существует почти 1:1 соответствие. Также сравните реализацию на нескольких других языках, таких как C или Fortran, и обратите внимание на то, что они абсолютно не имеют отношения к спецификации (а также часто на порядок больше, чем спецификация).

Я должен подчеркнуть: это не псевдокод, это фактический рабочий код крепости! Пример кода крепости http://ProjectFortress.Sun.Com/Projects/Community/raw-attachment/wiki/FortressQuestions/NAS-CG.png

Изменить: ссылка на код выше кода мертва. Вероятно, подобный пример можно найти здесь: https://umbilicus.wordpress.com/2009/10/16/fortress-parallel-by-default/

Ответ 4

Если код является процедурным, нормальный псевдокод, вероятно, легко (Wikipedia имеет несколько примеров).

Объектно-ориентированный псевдокод может быть более сложным. Рассмотрим:

  • с использованием диаграмм классов UML для отображения классов/наследования
  • с использованием диаграмм последовательности UML для отображения последовательности кода

Ответ 5

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

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

Ответ 6

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

У меня есть некоторые (о, я не знаю, 10, может быть, книги на полке, которые конкретизируют эту теорию).

Python, как и было предложено, может быть хорошим кодом, но он также может быть нечитаемым, что это чудо само по себе. Старые языки сложнее сделать нечитаемыми - их "проще" (с осторожностью), чем сегодня. Возможно, им будет сложнее понять, что происходит, но легче читать (для понимания того, что делает программа, требуется меньше синтаксических/языковых функций).

Ответ 7

Этот пост старый, но, надеюсь, это поможет другим.

Книга "Введение в алгоритмы" (написанная Корменом, Лизерсоном и Ривестом) - хорошая книга для чтения об алгоритмах, но "псевдокод" ужасен. Такие вещи, как Q [1... n], бессмысленны, когда нужно понять, что подразумевается под Q [1... n]. Который должен быть отмечен за пределами "псевдокода". Более того, такие книги, как "Введение в алгоритмы", любят использовать математический синтаксис, который нарушает одну из целей псевдокода.

Псевдокод должен делать две вещи. Абстрагироваться от синтаксиса и быть легко читаемым. Если фактический код является более описательным, чем псевдокод, а фактический код является более описательным, то это не псевдокод.

Скажем, вы писали простую программу.

Дизайн экрана:

Welcome to the Consumer Discount Program!
Please enter the customers subtotal: 9999.99
The customer receives a 10 percent discount
The customer receives a 20 percent discount
The customer does not receive a discount
The customer total is: 9999.99

Список переменных:

TOTAL:         double
SUB_TOTAL:     double
DISCOUNT:      double

Псевдо-код:

DISCOUNT_PROGRAM

    Print "Welcome to the Consumer Discount Program!"
    Print "Please enter the customers subtotal:"
    Input SUB_TOTAL

    Select the case for SUB_TOTAL
        SUB_TOTAL > 10000 AND SUB_TOTAL <= 50000
            DISCOUNT = 0.1
            Print "The customer receives a 10 percent discount"
        SUB_TOTAL > 50000
            DISCOUNT = 0.2
            Print "The customer receives a 20 percent discount"
        Otherwise
            DISCOUNT = 0
            Print "The customer does not a receive a discount"

    TOTAL = SUB_TOTAL - (SUB_TOTAL * DISCOUNT)
    Print "The customer total is:", TOTAL

Обратите внимание, что это очень легко читать и не ссылается на какой-либо синтаксис. Это поддерживает все три структуры управления Бома и Якопини.

Последовательность:

Print "Some stuff"
VALUE = 2 + 1
SOME_FUNCTION(SOME_VARIABLE)

Выбор:

if condition
    Do one extra thing

if condition
    do one extra thing
else
    do one extra thing

if condition
    do one extra thing
else if condition
    do one extra thing
else
    do one extra thing

Select the case for SYSTEM_NAME
    condition 1
        statement 1
    condition 2
        statement 2
    condition 3
        statement 3
    otherwise
        statement 4

Репетиция:

while condition
    do stuff

for SOME_VALUE TO ANOTHER_VALUE
    do stuff

сравните это с этим псевдокодом N-Queens (https://en.wikipedia.org/wiki/Eight_queens_puzzle):

PlaceQueens(Q[1 .. n],r)

    if r = n + 1
        print Q
    else
        for j ← 1 to n
            legal ← True
            for i ← 1 to r − 1
                if (Q[i] = j) or (Q[i] = j + r − i) or (Q[i] = j − r + i)
                    legal ← False
        if legal
            Q[r] ← j
            PlaceQueens(Q[1 .. n],r + 1) 

Если вы не можете объяснить это просто, вы не понимаете это достаточно хорошо. - Альберт Эйнштейн

Ответ 8

Python, как и было предложено, может быть хорошим кодом, но он также может быть нечитаемым, что это чудо само по себе. Старые языки сложнее сделать нечитаемыми - их "проще" (с осторожностью), чем сегодня. Возможно, им будет сложнее понять, что происходит, но легче читать (для понимания того, что делает программа, требуется меньше синтаксических/языковых функций).