Libro 1 – Capitolo 4 – Introduzione agli algoritmi e alla programmazione

Capitolo 4- Introduzione agli algoritmi e alla programmazione

Indice degli argomenti

Introduzione

Nell’informatica per la creazione di programmi per svolgere dei compiti precisi e personalizzati o per risolvere in modo automatico un problema è necessario introdurre una metodologia di risoluzione ben precisa che fa uso del linguaggio naturale e degli algoritmi.

Risoluzione di problemi

Una delle questioni fondamentali della programmazione in informatica è il metodo di risoluzione dei problemi. Infatti solo attraverso una attenta formulazione è possibile risolvere il problema in modo adeguato. Ad esempio si consideri il seguente problema:

“Assegnata la base e l’altezza di un triangolo rettangolo calcolare l’area e il perimetro”

Il primo passo da compiere è l’individuazione dei dati noti e dei dati incogniti. In altri termini è necessario definire quali sono i risultati richiesti dal problema e quale i dati conosciuti. Successivamente si esplicitano i passi da compiere per determinare il risultato. Questa ultima fase espressa anche mediante un linguaggio naturale prende il nome di procedimento risolutivo. Nel problema citato prima si può procedere come segue:

Dati da determinare (risultati): perimetro e area

Dati conosciuti: base, altezza

Indicheremo con A e 2p l’area e il perimetro e con b e h la base e l’altezza del triangolo mentre con i l’ipotenusa (in quanto il triangolo è rettangolo).

Il procedimento risolutivo si può così strutturare:

Inizio

Leggi b e h

Calcola l’ipotenusa i=Radice quadrata(quadrato di h+qudrato di b)

Calcola il perimetro 2p=i+h+b

Calcola l’area A=(b*h)/2

Scrivi A e 2p

Fine

Come si nota la descrizione del procedimento risolutivo soluzione è espressa attraverso le parole di uso corrente come leggi, scrivi, calcola con l’aggiunta delle formule (non sempre presenti se non si tratta di un problema di matematica o di calcolo). Nella risoluzione dei problemi spesso si usa identificare i dati e i risultati con dei nomi informatici che sono: dati in ingresso, dati di uscita, e dati di lavoro.
Con dati di ingresso (Input) si intendono i dati conosciuti (quelli forniti dall’utente), i dati di uscita (Output) sono i risultati, mentre i dati di lavoro o interni sono delle grandezze necessarie alla risoluzione del problema ma che non sono richiesti ne in Input e non sono forniti in Output. Nell’esempio precedente l’ipotenusa del triangolo rappresenta un dato di lavoro in quanto non è possibile calcolare il perimetro se prima non determino l’ipotenusa. Nella risoluzione di problemi da affidare ad un calcolatore l’utente deve sempre esplicitare all’inizio le tre classi di dati di Input, Lavoro, Output.
Nella soluzione del problema sono state svolte le seguenti fasi:

  • Individuazione dei dati del problema e dei risultati richiesti. Tale fase è importante, spesso i problemi non sono risolti in modo agevole, per mancata comprensione di quello che il problema “vuole” come risultato. Questa fase è anche detta Analisi.
  • Strutturazione della soluzione del problema: in questa fase viene ipotizzata e formalizzata una soluzione mediante l’uso di strumenti metodologici precisi. Nel caso sopra esposto l’uso della lingua italiana d’ora in poi definito linguaggio naturale poiché è articolato in maniera precisa sull’uso di termini della lingua italiana, rappresenta una metodologia risolutiva.
    I programmatori in genere utilizzano altri strumenti e metodologie che consistono in strumenti di rappresentazione grafica, per dare un immediato riscontro.
  • Prova della correttezza del procedimento risolutivo che deve essere valido per qualunque valori coerenti dei dati conosciuti. Ad esempio nel caso del problema del triangolo, qualunque siano i valori che costituiscono la base e l’altezza del triangolo deve calcolare l’area e il perimetro. In questo caso non avrebbe senso inserire dati numerici negativi o ancora peggio dati non numerici.

Pseudo-codifica e Flow Chart

Nel paragrafo precedente, abbiamo visto la risoluzione di un semplice problema, secondo il modo di pensare e di ragionare delle persone. Tutto questo all’apparenza, potrebbe sembrare non applicabile quando, occorre poi come accade realizzare un programma informatico che siano eseguite da un calcolatore che chiameremo anche “esecutore”.


