Estratto del documento

Le fasi della programmazione

Specifica

La definizione del problema prevede la descrizione dello stato iniziale (dati iniziali, input) del problema e dello stato finale atteso (risultato, output).

Algoritmo

Consiste nell’individuazione di un procedimento risolutivo che consenta di ottenere i risultati attesi. Prevede tre passi:

  • Individuare una soluzione;
  • Dimostrare che la soluzione trovata sia corretta;
  • Scegliere tra più soluzioni corrette quella ottimale.

Codifica

Consiste nel tradurre l’algoritmo in un linguaggio di programmazione noto all’esecutore. Se il linguaggio di descrizione è uguale al linguaggio di programmazione allora la codifica è superflua. Si ottiene come risultato un programma eseguibile al calcolatore.

  • Programma: algoritmo;
  • Dati in ingresso (input): informazioni iniziali;
  • Dati ausiliari: informazioni utilizzate dall’algoritmo;
  • Dati in uscita (output): informazioni finali.

Esecuzione

Consiste nella messa a punto del programma. Due possibilità:

  • Compilazione: il programma viene tradotto in un linguaggio macchina ed eseguito;
  • Interpretazione: il programma viene eseguito da un emulatore che ne calcola il risultato.

Javascript

È un linguaggio di script: linguaggio di programmazione che permette di scrivere “script” (programmi scritti per un particolare ambiente).

  • Permette di esprimere tutte le funzioni calcolabili;
  • Deve essere eseguito all’interno di un browser;
  • Rende dinamiche le pagine web;
  • È interpretato;
  • Non è tipato.

Stringhe

Sequenze di caratteri con cui si scrivono programmi.

Variabili

Introducono nomi simbolici a cui sono associati dei valori. I valori possono cambiare durante l’esecuzione della funzione. È costituita da:

  • Var: keyword (parola riservata);
  • Identificatore: nome della variabile (sequenza di lettere, cifre, caratteri speciali);
  • Espressione: valore associato;
  • Localizzazione di memoria (dove il valore è memorizzato);
  • Tipo: insieme dei valori che la variabile può assumere (non in Javascript: non è un linguaggio tipato).

Se una variabile viene dichiarata ma non inizializzata (es. var x;) il suo valore è undefined.

Costanti

Nomi simbolici a cui è associato un valore che rimane invariato durante l’esecuzione. Si usano le lettere maiuscole per distinguere le costanti dalle variabili.

Programma

Sequenza di istruzioni. Ogni istruzione viene eseguita successivamente alla precedente e fa riferimento allo stato corrente del calcolatore. Ogni istruzione può modificare lo stato.

Assegnamento

Sintassi: identificatore = espressione

Semantica: consiste nell’assegnare ad una variabile un valore che sarà effettivo a partire dallo stato successivo. Comporta dunque una modifica dello stato. All’interno di un’espressione, la variabile è legata al valore che le è stato associato in quel momento (nello stato corrente).

Espressione

Costrutto sintattico che restituisce un valore.

Istruzioni condizionali

Istruzione if-else

Sintassi:


if (espressione)
    istruzione1;
else
    istruzione2;

Dove:

  • Espressione: è un’espressione booleana;
  • Istruzione 1: rappresenta il ramo then (un’unica istruzione);
  • Istruzione 2: rappresenta il ramo else (un’unica istruzione).

Semantica:

  1. Viene prima valutata l’espressione.
  2. Se l’espressione è vera viene eseguita l’istruzione 1; se l’espressione è falsa viene eseguita l’istruzione 2.

Istruzione if

Sintassi:


if (espressione)
    istruzione;

Semantica:

  1. Viene prima valutata l’espressione.
  2. Se l’espressione è vera viene eseguita l’istruzione, altrimenti non si fa nulla.

Ambiguità sintattica

L’else fa riferimento all’if più vicino. Affinché si riferisca ad un if precedente, occorre inserire gli if intermedi in un blocco {}.

Istruzione switch

Sintassi:


switch (espressione) {
    case espressione-1:
        istruzione-1;
        break;
    ...
    case espressione-n:
        istruzione-n;
        break;
    default:
        istruzione-default;
}

