Sei sulla pagina 1di 73

L’ALGORITMO

I DATI
LE ISTRUZIONI
LE STRUTTURE FONDAMENTALI

ALGORITMO FINE
1
Indice
• Le strutture di controllo
• L’algoritmo
• Le strutture fondamentali
• Il programma
– Sequenza
• I dati
– Selezione
• Le istruzioni
• Azioni di tipo logico
– Output
– Iterazione con controllo in
– Input coda
– Assegnazione • Le strutture non primitive
• Variabili/Costanti – Iterazione con controllo in t
• Operazioni di calcolo esta
• Organizzazione delle istru – Iterazione enumerativa
zioni
– Scelta multipla
• Programmazione strutturat
a • Soluzione esercizi

ALGORITMO 2
L’ALGORITMO
Informalmente, un algoritmo è una procedura ben definita che
serve per risolvere un dato problema
E’ una sequenza di passi che prende dei valori come input e
produce altri valori come output
Più precisamente, un algoritmo è un procedimento di calcolo ,
descrivibile con un numero finito di operazioni che conducono al
risultato

ALGORITMO 3
Etimologia del termine algoritmo

Il termine algoritmo significa procedimento di calcolo


Deriva dal termine latino medievale algorismus, che a sua volta
deriva dal nome del matematico usbeco Abu Jafar Mohammad
ibn-Musa al-Khowarismi, vissuto nel IX (?) secolo
Algoritmi nella storia
• Algoritmi di tipo numerico sono stati studiati da babilonesi e
indiani
• Algoritmi in uso ancora oggi sono stati studiati da matematici
greci 2000 anni fa (Algoritmo di Euclide per il MCD, algoritmi
geometrici, ... )

ALGORITMO 4
Diffusione degli algoritmi
Le tecniche di progettazione di algoritmi e di analisi di
correttezza e di efficienza si sono evolute nella seconda metà
del XX secolo grazie alla diffusione dei calcolatori elettronici
Ovunque si impieghi un calcolatore occorrono algoritmi
corretti e efficienti che ne utilizzino al massimo le possibilità
Esempi di algoritmi efficienti: controllo dei voli aerei
• regolazione reattori nucleari
• reperimento d’informazioni da archivi
• smistamento di comunicazioni telefoniche
• gioco degli scacchi
• controllo della produzione di una catena di montaggio

ALGORITMO 5
IL PROGRAMMA
Gli algoritmi sono astratti e per controllarne il funzionamento
devono essere realizzati con un qualche strumento concreto
• Ad esempio la descrizione di una ricetta di cucina è un algoritmo ma la preparazione della pietanza
è la realizzazione della ricetta.
E’ solo allora che si vede se la ricetta “funziona”

• Altro esempio può essere rappresentato da una qualsiasi formula matematica, che rappresenta, nel
linguaggio matematico un procedimento. Ma la bontà di tale regola può essere verificata solo con
dei veri e propri calcoli, sostituendo alle variabili dei veri numeri.

In ambito informatico, un algoritmo viene descritto tramite un


programma, ossia un testo scritto in uno specifico linguaggio
detto linguaggio di programmazione per essere eseguito da
calcolatori elettronici

ALGORITMO 6
L’algoritmo e il programma
Ogni linguaggio di programmazione ha una sua sintassi ed una
propria rappresentazioni dei dati, e utilizza le proprie operazioni
di manipolazione dei dati
Invece:
Le proprietà degli algoritmi sono talmente fondamentali, generali e
robuste, da essere indipendenti dalle caratteristiche di specifici
linguaggi di programmazione o di particolari calcolatori elettronici

Quindi:
PER RISOLVERE UN PROBLEMA E’ ASSOLUTAMENTE
NECESSARIO TROVARE UN PROCEDIMENTO RISOLUTIVO
DESCRIVIBILE CON UN ALGORITMO, E SOLO DOPO SI
PUO’ PASSARE A SCRIVERE IL PROGRAMMA

ALGORITMO 7
PROGRAMMA = ISTRUZIONI + DATI
Un programma può essere visto come un manipolatore di dati:
a fronte di dati in ingresso che descrivono il problema
producono dati in uscita come risultato del problema
INPUT OUTPUT
(dati) (dati)
PROCESSO
(istruzioni)

Le operazioni sui dati sono le istruzioni.


I dati sono gli oggetti su cui vengono eseguite le istruzioni.
Tutti i linguaggi di programmazione prevedono un insieme di
dati e istruzioni
che il programmatore può utilizzare nella realizzazione dei propri
programmi.

ALGORITMO 8
I DATI
I dati possono essere distinti in base a :
INPUT
• Utilizzo all’interno del processo OUTPUT
LAVORO
INTERO
• Formato NUMERICO
DECIMALE
ALFANUMERICO

• Valore assunto durante il processo VARIABILE


COSTANTE
Questi aspetti dei dati devono essere definiti già nell’algoritmo,
in modo da poterli poi “tradurre” con la sintassi propria del
linguaggio di programmazione

ALGORITMO 9
LE ISTRUZIONI
Anche le istruzioni devono essere scritte rispettando la
sintassi propria del linguaggio di programmazione
Ogni linguaggio di programmazione ha le proprie istruzioni, ma
tutti i linguaggi devono possedere alcune istruzioni per compiere
le azioni fondamentali
  Acquisire i dati su cui attivare il processo di elaborazione input
• Comunicare all’esterno i risultati ottenuti output
 Azioni di tipo aritmetico assegnazione
- assegnare un valore ad una variabile
- utilizzare gli operatori aritmetici (+, -, /, *, %)
 Azioni di tipo logico confronto