In realtà, le persone quando tentano di risolvere problemi, utilizzano in modo più meno consapevoli, dei processi mentali di astrazione e modellazione del problema, da risolvere che prende sempre spunto da una situazione reale. I processi mentali di astrazione e modellazione fanno parte del pensiero computazionale che può sintetizzare le fasi di modellizzazione di un problema e la sua soluzione. Il pensiero computazionale però assume un significato molto più ampio quando viene applicato a processi reali ben più complessi come le previsioni meteorologiche, la strategia di gioco degli scacchi ecc.
Prendendo spunto, da quanto appreso finora, introduciamo una metodologia rigorosa per la soluzione dei problemi, definendo anche gli strumenti per la rappresentazione della loro soluzione.
Il modo immediato per rappresentare la soluzione di un problema è scriverla nella lingua italiana con l’uso di termini semplici come inizia, leggi, scrivi, calcola, fine, e altri che si possono aggiungere man mano che la soluzione del problema è più articolata. Ad esempio se per arrivare alla soluzione occorre prendere delle decisioni o ripetere una serie di operazioni.
I linguaggi naturali, quindi descrivono la soluzione del problema con le parole e le frasi della lingua scritta, restringendo le parole strettamente a quelle necessarie.
In informatica, nel campo della programmazione, si parla invece di linguaggi artificiali che in modo chiaro ed esaustivo fanno corrispondere ad ogni frase un’azione che il calcolatore deve poi eseguire.
I linguaggi artificiali si distinguono in due grosse categorie: linguaggi ad alto livello astratti e orientati al problema e linguaggi a basso livello orientati alla particolare architettura hardware del sistema.
Nel primo caso, il programma scritto con un linguaggio ad alto livello è eseguibile su più sistemi con architetture non sempre identiche, mentre un programma scritto in in linguaggio a basso livello è eseguibile solo su quella particolare architettura hardware.
Tutto questo è da imputare alla componente hardware che esegui i programmi ovvero il microprocessore o CPU, discusso nel primo capitolo.
In altre parole un programma scritto in un linguaggio ad alto livello per architettura Windows 32 bit può essere eseguito in tutte le macchine con sistemi Windows a 64 bit (è retro-compatibile) e a 32 bit. Non è vero il contrario perché cambia proprio il software di base oltre che l’architettura della CPU.

Leggi tutto

Tipi di Linguaggio ad alto livello

Ai giorni nostri i linguaggi ad alto livello che sono stati sviluppati nel corso dei decenni sono innumerevoli alcuni con ambiti specifici di utilizzo.
Negli anni ‘60 sono stati ideati prima il Fortran (1954 è stato il primo linguaggio di programmazione implementato su IBM 704) e il Cobol, il primo utilizzato in ambito universitario per la sua enorme potenza nel campo numerico. Il Fortran ha poi evoluto verso nuove versioni come Fortran 77, 90, 95 e 2003, anche perché una delle sue caratteristiche principali è la velocità di esecuzione dei suoi eseguibili. Il secondo per l’elaborazione di grandi quantità di informazioni, e utilizzato fino al 2013 per il software di gestione dei bancomat per la sua enorme stabilità. Negli anni ’70 grazie all’introduzione sul mercato del sistema operativo Unix, viene introdotto il linguaggio C procedurale (ovvero orientato alla soluzione del problema) che nel corso degli anni è utilizzato per lo sviluppo di programmi e moduli di sistema operativo, giochi, e applicazione anche per la grande disponibilità di tipi di dati anche molto complessi.
Un primo esempio di codice C è:

#include <stdio.h>

int main()

{

printf(“Hello world!\n”);

return 0;

}

