Normes pour le code de pseudo?

voix
24

Je dois traduire quelques routines de python et java en pseudo-code pour ma thèse de maîtrise mais ont du mal à venir avec une syntaxe / style qui est:

  • cohérent
  • facile à comprendre
  • pas trop bavard
  • pas trop proche du langage naturel
  • pas trop près un langage de programmation concrète.

Comment écrivez-vous un code de pseudo? Y a-t-il des recommandations standard?

Créé 20/02/2010 à 10:58
source utilisateur
Dans d'autres langues...                            


7 réponses

voix
16

Je vous recommande de regarder le livre « Introduction aux algorithmes » (par Cormen, Leiserson et Rivest). Je l'ai toujours trouvé sa description pseudo-code des algorithmes très clairs et cohérents.

Un exemple:

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)
Créé 20/02/2010 à 11:03
source utilisateur

voix
4

Si le code est d'ordre procédural, pseudo-code normal est probablement facile (Wikipedia a quelques exemples).

pseudo-code orienté objet-pourrait être plus difficile. Considérer:

  • en utilisant des diagrammes de classes UML pour représenter les classes / inheritence
  • des diagrammes de séquence UML pour décrire la séquence du code
Créé 20/02/2010 à 11:05
source utilisateur

voix
5

Je vous suggère de jeter un oeil à la langue de programmation Forteresse .

Ceci est une réelle langage de programmation, et non pseudocode, mais il a été conçu pour être aussi proche que possible exécutable pseudocode. En particulier, pour la conception de la syntaxe, ils lisent et ont analysé des centaines de CS et des documents de mathématiques, des cours, des livres et des journaux pour trouver des modèles d'utilisation communs pour d' autres notations et pseudo - code de calcul / mathématiques.

Vous pouvez tirer parti de tout ce que la recherche simplement en regardant le code source forteresse et abstraire les choses que vous n'avez pas besoin, puisque votre public cible est humain, alors est un compilateur de forteresse.

Voici un réel exemple d'exécuter du code de la forteresse du NAS (NASA avancée Supercomputing) Gradient Conjugué de référence parallèle . Pour une expérience amusante, comparer la spécification de l'indice de référence à la mise en œuvre dans la forteresse et remarquez comment il y a presque une correspondance 1: 1. Comparer également la mise en œuvre dans deux autres langues, comme le C ou Fortran, et remarquez comment ils ont absolument rien à voir avec le cahier des charges (et sont souvent un ordre de grandeur plus longue que la spécification).

Je dois souligner: ce n'est pas pseudocode, ce code est de la forteresse de travail réelle! Forteresse Exemple de code http://ProjectFortress.Sun.Com/Projects/Community/raw-attachment/wiki/FortressQuestions/NAS-CG.png

Edit: lien ci - dessus Exemple de code est mort. Peut - être par exemple similaire se trouve ici: https://umbilicus.wordpress.com/2009/10/16/fortress-parallel-by-default/

Créé 20/02/2010 à 15:33
source utilisateur

voix
3

Je ne comprends pas votre exigence de « pas trop près un langage de programmation concrète ».

Python est généralement considéré comme un bon candidat pour l'écriture pseudo-code. Peut-être une version légèrement simplifiée de python fonctionnerait pour vous.

Créé 20/02/2010 à 15:39
source utilisateur

voix
2

Pascal a toujours été traditionnellement le plus semblable à pseudocode, en ce qui concerne les domaines mathématiques et techniques. Je ne sais pas pourquoi, il était toujours le cas.

J'ai un peu (oh, je ne sais pas, peut-être 10 livres sur une étagère, qui en béton cette théorie).

Python comme suggéré, peut être beau code, mais il peut être aussi illisible et que c'est une merveille en soi. langues anciennes sont plus difficiles à rendre illisibles - les étant « plus simple » (prendre avec prudence) que les ceux d'aujourd'hui. Ils seront peut-être plus difficile de comprendre ce qui se passe, mais plus facile à lire (moins la syntaxe / caractéristiques linguistiques est nécessaire pour comprendre ce que le programme fait).

Créé 20/02/2010 à 16:15
source utilisateur

voix
7

Répondre à ma propre question, je voulais simplement attirer l' attention sur la page Web suivante à propos du code pseudo composition en LaTeX: http://www.tex.ac.uk/cgi-bin/texfaq2html?label=algorithms . Ils décrivent un certain nombre de styles différents, avantages et inconvénients de la liste. Soit dit en passant, il arrive d'exister deux feuilles de style pour l' écriture de code pseudo de la manière utilisée dans « Introductin aux algorithmes » par Cormen, comme recommandé ci - dessus: newalg et clrscode. Ce dernier a été écrit par Cormen lui - même.

Créé 25/02/2010 à 15:08
source utilisateur

voix
0

Ce poste est vieux, mais nous espérons que cela aidera les autres.

« Introduction aux algorithmes » livre (par Cormen, Leiserson et Rivest) est un bon livre à lire sur les algorithmes, mais le « pseudo-code » est terrible. Des choses comme Q [1 ... n] est un non-sens quand on a besoin de comprendre ce que Q [1 ... n] est supposé signifier. Ce qui devra être constatée en dehors de la « pseudo-code. » En outre, des livres comme « Introduction aux algorithmes » aiment utiliser une syntaxe mathématique, qui viole un but de pseudo-code.

pseudo-code doit faire deux choses. Abstraire de la syntaxe et être facile à lire. Si le code réel est plus descriptif que le pseudo-code et le code réel est plus descriptif, il n'est pas pseudo-code.

Dites que vous écriviez un programme simple.

Conception de l'écran:

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

Liste des variables:

TOTAL:         double
SUB_TOTAL:     double
DISCOUNT:      double

Pseudo-code:

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

Notez que cela est très facile à lire et ne fait référence à aucune syntaxe. Cela prend en charge les trois structures de contrôle de Bohm et Jacopini.

Séquence:

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

Sélection:

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

Répétition:

while condition
    do stuff

for SOME_VALUE TO ANOTHER_VALUE
    do stuff

comparer à cette N-Queens "pseudo-code" ( 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) 

Si vous ne pouvez pas l'expliquer simplement, vous ne comprenez pas assez bien. - Albert Einstein

Créé 11/01/2019 à 15:02
source utilisateur

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