LA CODIFICA DEGLI ALGORITMI 2 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 e il percorso logico che conduce alla soluzione viene raffigurato da che collegano i blocchi. blocchi elementari frecce I diagrammi a blocchi utilizzando alcuni , ciascuno con un preciso significato, che devono essere , rappresentato dalle frecce. rappresentano le azioni presenti in un algoritmo blocchi standard letti dall’alto verso il basso seguendo il flusso dell’esecuzione attenzione   Le  frecce  che collegano i blocchi indicano il  verso di percorrenza  con cui il diagramma deve essere attraversato. L’ ordine con cui vengono eseguite le operazioni  inserite nei blocchi è  fondamentale , per una corretta risoluzione di un problema. Il significato dei blocchi standard è: : i blocchi di inizio e fine diagramma sono a forma di ellisse e al loro interno possono essere inserite solo due parole: , che corrisponde all’ dell’algoritmo ed , che corrisponde all’ . inizio e fine del diagramma start unico punto iniziale end unico punto finale Dal blocco start la freccia esce e prosegue verso il basso; nel blocco end la freccia entra provenendo dall’alto; : i blocchi hanno forma di parallelogramma e vengono usati per sia l’ di dati inseriti da tastiera (I:), sia l’ di dati visualizzati sul monitor (O:). Si deve all’interno dei blocchi di quale delle due istruzioni si tratta; input e output indicare input output sempre esplicitare : i blocchi hanno forma di rettangolo e servono per con i “contenitori” di dati che si trovano nella memoria del computer, detti variabili. All’interno di questi blocchi è sempre presente l’ rappresentato da una freccia che va da destra verso sinistra; assegnazione e calcolo eseguire calcoli e interagire operatore di assegnazione : i blocchi hanno forma di rombo e vengono usati ogni volta che è tra due possibili alternative. All’interno del rombo viene inserita una , cioè una proposizione che può essere vera (V) o falsa (F). Durante l’ 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 che proviene dall’alto ed che partono dagli altri vertici. scelta tra due strade possibili necessario fare una scelta condizione esecuzione entra una freccia escono due frecce Lo sapevi che Il web mette a disposizione numerosi   all’interno dei quali creare, salvare o condividere i propri  . Per esempio Draw.io è uno strumento online completo che consente di salvare i file in Google Drive, Dropbox, Microsoft OneDrive oppure su PC. ambienti di lavoro online diagrammi a blocchi Inoltre, è possibile creare i diagrammi a blocchi con lo   utilizzando app gratuite, come per esempio Flowchart Maker per Android. smartphone  >> 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. attenzione   La solitamente è variabile costituita  e quindi da  da più celle di memoria più byte. 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 può “ ” (nell’esempio precedente diventare 9), anche se all’interno di ciascuna variabile per volta. valore contenuto in una variabile variare può essere presente solo un valore Per testare il funzionamento del durante la fase di simulazione è utile rappresentare graficamente le variabili con uno schema, dove: diagramma a blocchi : è il nome univoco della variabile con cui viene chiamato il contenitore (per esempio una bottiglia); nome (o ): è quello che si trova nel contenitore (per esempio l’acqua); valore contenuto : stabilisce cosa può contenere la variabile (per esempio l’acqua naturale). tipo  >> pagina 396  ApprofondiMENTO   LE VARIABILI NEL LINGUAGGIO C Nel   quando si parla di variabili è utile tenere presente alcune considerazioni. linguaggio C Esistono vari  , ma per semplicità consideriamo  :   ( ) e   ( ). Per   si segue la convenzione anglosassone secondo la quale il   è il   (non la virgola). tipi di variabile solo due tipi numerici intero int reale float scrivere i numeri reali separatore decimale punto I   devono essere dati rispettando alcune  . nomi delle variabili regole Possono essere usati singoli   o  , anche abbreviate. caratteri parole I nomi delle variabili possono contenere  , ma devono sempre   con una   o   (_). numeri iniziare lettera underscore  si possono usare le lettere  , i caratteri di   né le   del linguaggio C (main, printf, return ecc.). Non accentate punteggiatura parole chiave Il linguaggio C è  , quindi fa  , perciò le stesse parole, scritte con caratteri differenti, vengono considerate diverse. case sensitive differenza fra maiuscolo e minuscolo 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 (allocata) in contenuti in quella variabile. riservata memoria l’area in cui verranno salvati i dati Non è ammesso utilizzare variabili che non siano state precedentemente dichiarate perché una variabile non dichiarata, di fatto, non esiste . Nei si può immaginare che dichiarare una variabile significhi disegnarla, scrivendo all’interno il nome e il tipo. diagrammi a blocchi LINGUAGGIO C La dichiarazione di una variabile di   (con nome prodotti) si scrive: tipo intero int         PRODOTTI; La dichiarazione di una variabile di   (con nome livello) si scrive: tipo reale float     LIVELLO; La inserita all’interno del codice sorgente al programma di specificarne l’ 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. dichiarazione delle variabili consente allocazione in memoria  >> pagina 397  L’inizializzazione di una variabile Una variabile dichiarata e non inizializzata contiene un , cioè un contenuto non solo sconosciuto, ma del tutto casuale. valore indeterminato Quando i programmi, al termine dell’esecuzione, rilasciano la memoria non si preoccupano di svuotarla o perché questo può introdurre nel sistema un inutile . Di conseguenza, al momento dell’allocazione della memoria, i programmi trovano ed è occuparsi di questa problematica per garantire il dell’algoritmo. ripulirla rallentamento celle non vuote compito del programmatore determinismo 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’ è un particolare tipo di che viene fatta al momento della dichiarazione di una variabile e, comunque, sempre . inizializzazione assegnazione 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 =. attenzione   Negli algoritmi, statisticamente,  le operazioni di assegnazione sono  più frequenti di quelle di confronto  (uguaglianza). Per questo motivo,  in linguaggio C, l’operatore di  assegnazione <- si scrive con un  carattere (=) mentre l’operatore di  uguaglianza matematica si scrive  con due caratteri (==). 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’  <- ha come simbolo una freccia il cui verso indica che una espresso sulla destra viene all’interno della variabile il cui nome viene indicato sulla sinistra. È molto perché è quello utilizzato anche dai linguaggi di programmazione. operatore di assegnazione copia del valore inserita come contenuto importante mantenere questo verso Il termine si riferisce solitamente a , quindi i valori che vengono inseriti nelle variabili con l’operatore di assegnazione possono essere: assegnazione tutto ciò che non proviene dall’input un : il programmatore, in fase di codifica, può utilizzare l’operatore di assegnazione per indicare al software quale valore (conosciuto a priori) inserire nella variabile; valore prestabilito un : 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; valore che proviene da un’altra variabile un : 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 . valore che è il risultato di un calcolo 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. attenzione   Inseriremo la notazione formale nei  blocchi con lo sfondo colorato e  useremo blocchi con sfondo bianco  per testi descrittivi. 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 può , quando si scrive un contenuto al suo interno, quello precedente viene perso. variabile contenere un solo valore alla volta Per rappresentare graficamente la sovrascrittura di una variabile si può cancellare con una barra il valore precedente e scrivere a fianco quello nuovo. attenzione   Per non incorrere in problemi  ,  di eventuali arrotondamenti inizialmente è opportuno che il  tipo dell’espressione di destra sia lo  stesso della variabile di sinistra. 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 vengano . risultati dell’elaborazione visualizzati sul monitor L’effetto dell’ può essere sia quello di sul display, sia quello di il valore contenuto in una sul display. output sul monitor scrivere un testo predeterminato prelevare variabile e visualizzarlo Per visualizzare sullo schermo una , nel diagramma a blocchi, il testo, all’interno del parallelogramma di output, deve essere . stringa di caratteri racchiuso da virgolette Per visualizzare sullo schermo il , invece, occorre nel parallelogramma di output . contenuto di una variabile scriverne il nome senza utilizzare le virgolette Nel caso sia necessario è prevista anche una . notazione mista esempio Il 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 . contenuto di una variabile esecuzione del programma All’interno del è 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. codice sorgente Per esempio: printf( " Valore della variabile = B " ); Gli specificatori di formato Per della variabile “qualunque esso sarà”, l’ utilizza gli 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. riferirsi al contenuto istruzione printf del linguaggio C specificatori di formato In base ai tipi di variabile che abbiamo introdotto, cioè intero (int) e reale (float), introduciamo gli : specificatori di formato (decimal): utilizzato per il tipo intero; %d (floating point): utilizzato per il tipo reale. %f La sintassi corretta per ottenere l’ (per esempio B di tipo reale) sul monitor è: output del contenuto della variabile 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  , consentendo di  un elemento 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 , attraverso la tastiera, che possono essere , che vengono allocate nella memoria del computer. fornendo in input dati salvati nelle variabili . 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 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 = 5 specificato dal programmatore. classi di problemi R Nei , per indicare in quale variabile dovrà essere inserito il dato digitato in input da tastiera occorre scrivere il nome della variabile nel blocco input. diagrammi a blocchi 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. attenzione   L’ dall’utente  input viene inserito e non tramite il  tramite la tastiera monitor! Gli schermi dei computer  visualizzano immediatamente quello  che viene digitato, ma si tratta di  semplice “cortesia” nei confronti  dell’utente per aiutarlo durante  l’inserimento. LINGUAGGIO C L’istruzione di input si chiama ed è contenuta nella libreria “standard input/ scanf 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 che può essere %d (intero) o %f (reale) in base al  specificatore di formato tipo di variabile; il scritto subito dopo la &. nome della variabile attenzione   La & (e commerciale), in linguaggio  C, fa riferimento all’indirizzo di  memoria in cui si trova la variabile. 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.