Standarder for pseudokode?

stemmer
25

Jeg trenger å oversette noen Python og Java-rutiner i pseudo-kode for masteroppgaven min, men har problemer med å komme opp med en syntaks / stil som er:

  • konsistent
  • enkelt å forstå
  • ikke altfor ordrik
  • ikke for nær naturlig språk
  • ikke for nær noen konkrete programmeringsspråk.

Hvordan kan du skrive pseudokode? Er det noen standard anbefalinger?

Publisert på 20/02/2010 klokken 09:58
kilden bruker
På andre språk...                            


7 svar

stemmer
17

Jeg anbefaler å se på "Introduction to Algorithms" bok (ved Cormen, Leiserson og Rivest). Jeg har alltid funnet sin pseudo-kode beskrivelse av algoritmer veldig klar og konsekvent.

Et eksempel:

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)
Svarte 20/02/2010 kl. 10:03
kilden bruker

stemmer
4

Hvis koden er prosessuelle, er normalt pseudo-kode sannsynligvis lett (Wikipedia har noen eksempler).

Objektorientert pseudo-kode kan være vanskeligere. Ta i betraktning:

  • ved hjelp av UML klassediagrammer for å avbilde klassene / inheritence
  • ved hjelp av UML sekvensdiagrammer for å avbilde den kodesekvens
Svarte 20/02/2010 kl. 10:05
kilden bruker

stemmer
5

Jeg foreslår at du tar en titt på festningen Programming Language .

Dette er en faktisk programmeringsspråk, og ikke pseudokode, men det er designet for å være så nær kjørbar pseudokode som mulig. Spesielt for utformingen av syntaks, de leser og analysert hundrevis av CS og matematiske papirer, kurs, bøker og tidsskrifter for å finne felles bruksmønstre for pseudo og andre beregnings / matematisk notasjon.

Du kan utnytte alle at forskning bare ved å se på festningen kildekode og abstrahere ut ting du ikke trenger, siden målgruppen er menneskelig, mens festning er en kompilator.

Her er et faktisk eksempel på å kjøre Fortress koden fra NAS (NASA Advanced Supercomputing) konjugat Gradient Parallel Benchmark . For en morsom opplevelse, sammenligne spesifikasjon av referanseindeksen med implementering i festningen og merke hvordan det er nesten en 1: 1 korrespondanse. Også sammenligne implementering i et par andre språk, som C eller Fortran, og legge merke til hvordan de har absolutt ingenting å gjøre med spesifikasjonen (og er også ofte en størrelsesorden lenger enn spec).

Jeg må understreke: Dette er ikke pseudokode, er dette faktisk arbeidstid Fortress koden! Fortress Kode Eksempel http://ProjectFortress.Sun.Com/Projects/Community/raw-attachment/wiki/FortressQuestions/NAS-CG.png

Edit: Over Kode Eksempel linken er død. Muligens lignende eksempel finner du her: https://umbilicus.wordpress.com/2009/10/16/fortress-parallel-by-default/

Svarte 20/02/2010 kl. 14:33
kilden bruker

stemmer
3

Jeg forstår ikke kravet om "ikke for nær noen konkrete programmeringsspråk".

Python er generelt ansett som en god kandidat for å skrive pseudo-kode. Kanskje en litt forenklet versjon av python ville fungere for deg.

Svarte 20/02/2010 kl. 14:39
kilden bruker

stemmer
2

Pascal har alltid vært tradisjonelt den som ligner mest på pseudokode, når det gjelder matematiske og tekniske områder. Jeg vet ikke hvorfor, det var bare alltid slik.

Jeg har noen (oh, jeg vet ikke, 10 kanskje bøker på en hylle, som betong denne teorien).

Python som foreslått, kan være hyggelig kode, men det kan være så uleselig også, at det er et under i seg selv. Eldre språk er vanskeligere å gjøre uleselig - dem er "enklere" (ta med forsiktighet) enn dagens seg. De vil kanskje være vanskeligere å forstå hva som skjer, men lettere å lese (mindre syntaks / språk funksjoner er nødvendig for å forstå hva programmet gjør).

Svarte 20/02/2010 kl. 15:15
kilden bruker

stemmer
7

Svare på mitt eget spørsmål, jeg ville bare gjøre oppmerksom på følgende internettside om sats pseudokode i LaTeX: http://www.tex.ac.uk/cgi-bin/texfaq2html?label=algorithms . De beskriver en rekke ulike stiler, notering fordeler og ulemper. Forresten, det måtte eksistere to stilark for å skrive pseudokode på den måten som brukes i "Introductin til Algoritmer" av Cormen, som anbefalt ovenfor: newalg og clrscode. Sistnevnte ble skrevet av Cormen selv.

Svarte 25/02/2010 kl. 14:08
kilden bruker

stemmer
0

Dette innlegget er gammelt, men forhåpentligvis vil dette hjelpe andre.

"Introduksjon til Algoritmer" bok (ved Cormen, Leiserson og Rivest) er en god bok å lese om algoritmer, men "pseudo-kode" er forferdelig. Ting som Q [1 ... n] er tull når man trenger å forstå hva Q [1 ... n] er vel å bety. Som vil måtte legges merke til utenfor "pseudo-kode." Videre bøker som "Introduction to Algorithms" liker å bruke en matematisk syntaks, som bryter ett formål av pseudo-kode.

Pseudo-koden skal gjøre to ting. Abstract unna syntaks og være lett å lese. Hvis selve koden er mer beskrivende enn pseudo-kode, og selve koden er mer beskrivende, så er det ikke pseudo-kode.

Si at du var å skrive et enkelt program.

Skjermen design:

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

Variabel liste:

TOTAL:         double
SUB_TOTAL:     double
DISCOUNT:      double

Pseudo-kode:

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

Legg merke til at dette er veldig lett å lese og refererer ikke til noen syntaks. Dette støtter alle tre av Bohm og Jacopini kontrollstrukturer.

Sekvens:

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

utvalg:

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

Gjentakelse:

while condition
    do stuff

for SOME_VALUE TO ANOTHER_VALUE
    do stuff

sammenligne det til denne N-Queens "pseudo-kode" ( 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) 

Hvis du ikke kan forklare det enkelt, forstår du ikke det godt nok. - Albert Einstein

Svarte 11/01/2019 kl. 15:02
kilden bruker

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