-  Utilizzare gli operatori di relazione( =, <, >, <=, >=, <>) per
confrontare il contenuto di due variabili
- Utilizzare gli operatori logici (and, or, not)

ALGORITMO 10
ISTRUZIONI DI OUTPUT
Sono le istruzioni che visualizzano dati e messaggi a video
Esempio: scrivere un programma che manda un messaggio a video
INIZIO
#include <iostream>
Scrivi “ciao! Sono il using namespace std;
computer” int main( )
{
FINE cout<<"\nciao! Sono il computer”;
system("PAUSE");
}
Nell’algoritmo il comando di output è scrivi seguito dal messaggio o dal dato
che si deve far vedere a video
In linguaggio C++ l’istruzione è cout<<
Il messaggio deve essere inserito tra virgolette
ESERCIZIO : messaggio
Codifica un programma che manda a video il seguente messaggio: soluzione
“Ciao! Io sono il Computer! Benvenuto nel mio mondo!”

ALGORITMO 11
ISTRUZIONI DI INPUT
Sono le istruzioni che acquisiscono dati digitati da tastiera
Esempio: scrivere un programma che legge un numero e le riscrive a video

INIZIO #include <iostream>


using namespace std;
scrivi “indica un numero” int main()
{ int numero;
Leggi numero
cout<<"\nindica un numero"<<endl;
cin>>numero;
scrivi “il numero indicato
vale” cout<<"\nil numero indicato vale :“;
cout<<numero<<endl;
scrivi numero
system("PAUSE");
FINE }

Nell’algoritmo il comando di input è leggi seguito dal dato che si deve acquisire

In linguaggio C++ l’istruzione è cin>>


Il dato deve essere stato definito prima dell’acquisizione

ALGORITMO 12
Esempio di esecuzione di input e di output
#include <iostream>
using namespace std; ram
int main()
1 { int numero; numero
2 7
cout<<"\nindica un numero"<<endl;
3
cin>>numero;
4
cout<<"\nil numero indicato vale :“;
5 cout<<numero<<endl;

system("PAUSE");
Programma caricato in memoria
}
per essere eseguito

1 Allocazione della variabile numero 7 video


2 Output a video di un messaggio
tastiera indica un numero
3 Acquisizione del valore digitato da tastiera
con echo a video 7
4 Output a video di un messaggio
Il numero indicato 7
5 Output del valore della variabile numero

ALGORITMO 13
OUTPUT DI DATI
Nell’esempio precedente abbiamo visto l’output di un dato numerico:
cout<<numero<<endl;
A differenza dell’output dei messaggi, il dato non deve essere
inserito tra virgolette
A video viene mostrato il valore del dato, e non il nome

INIZIO Tabella dei dati


nome I/O V/C N/A descrizione
scrivi “quanto sei alto?”
altezza I/O V N intero Altezza della persona
leggi altezza

scrivi “adesso il computer sa


che sei alto “

scrivi altezza

FINE
ESERCIZIO : ALTEZZA soluzione
Codifica il programma indicato nell’algoritmo

ALGORITMO 14
ISTRUZIONI DI ASSEGNAZIONE
L’istruzione di assegnazione è quella che assegna un
valore ad un dato
Esempio: definire una variabile detta lato int lato;
ed assegnare a tale variabile il valore 9 lato = 9;

L’assegnazione del valore può essere fatto anche int lato=9;


contestualmente alla definizione float prezzo= 0;
Trattandosi di variabili, il valore può essere …..
modificato, ma senza ridefinire la variabile …..
prezzo = 10.3;
Nel caso di valori costanti, l’assegnazione avviene necessariamente
nel momento della definizione e ovviamente non può essere
modificato #define costante 9; oppure const int
costante=9;
ALGORITMO 15
ASSEGNAZIONE TRAMITE
OPERAZIONI DI CALCOLO
Il valore di una variabile può essere il risultato di un calcolo
aritmetico
Gli operatori aritmetici binari (cioè che richiedono due dati su cui operare) del
linguaggio C++ sono:

+ Addizione risultato = numero1 + numero2


- Sottrazione risultato = numero1 – numero2
* Moltiplicazione risultato = numero1 * numero2
/ Divisione risultato = numero1 / numero2
% Resto della divisione tra interi risultato = numero1 % numero2

ALGORITMO 16
Esempio di operazioni di calcolo
INIZIO Acquisire due numeri e mostrare il risultato della loro somma

scrivi “indica il primo valore”


#include <iostream>
sing namespace std;
leggi N1
int main()
scrivi “indica il secondo valore” { int N1, N2, totale ;

leggi N2 cout<<"\nindica il primo valore "<<endl;


cin>>N1;
totale N1 + N2 cout<<"\nindica il secondo valore "<<endl;
scrivi “la somma è : “ totale
cin>>N2;
totale= N1 +N2;
FINE
cout<<"\nla somma è : " <<totale<<endl;
system("PAUSE");
}
nome I/O V/C N/A descrizione
N1 I V N intero Primo addendo

N2 I V N intero Secondo addendo


totale O V N intero Numero ottenuto dalla somma dei due addendi

ALGORITMO 17
Output concatenato
Dall’esempio precedente abbiamo visto che è possibile
concatenare più output con una stessa istruzione

cout<<"\nla somma è : "


<<totale<<endl;
messaggio di testo dato carattere per andata a capo

Abbiamo visto anche che è possibile definire più variabili dello


stesso tipo con una stessa istruzione
int N1, N2, totale ;

ESERCIZIO : OPERAZIONI
Acquisire due numeri e mostrare il risultato delle quattro operazioni soluzione

ALGORITMO 18
Operatore modulo
L’operatore modulo calcola il resto della divisione tra interi

Ad esempio: 7%3=1
6%4=2
6%3=0

