Vettori e matrici #1
Le variabili definite come coppie <nome, valore > sono dette
variabili scalari
Una coppia <nome, insieme di valori > è una variabile
vettore o array e può essere immaginata come un
contenitore diviso in scomparti; ciascuno scomparto
contiene un valore, detto elemento o componente del
vettore
Fondamenti di Informatica
5. Algoritmi e pseudocodifica
Ciascuna componente è individuata dal nome del vettore,
seguito dal relativo numero progressivo, racchiuso fra
indice del vettore
parentesi tonde: l’indice
La dimensione di un vettore è il numero dei suoi elementi
I vettori sono particolarmente utili per collezionare dati fra
loro correlati (i.e. dello stesso tipo), sui quali devono essere
effettuate le stesse operazioni
Corso di Laurea in Ingegneria Informatica e dell’Automazione
A.A. 2012-2013
2° Semestre
Prof. Giovanni Pascoschi
Fondamenti di Informatica – A.A. 2012-2013
Vettori e matrici #2
2
Vettori e matrici #3
V(1)
V(2)
V(3)
Il concetto di matrice è un’estensione del concetto di vettore
array bidimensionale
Variabile vettoriale V, costituita dai 4 elementi V(0), V(1), V(2), V(3)
L’utilizzo di variabili vettoriali, in un algoritmo, presuppone
la dichiarazione esplicita della loro dimensione
Una matrice è costituita da un insieme di valori, ciascuno dei
quali viene individuato per mezzo della sua posizione,
espressa da più indici
La dimensione del vettore costituisce un limite invalicabile
per la selezione delle componenti del vettore
Ad esempio, se una matrice M ha due dimensioni, i suoi
elementi sono disposti su righe e colonne ed ogni suo
elemento M(i,j) è individuato da due indici, con i indice di
riga e j indice di colonna
m11 m12 … m1n
Nei linguaggi di programmazione C/C++ l’indice del
primo elemento dell’array è 0
M=
Esempio V(100) asserisce che il vettore V è costituito da
Esempio:
100
elementi;
possono
essere
selezionati
V(12),V(57),V(89), ma non V(121) o V(763) o V(100), che
non esistono
Fondamenti di Informatica – A.A. 2012-2013
a cura di Pascoschi Giovanni
(
………
(
V(0)
a cura di Pascoschi Giovanni
mq1 mq2 … mqn
3
Fondamenti di Informatica – A.A. 2012-2013
a cura di Pascoschi Giovanni
4
Gli algoritmi iterativi #1
Gli algoritmi iterativi #2
• Problema
Problema: Calcolare il vettore somma di due vettori di uguale
L’utilità dei vettori consiste nel
poter usare la tecnica iterativa
in modo da effettuare la
stessa operazione su tutti gli
elementi del vettore
dimensione n
5
7
0
3
a(0)
a(1)
a(2)
a(3)
6
9
-1
5
b(0)
b(1)
b(2)
b(3)
11
16
-1
8
c(0)
c(1)
c(2)
c(3)
Fondamenti di Informatica – A.A. 2012-2013
a cura di Pascoschi Giovanni
Usando la variabile contatore
di un ciclo come indice degli
elementi di un vettore è
possibile considerarli tutti, uno
alla volta, ed eseguire su di
essi l’operazione desiderata
5
Gli algoritmi iterativi #3
=n
Fondamenti di Informatica – A.A. 2012-2013
a cura di Pascoschi Giovanni
6
Algoritmo di ordinamento
0
(0)
• Problema
Problema: Ordinamento per
scambio di una sequenza
di numeri (crescente)
1
• Problema
Problema: Calcolo del
massimo elemento di
un vettore
<N
=n
=N
Fondamenti di Informatica – A.A. 2012-2013
0
a cura di Pascoschi Giovanni
7
Fondamenti di Informatica – A.A. 2012-2013
Indicando con ai i valori da
ordinare, si deve ottenere
a1<a2<a3<…<an−1<an
Si applica l’algoritmo di ricerca
del minimo su tutti gli elementi
del vettore e si sposta il minimo
in prima posizione
Si procede analogamente sui
rimanenti n−1 elementi, n−2
elementi, etc.
a cura di Pascoschi Giovanni
8
La pseudocodifica #1
La pseudocodifica #2
Tipo delle variabili
La pseudocodifica è un linguaggio per la
descrizione di algoritmi secondo le regole della
programmazione strutturata
Il tipo di una variabile indica l’insieme dei valori che
possono essere assegnati a quella variabile
La descrizione di un algoritmo in pseudocodifica si
compone di due parti...
Su costanti e variabili di un tipo è possibile effettuare le
operazioni che sono proprie di quel tipo e tutte le
operazioni di confronto
la dichiarazione delle variabili usate nell’algoritmo
Sono permessi i seguenti 4 tipi: integer
integer, real,
real boolean
boolean,
string−
string
−q
la descrizione delle azioni dell’algoritmo
Fondamenti di Informatica – A.A. 2012-2013
a cura di Pascoschi Giovanni
9
La pseudocodifica #3
Fondamenti di Informatica – A.A. 2012-2013
a cura di Pascoschi Giovanni
10
La pseudocodifica #4
Dichiarazione delle variabili
La dichiarazione delle variabili nella pseudocodifica è un
elenco, preceduto dalla parola var,
var delle variabili sulle
quali l’algoritmo opera
Le variabili sono suddivise per tipo: quelle dello stesso
tipo sono separate l’una dall’altra da una “,”; l’elenco
delle variabili dello stesso tipo è seguito dai “:” e
dall’indicazione del tipo; gli elenchi di variabili di tipo
diverso sono separati dal “;”, l’ultimo elenco è seguito da
un “.”
integer: sono le variabili cui possono essere assegnati numeri
integer
interi; le costanti di tipo integer sono numeri interi, ad es. 1, −3,
150
real:
real sono le variabili cui possono essere assegnati numeri
razionali; le costanti real possono essere rappresentate in
notazione decimale, con un “.” che separa la parte intera dalla
parte decimale (ad es., 5.17, 12.367, −123., 0.005) o in notazione
scientifica (23.476E+3=23476, 456.985E−3=0.456985)
boolean: sono le variabili cui possono essere assegnati i valori
boolean
logici; le costanti logiche sono true e false
Esempio:
Esempio
string−q: sono le variabili cui possono essere assegnate parole (o
string−
stringhe) costituite da q caratteri; le costanti string−q sono
stringhe
costituite da parole di q caratteri racchiusi tra apici (che non fanno
parte della costante); ad es., ‘FABIO’ è una costante string−5,‘+’ è
una costante string−1 e ‘124’ string−3
var i, j, a(20): integer;
integer
p, q: real;
real
nome: string−
string−20
20;
sw: boolean.
boolean
Fondamenti di Informatica – A.A. 2012-2013
a cura di Pascoschi Giovanni
11
Fondamenti di Informatica – A.A. 2012-2013
a cura di Pascoschi Giovanni
12
La pseudocodifica #5
La pseudocodifica #6
Descrizione delle azioni
Gli schemi di flusso fondamentali sono descritti
utilizzando convenzioni linguistiche: ad ogni schema
strutturato corrisponde una convenzione linguistica
La descrizione di un algoritmo deve soddisfare le
seguenti regole:
a)
b)
c)
d)
f)
La prima azione dell’algoritmo è preceduta dalla parola begin
begin;
L’ultima azione dell’algoritmo è seguita dalla parola end
end;
L’azione di lettura è rappresentata dalla parola read;
read
L’azione di scrittura è rappresentata dalla parola write;
write
Gli schemi di selezione sono rappresentati come:
S, Sf, Sv sono
schemi di flusso
strutturati
g)
e) Lo schema di sequenza di n flussi S1, S2,…, Sn è rappresentato
come
S1;
Gli schemi di iterazione sono rappresentati come:
S2;
…
S n;
Fondamenti di Informatica – A.A. 2012-2013
a cura di Pascoschi Giovanni
13
La pseudocodifica #7
a cura di Pascoschi Giovanni
14
La pseudocodifica #8
Esempio: Algoritmo per il calcolo del vettore somma di due
Esempio
vettori di numeri razionali
Esistono convezioni linguistiche alternative in relazione a
particolari schemi di flusso
var a(100), b(100), c(100): real;
real
i, n: integer.
integer
Esempio: Ciclo enumerativo
Esempio
Se il valore di “incremento” è 1,
la parte “step
step incremento” della
frase for...endfor
for endfor può essere
omessa
Fondamenti di Informatica – A.A. 2012-2013
Fondamenti di Informatica – A.A. 2012-2013
begin
read n;
for i from 0 to n-1 do
read a(i), b(i);
c(i) ← a(i) + b(i);
write c(i);
endfor
end
a cura di Pascoschi Giovanni
15
Fondamenti di Informatica – A.A. 2012-2013
a cura di Pascoschi Giovanni
16
La pseudocodifica #9
La pseudocodifica #10
Esempio: Algoritmo per il calcolo delle radici di equazioni di 2o grado
Esempio
Esempio Algoritmo per il calcolo del massimo elemento di un
Esempio:
vettore di numeri razionali
var x1, x2, a, b, c, delta: real.
real
begin
read a, b, c;
delta ← b2−4ac;
if delta<0
then write “non esistono radici reali”;
else if delta=0
then x1 ← −b/2a;
x2 ← x1 ;
else x1 ← (−b + √delta)/2a;
var max, v(100): real;
real
i, n: integer.
integer
begin
read n;
for i from 0 to n-1 do
read v(i);
endfor
max ← v(0);
for i from 1 to n-1 do
if max < v(i)
then max ← v(i);
endif
endfor
write max ;
end
Fondamenti di Informatica – A.A. 2012-2013
x2 ← (−b − √delta)/2a;
endif
write x1, x2;
endif
end
a cura di Pascoschi Giovanni
17
Ancora esempi...
a cura di Pascoschi Giovanni
18
Ancora esempi...
Esempio: Ordinamento crescente per scambio
Esempio
Esempio Algoritmo per il calcolo della somma di una sequenza di
Esempio:
numeri
var a, s: real;
real
n: integer.
integer
begin
read n;
s ← 0;
repeat
read a;
s ← s + a;
n ← n − 1;
until n = 0;
endrepeat;;
endrepeat
write s ;
end
Fondamenti di Informatica – A.A. 2012-2013
Fondamenti di Informatica – A.A. 2012-2013
Si suppone che (la dimensione e)
gli elementi del vettore siano già
stati letti e memorizzati
a cura di Pascoschi Giovanni
19
Fondamenti di Informatica – A.A. 2012-2013
var a, v(100): real;
real
i, j, n: integer.
integer
begin
i ← 0;
repeat
j ← i +1;
repeat
if v(j) < v(i)
then a ← v(i);
v(i) ← v(j);
v(j) ← a;
endif
j ← j +1;
until j > n-1;
endrepeat
i ← i +1;
until i = n-1;
endrepeat
end
a cura di Pascoschi Giovanni
20
Primo esempio “comparativo” in C
Gli algoritmi ricorsivi #1
Letti due interi n e k, entrambi
maggiori di zero, stampare i primi n
multipli di k
var i, n, k, p: integer.
integer
begin
read n;
read k;
for i from 1 to n do
p ← k×i ;
write p
endfor
end
Fondamenti di Informatica – A.A. 2012-2013
i ← 1;
while i ≤ n
p ← k×i ;
write p;
i ← i +1;
endwhile
Un algoritmo si dice ricorsivo quando è definito in termini
di se stesso, cioè quando una sua istruzione richiede una
nuova esecuzione dell’algoritmo stesso
#include <stdio.h>
main()
{
int i,n,k,p;
La definizione ricorsiva di un algoritmo è suddivisa in due
parti:
scanf(“%d”,&n);
scanf(“%d”,&k);
for(i=1;i<=n;i++)
{
p = k∗i;
printf(“%d”,p);
}
return 0;
}
a cura di Pascoschi Giovanni
21
Gli algoritmi ricorsivi #2
a)
la base della ricorsione, che stabilisce le condizioni
iniziali, cioè il risultato che si ottiene per i dati iniziali (in
generale per 0 e/o 1)
b)
la regola di ricorsione, che definisce il risultato per un
valore n, diverso dal valore (/i) iniziale per mezzo di
un’espressione nella quale si richiede il risultato dell’algoritmo
calcolato per n−1
Fondamenti di Informatica – A.A. 2012-2013
a cura di Pascoschi Giovanni
22
Gli algoritmi ricorsivi #3
Esempio: Prodotto di numeri interi
Esempio
Esempio: Calcolo del fattoriale di un numero intero
Esempio
Il fattoriale di n è il prodotto di tutti gli interi da 1 ad n, cioè
{
0
a×b =
se b=0 (base della ricorsione)
n! = n × (n−1) × (n−2) ×…× 2 × 1
Per definizione, 0! = 1
a×(b−1)+a se b≠0 (regola di ricorsione)
begin fattoriale(n)
if n = 0
Secondo la definizione ricorsiva si ha:
then r ← 1
3×2=3×1+3=3×0+3+3=0+3+3=6
else r ← n × fattoriale(n−1)
L’esecuzione di un algoritmo ricorsivo termina sempre: la
regola di ricorsione prevede nuove esecuzioni su dati
decrescenti, fino ad ottenere i dati di inizio ricorsione
Fondamenti di Informatica – A.A. 2012-2013
a cura di Pascoschi Giovanni
endif
end
23
Fondamenti di Informatica – A.A. 2012-2013
a cura di Pascoschi Giovanni
24
Sommario della lezione
Fine della lezione
Algoritmi e pseudocodifica
Array e matrici
Pseudocodifica
Algoritmi ricorsivi
Fondamenti di Informatica – A.A. 2012-2013
Domande?
a cura di Pascoschi Giovanni
25
Fondamenti di Informatica – A.A. 2012-2013
a cura di Pascoschi Giovanni
26