Questo programma visualizza a video nella finestra CLI (interfaccia a linea di comando del sistema operativo) una scritta “Hello World”. Tutti i programmi scritti in C e C++ hanno la caratteristica come vedremo nei prossimi capitoli di essere strutturati in tre blocchi distinti: Intestazione, Dichiarazione e Programma.
Nel 1983, viene introdotto anche il linguaggio C++ orientato agli oggetti e non solo procedurale, la sintassi è la stessa del linguaggio C ma con nuove funzionalità.
Tutti i linguaggi di programmazione insieme ad altri non citati come il Basic, il Pascal, ecc. sono orientati alla piattaforma software ove sono utilizzati. In altri termini se lo sviluppatore scrive un programma in C nel sistema Linux, questo non sarà eseguibile in ambiente Windows a meno che non si facciano delle modifiche, in quanto esso introduce una dipendenza stretta fra il software di base e il linguaggio stesso.
Verso la fine degli anni 90 la Sun introduce il linguaggio Java che risolve in modo elegante tutti problemi legati alla portabilità del codice introducendo il concetto di Java Virtual Machine. La JVM così come viene definita dai tecnici, consente di scrivere programmi in java che sono multipiattaforma poiché sarà la macchina virtuale che si interpone fra Hardware e S.O. a gestire secondo la specifica piattaforma l’esecuzione del codice.
Il programmatore scrive il programma in linguaggio Java poi con un procedimento produce un meta-codice che viene eseguito nella Java Virtual Machine che invia poi le azioni da far eseguire al sistema operativo e all’hardware. In questo modo il calcolatore che deve eseguire il programma java deve avere installata la JVM. La JVM è disponibile in tutte le piattaforme hardware software da Linux a Windows, passando per altri sistemi operativi.

I Linguaggi a basso livello

Il linguaggio a basso livello è orientato all’hardware della macchina, nello specifico alla CPU. Ogni CPU possiede un set di istruzioni denominato ISA.
Il programmatore per scrivere i programmi in linguaggio macchina utilizza il linguaggio Assembler, che altro non è che una rappresentazione simbolica delle istruzioni nel linguaggio macchina. Le istruzioni macchina sono codificate in codice menmonico di più facile gestione da parte del programmatore.
Il linguaggio macchina non garantisce la portabilità, anche se il suo vantaggio principale è l’enorme velocità di esecuzione, comparata rispetto ad un programma in codice macchina ma derivato dalla compilazione di un programma sorgente ad alto livello scritto in C/C++ ecc.

La soluzione di problemi mediante il flow-chart

Per comprendere meglio la questione affrontiamo la risoluzione di un problema più complesso che permetta di approfondire le nozioni appena esposte.

Algoritmo

Definizione: un algoritmo è una sequenza finita di passi elementari per la risoluzione di un problema

Nella definizione è contenuto il concetto di soluzione e procedimento risolutivo di un problema, che sono stati analizzati prima. In sostanza quando si scrive un algoritmo si enunciano in passi semplici i passi da compiere per arrivare alla soluzione di un problema. Si parla di sequenza per indicare l’ordine di esecuzione dei passi, ad esempio nel problema del triangolo rettangolo non posso calcolare il perimetro se non conosco prima l’ipotenusa. La parola elementare sta invece ad indicare l’espressione dei passi in termini di parole del linguaggio naturale di azioni semplici come “leggi”, “scrivi”, “calcola”.

Caratteristiche di un algoritmo

1. Finito: il numero di passi che compongono l’algoritmo deve essere finito ed essere eseguito un numero finito di volte. In altre parole il tempo di elaborazione deve essere finito.

2. Non ambiguo: Esso deve essere interpretato in modo univoco da qualunque esecutore

3. Deterministico: A parità di condizioni iniziali deve produrre gli stessi risultati in momenti diversi.

La definizione 2. ci indica che un algoritmo deve essere interpretato sempre nello stesso modo da qualunque esecutore altrimenti non sarebbe deterministico (a parità di dati in input potrebbe fornire risultati diversi).

4. Generale: Risolve problemi appartenenti alla stessa classe o categoria. Negli esempi precedenti dove abbiamo risolto il problema del triangolo rettangolo, i dati in input possono variare e si arriverà sempre alla soluzione del problema. Tutte le soluzioni esposte godono della caratteristica della generalità in quanto risolvono problemi della stessa categoria.

Componenti di un algoritmo

Ogni algoritmo è formato da varie componenti che sono: Dati, Istruzioni. I dati sono stati già precedentemente distinti in dati di Input, Interni, Output. A sua volta la categoria dei dati si divide in Variabili e Costanti.