Può essere utilizzato per verificare se un numero è pari o dispari.


Se un numero è pari, il resto della divisione per 2 è 0 6%2=0

Se un numero è dispari, il resto della divisione per 2 è 1 7%2=1

ALGORITMO 19
Esempio di utilizzo di operatore modulo
Dati due numeri interi, calcolare quoziente e resto

INIZIO
nome I/O V/C N/A descrizione
N1 I V N dividendo
scrivi “indica il primo valore” intero
N2 I V N divisore
leggi N1 intero
quoziente O V N Numero ottenuto dalla divisione di N1 e
scrivi “indica il secondo valore” intero N2
resto O V N Resto ottenuto dalla divisione di N1 e
leggi N2 intero N2
quoziente N1 / N2
resto N1 % N2

scrivi “il quoziente è “ quoziente


“ il resto è “ resto

FINE
ESERCIZIO : QUOZIENTE E RESTO
codificare l’algoritmo scritto per calcolare soluzione
quoziente e resto di due numeri interi

ALGORITMO 20
ASSEGNAZIONE TRAMITE
OPERATORI UNARI
Gli operatori aritmetici unari sono quelli che richiedono
un solo operando.
Nel linguaggio C++ sono:

++ Per incrementare di una unità l’operando


-- Per decrementare di una unità l’operando

l’istruzione numero++ equivale all’istruzione numero = numero + 1


l’istruzione numero- - equivale all’istruzione numero = numero - 1

ALGORITMO 21
Esempio di assegnazione con operatori
unari
Acquisire un numero e mostrare il successivo

INIZIO
#include <iostream>
using namespace std;
scrivi “indica un numero”
int main()
leggi numero { int numero;
cout<<"\nindica un numero :";
numero++ cin>>numero;
numero++;
scrivi “il valore successivo è :
“ numero cout<<"\nil valore successivo e':"<<numero<<endl;
system("PAUSE");
FINE }

ESERCIZIO : ETA’ DEI FIGLI


Una mamma ha tre figli, nati in anni consecutivi. soluzione
Data in input l’età del terzo figlio, comunicare l’età degli altri due

ALGORITMO 22
ORGANIZZAZIONE DELLE ISTRUZIONI

Abbiamo visto le principali istruzioni che intervengono in un


algoritmo, e quindi in un programma.
La scrittura dell’algoritmo è una fase molto delicata e quindi si
ha bisogno di regole per una corretta organizzazione del lavoro
Tali regole sono alla base della programmazione strutturata
Secondo la programmazione strutturata, le istruzioni di un
algoritmo devono essere organizzate secondo strutture ben
definite, non devono cioè essere scritte senza uno schema ben
preciso

ALGORITMO 23
PROGRAMMAZIONE STRUTTURATA
Teorema di Jacopini Böhm (1966)
Qualunque algoritmo può essere implementato
utilizzando le tre sole strutture di controllo:
• sequenza
• selezione
• iterazione

Tutti i linguaggi imperativi implementano le strutture di controllo


fondamentali con opportune istruzioni
Naturalmente la forma sintattica può a volte variare leggermente,
ma il funzionamento rimane identico
ALGORITMO 24
STRUTTURE DI CONTROLLO

SEQUENZA
• PRIMITIVE
SELEZIONE (o scelta logica)
necessarie e sufficienti per
ITERAZIONE con il controllo in coda
risolvere qualsiasi algoritmo
(teorema di Bohm-Jacopini)
ITERAZIONE con controllo in testa
• NON PRIMITIVE ITERAZIONE ENUMERATIVA
derivate da quelle primitive SCELTA (o selezione) MULTIPLA

ALGORITMO 25
LA SEQUENZA
pseudocodifica
E’ un insieme di azioni da Flow chart

svolgere secondo un ordine


prefissato. L’ordine di
esecuzione è dalla prima ………..
all’ultima istruzione seguendo istruzione-1
un percorso unico.
istruzione-2
In C++ si utilizza
istruzione-3
{ per indicare l’inizio della sequenza
di istruzioni ……………
} per indicare la fine della sequenza

ALGORITMO 26
Esempio di istruzioni in sequenza
PROBLEMA: dato il prezzo di un prodotto e lo sconto effettuato, calcolare
INIZIO e comunicare il prezzo scontato

Si propone l’algoritmo disegnato con la tecnica del


Scrivi “indica il prezzo” flow-chart e con la tecnica della pseudocodifca.
inizio
Leggi PREZZO { scrivi “indica il prezzo"
leggi PREZZO
scrivi “indica lo sconto"
Scrivi “indica lo sconto” leggi SCONTO
c  PREZZO – SCONTO
scrivi “il prezzo scontato è “ c
Leggi PREZZO
}
fine nome I/O V/C N/A descrizione
C  PREZZO - SCONTO
PREZZO I V N decimale Prezzo del prodotto
SCONTO I V N decimale Sconto effettuato
C O V N decimale Prezzo scontato
Scrivi “il prezzo è “ C

FINE ESERCIZIO: PREZZO


soluzione
codifica il programma descritto nell’algoritmo

ALGORITMO 27
Alcune osservazioni sulle tecniche per
descrivere l’algoritmo
INIZIO

La descrizione di un algoritmo può essere fatta sia con


Scrivi “indica il prezzo” la tecnica del flow-chart che con la tecnica della
pseudocodifca. Sono equivalenti, quindi nel seguito ne
Leggi PREZZO verrà proposta solo una.
Laddove è sufficientemente chiaro, non verranno
Scrivi “indica lo sconto” indicate le istruzioni di output che servono per chiedere
all’utente di indicare i dati . Ad esempio:
Leggi PREZZO
Scrivi “indica il prezzo”