Semantica:

  1. Viene prima valutata l’espressione, ottenendo un valore X.
  2. Vengono valutate in sequenza le espressioni dei case: se il valore ottenuto dall’espressione case è uguale ad X allora vengono eseguite le sue istruzioni.
  3. Se non esiste alcuna espressione il cui valore è uguale ad X, allora vengono eseguite le istruzioni di default.

Se manca il “break” ed è stata trovata un’espressione il cui valore è uguale ad X, verranno eseguite tutte le istruzioni anche quelle delle espressioni a seguire. Perciò quando si omette il break diventa rilevante l’ordine dei case. Se viene usato “return” al posto del break: termina l’esecuzione della funzione switch, non sono del costrutto case!

Istruzioni iterative

Sono costrutti che permettono di ripetere determinate istruzioni più volte.

  • Iterazione determinata: un numero fissato di volte. [FOR]
  • Iterazione indeterminata: un numero non fissato di volte, finché la condizione rimarrà vera. [WHILE]

Istruzione while

Sintassi:


while (espressione)
    istruzione;

Dove:

  • Espressione: è la guardia del ciclo;
  • Istruzione: è il corpo del ciclo (può essere un blocco {}).

Semantica:

  1. Viene prima valutata l’espressione;
  2. Se l’espressione è vera, si esegue l’istruzione e si torna ad eseguire il while;
  3. Se l’espressione è falsa, si termina l’esecuzione del while. Dunque se l’espressione è falsa fin dall’inizio, il corpo del while non verrà mai eseguito!

Istruzione do-while

Sintassi:


do
    istruzione;
while (espressione);

Semantica:

  1. Il corpo viene prima dell’espressione, dunque l’istruzione si esegue sempre almeno una volta!
  2. Se l’espressione è vera, si esegue una seconda volta l’istruzione e il ciclo ricomincia; altrimenti si termina.

Istruzione for

Sintassi:


for (istruzione-1; espressione; istruzione-2)
    istruzione-3;

Dove:

  • Istruzione 1: inizializza la variabile di controllo;
  • Espressione: verifica quando deve terminare il ciclo;
  • Istruzione 2: incrementa la variabile di controllo alla fine del corpo del ciclo (aggiornamento della variabile);
  • Istruzione 3: è il corpo del ciclo.

Semantica: L’istruzione for precedente equivale a:


istruzione-1;
while (espressione) {
    istruzione-3;
    istruzione-2;
}

Istruzione for-in

Per gli array non associativi. È un’abbreviazione del for.

Sintassi: Equivale a:


for (ide in nomeArray)
    istruzione;

for (ide = 0; ide < nomeArray.length; i++)
    istruzione;

Array

Permettono di definire dati strutturati. Sono composti da elementi (omogenei nei linguaggi tipati; disomogenei in Javascript). Ogni elemento si identifica all’interno dell’array grazie ad un numero d’ordine, detto “indice” dell’elemento.

Il numero di elementi dell’array è detto “lunghezza” (o dimensione) dell’array. In Javascript, gli array sono dinamici: il numero degli elementi è variabile.

Sintassi - dichiarazione di variabile array

  • Dichiarazione di un array vuoto: var nomeArray = []; oppure var nomeArray = new Array(); nei linguaggi ad oggetti.
  • Dichiarazione della variabile e inizializzazione degli elementi con il valore undefined. var nomeArray = new Array(n); dove con “n” indico il numero finito degli elementi. Es. var vet = new Array(8); in cui la variabile vet è dichiarata e inizializzata ad un array di 8 elementi undefined.
  • Dichiarazione di variabile e inizializzazione degli elementi: var nomeArray = [n1, n2, n3, …, nk]; come ad esempio var vet = [2, 4, 5, -6, -3, 0]; oppure var nomeArray = new Array(n1, n2, n3, …, nk); equivalente al precedente, es. var vet = new Array(2, 4, 5, -6, -3, 0); In entrambi i casi viene dichiarata la variabile array e inizializzata con i valori interi (2, 4, 5, -6, -3, 0).

Ogni elemento dell’array è denotabile usando il nome dell’array (vettore) e l’indice ad esso associato. Gli array sono indicizzati a partire da 0, quindi gli indici di un array di 6 elementi varieranno nell’intervallo, detto “range”, [0,5].