Variabile: Una variabile è un’entità capace di assumere diversi valori di un insieme e che rappresenta una locazione di memoria centrale in cui possono essere immagazzinati uno o più valori. Le caratteristiche di una variabile sono tre:

Identificatore: Nome simbolico associato alla locazione di memoria, in tal modo l’elaboratore quando processa l’algoritmo ogni volta che incontrerà l’identificatore si riferirà automaticamente ala locazione di memoria associata;

Tipo: Rappresenta l’insieme dei possibili valori di una variabile; ad esempio l’insieme dei numeri interi Z o dei numeri reali ma anche gruppi di caratteri alfanumerici dette “Stringhe”;

Classe: Semplice o strutturata; una variabile può essere semplice o scalare quando rappresenta un sol valore, strutturata o composta quando rappresenta insiemi di valori.

Costante: Rappresenta un valore che non varia nel corso dell’elaborazione e quindi viene fissata all’inizio dell’esecuzione del programma. Anche le costanti vengono identificate attraverso un nome e un tipo che è sempre nella classe “semplice”.

Istruzioni: rappresentano i passi effettivamente eseguibili dall’esecutore e che portano dai dati noti memorizzati in variabili e costanti ai risultati attesi come soluzione del problema. Esse sono i passi dell’algoritmo che possono a sua volta essere classificati in varie tipologie:

  • Istruzioni di assegnazione
  • Istruzioni di calcolo
  • Istruzioni di lettura e scrittura
  • Istruzioni di selezione
  • Istruzioni di ripetizione

1, Istruzioni assegnazione

In questa categoria rientrano le istruzioni che nell’algoritmo impostano una variabile o una costante ad un valore. Sono esempi di istruzioni di assegnazione:

a=10.3 imposto la variabile “a” al valore reale 10.3

saluto=’ciao’ imposto la variabile “saluto” al valore ‘ciao’

L’operazione di assegnazione deve essere compatibile con i tipi di variabile su cui si opera, ad esempio non posso assegnare ad una variabile intera un valore reale, oppure ad una variabile stringa un valore numerico.

E’ utile notare che spesso negli algoritmi le variabili devono essere impostate all’inizio dello stesso per garantirne la corretta esecuzione ad esempio nel problema della determinazione del Massimo di 3 numeri si è impostata la variabile Max ad un valore nullo. Questo perché lo svolgimento dell’algoritmo non sarebbe corretto in quanto nell’area di memoria a cui viene associata la variabile Max vi può essere un qualunque valore (nel gergo informatico si parla di valore “non definito”).

2. Istruzioni di calcolo

In tale categoria sono classificate le istruzioni che assegnano ad una variabile un’espressione di altre variabili e costanti; ad esempio

a=b+c

a=’ciao’+’sto’+’bene’

Sia nell’istruzione di assegnazione che di calcolo i tipi di cui sono fatte le variabili devono essere compatibili.

Tipi di variabili

Come accennato in precedenza esistono vari tipi semplici che sono: tipo intero, reale, carattere, booleano stringa. Con il tipo intero si rappresentano solo i numeri interi positivi e negativi compreso lo zero. Sono tutti i numeri appartenente all’insieme Z. Con il tipo reale sono identificati i numeri appartenenti all’insieme R come: radicali, numeri decimale, numeri interi, numeri trascendenti. Con il tipo carattere si intende una variabile che composta da un codice ASCII (lettera, cifra numerica, segno di punteggiatura). Il tipo stringa è un insieme di caratteri la cui lunghezza massima dipende dal linguaggio di programmazione utilizzato. Ad esempio la variabile parola=’ciao’ è una stringa. Esiste un altro tipo detto Booleano o logico che permette di assegnare un valore vero o falso. Ad esempio l’affermazione “il sole è blu” è falsa, mentre “2 è numero pari” è vera. Queste variabili permettono di controllare l’esecuzione delle istruzioni dell’algoritmo.

Istruzioni di lettura e scrittura

In questa categoria si inseriscono le istruzioni che permettono di inserire dei valori nel calcolatore o e di visualizzare i risultati dell’elaborazione. Ad esempio l’istruzione “leggi a” indica al calcolatore di richiedere di inserire un valore da tastiera e di memorizzarlo nella variabile a. Invece l’istruzione scrivi “inserisci un numero” indica al computer di stampare un messaggio sul dispositivo di output predefinito (in genere lo schermo) e il messaggio racchiuso tra virgolette.