C  PREZZO - SCONTO verrà sostituita dalla Leggi PREZZO


sola istruzione
Scrivi “il prezzo è “ C Leggi PREZZO

FINE La tabella dei dati deve essere sempre


descritta
ALGORITMO 28
Esercizi proposti sulla sequenza

• Fornito un valore in input, calcolarne il doppio del quadrato del


successivo.

• Dato un numero in input, calcolare la somma tra il suo doppio e la sua


metà.

• Si devono comprare 3 kg mele e 2 kg di pere; dato in input il prezzo


al kg di ciascun prodotto , calcolare la spesa finale

• Date le coordinate di un punto in un piano cartesiano, calcolare la sua


distanza dal centro

ALGORITMO 29
LA SELEZIONE (scelta logica )
Con questa struttura si seleziona in modo esclusivo una determinata
sequenza/blocco di istruzioni da eseguire sulla base di una
<condizione> rappresentata da una espressione booleana , che può
essere vera o falsa
Flow chart pseudocodifica
Nel diagramma a blocchi compaiono Nella pseudocodifica, se la condizione
due possibili percorsi in base al è vera si esegue il primo blocco di
verificarsi o meno di una condizione. istruzioni , se è falsa, si esegue il
Se la condizione è vera si segue il secondo blocco di istruzioni
ramo del SI, se è falsa, il ramo del NO. se (condizione)
{
NO SI blocco_istruzioni_1
COND }
altrimenti
{
blocco_istruzioni_2
}
ALGORITMO 30
Esempio di struttura di selezione

Data l’equazione di 2° grado: Ax2 + Bx + C = 0

Per trovare le soluzioni reali è necessario Calcolo di D


calcolare il valore del discriminante D:
D = B2 - 4 AC NO SI
D0
Non ci sono Calcolo due
radici reali radici reali

Se D0 calcolo delle due radici reali dell’equazione


altrimenti l’equazione non ha radici reali.

ALGORITMO 31
AZIONI DI TIPO LOGICO
Si dice enunciato una proposizione che può essere soltanto
vera o falsa
Un enunciato può essere vero o falso, ma non entrambe le cose
La verità o la falsità di un enunciato sono dette valori di verità e tali
valori corrispondono agli unici due valori dell’algebra booleana
Vero Falso rappresentati anche con 1 0;
• ROMA è composta da 4 lettere  vero
ESEMPI DI ENUNCIATI:
• 7>3  vero
• 7 > 12  falso
• A > B dipende dal valore assunto dalle variabili A e
B
NON E’ UN ENUNCIATO forse pioverà  non è né vero né falso

Dato un enunciato, possiamo esaminare la sua condizione ossia


l’essere vero o falso e in base a tale valutazione possiamo prendere
delle decisioni.
ALGORITMO 32
AZIONI DI TIPO LOGICO COMPOSTE
Gli enunciati possono essere composti ossia formati da
sottoenunciati collegati tra loro da connettivi

Siano p e q due enunciati; esaminiamo le tavole di verità dei


connettivi AND, OR, NOT
Connettivo AND (prodotto logico) Connettivo OR (somma logica)
p q p AND q p q p OR q
V V V V V V
V F F V F V
F V F F V V
F F F F F F

Connettivo NOT (negazione)


p NOT p
V F
F V

ALGORITMO 33
Sintassi della struttura di Selezione
if (condizione)
In C++ la struttura di selezione si
istruzione1;
codifica così else
istruzione2 ;
Se sono presenti più istruzioni in ciascun ramo

if (condizione)
{ istruzione1;

istruzione2; RICORDA:
…. Le istruzioni che fanno parte della sequenza
} sono racchiuse tra le parentesi graffe.
else
{ istruzione...;

}

ALGORITMO 34
Esempio Istruzione di Selezione a due vie
PROBLEMA: dato un numero si comunichi se il numero è pari o
dispari istruzione precedente
#include <iostream>
INIZIO istruzione if-else
using namespace std;
int main() istruzione successiva
Leggi a { int a;
F V cin >> a; // leggi numero da terminale
a %2=0
if ((a % 2) = = 0)
Scrivi Scrivi { cout << “il numero e’ pari”;
“il numero è dispari”
“il numero è pari” }
else
{ cout << “il numero e’
dispari”;
FINE }
system("PAUSE");
}
ESERCIZIO: NUMERO POSITIVO
acquisire un numero e comunicare se è positivo o negativo soluzione

ALGORITMO 35
LA SELEZIONE A UNA VIA
Sinora abbiamo esaminato casi in cui in base alla condizione si
potevano eseguire due diverse azioni alternativamente.
In alcuni casi invece è possibile scegliere di compiere o non
compiere un’azione; in tal caso l’azione da eseguire deve essere
posta sul ramo del SI.
In questo caso la codifica in C++ è:
La clausola else
if (condizione) (altrimenti) in NO SI
istruzione1; queste situazioni COND
o nel caso di più istruzioni: non viene
codificata
if (condizione)
{
istruzione1;
istruzione2;
………….;
}

ALGORITMO 36
Esempio Istruzione di Selezione a una via
PROBLEMA: dato un numero intero si comunichi il valore della radice
quadrata del suo valore assoluto
istruzione precedente
INIZIO #include <iostream>
istruzione if
using namespace std;
int main()
Leggi a istruzioni
{ int a; float b;
successive
F V cin >> a; // leggi numero da terminale
a >0 if (a < 0 )
{
a = abs(a); a = abs(a); // calcola valore
assoluto di a
}
b = abs(a); b = sqrt(a);
cout << “Radice quadrata: “ << b;
Scrivi b
system("PAUSE");
}
ESERCIZIO: VOTI
FINE acquisire 3 voti, calcolare e comunicare la media; se la media è soluzione
insufficiente, comunicare “devi fare i corsi di recupero”

