Domanda

Ho bisogno di tradurre alcune routine di pitone e Java in pseudo-codice per la mia tesi di laurea, ma hanno problemi a venire con una sintassi / stile che è:

  • coerente
  • di facile comprensione
  • non troppo prolisso
  • non troppo vicino al linguaggio naturale
  • non troppo vicino a un linguaggio di programmazione concreta.

Come si scrive il codice pseudo? Ci sono delle raccomandazioni standard?

È stato utile?

Soluzione

Vi consiglio di guardare la "Introduzione agli algoritmi" libro (da Cormen, Leiserson e Rivest). Ho sempre trovato la sua descrizione pseudo-codice di algoritmi molto chiara e coerente.

Un esempio:

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)

Altri suggerimenti

Rispondendo alla mia domanda, volevo solo attirare l'attenzione sul TeX FAQ ingresso composizione tipografica pseudocodice in LaTeX . Esso descrive una serie di diversi stili, i vantaggi e gli svantaggi di quotazione. Per inciso, c'è il caso che esistano due fogli di stile per la scrittura pseudo codice nel modo usato in "Introductin agli algoritmi" di Cormen, come suggerito in precedenza: newalg e clrscode. Quest'ultimo è stato scritto da Cormen se stesso.

vi consiglio di dare un'occhiata alla Fortezza Programming Language .

Questo è un reale linguaggio di programmazione, e non pseudocodice, ma è stato progettato per essere il più vicino al pseudocodice eseguibile come possibile. In particolare, per la progettazione la sintassi, che leggono e analizzati centinaia di CS e matematica carte, corsi, libri e riviste per trovare i modelli di utilizzo comuni per pseudocodice e altre notazioni di calcolo / matematica.

È possibile sfruttare tutto ciò che la ricerca da solo guardando il codice sorgente di Rocca e astraendo le cose non ti servono, dal momento che il pubblico di destinazione è umano, mentre la Fortezza di è un compilatore.

Ecco un reale esempio di esecuzione di codice Fortezza dal NAS (NASA avanzata Supercomputing) Gradiente Coniugato parallelo Benchmark . Per un'esperienza divertente, confrontare il specifiche del benchmark con il applicazione in Fortezza e notare come non v'è quasi una corrispondenza 1: 1. Confronta anche l'implementazione in un paio di altre lingue, come il C o Fortran, e notare come non hanno assolutamente nulla a che fare con la specifica (e sono spesso anche un ordine di grandezza più lungo del spec).

Devo sottolineare: questo non è pseudocodice, questo è vero e proprio codice di Fortezza di lavoro Codice Fortress Esempio http://ProjectFortress.Sun.Com/Projects/Community/raw-attachment/wiki/FortressQuestions/NAS-CG.png

Modifica: codice di cui sopra Esempio collegamento è morto. Possibilmente esempio simile può essere trovato qui: https: // dell'ombelico .wordpress.com / 2009/10/16 / fortezza-parallelo-by-default /

Se il codice è procedurale, normale pseudo-codice è probabilmente facile (Wikipedia ha alcuni esempi).

pseudo-codice Object-oriented potrebbe essere più difficile. Prendere in considerazione:

  • utilizzando diagrammi delle classi UML per rappresentare la classi / ereditarietà
  • utilizzando UML diagrammi di sequenza per descrivere la sequenza di codice

Non capisco il vostro requisito di "non troppo vicino a qualche linguaggio di programmazione concreta".

Python è generalmente considerato come un buon candidato per la scrittura di pseudo-codice. Forse una versione leggermente semplificata di pitone avrebbe funzionato per voi.

Pascal è sempre stato tradizionalmente il più simile a pseudocodice, quando si tratta di campi matematici e tecnici. Non so perché, era proprio sempre così.

ho qualche (oh, non lo so, forse 10 libri su uno scaffale, che concreta questa teoria).

Python come suggerito, può essere il codice bello, ma può essere così illeggibile pure, che è un miracolo di per sé. lingue più anziani sono più difficili da rendere illeggibile - loro che sono "più semplice" (prendere con cautela) rispetto a quelli di oggi. Faranno forse più difficile da capire che cosa sta succedendo, ma più facile da leggere (caratteristiche meno sintassi / lingua è necessario per capire cosa fa il programma).

Questo post è vecchio, ma spero che questo aiuterà gli altri.

"Introduzione agli algoritmi" libro (da Cormen, Leiserson e Rivest) è un buon libro da leggere su algoritmi, ma il "pseudo-codice" è terribile. Cose come Q [1 ... n] è una sciocchezza quando si ha la necessità di capire cosa Q [1 ... n] è supponiamo di dire. Che dovrà essere osservato al di fuori della "pseudo-codice." Inoltre, libri come "Introduzione agli algoritmi" piace usare una sintassi matematica, che sta violando uno scopo di pseudo-codice.

Pseudo-codice dovrebbe fare due cose. Estratto dalla sintassi ed essere di facile lettura. Se il codice attuale è più descrittivo rispetto alla pseudo-codice, e il codice attuale è più descrittivo, allora non è pseudo-codice.

Di 'si stesse scrivendo un semplice programma.

disegno dello schermo:

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

Elenco variabili:

TOTAL:         double
SUB_TOTAL:     double
DISCOUNT:      double

pseudo-codice:

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

Si noti che questo è molto facile da leggere e non fa riferimento alcuna sintassi. Questo supporta tutti e tre di Bohm e Jacopini di strutture di controllo.

Sequenza:

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

Selezione:

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

La ripetizione:

while condition
    do stuff

for SOME_VALUE TO ANOTHER_VALUE
    do stuff

confrontare che a questo N-Queens "pseudo-codice" ( 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) 

Se non è possibile spiegarlo semplicemente, non si capisce abbastanza bene. - Albert Einstein

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top