2 LA CODIFICA DEGLI ALGORITMI

2 LA CODIFICA DEGLI ALGORITMI

Il diagramma a blocchi

Un diagramma a blocchi è uno schema grafico utilizzato per rappresentare la soluzione generica immaginata per un problema.


I passi risolutivi descritti dall’algoritmo vengono espressi in modo semplificato inserendoli all’interno di blocchi elementari e il percorso logico che conduce alla soluzione viene raffigurato da frecce che collegano i blocchi.

I diagrammi a blocchi rappresentano le azioni presenti in un algoritmo utilizzando alcuni blocchi standard, ciascuno con un preciso significato, che devono essere letti dall’alto verso il basso seguendo il flusso dell’esecuzione, rappresentato dalle frecce.

Il significato dei blocchi standard è:

  • inizio e fine del diagramma: i blocchi di inizio e fine diagramma sono a forma di ellisse e al loro interno possono essere inserite solo due parole: start, che corrisponde all’unico punto iniziale dell’algoritmo ed end, che corrisponde all’unico punto finale.

    Dal blocco start la freccia esce e prosegue verso il basso; nel blocco end la freccia entra provenendo dall’alto;

  • input e output: i blocchi hanno forma di parallelogramma e vengono usati per indicare sia l’input di dati inseriti da tastiera (I:), sia l’output di dati visualizzati sul monitor (O:). Si deve sempre esplicitare all’interno dei blocchi di quale delle due istruzioni si tratta;
  • assegnazione e calcolo: i blocchi hanno forma di rettangolo e servono per eseguire calcoli e interagire con i “contenitori” di dati che si trovano nella memoria del computer, detti variabili. All’interno di questi blocchi è sempre presente l’operatore di assegnazione rappresentato da una freccia che va da destra verso sinistra;
  • scelta tra due strade possibili: i blocchi hanno forma di rombo e vengono usati ogni volta che è necessario fare una scelta tra due possibili alternative. All’interno del rombo viene inserita una condizione, cioè una proposizione che può essere vera (V) o falsa (F). Durante l’esecuzione del programma, la condizione viene valutata e in base al suo valore di verità, viene scelta la strada corrispondente alla V o alla F. Nel blocco entra una freccia che proviene dall’alto ed escono due frecce che partono dagli altri vertici.
Lo sapevi che

Il web mette a disposizione numerosi ambienti di lavoro online all’interno dei quali creare, salvare o condividere i propri diagrammi a blocchi. Per esempio Draw.io è uno strumento online completo che consente di salvare i file in Google Drive, Dropbox, Microsoft OneDrive oppure su PC.

Inoltre, è possibile creare i diagrammi a blocchi con lo smartphone utilizzando app gratuite, come per esempio Flowchart Maker per Android.

 >> pagina 395 

Le variabili

In informatica una variabile è costituita da una zona di memoria, alla quale viene assegnato un nome e dentro alla quale si possono inserire dei valori, di un certo tipo.


Possiamo immaginare la variabile come una scatola, il cui nome è scritto all’esterno e il cui contenuto è il valore.

In alternativa, possiamo immaginarla come una cella di un foglio di calcolo, infatti la cella ha un nome (B3) e un valore in essa contenuto (7) che appartiene a un certo tipo (numero).

Il valore contenuto in una variabile può “variare” (nell’esempio precedente diventare 9), anche se all’interno di ciascuna variabile può essere presente solo un valore per volta.

Per testare il funzionamento del diagramma a blocchi durante la fase di simulazione è utile rappresentare graficamente le variabili con uno schema, dove:

  • nome: è il nome univoco della variabile con cui viene chiamato il contenitore (per esempio una bottiglia);
  • valore (o contenuto): è quello che si trova nel contenitore (per esempio l’acqua);
  • tipo: stabilisce cosa può contenere la variabile (per esempio l’acqua naturale).

 >> pagina 396 
  ApprofondiMENTO
LE VARIABILI NEL LINGUAGGIO C

Nel linguaggio C quando si parla di variabili è utile tenere presente alcune considerazioni.

Esistono vari tipi di variabile, ma per semplicità consideriamo solo due tipi numericiintero (int) e reale (float). Per scrivere i numeri reali si segue la convenzione anglosassone secondo la quale il separatore decimale è il punto (non la virgola).

nomi delle variabili devono essere dati rispettando alcune regole.

  • Possono essere usati singoli caratteri o parole, anche abbreviate.
  • I nomi delle variabili possono contenere numeri, ma devono sempre iniziare con una lettera o underscore (_).
  • Non si possono usare le lettere accentate, i caratteri di punteggiatura né le parole chiave del linguaggio C (main, printf, return ecc.).
  • Il linguaggio C è case sensitive, quindi fa differenza fra maiuscolo e minuscolo, perciò le stesse parole, scritte con caratteri differenti, vengono considerate diverse.