ALGORITMO 37
Strutture di Controllo if-else Nidificati
Istruzione Precedente
A volte si possono usare
istruzioni di selezione ( a Vera Falsa
una o a due vie) nidificate , Condizione

ossia le istruzioni da I1
eseguire al verificarsi della Vera Falsa
Condizione
condizione sono a loro
volta istruzioni I2
condizionali Vera
Condizione
Falsa

Il processo può essere


ripetuto a molti livelli I3 I4

Occorre porre molta attenzione


nell’utilizzare una tale struttura,
poiché facilmente “ci si perde”
nell’esaminare le varie
condizioni Istruzione Successiva

ESERCIZIO: NUMERO POSITIVO O NULLO


Acquisire un numero e comunicare se è positivo, negativo o nullo soluzione

ALGORITMO 38
Esercizi proposti sulla selezione
• Dati 2 voti, calcolare la media ; se la media è sufficiente ,
comunicare “alunno promosso” altrimenti comunicare “alunno
rimandato”
• Volendo fare la spesa , si ha a disposizione una certa cifra iniziale.
Conoscendo l’importo da spendere, verificare se la spesa è
possibile
• Dati tre numeri, stabilire se possono essere le misure dei lati di un
triangolo rettangolo.
• Viene fornito in input il punteggio di un candidato ad un concorso.
Se tale punteggio è compreso tra 0 e 27, visualizzare RESPINTO,
tra 28 e 40 visualizzare AMMESSO, in tutti gli altri casi
ERRORE.

ALGORITMO 39
ITERAZIONE CON CONTROLLO IN CODA
( do…while )
Per iterazione si intende la ripetizione di una o più azioni sotto
il controllo di una condizione.
Il gruppo di azioni da ripetere è detto corpo del ciclo
Nell’iterazione con il controllo in coda, la Istruzione Precedente
condizione da verificare si trova dopo il corpo del
ciclo
Corpo
Il corpo del ciclo verrà eseguito almeno una
volta.
In C++, il ciclo che si ripete mentre la Vera
condizione è vera; quando la condizione è falsa Condizione
il ciclo si interrompe, quindi è necessario che Falsa
all’interno del corpo vi sia una istruzione che Istruzione Successiva
modifichi il valore della condizione, altrimenti
il ciclo “va in loop”

ALGORITMO 40
Esecuzione di un ciclo do..while
Questa struttura può essere utilizzata per il “controllo dei dati in input”

ESERCIZIO: Leggi ripetutamente un numero Memoria RAM


finchè il numero letto è > 0
n
-30
12
xxx
-20
int n;
do
{cout << “Dammi un numero.“;
cin >> n; schermo
if (n<=0)
cout<<“numero non positivo- ripetere”; Dammi un numero - 20
} //chiusura del corpo del ciclo
while (n<=0); Numero non positivo-ripetere
cout << “Fine”; Dammi un numero - 30
Numero non positivo-ripetere
Dammi un numero 12
La struttura do..while, consente di eseguire Fine
ripetutamente il corpo del ciclo anche per un
numero di volte indeterminato
ALGORITMO 41
Esempio di iterazione con controllo in coda
ESERCIZIO: Visualizzazione dei
primi 10 multipli di 5 num=5

Codifica in C++: cont=1


num=5; cont=1; Inizio ciclo
do ris=num*cont
{ Istruzioni
ris=num*cont; interne al ciclo
ripetute mentre scrivi ris
cout<<ris;
la variabile
cont++; cont è minore
cont=cont+1
} o uguale a 10

while (cont<=10); Condizione di s


fine ciclo cont10
(quando cont N
supera 10)

ALGORITMO 42
RICORDA:
Quando si fa riferimento ad una condizione (sia nella scelta che
nell’iterazione) si intende che è possibile utilizzare anche
condizioni composte. In C++
Si ottengono condizioni composte AND prodotto logico &&
legando due o più condizioni con OR somma logica ||
gli operatori logici: NOT negazione !

Esempi in C++: OR nella selezione if ((a>0) || (b>0)) …..;


AND nella ripetizione do { …..
…..
} while ((a>0) && (b>0));

ESERCIZIO: BENVENUTO
Acquisire il nome di una persona e il sesso (tramite lettera ‘m’ o ‘f’) e soluzione
scrivere come messaggio: “Buongiorno, signor … “ oppure “Buongiorno
signora ….. “ seguito da nome

ALGORITMO 43
Esercizi proposti sulla iterazione con
controllo in coda
• Dato in input un numero positivo (NUM>0), visualizzarne l’inverso
(INV=1/NUM), il doppio (DOP=2*NUM), il quadrato
(QUAD=NUM*NUM).

• Visualizzare i primi N numeri pari, con N intero positivo fornito in


input.

• Visualizzare la somma dei primi N interi, con N>3 fornito in input.

Oss: l’iterazione è sul controllo dell’input

ALGORITMO 44
STRUTTURE NON PRIMITIVE

Si tratta di strutture che derivano da quelle primitive di selezione


e iterazione con controllo in coda
Pur non essendo teoricamente indispensabili rendono più
semplice ed efficace l’attività di programmazione
• ITERAZIONE CON CONTROLLO IN TESTA

• ITERAZIONE ENUMERATIVA

• SCELTA (O SELEZIONE) MULTIPLA

ALGORITMO 45
ITERAZIONE CON CONTROLLO IN
Codifica in C++ TESTA ( while …)
while (cond)
{ istruzione La caratteristica di N
1; questa iterazione è COND
istruzione2; che la condizione da s
} verificare si trova
prima delle azioni da istruzione1
eseguire (corpo).
istruzione2

