G. Amodeo,
C. Gaibisso
Programmazione di Calcolatori
I Diagrammi di Flusso
Soluzione agli esercizi
proposti
Programmazione di Calcolatori: I diagrammi di flusso - soluzione agli esercizi
1
G. Amodeo,
C. Gaibisso
I più semplici
Calcolare il
massimo di una
sequenza non
vuota di numeri
interi positivi
terminata da un
intero negativo
Start
Nome: MaxOfSeq
Variabili: int val, max
max  -1
val
Descrizione variabili:
val:
max:
memorizza il
valore
corrente della
sequenza
memorizza il
massimo
corrente
true
val < 0
max
End
false
false
val > max
true
max  val
Programmazione di Calcolatori: I diagrammi di flusso - soluzione agli esercizi
2
G. Amodeo,
C. Gaibisso
I più semplici
Acquisire due
valori interi in
due variabili e
scambiarne il
contenuto
Start
Nome: Scambia
Variabili: int A, B, aux
A, B
Descrizione variabili:
A:
B:
aux:
memorizza il
primo valore
intero
memorizza il
secondo valore
intero
variabile di
appoggio
aux  A
A B
B  aux
End
Programmazione di Calcolatori: I diagrammi di flusso - soluzione agli esercizi
3
G. Amodeo,
C. Gaibisso
I più semplici
Start
Nome: MCM
Variabili: int A, B, max, mcm, count
A, B
Descrizione variabili:
memorizza il
primo intero
B:
memorizza il
secondo intero
max: memorizza il
massimo tra i
due interi
mcm: memorizza il
candidato
corrente a
minimo comune
multiplo
count: moltiplicato per
max genera il
prossimo
candidato a
minimo comune
multiplo
count  2
A:
max  A
max  B
A>B
true
false
mcm  max
mcm  max*count
cont  count+1
false
Calcolare il
minimo comune
multiplo tra 2
interi positivi
mcm % A = 0
and
mcm % B = 0
true
mcm
End
Programmazione di Calcolatori: I diagrammi di flusso - soluzione agli esercizi
4
G. Amodeo,
C. Gaibisso
I più semplici
Start
Nome: MCM
Variabili: int A, B, mcm
Calcolare il
minimo comune
multiplo tra 2
interi positivi
A, B
mcm  A
Descrizione variabili:
A:
memorizza il
primo intero
B:
memorizza il
secondo intero
mcm: memorizza il
candidato
corrente a
minimo comune
multiplo
mcm  mcm+1
mcm % A = 0
and
mcm % B = 0
mcm
End
Programmazione di Calcolatori: I diagrammi di flusso - soluzione agli esercizi
5
G. Amodeo,
C. Gaibisso
I più semplici
Start
Nome: MCD
Variabili: int A, B, min, mcd, count
Calcolare il
massimo comun
divisore tra 2
interi positivi
A, B
mcd  1
count  1
Descrizione variabili:
A:
memorizza il
primo intero
B:
memorizza il
secondo intero
min: memorizza il
minimo tra i
due interi
count: memorizza il
candidato
corrente a
massimo comun
divisore
mcd: memorizza
l’ultimo divisore
comune
individuato
false
true
min  A
min  B
A>B
count > min
true
mcd
false
End
count  count+1
false
A % count = 0
and
B % count = 0
true
mcd  count
Programmazione di Calcolatori: I diagrammi di flusso - soluzione agli esercizi
6
G. Amodeo,
C. Gaibisso
Vettori
Dato un vettore
di N ≥ 1 interi,
restituirne il
contenuto
Start
Nome:
ResVett
Variabili: int curs,
int vett[N]
Descrizione variabili:
curs:
indice per la
scansione del
vettore
vett[ ]: vettore
interessato dal
processamento
curs  0
curs curs+1
curs< N
false
End
true
vett[curs]
Programmazione di Calcolatori: I diagrammi di flusso - soluzione agli esercizi
7
G. Amodeo,
C. Gaibisso
Vettori
Dato un vettore
di N ≥ 1 interi,
determinarne il
massimo
elemento
Start
Nome:
MaxVett
Variabili: int curs, max
int vett[N]
curs  0
max  vett[0]
Descrizione variabili:
curs:
indice per la
curs  curs+1
scansione del
vettore
vett[ ]: vettore
interessato dal
false
processamento
max: massimo
valore
individuato fino
alla posizione
curs
curs < N
false
max
End
true
vett[curs] > max
true
max  vett[curs]
Programmazione di Calcolatori: I diagrammi di flusso - soluzione agli esercizi
8
G. Amodeo,
C. Gaibisso
Vettori
Dato un vettore di N ≥
1 interi, determinarne il
massimo elemento e la
sua posizione
Start
Nome:
MaxPosVett
Variabili: int curs, max, pos
int vett[N]
curs  0
max  vett[0]
pos  0
Descrizione variabili:
curs:
indice per la
scansione del
vettore
vett[ ]: vettore
interessato dal
processamento
max: massimo
valore
individuato fino
alla posizione
curs
pos:
posizione del
valore
memorizzato
in max
End
curs  curs+1
curs < N
false
max, pos
true
false
vett[curs] > max
true
max  vett[curs]
pos  curs
Programmazione di Calcolatori: I diagrammi di flusso - soluzione agli esercizi
9
G. Amodeo,
C. Gaibisso
Vettori
Start
Nome:
PosCarVett
Variabili: int curs, car, pos
char vett[N]
Verificare la presenza
di un carattere
all’interno di un
vettore di N ≥ 1
caratteri e la sua
eventuale posizione
curs  0
pos = -1
Descrizione variabili:
car
curs:
indice per la
scansione del
vettore
vett[ ]: vettore
interessato dal
processamento
car:
memorizza il
carattere di cui
verificare la
presenza
pos:
memorizza la
posizione di car
se presente, -1
altrimenti
End
curs  curs+1
false
curs < N
pos
true
false
vett[curs] = car
true
pos  curs
Programmazione di Calcolatori: I diagrammi di flusso - soluzione agli esercizi
10
G. Amodeo,
C. Gaibisso
Vettori
• Algoritmo:
Ordinare, in ordine
crescente, un
vettore di N ≥ 1
interi:
Selection Sort
per ogni posizione P degli elementi del
vettore, ad esclusione dell’ultima:
1. determinare il valore minimo nel
vettore a partire dalla posizione P
inclusa. Sia Q la posizione di tale
valore minimo
2. scambiare il valore nella posizione
P con quello nella posizione Q
Programmazione di Calcolatori: I diagrammi di flusso - soluzione agli esercizi
11
G. Amodeo,
C. Gaibisso
Vettori
Ordinare, in ordine
crescente, un
vettore di N ≥ 1
interi:
Selection Sort
• Sottoproblemi:
1. determinare la posizione del
valore minimo nel vettore a
partire da una posizione data
2. scambiare i valori di due variabili
Programmazione di Calcolatori: I diagrammi di flusso - soluzione agli esercizi
12
G. Amodeo,
C. Gaibisso
Vettori
Determinare la
posizione del valore
minimo nel vettore
a partire da una
posizione data
Descrizione variabili:
indice per la
scansione del vettore
vett[ ]: vettore interessato
dal processamento
start: posizione dalla quale
ha inizio il
processamento
max: massimo valore
individuato fino dalla
posizione start alla
posizione curs
pos:
posizione del valore
memorizzato in max
Start
Nome:
PosMinVett
Variabili: int curs, pos, start
int vett[N]
curs  start
min = vett[start]
pos  start
curs:
End
curs  curs+1
false
true
curs = N
pos
false
vett[curs] < min
true
pos  curs
min  vett[curs]
Programmazione di Calcolatori: I diagrammi di flusso - soluzione agli esercizi
13
G. Amodeo,
C. Gaibisso
Vettori
scambiare i valori
di due variabili
Descrizione variabili:
A:
B:
aux:
memorizza il
primo valore
intero
memorizza il
secondo valore
intero
variabile di
appoggio
Start
Nome: Scambia
Variabili: int A, B, aux
aux  A
A B
B  aux
End
Programmazione di Calcolatori: I diagrammi di flusso - soluzione agli esercizi
14
G. Amodeo,
C. Gaibisso
Vettori
Ordinare, in ordine
crescente, un
vettore di N ≥ 1
interi:
Selection Sort
Start
Nome:
Selection Sort
Variabili: int curs, pos
int vett[N]
curs  0
curs = N-1
Descrizione variabili:
indice per la
scansione del
vettore
vett[ ]: vettore
interessato dal
processamento
pos:
posizione del
minimo
elemento del
vettore a
partire dalla
posizione curs
true
End
false
curs:
curs  curs+1
Applica PosMinVett a
vett[ ] a partire dalla
posizione curs e lascia il
risultato in pos
Applica scambia a
vett[curs] e vett[pos]
Programmazione di Calcolatori: I diagrammi di flusso - soluzione agli esercizi
15
G. Amodeo,
C. Gaibisso
Vettori
Ordinare, in ordine
crescente, un
vettore di N ≥ 1
interi:
Bubble Sort
• Algoritmo:
1. scandire l’intero vettore confrontando
elementi adiacenti e scambiando i loro
valori se necessario
2. ripetere tale scansione fino al completo
ordinamento del vettore, cioè finchè la
scansione richiede almeno uno scambio
di valori
Programmazione di Calcolatori: I diagrammi di flusso - soluzione agli esercizi
16
G. Amodeo,
C. Gaibisso
Vettori
Ordinare, in ordine
crescente, un
vettore di N ≥ 1
interi:
Bubble Sort
• Sottoproblemi:
1. scambiare i valori di due variabili
2. scandire il vettore confrontando
elementi adiacenti e scambiando i
loro valori se necessario
3. verificare se nella scansione si è
verificato almeno uno scambio di
valori
Programmazione di Calcolatori: I diagrammi di flusso - soluzione agli esercizi
17
G. Amodeo,
C. Gaibisso
Vettori
Scambiare i
valori di due
variabili
Descrizione variabili:
A:
B:
aux:
memorizza il
primo valore
intero
memorizza il
secondo valore
intero
variabile di
appoggio
Start
Nome: Scambia
Variabili: int A, B, aux
aux  A
A B
B  aux
End
Programmazione di Calcolatori: I diagrammi di flusso - soluzione agli esercizi
18
G. Amodeo,
C. Gaibisso
Vettori
Confrontare elementi adiacenti
scambiando i loro valori se
necessario, verificando nel
contempo verificato almeno uno
scambio di valori
Descrizione variabili:
indice per la
scansione del
vettore
vett[ ]: vettore
interessato dal
processamento
flag:
indica
l’avvenuto
scambio di
almeno una
coppia di valori
Start
Nome:
BubbleStep
Variabili: int curs, flag
int vett[N]
curs  0
flag  false
End
curs = N-1
flag
curs:
curs  curs+1
true
false
false
vett[curs] > vett[curs+1]
flag  true
true
Applica scambia a vett[curs]
e vett[curs+1]
Programmazione di Calcolatori: I diagrammi di flusso - soluzione agli esercizi
19
G. Amodeo,
C. Gaibisso
Vettori
Ordinare, in ordine
crescente, un
vettore di N ≥ 1
interi:
Bubble Sort
Start
Nome:
BubbleSort
Variabili: int vett[N]
true
Applica
BubbleStep
a vett[ ]
Descrizione variabili:
vett[ ]: vettore interessato
dal processamento
false
End
Programmazione di Calcolatori: I diagrammi di flusso - soluzione agli esercizi
20
G. Amodeo,
C. Gaibisso
Matrici
Data una matrice P x
Q interi, P ≥ 1, Q ≥ 1,
restituirne il
contenuto (per righe)
Start
Nome:
ResMat
Variabili: int riga, col
int mat[P][Q]
riga  0
col  0
false
Descrizione variabili:
indice per la
scansione delle
righe della matrice
col:
indice per la
scansione delle
colonne della
matrice
mat[ ][ ]: matrice
interessata dal
processamento
riga < P
riga:
End
true
riga  riga+1 false
col  0
col < Q
true
mat[riga][col]
col  col+1
Programmazione di Calcolatori: I diagrammi di flusso
21
G. Amodeo,
C. Gaibisso
Matrici
Start
Nome:
AcqMat
Variabili: int riga, col
int mat[P][Q]
Data una matrice P x Q
interi, P ≥ 1, Q ≥ 1,
restituirne il contenuto
(per colonne)
riga  0
col  0
Descrizione variabili:
indice per la
scansione delle
righe della matrice
col:
indice per la
scansione delle
colonne della
matrice
mat[ ][ ]: matrice
interessata dal
processamento
col < Q
riga:
false
End
true
riga  0
col  col+1
false
riga < P
true
mat[riga][col]
riga  riga+1
Programmazione di Calcolatori: I diagrammi di flusso
22
G. Amodeo,
C. Gaibisso
Matrici
Data una matrice quadrata di
P x P interi, P ≥ 1,
determinarne il massimo
elemento sulla diagonale
principale e la sua posizione
Descrizione variabili:
curs:
indice per la
scansione della
diagonale
principale
curs  curs+1
mat[ ][ ]: matrice
interessata dal
processamento
max:
massimo valore
false
individuato fino
alla posizione
[curs][curs]
pos:
posizione del
valore
memorizzato
in max
Start
Nome:
MaxPosMat
Variabili: int curs, max, pos
int mat[P][P]
curs  0
max  mat[0][0]
pos  0
End
curs < P
false
max, pos
true
mat[curs][curs] > max
true
max  mat[curs][curs]
pos  curs
Programmazione di Calcolatori: I diagrammi di flusso - soluzione agli esercizi
23
G. Amodeo,
C. Gaibisso
Matrici
Contare le occorrenze di
un intero in una matrice
di P x Q interi, P ≥ 1, Q ≥ 1
Start
Nome:
AcqMat
Variabili: int riga, col, val, count
int mat[P][Q]
val
Descrizione variabili:
riga:
indice per la
scansione delle
righe della matrice
col:
indice per la
scansione delle
colonne della
matrice
val:
memorizza il valore
oggetto della
ricerca
count:
memorizza il
numero di
occorrenze del
valore
mat[ ][ ]: matrice interessata
dal processamento
riga  0
col  col+1
riga  0
col  0
count  0
col < Q
false
true
false
End
riga  riga+1
riga < P
true
false
mat[riga][col] = val
true
count  count+1
Programmazione di Calcolatori: I diagrammi di flusso
24
Scarica

curs - Informatica