esempio

Sono corrette le variabili:
A           b              Num       PRODOTTI
Q2        I2my      _2prod
Non sono corrette le variabili:
2Q        2Imy      2_prod età
p;3        p3-         include
Le seguenti variabili sono tutte diverse:
nome   NOME    Nome     nOmE


La buona pratica suggerisce di assegnare nomi significativi alle variabili, in modo che facciano capire il loro impiego nel programma. Inoltre, una convenzione molto usata consiste nel scrivere i nomi delle variabili con caratteri minuscoli (per esempio prodotti) o con la notazione camelCase, che prevede, nelle parole composte, le iniziali maiuscole al posto degli spazi (per esempio prezzoProdotto).

La dichiarazione di una variabile

Dichiarare una variabile significa definire come è fatta, specificandone il tipo e il nome.

esempio

Dichiariamo una variabile che contiene un numero (intero) che indica la quantità di prodotti presenti in un magazzino.

Con questa operazione viene riservata (allocata) in memoria l’area in cui verranno salvati i dati contenuti in quella variabile.


Non è ammesso utilizzare variabili che non siano state precedentemente dichiarate perché una variabile non dichiarata, di fatto, non esiste.


Nei diagrammi a blocchi si può immaginare che dichiarare una variabile significhi disegnarla, scrivendo all’interno il nome e il tipo.


LINGUAGGIO C

La dichiarazione di una variabile di tipo intero (con nome prodotti) si scrive:

int         PRODOTTI;

La dichiarazione di una variabile di tipo reale (con nome livello) si scrive:

float     LIVELLO;


La dichiarazione delle variabili inserita all’interno del codice sorgente consente al programma di specificarne l’allocazione in memoria durante l’esecuzione, cioè di destinare una determinata area di RAM alla memorizzazione delle variabili utilizzate da quel programma. La memoria viene allocata ogni volta che viene eseguito il software e viene rilasciata automaticamente quando l’esecuzione termina, per consentire agli altri programmi di riutilizzare la stessa area di RAM per altri scopi.

 >> pagina 397 

L’inizializzazione di una variabile

Una variabile dichiarata e non inizializzata contiene un valore indeterminato, cioè un contenuto non solo sconosciuto, ma del tutto casuale.


Quando i programmi, al termine dell’esecuzione, rilasciano la memoria non si preoccupano di svuotarla o ripulirla perché questo può introdurre nel sistema un inutile rallentamento. Di conseguenza, al momento dell’allocazione della memoria, i programmi trovano celle non vuote ed è compito del programmatore occuparsi di questa problematica per garantire il determinismo dell’algoritmo.


Inizializzare una variabile significa scriverci dentro un valore iniziale.

esempio

Inizializziamo la variabile dell’esempio precedente indicando la quantità di prodotti presenti nel magazzino.

Prima di inizializzare la variabile il valore è indeterminato.

Dopo l’inizializzazione la variabile ha valore 70.

Se le variabili non vengono inizializzate, il valore indeterminato al loro interno può produrre, a ogni esecuzione, risultati diversi a parità di condizioni iniziali, violando una delle proprietà fondamentali degli algoritmi.


Per inizializzare una variabile, nel diagramma a blocchi, si utilizza il blocco di assegnazione e calcolo. Quindi nel nostro esempio usiamo il blocco a lato.


LINGUAGGIO C

L’inizializzazione della variabile prodotti con il valore 70 si scrive:

int    PRODOTTI;

PRODOTTI = 70;

o con notazione abbreviata:

int    PRODOTTI = 70;


L’inizializzazione è un particolare tipo di assegnazione che viene fatta al momento della dichiarazione di una variabile e, comunque, sempre prima di leggere la variabile la prima volta.

 >> pagina 398 

L’assegnazione di un valore a una variabile

Assegnare un valore a una variabile significa scrivere qualcosa al suo interno.

esempio

Assegniamo (scriviamo) il valore 50 alla variabile che indica il numero aggiornato di prodotti presenti nel magazzino.

LINGUAGGIO C
L’assegnazione del valore 50 alla variabile PRODOTTI si scrive:
PRODOTTI = 50;

L’operatore di assegnazione <- si scrive =.

Per assegnare a una variabile un valore, nel diagramma a blocchi, si utilizza il blocco di assegnazione e calcolo. Quindi nel nostro esempio usiamo il blocco a lato.


