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

голоса
24

Мне нужно, чтобы перевести некоторые питон и Java подпрограмм в псевдо код для моей магистерской работы, но есть проблема, придумывая синтаксис / стиль, который:

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

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

Задан 20/02/2010 в 10:58
источник пользователем
На других языках...                            


7 ответов

голоса
16

Я рекомендую смотреть на «Введение в алгоритмы» книги (по CORMEN, Leiserson и Ривестом). Я всегда находил его описание псевдо-код алгоритмов очень четким и последовательным.

Пример:

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)
Ответил 20/02/2010 в 11:03
источник пользователем

голоса
4

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

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

  • с помощью диаграмм классов UML для описания классов / Наследование
  • с помощью диаграмм последовательности UML, чтобы изобразить последовательность кода
Ответил 20/02/2010 в 11:05
источник пользователем

голоса
5

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

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

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

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

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

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

Ответил 20/02/2010 в 15:33
источник пользователем

голоса
3

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

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

Ответил 20/02/2010 в 15:39
источник пользователем

голоса
2

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

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

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

Ответил 20/02/2010 в 16:15
источник пользователем

голоса
7

Отвечая на мой собственный вопрос, я просто хотел бы обратить внимание на следующий веб - страницу о верстке псевдокода в LaTeX: http://www.tex.ac.uk/cgi-bin/texfaq2html?label=algorithms . Они описывают множество различных стилей, листинг преимущества и недостатки. Incidently, там случается, существуют две таблицы стилей для написания кода псевдо в манере , используемой в «Introductin в Алгоритмы» с помощью Cormen, как рекомендовано выше: newalg и clrscode. Последний был написан самим Cormen.

Ответил 25/02/2010 в 15:08
источник пользователем

голоса
0

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

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

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

Допустим, вы пишете простую программу.

Конструкция экрана:

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's 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's total is:", TOTAL

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

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

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) 

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

Ответил 11/01/2019 в 15:02
источник пользователем

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more