Il while verifica la condizione all’inizio del ciclo per


cui se inizialmente la condizione risulta falsa il
corpo del ciclo non viene mai eseguito

Affinchè il ciclo while, nel caso la condizione sia stata inizialmente trovata vera,
abbia la possibilità di terminare è necessario che all’interno del corpo vi sia
una istruzione che modifichi il valore della condizione

ALGORITMO 46
Esecuzione di un ciclo while
ESERCIZIO: Leggi ripetutamente un numero in ingresso e
calcolane la radice quadrata fino a quando il numero letto è > 0 Memoria RAM

i
int i;
cout << “Dammi il primo num.”; 09
xxx
25
cin >> i;
while ( i > 0 )
{ cout << sqrt(i) << endl;
cout << “Dammi un altro num.“; schermo
cin >> i;
Dammi il primo num. 25
} //corpo del ciclo
5
cout << “Fine”;
Dammi un altro num. 9
3
Dammi un altro num. 0

Fine
Anche la struttura while…, consente di
eseguire ripetutamente il corpo del ciclo
anche per un numero di volte indeterminato
ALGORITMO 47
Esempio di iterazione con controllo in testa
ESERCIZIO: Visualizzazione dei primi 10
multipli di 5 num=5
Codifica in C++:
cont=1
num=5; cont=1;
Condizione di N fine ciclo
cont10
while (cont<=10) inizio ciclo
(mentre cont10)
{ s
ris=num*cont

ris=num*cont; Istruzioni ripetute


all’interno del ciclo scrivi ris
cout<<ris;
cont++; cont=cont+1
}

ALGORITMO 48
ITERAZIONE ENUMERATIVA (for)
Ha questo nome poiché si tratta di un’iterazione in cui si
conosce quante volte il ciclo viene ripetuto.

L’iterazione enumerativa è derivata dalla iterazione con controllo in


testa, perciò la sua rappresentazione con il flow-chart sarà simile a
quella dell’iterazione con controllo in testa.
E’ però presente una variabile intera di controllo del numero
ripetizioni del corpo del ciclo.
Tale variabile viene inizializzata fuori ciclo, incrementata nel ciclo
e controllata nella condizione di uscita dal ciclo (ciclo contatore).
Indicata nella gestione degli array monodimensionali (vettori) o
bidimensionali (matrici) poiché in queste strutture è obbligatorio dichiarare di
quanti elementi sono formate.

ALGORITMO 49
Esempio di iterazione enumerativa
ESERCIZIO: Visualizzazione dei primi 10 multipli di
di 5 (contatore sulla variabile cont) num=5

Codifica in C++:
inizializzazione cont=1
num=5;
for
cont10
(cont=1;cont<=10;cont++)
{ controllo
s
ris=num*cont; ris=num*cont
cout<<ris;
}
scrivi ris

incremento cont=cont+1

ALGORITMO 50
Codifica in C++ dell’ iterazione
enumerativa
for ( espressione1; espressione2 ; espressione3 )
istruzione;
L’istruzione for è composta da tre espressioni separate dal ‘;’ la prima è di
inizializzazione, la seconda di controllo, la terza di incremento.

L’ordine di esecuzione è il seguente:


1) esecuzione dell’espressione1 (una sola volta)
2) controllo dell’espressione2 (ripetuta dopo ogni incremento)
3) esecuzione dell’istruzione (se espressione2 è vera, altrimenti si esce dal ciclo)
4) esecuzione dell’espressione3 (incremento e ritorno al punto 2)

ALGORITMO 51
Quando si equivalgono while / for
Esempio di equivalenza strutture iterative while e for per iterazioni
controllate da contatore in C++:
float lato, area; float lato, area;
int i; int i;
for (i=0; i<3; i++) { i=0;
cout << “Lato ? ” << endl; while (i<3) {
cin >> lato; cout << “Lato ? ”
area=lato*lato; << endl;
cout << “Area: “ << area << endl; cin >> lato;
} area=lato*lato;
cout << “Fine”; cout << “Area: “
<< area
<< endl;
i++;
}
cout << “Fine”;

ALGORITMO 52
Esercizi proposti sulla iterazione enumerativa

• Letto da tastiera un numero N positivo , acquisire N numeri e calcolarne la


media
• Letto da tastiera un numero N positivo, acquisire N numeri e calcolare la
somma e la media dei positivi e la somma e la media dei negativi

ALGORITMO 53
SCELTA MULTIPLA
Nella scelta logica
• si sceglie di compiere o non
compiere un’azione
• si sceglie di compiere, in modo
esclusivo, una tra due azioni
Nella realtà capita di dover
compiere, in modo esclusivo,
una tra più azioni

La scelta multipla è derivata dalla scelta logica (selezione) ma


consente di scegliere tra più azioni

ALGORITMO 54
Esempio di scelta multipla
Esempio tipico di scelta multipla è quello di un programma che
permette all’utente, attraverso un menù iniziale, di scegliere tra
le funzioni offerte.
• Tale situazione è risolvibile
mediante una serie di scelte
logiche
• Molti linguaggi di
programmazione, tra cui il C++,
agevolano il programmatore
mettendo a disposizione la scelta
multipla

ALGORITMO 55
Rappresentazione della scelta multipla nel
diagramma a blocchi
X: variabile di cui va analizzato il contenuto
1 default Default racchiude tutti i valori diversi da
X quelli previsti
2 3 4
Valori che si prevede possa assumere X
(1, 2, 3, 4)

istr1 istr2 istr3 istr4 istrd

istr1, istr2,… rappresentano le istruzioni da eseguire.


Se nella variabile X c’è il valore 1 viene eseguito il gruppo di istruzioni istr1,
se in X c’è il valore 2 le istruzioni istr2 e così via.