L’operatore di assegnazione <- ha come simbolo una freccia il cui verso indica che una copia del valore espresso sulla destra viene inserita come contenuto all’interno della variabile il cui nome viene indicato sulla sinistra. È molto importante mantenere questo verso perché è quello utilizzato anche dai linguaggi di programmazione.

Il termine assegnazione si riferisce solitamente a tutto ciò che non proviene dall’input, quindi i valori che vengono inseriti nelle variabili con l’operatore di assegnazione possono essere:

  • un valore prestabilito: il programmatore, in fase di codifica, può utilizzare l’operatore di assegnazione per indicare al software quale valore (conosciuto a priori) inserire nella variabile;
  • un valore che proviene da un’altra variabile: il programmatore, in fase di codifica, può usare l’operatore di assegnazione per indicare al software da quale variabile prelevare il valore e in quale variabile inserirlo durante la fase di esecuzione. È importante sottolineare che dalla variabile indicata sulla destra viene prelevata una copia del valore e quindi il suo contenuto rimane invariato;
  • un valore che è il risultato di un calcolo: in fase di esecuzione i calcoli aritmetico-logici vengono fare dalla ALU che preleva una copia del contenuto dalle variabili coinvolte, utilizza le copie per fare l’elaborazione e, infine, inserisce il risultato nella variabile specificata. Per indicare in quale variabile inserire il risultato e quali variabili coinvolgere nel calcolo, il programmatore, in fase di codifica, utilizza l’operatore di assegnazione .

La rappresentazione con i diagrammi a blocchi e l’implementazione in linguaggio C dei concetti appena espressi possono essere sintetizzate facendo riferimento ai seguenti esempi.

esempio

1. Assegniamo il valore 3 alla variabile A.

2. Assegniamo una copia del contenuto della variabile Y alla variabile Z.

3. Sommiamo il contenuto delle variabili N1 e N2 e inseriamo il valore risultante all’interno della variabile SOMMA.

4. Sottraiamo 1 al valore contenuto nella variabile X e sovrascriviamo il risultato nella stessa variabile (decrementiamo di 1 la variabile X).

Tutte le operazioni di assegnazione comportano una sovrascrittura del valore precedentemente contenuto nella variabile a sinistra dell’operatore di assegnazione <-, sia che si tratti di un valore indeterminato, sia che si tratti di un valore determinato.


Sovrascrivere un valore all’interno di una variabile significa sostituirlo con un altro valore che viene “scritto sopra”.


Poiché una variabile può contenere un solo valore alla volta, quando si scrive un contenuto al suo interno, quello precedente viene perso.

Per rappresentare graficamente la sovrascrittura di una variabile si può cancellare con una barra il valore precedente e scrivere a fianco quello nuovo.

esempio

Scriviamo nella variabile il nuovo numero di prodotti presenti nel magazzino.

  prova tu

Scrivi il diagramma a blocchi.


  • Assegna alla variabile intera n_intero il valore 10. Triplica il valore della variabile.
  • Assegna alla variabile prova la somma dei due valori reali val1 e val2, entrambi inizializzati a 6.
  • Inizializza la variabile Massa con 90,5 kg. Fai “dimagrire” il soggetto di 2,5 kg.

 >> pagina 400 

L’output di variabili

L’utente non è in grado di vedere il contenuto delle variabili direttamente in memoria. È compito del programmatore fare in modo che i risultati dell’elaborazione vengano visualizzati sul monitor.

L’effetto dell’output sul monitor può essere sia quello di scrivere un testo predeterminato sul display, sia quello di prelevare il valore contenuto in una variabile e visualizzarlo sul display.


Per visualizzare sullo schermo una stringa di caratteri, nel diagramma a blocchi, il testo, all’interno del parallelogramma di output, deve essere racchiuso da virgolette.

Per visualizzare sullo schermo il contenuto di una variabile, invece, occorre scriverne il nome nel parallelogramma di output senza utilizzare le virgolette.

Nel caso sia necessario è prevista anche una notazione mista.


esempio

Il contenuto di una variabile solitamente non è noto a priori, perché dipende sia dall’input, sia dalle scelte che sono state fatte durante l’elaborazione. Normalmente, il valore delle variabili si può conoscere solo in fase di esecuzione del programma.


All’interno del codice sorgente è possibile riferirsi al contenuto della variabile “qualunque esso sarà” scrivendo il nome della variabile fuori dalle virgolette. In caso contrario, l’output prodotto non sarà quello desiderato.

Per esempio: printf("Valore della variabile = B");

Gli specificatori di formato