Esercizio 1: Scrivere un algoritmo che esegua la somma di tre numeri inseriti da tastiera.

I dati del problema sono:

Input i tra numeri assunti interi a,b,c

Output la somma dei tre numeri memorizzata nella variabile somma.

Il nostro algoritmo sarà pertanto così svolto:

inizio
scrivi “dammi il primo numero”
leggi a
scrivi “dammi il secondo numero”
leggi b
scrivi “dammi il terzo numero”
leggi c
somma=a+b+c
scrivi “la somma è:”
scrivi somma
fine

Il listato scritto prima come si vede è stato scritto in linguaggio naturale e si chiama pseudo-codifica.

Istruzioni di selezione binaria

In questa categoria sono raggruppate le istruzioni che permettono durante l’algoritmo di prendere una decisione sulla base di una condizione. In altri termini l’esecuzione dell’algoritmo viene modificata sulla base della scelta condizionale. In linguaggio naturale si esprime:

se condizione allora

istruzione

altrimenti

istruzione

Esercizio 2

Dati due numeri reali stampare a video il maggiore.

Dati Input: i due numeri a,b reali

Dati Output: a o b a seconda della condizione.

Ecco l’algoritmo:

Inizio
scrivi “dammi il primo numero”
leggi a
scrivi “dammi il secondo numero
leggi b
Se a<b allora
scrivi “il numero più grande è a”
scrivi a
altrimenti
scrivi “il numero più grande è b”
scrivi b
fine

La rappresentazione grafica degli algoritmi: il flow chart

Finora abbiamo visto come scrivere un algoritmo con la pseudo-codifica o in linguaggio naturale, questo sistema però ha lo svantaggio di non essere utile nella soluzione di problemi più complessi. Infatti una rappresentazione grafica come il flow chart, applicata bene elimina tutte le ambiguità possibili nella pseudo-codifica.
Infatti la pseudo-codifica non mostra il flusso di esecuzione del nostro algoritmo, aspetto che è pienamente visibile nella rappresentazione graica dello stesso.
Il flow chart o diagramma di flusso permette una visione globale e molto efficace dell’algoritmo risolutivo.
La rappresentazione mediante flow chart utilizza, sempre gli stessi simboli grafici.
I simboli grafici sono delle figure geometriche che sono associate ad un’istruzione dell’algoritmo e al cui interno sono inserire delle azioni che essa deve svolgere.
In sintesi vediamo le rappresentazioni grafiche e il loro significato nella pseudo-codifica.

Forma del Diagramma di FlussoDescrizionePseudo-cofifica
Indica l’inizio o la fine dell’algoritmo.Inizio
….
Fine
Indica un istruzione di Input o di Output. Indicare con la lettera all’esterno della forma geometrica se l’istruzione è di Input o Output.Leggi Dato
Scrivi Dato
Scrivi “Messaggio “
Il rettangolo indica un’istruzione di assegnazione o calcolo. La differenza fra le due istruzioni è che la prima imposta il valore ad una variabile; la seconda imposta il valore della variabile che è a sinistra ad un’espressione numerica (se trattasi di variabili numeriche) o non di altre variabili e costanti.A=0B=A+CFrase=Parola1+Parola2
(Concatenazione di due variabili che contengono parole);Parola=”Ciao”
La condizione descrive la modifica dell’esecuzione dell’algoritmo sulla base di una scelta.
La scelta può essere costituita anche da più condizioni in base alla complessità del problema.
La condizione è obbligatoria mentre non è obbligatorio contemporaneamente ’azione sotto il vero e il falso.
Se (Condizione) allora
Istruzione 1
Altrimenti
Istruzione 2
Esempio
se (a>0) allora
s=a+b
altrimenti
s=a-b
Questa struttura indica un ciclo condizionale con condizione iniziale.
Le istruzioni all’interno del vero sono ripetute finché la condizione è verificata.
Mentre (condizione) ripeti
istruzione 1
istruzione 2…..Istruzione N
Fine Ciclo
istruzione
Questa struttura rappresenta la ripetizione post condizionale. Le istruzioni sono ripetute quando la condizione è vera.Ripeti
Istruzione 1
Istruzione 2…..Istruzione N
Finché (Condizione)
Istruzione
La struttura rappresentata è un ciclo non condizionale ma iterativo. Il ciclo obbliga alla dichiarazione di una variabile che effettua il conteggio. Nello schema il contatore parte da un valore iniziale e termina ad un valore finale, contando secondo il passo.Per contatore=inizio..fine,passa esegui
istruzione 1
Istruzione 2…..Istruzione N
Fine
Istruzione