ALGORITMO 56
Sintassi della selezione multipla in C++
in C++ la Selezione Multipla è rappresentata dalla istruzione switch-case

 switch (variabile){
                    case <costante1>: <sequenza di istruzioni1>;     break;
                    case <costante2>: <sequenza di istruzioni2>;    break;
                                ....
                    case <costanten>: <sequenza di istruzionin>;    break;
                    default   : <sequenza di istruzioni>;                   break;
                            }

• le espressioni costanti costante1, costante2, ..., costanten devono essere di tipo intero
• In C++ i caratteri sono assimilati agli interi (ne viene considerata la codifica interna in
ASCII)
• l’istruzione break serve per terminare lo switch dopo aver eseguito solo la sequenza
associata ad una particolare scelta (case) e proseguire con l’istruzione successiva allo
switch-case;
• nel costrutto può comparire la clausola default per individuare la sequenza di operazioni
da compiere quando il valore esaminato non coincide con alcuno di quelli specificati

ALGORITMO 57
Semplice esempio di switch-case in C++
ESERCIZIO: dato un numero intero, visualizza il nome del
giorno della settimana corrispondente
main()
{
int num;
cout <<"Dammi un giorno (numero): ";
cin >> num ;
switch (num)
{
case 1: cout<<“ Lunedi” ; break;
case 2: cout<<“ Martedi” ; break;
case 3: cout<<“Mercoledi“ ; break;
case 4: cout<<“Giovedi“ ; break;
case 5: cout<<“Venerdi“ ; break;
case 6: cout<<“Sabato“ ; break;
case 7: cout<<“Domenica“ ; break;
default : cout<<“Giorno Inesistente“ ;
break;
}
}
ALGORITMO 58
Esercizio sulla selezione multipla
SEMPICE CALCOLATRICE
Scrivere un programma che, acquisiti due interi positivi, visualizzi un menù
che consenta di scegliere quale operazione aritmetica eseguire.
ANALISI
Si acquisiscono due interi , con il controllo che siano positivi
Si ripetono le seguenti istruzioni, finchè l’utente non indica espressamente che
vuole terminare
• si presenta a video un menu di scelta tra le 4 operazioni: 1- addizione, 2-
sottrazione, 3-moltiplicazione, 4-divisione.
Con la scelta 5 si esce dall’iterazione
• Si acquisisce la scelta e si esegue l’operazione richiesta mostrando a video il
risultato.
• In caso di scelta diversa da 1,2,3,4, 5 si manda un messaggio d’errore.

ALGORITMO 59
Esercizio : semplice calcolatrice
#include <iostream.h>
#include <conio.h>

void main( ) // Visualizzazione del menù di scelta


{ do
// campo per la scelta dell’operazione {
char scelta; clrscr();
// primo, secondo operando e risultato cout<<“\nMENU’ DI SCELTA\n\n”;
int num1,num2,ris; cout<<“\n1: Addizione”;
do cout<<“\n2: Sottrazione”;
{ cout<<“\n3: Moltiplicazione”;
cout<<“\nInserisci primo numero “; cout<<“\n4: Divisione”;
cin>>num1; cout<<“\n5: Fine lavoro”;
} while (num1<=0); cout<<“\nInserisci scelta “;
do // Acquisizione del campo scelta
{ cout<<“\nInserisci secondo numero “; cin>> scelta;
cin>>num2;
} while (num2<=0);

ALGORITMO 60
Esercizio : semplice calcolatrice
(prosegue soluzione)
// Utilizzo della scelta multipla
switch (scelta)
{
case ‘1’: {ris=num1+num2; cout<<“\nIl risultato è “<<ris; break; }
case ‘2’: {ris=num1-num2; cout<<“\nIl risultato è “<<ris; break; }
case ‘3’: {ris=num1*num2; cout<<“\nIl risultato è “<<ris; break; }
case ‘4’: {ris=num1/num2; cout<<“\nIl risultato è “<<ris; break; }
case ‘5’: break;
default : cout<<“\nScelta errata”;
}
cout<<“\nIl risultato è “<<ris;
} while (scelta !=‘5’);
cout<<“\nCiao!”;
}

ALGORITMO 61
Esercizi proposti sulla selezione multipla
• Prevedere un programma che visualizzi un menù con tutte le materie
scolastiche. Scelta una particolare materia, dovrà comparire il nome
dell’insegnante.
• Assegnazione dei premi ad un’estrazione.
Viene generato un intero casuale compreso tra 1 e 4 con i seguenti
abbinamenti:
1 vincita di un Personal Computer
2 vincita di una telecamera
3 vincita di un videoregistratore
4 vincita di una macchina fotografica
• Dato un numero compreso tra 1 e 12, indicare il nome del mese
corrispondente

ALGORITMO 62
Soluzione esercizi
• Messaggio
• Altezza
• Operazioni
• Quoziente e resto
• Età dei figli
• Prezzo
• Numero positivo
• Voti
• Numero positivo o nullo
• benvenuto

ALGORITMO 63
Esercizio : Messaggio

ESERCIZIO : messaggio
Codifica un programma che manda a video il seguente messaggio:
“Ciao! Io sono il Computer! Benvenuto nel mio mondo!”

#include <iostream>
using namespace std;
int main( )
{
cout<<"\nCiao! Sono il computer!Benvenuto nel mio mondo!”;
system("PAUSE");
}

Teoria Elenco esercizi

ALGORITMO 64
Esercizio: altezza

ESERCIZIO : ALTEZZA

#include <iostream> Leggere l’altezza di una persona e poi mostrarla a video

using namespace std;