Per riferirsi al contenuto della variabile “qualunque esso sarà”, l’istruzione printf del linguaggio C utilizza gli specificatori di formato che, per fare un esempio concreto, si comportano come una persona che tiene il posteggio a un veicolo che arriverà più tardi. La persona sa solo che arriverà un’automobile o un camion (perché il posteggio deve essere abbastanza grande per contenere il veicolo), ma ignora tutte le altre informazioni che riguardano l’automezzo. Quando il veicolo arriverà, la persona gli lascerà il posto.


In base ai tipi di variabile che abbiamo introdotto, cioè intero (int) e reale (float), introduciamo gli specificatori di formato:

  • %d (decimal): utilizzato per il tipo intero;
  • %f (floating point): utilizzato per il tipo reale.

La sintassi corretta per ottenere l’output del contenuto della variabile (per esempio B di tipo reale) sul monitor è:

printf("Valore della variabile = %f", B); 


All’interno delle virgolette viene inserito il testo conosciuto a priori e lo specificatore di formato scelto in base al tipo di variabile che si intende visualizzare. Il nome della variabile alla quale si fa riferimento deve essere scritto fuori dalle virgolette, subito dopo la virgola.

esempio

Inizializziamo la variabile intera temp con il valore 20.
Prelevando il valore 20 dalla variabile temp, stampiamo in output le seguenti scritte:

20
Temperatura odierna = 20
La temperatura di oggi è di 20 gradi.

Il diagramma a blocchi che risolve il problema è il seguente, in cui il nome della variabile (temp) viene sempre utilizzato fuori dalle virgolette, perché non si tratta di una stringa di caratteri, ma di un identificatore.

LINGUAGGIO C
La traduzione diagramma a blocchi è:
#include <stdio.h>

int main()
{
int temp = 20;
printf("%d", temp);
printf("\n");
printf("Temperatura odierna = %d", temp);
printf("\n");
printf("La temperatura di oggi e\ˈ di %d
gradi.", temp);
return 0;
}
Lo sapevi che

In informatica l’identificatore è un nome univoco che identifica un elemento, consentendo di fare riferimento a esso in modo non ambiguo anche durante l’elaborazione simbolica.

  prova tu

Scrivi il diagramma a blocchi.


  • Assegna 5 a una variabile intera, moltiplica il suo valore per 4 e visualizza in output il risultato.
  • Assegna a una variabile reale il valore 0,5, triplica il suo valore e visualizza il suo contenuto.
  • Assegna 5 alla variabile intera C e inizializza con 3 la variabile intera D. Aumenta di 1 il valore di C. Usando il contenuto delle due variabili visualizzare la scritta: Il doppio di 3 è il numero 6.

 >> pagina 402 

L’input di variabili

L’utente può interagire con il programma fornendo in input, attraverso la tastiera, dati che possono essere salvati nelle variabili, che vengono allocate nella memoria del computer.


L’input può essere considerato come un particolare tipo di assegnazione in cui il valore inserito nella variabile viene scelto dall’utente.


La possibilità di inserire dati che provengano dall’esterno consente di realizzare algoritmi in grado di risolvere classi di problemi e non solo il singolo problema su dati specifici. Utilizzando l’input, per esempio, diventa possibile calcolare l’area e la circonferenza di cerchi con qualunque raggio e non solo del cerchio di raggio R = 5 specificato dal programmatore.


Nei diagrammi a blocchi, per indicare in quale variabile dovrà essere inserito il dato digitato in input da tastiera occorre scrivere il nome della variabile nel blocco input.


Quando l’esecuzione dell’algoritmo raggiunge il blocco input, il programma viene messo in attesa finché l’utente non inserisce i dati richiesti.

È buona norma far precedere l’istruzione di input da un output di cortesia che richieda all’utente di inserire un valore.

LINGUAGGIO C
L’istruzione di input si chiama scanf ed è contenuta nella libreria “standard input/output” stdio.h.
Per inserire un valore intero in una variabile di nome var la sintassi è:
scanf("%d",&var);
La sintassi della scanf è sempre uguale, possono cambiare solo:
  • lo specificatore di formato che può essere %d (intero) o %f (reale) in base al tipo di variabile;
  • il nome della variabile scritto subito dopo la &.
  prova tu

Scrivi il diagramma a blocchi.


  • Prendi in input un valore e visualizza il suo quadrato.
  • Dato il peso lordo e la tara di un pacco, calcola e visualizza il peso netto.
  • Scrivi un programma che richieda in input i quattro lati di un trapezio e restituisca perimetro e area.

Clic!
Clic!
Tecnologie informatiche per il primo biennio