strutture (o costrutti) di controllo - "PARTHENOPE"

annuncio pubblicitario
Le strutture
strutture di
di controllo
controllo
Le
STRUTTURE (O COSTRUTTI)
DI CONTROLLO
•determinano l’ordine con cui devono essere
eseguite le istruzioni
•sono indipendenti dalla natura delle istruzioni
•sono strumenti logici universali utilizzabili
in qualunque problema
Classificazione delle
delle strutture
strutture di
di controllo
controllo
Classificazione
Algoritmo per il cambio della ruota
inizio
V
Ruota di scorta bucata?
F
Solleva l’auto
•sequenza
svita un bullone
•selezione
•iterazione o ripetizione
F
Tutti svitati?
Chiama il
V
Togli la ruota
meccanico
Metti la ruota di scorta
Avvita un bullone
Tutti avvitati?
F
V
Abbassa l’auto
fine
1
V
Togli la ruota
Ruota di scorta
bucata?
F
Chiama il
meccanico
Metti la ruota di scorta
SEQUENZA DI ISTRUZIONI
STRUTTURA DI SELEZIONE
Sequenza di
di istruzioni
istruzioni
Sequenza
Avvita un bullone
Istruzione 1
F
FLOWCHART
Tutti avvitati?
Istruzione 2
V
Istruzione 3
STRUTTURA DI ITERAZIONE
PASCAL-LIKE
Istruzione 1
Istruzione 2
Istruzione 3
…
2
Struttura di
di selezione
selezione
Struttura
FLOWCHART
V
condizione
Istruzioni 1
Esempio: algoritmo per il calcolo del
massimo tra due numeri reali
F
begin MASSIMO
var: a, b, max : real
Istruzioni 2
read a,b
if (a>b) then
PASCAL-LIKE
max:=a
else
max:=b
endif
print max
end MASSIMO
if (condizione) then
Istruzioni 1
else
Istruzioni 2
endif
Esempio: algoritmo per il calcolo del
valore assoluto di un numero reale
Osservazione
Osservazione
La struttura di selezione può anche essere del tipo:
F
begin VALASS
var: a: real
read a
condizione
FLOWCHART
if (a<0) then
V
Istruzioni
a:= -a
endif
print a
end VALASS
PASCAL-LIKE
if (condizione) then
Istruzioni
endif
3
Struttura di
di iterazione
iterazione di
di tipo
tipo for
for
Struttura
Esempio: algoritmo per il calcolo della
somma di N numeri reali
begin SOMMA
FLOWCHART
Istruzioni
N volte
var: i,N: integer
var: numero,sum: real
read N
sum:=0.
for i=1,N do
read numero
for i =1,N do
istruzioni
endfor
PASCAL-LIKE
sum:=sum+numero
endfor
print sum
end SOMMA
Esempio: algoritmo per il calcolo di n!
con n>1
begin FATTORIALE
Esempio: algoritmo per il calcolo di n!
con n>1 (seconda versione)
begin FATTORIALE
var: n,i,fatt:integer
var: n,i,fatt:integer
read n
read n
fatt:=1
fatt:=n
for i=2,n do
for i=n-1,2,-1 do
fatt:=fatt*i
incremento
del contatore
fatt:=fatt*i
endfor
endfor
print fatt
print fatt
end FATTORIALE
end FATTORIALE
4
Esempio: algoritmo per il calcolo del
prodotto di N numeri reali
begin PRODOTTO
var: i,N: integer
Osservazione
Osservazione
Se un numero è nullo il prodotto è nullo
var: numero,prod: real
read N,numero
prod:=numero
for i=1,N-1 do
Prevedere il caso in cui un numero sia nullo ed
in tal caso arrestare il procedimento
read numero
prod:=prod*numero
Arrestare il procedimento quando
sono stati moltiplicati tutti i numeri
oppure quando un dato è nullo
endfor
print prod
end PRODOTTO
Struttura di
di iterazione
iterazione di
di tipo
tipo while
while
Struttura
FLOWCHART
F
Esempio: algoritmo per il calcolo del
prodotto di N numeri reali
begin PRODOTTO
condizione
var: i,N: integer
var: numero,prod: real
V
Istruzioni
PASCAL-LIKE
while (condizione) do
istruzioni
endwhile
read N,numero
i:=1
prod:=numero
while (prod≠0 and i<n) do
read numero
i:=i+1
prod:=prod*numero
endwhile
print prod
end PRODOTTO
5
Struttura di
di iterazione
iterazione di
di tipo
tipo repeat-until
repeat-until
Struttura
Esercizio: riscrivere l’algoritmo per il
calcolo del prodotto di N numeri reali
utilizzando la struttura iterativa
repeat-until
Istruzioni
FLOWCHART
condizione
F
V
PASCAL-LIKE
repeat
istruzioni
until (condizione)
Algoritmo per il calcolo del prodotto di N
numeri reali (versione con il repeat-until)
Differenze tra
tra le
le strutture
strutture iterative
iterative
Differenze
begin PRODOTTO
var: i,N: integer
var: numero,prod: real
read N,numero
i:=1
prod:=numero
repeat
read numero
i:=i+1
prod:=prod*numero
until (prod=0 or i≥n)
print prod
end PRODOTTO
•Il for richiede che sia noto a priori il numero di
iterazioni da effettuare
•Il while ed il repeat non richiedono tale informazione
•Nel while se la condizione è falsa non si esegue
alcuna istruzione del ciclo
•Nel repeat le istruzioni del ciclo sono eseguite almeno
una volta
•Nel while la condizione determina l’entrata nel ciclo
•Nel repeat-until la condizione determina l’uscita dal ciclo
6
Esempio: algoritmo per il calcolo del
MCD tra due numeri interi
Come si calcolano il quoziente ed il resto
della divisione tra due numeri interi?
Esempio: MCD (24,15)
x: y=
24 : 15 =
9 1
15 : 9 =
6 1
r
q
q=x/y
r=x-y*q
MCD
9: 6=
3 1
6: 3=
0 2
Algoritmo per il calcolo del MCD tra due numeri interi
begin MCD
var:x,y,r,q,t:integer
read x,y
if (x <y) then
t =x
scambio dei valori
x =y
delle variabili
y =t
endif
repeat
q:=x/y
r:=x-q*y
x:=y
y:=r
until (r=0)
print x
end MCD
Le strutture di controllo possono essere
innestate l’una nell’altra
while (condizione) do
for i = m, n, k do
if (condizione)then
Istruzioni
endif
endfor
endwhile
7
Esempio: algoritmo per il calcolo del
massimo tra N numeri reali
begin MASSIMO
var: num, max : real
var: i, N: integer
read N,num
max:=num
for i=2, N do
read num
if (num>max) then
max:=num
endif
endfor
print max
Esempio: algoritmo per la ricerca di un dato
elemento in un insieme di N numeri interi
•dati di input : N, numeri, elemento da cercare
•dati di output: variabile logica che indica se l’elemento
è stato trovato, posizione
Esempio:
dati di input: 4,
2, 1, 10, 5
10
dati di output: vero, 3
end MASSIMO
begin RICERCA_SEQ
var:N, num,elem, i, pos: integer
var: trov: logical
read N,elem
trov=.false.
i=0
pos=0
while (i<N and .not.trov) do
read num
i:=i+1
Esercizio: riscrivere l’algoritmo per la
ricerca di un dato elemento in un
insieme di N numeri interi utilizzando
la struttura iterativa repeat-until
if (elem=num) then
trov:=.true.
pos:=i
endif
endwhile
print trov,pos
end RICERCA_SEQ
8
begin RICERCA_SEQ
var:N, num,elem, i, pos: integer
var: trov: logical
read N,elem
trov=.false.
i=0
pos=0
repeat
read num
i:=i+1
if (elem=num) then
trov:=.true.
pos:=i
endif
until (i≥N or trov)
print trov,pos
Esercizio: algoritmo per il calcolo della
divisione intera tra due numeri naturali con il
metodo delle sottrazioni successive
•dati di input: due numeri naturali x e y
•dati di output: parte intera di x/y
Esempio: x=26, y=7
parte intera di x/y = 3
end RICERCA_SEQ
Algoritmo
Strategia
Strategia
•Si sottrae y da x e si assegna a x il valore della
differenza fino al verificarsi della condizione x<y
•Il numero delle sottrazioni eseguite è la parte
intera di x/y
Esempio: x=26, y=7
begin DIVISIONE
var: x,y,cont,diff: integer
read x,y
cont:=0
diff:=x
while (diff≥y) do
26-7 = 19
1
19-7 = 12
2
12-7 = 5
3
diff:=diff-y
cont:=cont+1
risultato
5<7 ⇒ il procedimento termina
endwhile
print cont
end DIVISIONE
9
Algoritmo
Esercizio: scrivere l’algoritmo per
la conversione di un intero dalla
base decimale a quella binaria
begin CONVERSIONE
var: n, q, r: integer
var: bin, stringa: character
read n
bin:= ‘’
repeat
q:= n/2
r:= n-2*q
stringa:= ‘r’
bin:= stringa//bin
n:= q
until (q=0)
print bin
end CONVERSIONE
10
Scarica