int main()
{
int altezza;
cout<<"\nquanto sei alto?";
cin>>altezza;
cout<<"\nadesso il computer sa che sei alto "<<altezza<<endl;
system("PAUSE");
}

Teoria Elenco esercizi

ALGORITMO 65
Esercizio: Operazioni

ESERCIZIO : OPERAZIONI

#include <iostream> Acquisire due numeri e mostrare il risultato delle quattro operazioni
using namespace std;
int main()
{
float n1, n2, ris;
cout<<"\nindica il primo operando :"; cin>>n1;
cout<<"\nindica il secondo operando :"; cin>>n2;
ris=n1+n2; cout<<"\nla loro somma vale : "<<ris;
ris=n1-n2; cout<<"\nla loro differenza vale : "<<ris;
ris=n1*n2; cout<<"\nil loro prodotto vale : "<<ris;
ris=n1/n2; cout<<"\nil loro rapporto vale : "<<ris<<endl;
system("PAUSE");
}
Teoria Elenco esercizi

ALGORITMO 66
Esercizio: quoziente e resto
#include <iostream>
using namespace std; ESERCIZIO : QUOZIENTE E RESTO
codificare l’algoritmo scritto per calcolare
int main() quoziente e resto di due numeri interi
{
int n1, n2;
float quoziente, resto;

cout<<"\nindica il primo valore :";


cin>>n1;
cout<<"\nindica il secondo valore :"; cin>>n2;

quoziente = n1/n2;
resto = n1% n2;
cout<<"\nil quoziente e': "<<quoziente <<" e il resto e' "<<resto;

system("PAUSE");
}

Teoria Elenco esercizi

ALGORITMO 67
Esercizio: età dei figli
ESERCIZIO : ETA’ DEI FIGLI
#include <iostream>
using namespace std; Una mamma ha tre figli, nati in anni consecutivi.
int main() Data in input l’età del terzo figlio, comunicare l’età degli altri due
{
int eta;
cout<<"\nindica l'eta' del terzo figlio :"; cin>>eta;
eta++;
cout<<"\nil secondo figlio ha "<<eta<<" anni "<<endl;
eta++;
cout<<"\nil primo figlio ha "<<eta<<" anni "<<endl;
system("PAUSE");
}

Teoria Elenco esercizi

ALGORITMO 68
Esercizio: prezzo
PROBLEMA: dato il prezzo di un prodotto e lo
#include <iostream>
sconto effettuato, calcolare e comunicare il
using namespace std;
prezzo scontato
int main()
{
float prezzo, sconto, c;
cout<<"\nindica il prezzo : ";
cin>>prezzo;
cout<<"\nindica lo sconto : ";
cin>>sconto;
c = prezzo - sconto;
cout<<"\nil prtezzo scontato e' : "<<c<<endl;
system("PAUSE");
} Teoria Elenco esercizi

ALGORITMO 69
Esercizio: numero positivo

#include <iostream>
using namespace std; ESERCIZIO: NUMERO POSITIVO
acquisire un numero e comunicare se è positivo o negativo
int main()
{
int numero;
cout<<"\nindica un numero : ";
cin>>numero;
if(numero >0)
cout<<"\nil numero "<<numero<<" e' positvo"<<endl;
else
cout<<"\nil numero "<<numero<<" e' negativo o nullo"<<endl;
system("PAUSE");
}
Teoria Elenco esercizi

ALGORITMO 70
Esercizio: voti
#include <iostream> ESERCIZIO: VOTI
using namespace std; acquisire 3 voti, calcolare e comunicare la media; se la media è
int main() insufficiente, comunicare “devi fare i corsi di recupero”

{
int voto1, voto2, voto3, somma;
float media;
cout<<"\nindica il primo voto : "; cin>>voto1;
cout<<"\nindica il secondo voto : "; cin>>voto2;
cout<<"\nindica il terzo voto : "; cin>>voto3;

somma = voto1+voto2+voto3;
media = (float) somma / 3;
cout<<"\nla media dei voti e' "<<media<<endl;
if(media <6)
cout<<"\ndevi fare i corsi di recupero"<<endl;
system("PAUSE"); Teoria Elenco esercizi
}

ALGORITMO 71
Esercizio: numero positivo o nullo
ESERCIZIO: NUMERO POSITIVO O NULLO
#include <iostream> acquisire un numero e comunicare se è positivo ,negativo o nullo
using namespace std;
int main()
{
int numero;
cout<<"\nindica un numero : "; cin>>numero;
if(numero >0)
cout<<"\nil numero "<<numero<<" e' positvo"<<endl;
else
if(numero <0)
cout<<"\nil numero "<<numero<<" e' negativo "<<endl;
else
cout<<"\nil numero "<<numero<<" e' nullo "<<endl;
system("PAUSE");
Teoria Elenco esercizi
}

ALGORITMO 72
#include <iostream> Esercizio: benvenuto
using namespace std;
ESERCIZIO: BENVENUTO
int main() Acquisire il nome di una persona e il sesso (tramite lettera ‘m’ o ‘f’) e
{ scrivere come messaggio: “Buongiorno, signor … “ oppure “Buongiorno
string nome; signora ….. “ seguito da nome
char sesso;
cout<<"\nindica il nome : "; cin>>nome;
do
{
cout<<"\nindica il sesso : "; cin>>sesso;
if (sesso != 'm' and sesso != 'f')
cout<<"\nvalore errato: indicare 's' o 'm'"<<endl;
}
while (sesso != 'm' and sesso != 'f');
if (sesso =='m')
cout<<"\nBuongiorno, signor "<<nome<<endl;
else
cout<<"\nBuongiorno, signora "<<nome<<endl;
system("PAUSE"); Teoria Elenco esercizi
}

ALGORITMO 73

Potrebbero piacerti anche