Norme per pseudo codice?

voti
24

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
  • facile da capire
  • 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?

È pubblicato 20/02/2010 alle 10:58
fonte dall'utente
In altre lingue...                            


7 risposte

voti
16

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)
Risposto il 20/02/2010 a 11:03
fonte dall'utente

voti
4

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

pseudo-codice a oggetti potrebbe essere più difficile. Prendere in considerazione:

  • utilizzando diagrammi delle classi UML per rappresentare le classi / inheritence
  • utilizzando UML diagrammi di sequenza per descrivere la sequenza di codice
Risposto il 20/02/2010 a 11:05
fonte dall'utente

voti
5

Vi consiglio di dare un'occhiata alla Fortezza linguaggio di programmazione .

Si tratta di un vero e proprio 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 hanno analizzato centinaia di CS e carte di matematica, 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.

Qui è un vero e proprio esempio di esecuzione di codice Fortezza dal NAS (NASA avanzata Supercomputing) Gradiente Coniugato Benchmark parallelo . Per un'esperienza divertente, confrontare la specificazione del punto di riferimento con l' implementazione 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

Edit: codice di cui sopra Esempio collegamento è morto. Possibilmente esempio simile può essere trovato qui: https://umbilicus.wordpress.com/2009/10/16/fortress-parallel-by-default/

Risposto il 20/02/2010 a 15:33
fonte dall'utente

voti
3

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.

Risposto il 20/02/2010 a 15:39
fonte dall'utente

voti
2

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 un po '(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 (meno funzioni sintassi / lingua è necessario per capire cosa fa il programma).

Risposto il 20/02/2010 a 16:15
fonte dall'utente

voti
7

Rispondendo alla mia domanda, volevo solo attirare l'attenzione sulla seguente pagina web sulla composizione tipografica pseudo codice in LaTeX: http://www.tex.ac.uk/cgi-bin/texfaq2html?label=algorithms . Essi descrivono una serie di diversi stili, i vantaggi e gli svantaggi di quotazione. Incidentalmente, 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.

Risposto il 25/02/2010 a 15:08
fonte dall'utente

voti
0

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 pseudo-codice e codice reale è più descrittivo, allora non è pseudo-codice.

Diciamo che stesse scrivendo un semplice programma.

design 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

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 si può spiegare semplicemente, non si capisce abbastanza bene. - Albert Einstein

Risposto il 11/01/2019 a 15:02
fonte dall'utente

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