Progetto:Informatica/Pseudocodice

Quello che segue e' la descrizione dello pseudocodice da utilizzare nelle voci riguardanti gli algoritmi. Corrisponde a quello usato da Cormen nel libro Introduction to algorithms ed ha una sintassi a metà tra il C e il Pascal:

  1. La strutturazione del codice (ad esempio il corpo delle procedure, delle condizioni if-then-else, dei cicli for, etc...) avviene mediante la sola indentazione. Non vengono utilizzati né i tipici begin-end dei linguaggi Pascal-like né le parentesi graffe dei linguaggi C-like
  2. I costrutti per i cicli for, while, repeat sono uguali a quelli del Pascal
  3. Il simbolo // (doppia barra obliqua) denota i commenti fino alla fine della riga corrente. In realtà nel Cormen viene usato un simbolo triangolare che non si trova nelle tastiere e quindi non è comodo da utilizzare
  4. Per la sua natura mista tra linguaggio di programmazione e linguaggio umano, lo pseudocodice consente di specificare a parole una o più istruzioni che risultano di difficile comprensione, di importanza marginale, oppure che non sono contemplate dalle specifiche dello pseudocodice. La notazione da usare è un * (asterisco) all'inizio di ogni riga descritta verbalmente. Notare che questa notazione va usata con parsimonia e solo nei casi in cui non è possibile scrivere una istruzione con il modello dello pseudocodice. Ad esempio è possibile avere la seguente riga
* Crea un array C di dimensione n
in quanto non è possibile specificare una dichiarazione di un array a dimensione fissa secondo il modello di pseudocodice. Invece nel prossimo esempio
* Copia i primi ⌊n/2⌋ elementi dell'array A nell'array B e i restanti nell'array C
l'utilizzo di questa istruzione (perfettamente codificabile in pseudocodice) è consentito solamente se si tratta di un'operazione di importanza secondaria nella procedura a cui appartiene.
  1. L'operatore = indica sempre un'operazione di confronto, mai di assegnamento
  2. L'assegnamento è denotato dall'operatore ←, che si può inserire con la combinazione di tasti "ALT + 27"
  3. Esistono gli assegnamenti multipli ed hanno la forma seguente i ← j ← e. La scrittura assegna ad entrambe le variabili i e j il valore dell'espressione e. E' equivalente all'assegnamento j ← e seguito dall'assegnamento i ← j
  4. Le variabili non vengono dichiarate, ma direttamente utilizzate
  5. Le variabili hanno sempre visibilità locale rispetto alla procedura che le utilizza. Qualora fosse necessario l'utilizzo di variabili globali, esse devono essere esplicitamente segnalate
  6. Gli elementi di un array vengono riferiti specificando il nome dell'array seguito dall'indice dentro a parentesi quadre. Ad esempio scrivere A[i] significa accedere all'elemento i-esimo dell'array di nome A. La notazione ".." viene usata per indicate un intervallo di valori all'interno dell'array. Quindi, ad esempio, A[1..j] indica la porzione dell'array A costituita da tutti gli elementi da 1 a j estremi compresi.
  7. I tipi di dati strutturati sono sempre organizzati come oggetti e contengono attributi (o campi). Un particolare campo viene riferito usando il nome del campo seguito dal nome dell'oggetto tra parentesi quadre. Ad esempio per recuperare il valore della lunghezza di un array A(anch'esso un dato strutturato) si scriverà length[A]. Una variabile che rappresenta un oggetto o un array viene trattata come un puntatore all'oggetto o array. Per ogni campo f di un oggetto x, impostare y ← x causa che f[x] = f[y]. Inoltre se si esegue l'assegnamento f[x] ← 3, allora non solo sarà vero che f[x] = 3 ma anche f[y] = 3. In pratica x e y puntano entrambe allo stesso oggetto dopo l'assegnamento y ← x
  8. Un puntatore ad un oggetto nullo viene indicato con NIL
  9. La firma di una procedura è semplicemente nome_procedura(arg0, arg1, ... ). Una procedura può restituire uno o più valori
  10. I parametri vengono passati a una procedura per valore (by value), ovvero una copia dei valori passati dalla procedura chiamante
  11. Nella valutazione di un'espressione booleana x and y si valuta prima x. Se essa restituisce FALSE allora l'intera espressione non può restituire TRUE, perciò la parte restante non viene calcolata. Similmente nell'espressione x or y se y restituisce TRUE, l'espressione non potrà restituire FALSE e quindi la parte restante non verrà calcolata