Normy dla pseudo kod?

głosy
24

Muszę tłumaczyć niektóre Pythona i Javy do kodu procedury pseudo mojej pracy magisterskiej, ale mają kłopoty wymyślanie składni / styl, który jest:

  • zgodny
  • łatwy do zrozumienia
  • nie zbyt rozwlekły
  • nie zbyt blisko do języka naturalnego
  • nie zbyt blisko jakiejś konkretnej języku programowania.

Jak napisać kod pseudo? Czy istnieją jakieś standardowe zalecenia?

Utwórz 20/02/2010 o 10:58
źródło użytkownik
W innych językach...                            


7 odpowiedzi

głosy
16

Polecam patrząc na „Wprowadzenie do algorytmów” książki (o CORMEN, Leiserson i Rivesta). Zawsze uważałem, że jego opis pseudo-kod algorytmów bardzo jasne i spójne.

Przykład:

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)
Odpowiedział 20/02/2010 o 11:03
źródło użytkownik

głosy
4

Jeśli kod jest proceduralny, normalny pseudo-kod jest prawdopodobnie proste (Wikipedia ma kilka przykładów).

pseudo-kodu obiektowego może być trudniejsze. Rozważać:

  • za pomocą diagramów klas UML do zobrazowania klas / Dziedziczenie
  • stosując UML schematów sekwencji zobrazowania sekwencji kodu
Odpowiedział 20/02/2010 o 11:05
źródło użytkownik

głosy
5

Proponuję zapoznać się z Twierdzy języka programowania .

Jest to rzeczywisty język programowania, a nie pseudokod, ale został zaprojektowany, aby być jak najbliżej wykonywalnego pseudocode jak to możliwe. W szczególności do projektowania składnię, czytają i przeanalizował setki CS i papiery matematycznych, kursy, książki i czasopisma, aby znaleźć wspólne wzorce użycia dla Pseudokod i innych obliczeniowych / notacji matematycznej.

Można wykorzystać wszystkie te badania po prostu patrząc na kod źródłowy Fortress i abstrahując się rzeczy, których nie potrzebujesz, ponieważ grupa docelowa jest rzeczą ludzką, a Fortress jest kompilator.

Oto rzeczywisty przykład uruchomiony kod Fortress z NAS (NASA zaawansowane Superkomputerowo) Conjugate Gradient Parallel Benchmark . Dla zabawy doświadczenia, porównać specyfikację z benchmarku z realizacji w Fortecy i zauważyć, jak nie ma prawie 1: 1 korespondencja. Również porównanie wdrożenie w kilku innych językach, takich jak C lub Fortran, i zauważyć, jak mają one nic wspólnego ze specyfikacją (a także często o rząd wielkości więcej niż spec).

Muszę podkreślić: to nie jest pseudokod, to rzeczywisty kod Fortress roboczy! Kod twierdza Przykład http://ProjectFortress.Sun.Com/Projects/Community/raw-attachment/wiki/FortressQuestions/NAS-CG.png

Edit: Kod powyższym przykładzie link jest martwy. Ewentualnie Podobny przykład można znaleźć tutaj: https://umbilicus.wordpress.com/2009/10/16/fortress-parallel-by-default/

Odpowiedział 20/02/2010 o 15:33
źródło użytkownik

głosy
3

Nie rozumiem Twojego wymóg „nie zbyt blisko jakiejś konkretnej języka programowania”.

Python jest powszechnie uważany za dobrego kandydata do pisania pseudo-kod. Być może nieco uproszczona wersja Pythona będzie pracować dla Ciebie.

Odpowiedział 20/02/2010 o 15:39
źródło użytkownik

głosy
2

Pascal zawsze tradycyjnie najbardziej zbliżone do Pseudokod, jeśli chodzi o dziedzinach matematycznych i technicznych. Nie wiem dlaczego, to było po prostu zawsze tak jest.

Mam niektóre (oh, nie wiem, być może 10 książek na półce, która beton tę teorię).

Python jak sugeruje, może być ładny kodu, ale może być tak nieczytelny, a także, że jest to cud sam w sobie. Starsze języki są trudniejsze do odczytania - im jest „prostsze” (take z ostrożnością) niż te dzisiejsze. Oni może być trudniejsze do zrozumienia tego, co się dzieje, ale łatwiejsze do odczytania (mniej możliwości składnia / język jest potrzebne, aby zrozumieć, co robi program).

Odpowiedział 20/02/2010 o 16:15
źródło użytkownik

głosy
7

Odpowiadając na moje własne pytanie, chciałem tylko zwrócić uwagę na następujące strony o nabieranie pseudo kod w LaTeX: http://www.tex.ac.uk/cgi-bin/texfaq2html?label=algorithms . Opisują one szereg różnych stylów, zalet i wad ogłoszeniu. Incidently, zdarzają istnieć dwa arkusze stylów do pisania kodu pseudo w sposób używany w „Introductin do algorytmów” przez Cormen, zgodnie z zaleceniami powyżej: newalg i clrscode. Ten ostatni został napisany przez samego Cormen.

Odpowiedział 25/02/2010 o 15:08
źródło użytkownik

głosy
0

Ten post jest stary, ale mam nadzieję, że to pomoże innym.

„Wprowadzenie do algorytmów” książka (przez CORMEN, Leiserson i Rivesta) to dobra książka do czytania o algorytmach, ale „pseudo-code” jest straszna. Rzeczy takie jak Q [1 ... n] jest nonsens, kiedy trzeba zrozumieć, co Q [1 ... n] jest rzekomo na myśli. Które trzeba będzie zwrócić uwagę na zewnątrz „pseudo-kodu.” Ponadto, książki takie jak „Wprowadzenie do algorytmów” lubią używać matematycznego składni, która jest naruszającego jeden cel pseudo-kodu.

Pseudo-kod powinien zrobić dwie rzeczy. Streszczenie od składni i być łatwe do odczytania. Jeśli rzeczywisty kod jest bardziej opisowe niż pseudo-kodu, a rzeczywisty kod jest bardziej opisowy, to nie jest pseudo-code.

Załóżmy, że zostały napisanie prostego programu.

Konstrukcja ekranu:

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

Lista zmienna:

TOTAL:         double
SUB_TOTAL:     double
DISCOUNT:      double

Pseudo kod:

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

Zauważ, że jest to bardzo łatwe do odczytania i nie odwoływać żadnych składni. To urządzenie obsługuje wszystkie trzy Bohma and Jacopini w strukturach kontrolnych.

Sekwencja:

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

Wybór:

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

Powtórzenie:

while condition
    do stuff

for SOME_VALUE TO ANOTHER_VALUE
    do stuff

porównaj to z tym N-Queen „pseudo-kod” ( 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) 

Jeśli nie można wyjaśnić po prostu nie rozumiesz to wystarczająco dobrze. - Albert Einstein

Odpowiedział 11/01/2019 o 15:02
źródło użytkownik

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