nomeArray[i]; indica l’elemento dell’array di indice “i”.

Modifica di un array

Si utilizza il comando di assegnamento, ponendo a sinistra l’espressione che denota l’elemento di un array. Es. var i = 2; vet[i + 1] = readnum(); Assegna al 4° elemento (che ha indice 3) il valore letto dall’input.

L’espressione che compare all’interno delle parentesi [] può essere una qualunque espressione purché calcoli un intero >= a zero.

Lo stato con gli array

Lo stato viene esteso perché è necessario avere due tipi di memoria:

  • L’ambiente che rappresenta le variabili come insiemi di coppie;
  • Lo heap in cui sono memorizzati i dati strutturati (gli array e gli oggetti).

Le variabili che assumono come valore un array occupano nell’ambiente un “indirizzo di memoria”, detto reference (indicato graficamente con una freccia o con ref), che individua l’area dello heap in cui è memorizzato l’array. Quest’area di memoria sarà costituita da tante locuzioni di memoria quanti sono i dati strutturati.

L’operatore di uguaglianza opera sui reference: due variabili array sono uguali se condividono la stessa area di memoria vet1 = vet2; in tal caso, modificandone uno si modifica anche l’altro. Gli operatori di confronto non sono definiti su array, tuttavia confrontare due array non genera errore ma calcola sempre false.

Procedure

Sono funzioni che non calcolano un valore, ma producono modifiche allo stato.

La differenza tra procedure e funzioni:

  • Le procedure sono un’astrazione delle istruzioni.
  • Le funzioni sono un’astrazione degli operatori.

In generale, non contengono un’istruzione “return” (e se la contengono sarà del tipo “return;” che non comporta il calcolo di nessun valore ma solo la cessione del controllo al chiamante).

Semantica:

  1. È analoga a quella della chiamata di funzione, ma una chiamata di procedura è un’istruzione.
  2. Il passaggio dei parametri avviene per valore (come nel caso delle funzioni).
  3. Il controllo viene restituito al chiamante al termine dell’esecuzione del corpo della procedura (o con return).

Javascript non distingue tra funzioni e procedure!

Array dinamici

Il numero degli elementi dell’array può cambiare durante l’esecuzione del programma, dunque cambia anche la lunghezza. Per questo motivo la dimensione (lunghezza) di un array è una proprietà predefinita dell’array.

Sintassi: nomeArray.length

Manipolazione delle stringhe

Le stringhe sono array di caratteri, dunque gli operatori degli array possono essere usati anche sulle stringhe. Tuttavia, le stringhe NON sono modificabili: ogni tentativo di modifica viene ignorato, ma non dà alcun errore!

La sintassi per selezionare un elemento di un array può essere usata anche con le stringhe, come anche il calcolo.

Anteprima
Vedrai una selezione di 4 pagine su 15
Riassunto teoria di FTP - Fondamenti teorici e programmazione Pag. 1 Riassunto teoria di FTP - Fondamenti teorici e programmazione Pag. 2
Anteprima di 4 pagg. su 15.
Scarica il documento per vederlo tutto.
Riassunto teoria di FTP - Fondamenti teorici e programmazione Pag. 6
Anteprima di 4 pagg. su 15.
Scarica il documento per vederlo tutto.
Riassunto teoria di FTP - Fondamenti teorici e programmazione Pag. 11
1 su 15
D/illustrazione/soddisfatti o rimborsati
Acquista con carta o PayPal
Scarica i documenti tutte le volte che vuoi
Dettagli
SSD
Scienze matematiche e informatiche INF/01 Informatica

I contenuti di questa pagina costituiscono rielaborazioni personali del Publisher AnnyC di informazioni apprese con la frequenza delle lezioni di Fondamenti teorici e programmazione e studio autonomo di eventuali libri di riferimento in preparazione dell'esame finale o della tesi. Non devono intendersi come materiale ufficiale dell'università Università degli Studi di Pisa o del prof Occhiuto Maria Eugenia.
Appunti correlati Invia appunti e guadagna

Domande e risposte

Hai bisogno di aiuto?
Chiedi alla community