Prof. Alberto Postiglione 1.2. Concetti di Base su Algoritmi, Strutture Dati e Programmazione Costrutti di base di un algoritmo La necessità di descrivere in modo chiaro e preciso “su foglio” le istruzioni e la sequenza operativa di un algoritmo ha portato alla formulazione di vari metodi per la rappresentazione degli algoritmi. Allo scopo di individuare un formalismo per la rappresentazione degli algoritmi è anzitutto necessario sapere che un qualsiasi algoritmo può essere rappresentato utilizzando, come mattoni costituenti, solo i seguenti 3 costrutti6: Sequenza (realizzata tramite l’istruzione di assegnazione) Decisione binaria (realizzata tramite l’istruzione condizionale) Ciclo (realizzata tramite l’istruzione ciclica) Perché un algoritmo possa essere effettivamente rappresentato è opportuno aggiungere ai costrutti sopra descritti un’altra tipologia di istruzione, che permette di scambiare dati tra l’algoritmo e l’esterno (lettura dati, scrittura risultati, visualizzazione dati intermedi). Ovviamente tale tipologia di istruzione non aggiunge potere computazionale ai costrutti di base, ma rende l’algoritmo più leggibile e lo rappresenta già con uno sguardo rivolto verso il successivo passo della programmazione. Tutte le altre istruzioni non aggiungono potere computazionale, ma servono per semplificare la scrittura della soluzione Istruzione di Assegnazione (7). E’ un’istruzione che assegna il valore di un’espressione ad una variabile. Le espressioni corrispondono ad operazioni sui dati. Un’espressione può coinvolgere nomi di variabili, costanti, operatori aritmetico-logici, ecc La sintassi di un’istruzione di assegnazione è la seguente: <Nome della Variabile> <Espressione> Esempi di assegnazioni: x 3+4; y x+y-1; (dove x è una variabile) somma somma + 5; L’espressione somma+5 viene valutata nello stato corrente. Il risultato dell’espressione viene assegnato nuovamente alla variabile di nome “somma”. Se somma valeva 2 prima dell’esecuzione, essa varrà 7 dopo l’esecuzione Istruzione Condizionale (Decisione Binaria) (if…then…else) E’ un’istruzione che 1. valuta una condizione (espressione booleana) 2. esegue, in alternativa, in base all’esito del confronto (la condizione è VERA) un primo insieme di istruzioni (racchiuse tra la coppia begin … end) (la condizione è FALSA) un secondo insieme di istruzioni (racchiuse la una coppia begin … end) La sintassi di un’istruzione condizionale è la seguente: if <Condizione> then begin <Istruzioni1> end else begin <Istruzioni2> end La Condizione è un’espressione Booleana (con valore vero o falso). Se essa è soddisfatta si esegue il ramo then, altrimenti si esegue il ramo else. Se <Istruzioni1> o <Istruzioni2> sono composte da una sola istruzione, la coppia begin … end può essere omessa. il risultato è dovuto a due ricercatori informatici italiani (Jacopini-Bohm) mn si legge “si assegni ad m il valore contenuto in n”, ed equivale ad inserire nella variabile a sinistra il valore attualmente contenuto nella variabile che è a destra (più spesso si tratta di un’espressione), sostituendo con questo nuovo valore quello che era prima il contenuto della variabile a sinistra. Ad esempio, se prima dell’istruzione m=5 ed n=3, dopo l’istruzione mn m varrà 3 (ed n continua a valere 3, se non viene a sua volta riassegnato) 6 7 Pagina:9 – Bozza del 19/04/2010 Prof. Alberto Postiglione Concetti di Base su Algoritmi, Strutture Dati e Programmazione Istruzione Ciclica (while … do) E’ un’istruzione che 1. valuta una condizione (espressione booleana) 2. finchè la condizione si mantiene VERA: esegue un insieme di istruzioni (racchiuse tra la coppia begin … end) e torna al passo 1 3. Quando la condizione diventa FALSA: esce dal ciclo, cioè si passa all’istruzione immediatamente successiva l’end del ciclo La sintassi di un’istruzione ciclica è la seguente: while <Condizione> do begin <Lista Istruzioni> end; La condizione può risultare falsa alla prima esecuzione: in questo caso l'algoritmo esce dal ciclo senza aver mai eseguito le istruzioni interne. Se <Lista istruzioni> è composta da una sola istruzione, la coppia begin … end può essere omessa Pagina:10 – Bozza del 19/04/2010