Nella tabella, sono evidenziate le strutture fondamentali degli algoritmi.
Il teorema di Bohm-Jacopini enuncia “Ogni algoritmo può essere risolto solo con le istruzioni di terminazione, input/output, assegnazione e calcolo, condizione e ciclo e non ne esistono altre”.
Il teorema è di importanza fondamentale, in quanto indica una guida nella risoluzione dei problemi mediante gli algoritmi.

Fasi di risoluzioni di un problema

La soluzione di un problema, passa quindi attraverso la scrittura di un suo algoritmo risolutivo
Per poter effettuare la risoluzione occorre:

  1. Individuare i dati necessari alla soluzione;
  2. Scrivere l’algoritmo mediante una sua rappresentazione preferibilmente usando il flow-chart;
  3. Codifica in linguaggio di programmazione a scelta del programmatore;
  4. Test del programma e distribuzione del software;

Le fasi 3) e 4) per ora sono tralasciate

Testo del problema: “Dati tre numeri a,b,c determinare il numero più grande”
Per prima cosa definiamo la tabella dei dati del problema:

UsoNomeTipo
Inputn1,n2,n3Interi o Reali a scelta
OutputmXInteri o Reali a scelta

L’algoritmo risolutivo è molto semplice ed è rappresentato con il flow-chart sotto riportato:

Algoritmo max 3 numeri
Inizio
Scrivi "Inserisci 3 numeri"
Leggi n1
Leggi n2
Leggi n3
se (n1>n3) allora
 max = n1
altrimenti
 mx=n2
se n3>mx allora
 mx=n3
Scrivi "il massimo è:", mx
Fine

Il problema presenta tre dati di Input che sono i 3 numeri N1,N2,N3 e un dato di Output che definisco MX (Massimo dei tre numeri), mentre non ha dati interni. I nomi delle variabili devono sempre iniziare con una lettera contenere numeri e solo i caratteri “-“ e “_”.

Procedimento risolutivo:

Dal procedimento risolutivo si può notare che sono stati inserite delle clausole del tipo “Se..allora”, “altrimenti”. Sono state utilizzate due condizioni semplici che confro

Passiamo ad un problema più complesso

Testo del problema “Dati i tre numeri determinare quanti sono pari e quanti sono dispari”.
La tabella dati è:

UsoNomeTipo
Inputn1,n2,n3Interi o Reali a scelta
Outputnd,npInteri o Reali a scelta

Prima di procedere alla stesura della soluzione inquadriamo il metodo per determinare quando un numero è pari. Si introduce l’operazione di modulo che è possibile in tutti i linguaggi di programmazione che rappresenta il calcolo del resto della divisione intera fra due numeri a e b.
Ad esempio

R= A mod B

Calcola il resto della divisione intera fra il numero A e il numero B.
Nel nostro problema quindi per determinare se un numero è pari o dispari basterà porre la condizione che il resto della divisione fra il numero e 2 è zero, allora il numero è pari altrimenti è dispari.
A tal scopo sono definite due variabili di output che rappresentano quanti numeri sono pari NP e quanti sono dispari ND:
Inoltre tali variabili vanno inizializzate a zero all’inizio dell’algoritmo per far si che il risultato dell’elaborazione sia sempre coerente.
Nei paragrafi precedenti sono state definite le caratteristiche dell’algoritmo; una di esse è che l’algoritmo per essere tale deve essere deterministico. Ora poiché le variabili nel calcolatore sono delle aree di memoria potrebbe capitare che alcuni valori contenuti dell’aree di memorie destinate a contenere i valori delle variabili relative ad una esecuzione precedente. Per garantire la correttezza dei risultat9 occorre azzerare le variabili ad ogni esecuzione dell’algoritmo.

L’algoritmo risolutivo è:

