Standarde de cod pseudo?

voturi
24

Am nevoie de a traduce unele Python și Java rutine în cod pseudo pentru teza mea de master, dar au probleme de a veni cu o sintaxă / stil care este:

  • consistent
  • Ușor de înțeles
  • nu prea verbose
  • nu prea aproape de limbaj natural
  • nu prea aproape de un limbaj de programare de beton.

Cum se scrie codul pseudo? Există recomandări standard de?

Întrebat 20/02/2010 la 10:58
sursa de către utilizator
În alte limbi...                            


7 răspunsuri

voturi
16

Vă recomandăm uita la „Introducere în algoritmi“ carte (de Cormen, Leiserson și Rivest). Am găsit întotdeauna descrierea pseudo-cod de algoritmi foarte clare și coerente.

Un exemplu:

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)
Publicat 20/02/2010 la 11:03
sursa de către utilizator

voturi
4

În cazul în care codul de procedură este, normală pseudo-cod este, probabil, ușor (Wikipedia are câteva exemple).

orientate spre obiect pseudo-cod ar putea fi mai dificil. Considera:

  • folosind diagrame de clase UML pentru a descrie clase / ereditate
  • folosind diagrame UML secvență pentru a descrie secvența de cod
Publicat 20/02/2010 la 11:05
sursa de către utilizator

voturi
5

Vă sugerez să luați o privire la limbajul de programare Fortress .

Acesta este un real limbaj de programare, și nu pseudocod, dar a fost proiectat pentru a fi cât mai aproape de pseudocod executabil posibil. În special, pentru proiectarea sintaxa, au citit și au analizat sute de CS și lucrări de matematică, cursuri, cărți și reviste pentru a găsi modele comune de utilizare pentru pseudocod si alte notatii de calcul / matematice.

Puteți beneficia de toate că cercetarea de doar uita la codul sursă Fortăreței și abstractizare din lucrurile pe care nu ai nevoie, din moment ce publicul țintă este uman, în timp ce Cetatea este un compilator.

Aici este un real exemplu de a rula cod Fortăreața din NAS Benchmark paralel (NASA avansat Supercomputing) Gradient Conjugat . Pentru o experiență de distracție, compara specificația de referință cu punerea în aplicare în Fortăreței și observați cum există aproape 1: 1 corespondență. De asemenea , puteți compara punerea în aplicare în câteva alte limbi, cum ar fi C sau Fortran, și observați modul în care acestea nu au absolut nimic de- a face cu caietul de sarcini (și sunt , de asemenea , de multe ori un ordin de mărime mai mare decât spec).

Trebuie să subliniez: acest lucru nu este pseudocod, acest lucru este real cod Cetatea de lucru! Cod Exemplu Cetatea http://ProjectFortress.Sun.Com/Projects/Community/raw-attachment/wiki/FortressQuestions/NAS-CG.png

Editare: codul de mai sus Exemplu link - ul este mort. Este posibil ca exemplu similar poate fi găsit aici: https://umbilicus.wordpress.com/2009/10/16/fortress-parallel-by-default/

Publicat 20/02/2010 la 15:33
sursa de către utilizator

voturi
3

Nu înțeleg cerința dvs. de „nu prea aproape de unele limbaj de programare de beton“.

Python este în general considerată ca un bun candidat pentru scrierea pseudo-cod. Poate că o versiune simplificată ușor de piton ar lucra pentru tine.

Publicat 20/02/2010 la 15:39
sursa de către utilizator

voturi
2

Pascal a fost întotdeauna în mod tradițional cel mai similar cu pseudocod, atunci când este vorba de domenii matematice și tehnice. Nu știu de ce, a fost doar întotdeauna așa.

Am niște (oh, nu știu, 10 cărți poate pe un raft, care beton această teorie).

Python așa cum a sugerat, poate fi codul de frumos, dar poate fi atât de imposibil de citit, de asemenea, că este o minune de la sine. limbi mai vechi sunt mai greu de a face imposibil de citit - ele fiind „simple“ (ia cu precauție) decât cele de astăzi. Vor fi, poate, mai greu de înțeles ce se întâmplă, dar mai ușor de citit (mai puține caracteristici de sintaxă / limba este necesar pentru a înțelege ce face programul).

Publicat 20/02/2010 la 16:15
sursa de către utilizator

voturi
7

Răspunsul la întrebarea mea, am vrut doar să atrag atenția asupra următoarea pagină de internet cu privire la codul de pseudo în culegere LaTeX: http://www.tex.ac.uk/cgi-bin/texfaq2html?label=algorithms . Ele descriu o serie de stiluri diferite, avantaje și dezavantaje listare. Eventual, se întâmplă să existe două foi de stil pentru scrierea de cod pseudo în modul utilizat în „Introductin în algoritmi“ de Cormen, așa cum a recomandat de mai sus: newalg și clrscode. Acesta din urmă a fost scris de Cormen însuși.

Publicat 25/02/2010 la 15:08
sursa de către utilizator

voturi
0

Acest post este vechi, dar sperăm că acest lucru va ajuta pe alții.

„Introducere în algoritmi“ carte (de Cormen, Leiserson și Rivest) este o carte bună pentru a citi despre algoritmi, dar „pseudo-cod“ este teribil. Lucruri cum ar fi Q [1 ... n] este un nonsens atunci când cineva trebuie să înțeleagă ce [1 ... n] se presupune să însemne Q. Ceea ce va trebui să fie notat în afara „pseudo-cod.“ Mai mult decât atât, cărți, cum ar fi „Introducere în algoritmi“ să utilizați o sintaxă matematică, care încalcă un singur scop de pseudo-cod.

Pseudo-cod ar trebui să facă două lucruri. Rezumat departe de sintaxă și să fie ușor de citit. În cazul în care codul real este mai descriptiv decât pseudo-cod, și codul real este mai descriptiv, atunci nu este pseudo-cod.

Spuneți că ați scris un program simplu.

Design de ecran:

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

Listă variabilă:

TOTAL:         double
SUB_TOTAL:     double
DISCOUNT:      double

Pseudo cod:

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

Observați că acest lucru este foarte ușor de citit și nu face referire nici o sintaxă. Aceasta susține toate cele trei structuri de control Bohm și Jacopini lui.

Secvenţă:

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

Selecţie:

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

Repetiţie:

while condition
    do stuff

for SOME_VALUE TO ANOTHER_VALUE
    do stuff

compara cu acest N-Queens "pseudo-cod" ( 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) 

Dacă nu se poate explica pur si simplu, nu înțelegi destul de bine. - Albert Einstein

Publicat 11/01/2019 la 15:02
sursa de către utilizator

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