Nell’ultima traccia di soluzione vediamo che spesso una serie di azioni si ripetono per ben tre volte, in seguito impareremo ad evitare le ripetizioni.

Istruzioni di selezione multipla

Con tale istruzione si identifica un insieme di condizioni che vengono effettuate tutte sulla stessa variabile in generale:

Valuta Scelta

Se Scelta = 1

istruzione 1

Se Scelta= 2

istruzione 2

Se Scelta= 3

istruzione 3

Altrimenti

Istruzione

in questa serie di condizioni in cascata l’oggetto della condizione è sempre la stessa variabile. Per comprendere il tutto si espone il seguente problema:

La rappresentazione mediante il flow chart è:

Schema Flow Chart Condizione Multipla

Esempio: Scrivere un algoritmo che acquisica da tastiera due numeri e il tipo di operazione aritmetica da eseguire. L’algoritmo deve eseguire l’operaizoe e stampare a video il risultato.
La tabella dati è:

UsoNomeTipo
Inputn1,n2Intero
InputopCarattere “+” per somma, “-“, “*” per Prodotto, “/” per Rapporto
OutputrIntero

Il problema può essere risolto secondo l’algoritimo seguente:

Inizio
Scrivi “inserisci i due numeri “
Leggi n1
Leggi n2
Scrivi “Inserisci il tipo di operazione + somma, – differenza, * prodotto, / rapporto”
Leggi op
Scelta op
Caso “+: r=n1+n2;
Caso “-“: r=n1-n2
Caso “*”: r=n1*n2
Caso “/”: Se n2<>0 r=n1/n2
Altrimenti Scrivi “Non posso eseguire la divisione !”
Fine Scelta
Scrivi “Il risultato è:”
Scrivi r
Fine

Come si può notare la condizione multipla ha un’apertura e chiusura. La condizione di scelta multipla è utile solo se occorre valutare un numero finito di valori che assume una variabile (enumerazione).

Vediamo il flow chart della soluzione del nostro problema:

Contenuti aggiuntivi

Video dal problema all’algoritmo

Esercizi da svolgere:

Strutture sequenziali

Esercizio n.1

Assegnati tre numeri calcolare la somma, e il prodotto.

Esercizio 2

Assegnati il prezzo e lo sconto applicato ad un prodotto, calcolare e mostrare il prezzo scontato.

Esercizio 3

Assegnati due numeri interi calcolare la semisomma e mostrare a video il risultato.

Esercizio 4

Uno studente compra tre libri, con uno sconto del 5% sui primi due, e del 10% sul terzo calcolare il totale che deve pagare.

Strutture condizionali

Esercizio 5

Assegnati due numeri reali inseriti da tastiera, visualizzare il maggiore.

Esercizio 6

Uno studente consegue tre voti in una disciplina nel corso di un qudrimestre, il docente dovrà trascrivere l’esito sulla pagella.
Per fare questo calcola la media dei voti. una media inferiore a 5 indica preparazione “insufficiente”, una media compresa fra 5 e 6 indica una preparazione “mediocre”, una media superiore a 6 inidica una preparazione “sufficiente”. Scrivere un algoritmo che ricevuti i tre voti da tastiera indichi a video la valutazione da trascrivere al docente.

Esercizio 7

Calcolare il minimo di tre numeri inseriti da tastiera.

Esercizio 8

Un abbonamento ai trasporti pubblici ha un importo variabile in base alla durata e alla zona. I costi sono riportati nella seguente
tabella:

DurataZonaCosto
7 giornirossa13 €
15 giornirossa22 €
30 giornirossa34 €
7 giorniverde20 €
15 giorniverde32 €
30 giorniverde 

attraverso un algoritmo inserita la durata in giorni e la zona calcoalre il costo dell’abbonamento.

Esercizio 9

In relazione al problema della calcolatrice affrontato nel capitolo, ampliare l’algoritmo per calcolare la percentuale di un numero, e il cambio segno. Se i numeri sono negativi sono trasformati in positivi e viceversa.

Esercizio 10

Un gioco prevede il lancio dei due dadi numerati da 1 a 6. Il giocatore scommette un importo x, in base al numero totale estratto è determinata la vincita secondo la seguente tabella:

TotaleImporto Vincita
81,5 volte la puntata
92 volte la vincita
10,113 volte la vincita
125 volte la vincita