Algoritmi
e
Strutture Dati
Gestione Informatica dei Dati
CdL in Statistica
Bruno Bertaccini
La programmabilità
degli elaboratori
Bruno Bertaccini (mail to: [email protected])
La programmabilità degli elaboratori
Introduzione
Gli elaboratori elettronici sono macchine programmabili:
l’utilizzatore deve fornire loro un’insieme di
istruzioni che indichino le operazioni da compiere
ed i dati su cui operare.
Un insieme coerente di tali istruzioni si chiama
PROGRAMMA
Tali istruzioni, una volta memorizzate nella memoria
centrale, verranno prese in considerazione dalla CPU
che si occuperà dell’attivazione dei dispositivi
necessari alla loro elaborazione
Bruno Bertaccini (mail to: [email protected])
La programmabilità degli elaboratori
Introduzione
Un elaboratore elettronico, a differenza di quanto ci si
potrebbe aspettare, è in grado di compiere
SOLO operazioni estremamente semplici
(es: una radice quadrata, una funzione trigonometrica richiedono
programmi specifici)
OPERAZIONI ELEMENTARI
Tuttavia un elaboratore è molto veloce e
può eseguire un gran numero di operazioni
nell’unità di tempo
(la velocità dipende anche dal fatto che le operazioni
sono appunto elementari)
Bruno Bertaccini (mail to: [email protected])
La programmabilità degli elaboratori
Le operazioni elementari
Classificazione delle istruzioni elementari in base
alla diversità delle funzioni svolte dall’elaboratore
e agli effetti che queste hanno sui dati.
1. Istruzioni aritmetiche e logiche
2. Istruzioni di trasferimento
3. Istruzioni di input-output
4. Istruzioni di controllo
5. Istruzioni ausiliarie
Bruno Bertaccini (mail to: [email protected])
La programmabilità degli elaboratori
Le operazioni elementari
Istruzioni Aritmetiche e Logiche.
servono ad eseguire
operazioni aritmetiche ( + ,- , * , / ) e
logiche (NOT, AND, OR)
sui dati presenti nella memoria centrale
Istruzioni di Trasferimento.
permettono lo spostamento dei dati all’interno della
memoria centrale e tra questa e i registri presenti nella
unità aritmetico logica (ALU) della CPU
Bruno Bertaccini (mail to: [email protected])
La programmabilità degli elaboratori
Le operazioni elementari
Istruzioni Input-Output.
consentono l’immissione e l’emissione dei dati nella e
dalla memoria centrale;
il dialogo avviene generalmente con in i dispositivi di
I/O e e con le memorie ausiliarie.
Istruzioni di Controllo.
guidano lo svolgimento dell’elaborazione controllando
l’ordine di esecuzione delle istruzioni elementari;
sono eseguite dalla unità di controllo (CU) della CPU.
Istruzioni Ausiliarie.
sono deputate a riordinare alcuni dispositivi fisici
dell’elaboratore e a controllarne lo stato.
Bruno Bertaccini (mail to: [email protected])
La programmabilità degli elaboratori
Le operazioni elementari
Operazione Elementare (generalizzata)
codice operativo
operando
indica il tipo di operazione
da compiere
identifica i dati o i dispositivi
che interessano l’operazione
L’insieme dei codici operativi e le regole che guidano il modo
di esprimere gli operatori costituiscono un sistema di
programmazione, un sistema completo per gestire il
funzionamento dell’elaboratore ed indirizzarlo alla risoluzione
di un determinato problema.
Bruno Bertaccini (mail to: [email protected])
La programmabilità degli elaboratori
Il linguaggio macchina ed i linguaggi simbolici
Tale sistema è detto LINGUAGGIO MACCHINA
perché è il SOLO comprensibile dall’unità di controllo
dell’elaboratore.
Il Linguaggio Macchina varia da elaboratore ad
elaboratore ed è estremamente complicato da
utilizzare ed interpretare da parte dell’utilizzatore.
Generalmente vengono utilizzati altri linguaggi di
programmazione, i cosiddetti LINGUAGGI SIMBOLICI,
basati su una modalità di espressione di operatori
ed operandi più simili ai criteri usati dal linguaggio
umano.
Bruno Bertaccini (mail to: [email protected])
La programmabilità degli elaboratori
Il linguaggio macchina ed i linguaggi simbolici
Un programma espresso per mezzo di un linguaggio
simbolico non è direttamente utilizzabile dall’unità di
controllo dell’elaboratore;
sarà prima necessario TRADURLO per mezzo di un
apposito programma nell’unico linguaggio comprensibile
alla CU: il linguaggio macchina appunto.
Bruno Bertaccini (mail to: [email protected])
Gli ALGORITMI
Bruno Bertaccini (mail to: [email protected])
Gli Algoritmi
Algoritmi: aspetti definitori
I problemi umani la cui soluzione è demandata ad un
elaboratore sono notoriamente MOLTO COMPLESSI.
(es: f ( x)  2 x 2  3x  5 per x = 1.347)
Ma un elaboratore è in grado di svolgere
SOLO OPERAZIONI ELEMENTARI
e NON operazioni complesse.
Come è possibile allora utilizzare un elaboratore
per risolvere un problema complesso?
Bruno Bertaccini (mail to: [email protected])
Gli Algoritmi
Algoritmi: aspetti definitori
Occorre SCOMPORRE il problema complesso in una
serie di operazioni elementari in grado di poter essere
compiute da un esecutore che non riesce
ASSOLUTAMENTE a prendere in considerazione
il problema nella sua interezza.
Tale procedimento è detto
PROCESSO ALGORITMICO
ed il risultato di tale processo è detto
ALGORITMO
Bruno Bertaccini (mail to: [email protected])
Gli Algoritmi
Algoritmi: aspetti definitori
L’ALGORITMO è una serie finita e completa di operazioni
elementari ordinate alla soluzione di un problema, da
effettuare meccanicamente, ossia attraverso una
esecuzione precisa delle regole, senza implicare
alcuna conoscenza del caso da trattare.
Le operazioni in cui viene scomposto il processo risolutivo
del problema devono essere comprensibili ed
eseguibili dall’entità cui l’algoritmo è destinato,
entità che può non necessariamente essere l’elaboratore.
In pratica esisterà sempre un limite preciso al numero di
istruzioni che possono comporre l’algoritmo e al tempo di
esecuzione dello stesso, limite dettato dalle caratteristiche
dell’elaboratore.
Bruno Bertaccini (mail to: [email protected])
Gli Algoritmi
Algoritmi: caratteristiche
Un ALGORITMO adatto ad essere utilizzato da
un elaboratore deve rispondere ad alcune
proprietà essenziali; deve cioè essere:
effettivo;
definito e non ambiguo;
generale;
finito.
Bruno Bertaccini (mail to: [email protected])
Gli Algoritmi
Algoritmi: caratteristiche
Deve avere un punto di partenza
e deve essere EFFETTIVO
cioè deve avere un punto di partenza
ed ogni operazione deve produrre un certo e ben
determinato risultato ogni volta che si presentano le
stesse condizioni.
Deve essere DEFINITO e NON AMBIGUO
è necessario ciò che sia stato previsto ogni aspetto che
il problema può assumere durante la fase risolutiva
e che ogni espressione sia interpretabile
in maniera univoca senza ambiguità.
Bruno Bertaccini (mail to: [email protected])
Gli Algoritmi
Algoritmi: caratteristiche
Deve essere GENERALE
ossia utilizzabile per una serie o classe di problemi.
Dominio dell’algoritmo: insieme dei dati che possono essere
elaborati e le condizioni che ne permettono l’elaborazione
Deve essere FINITO
deve cioè poter giungere al suo termine dopo che sia
stato eseguito un numero anche elevatissimo
ma finito di istruzioni
(poiché spesso le istruzioni possono essere eseguite in modo
ciclico – loop -, sarà necessario che non sia possibile prevedere
loop non aventi limite finito).
Bruno Bertaccini (mail to: [email protected])
Gli Algoritmi
Analisi e Programmazione
ANALISI: fase di comprensione del problema, in base
all’obiettivo da perseguire. Conduce ad un
disegno articolato del problema stesso.
Ogni problema che l’uomo si pone comporta una serie di
azioni (“decisioni”) stabilite in base allo stato
dell’informazione disponibile all’insorgere del problema
stesso: si effettua una rassegna degli elementi
determinanti alla soluzione, elencando gli elementi
necessari e quelli disponibili.
Vengono “decise” le azioni da compiere e la loro sequenza
temporale.
Bruno Bertaccini (mail to: [email protected])
Gli Algoritmi
Analisi e Programmazione
Generalizzazione della fase d’Analisi:
definizione dei dati in ingresso;
definizione dei risultati in uscita;
individuazione dei termini del problema e dei possibili
metodi risolutivi;
determinazione della necessità e della disponibilità di
risorse (di calcolo e memorizzazione);
generalizzazione del problema (definizione di una
classe di problemi da risolvere);
descrizione informale dell’algoritmo o degli algoritmi
necessari a risolvere la procedura.
Bruno Bertaccini (mail to: [email protected])
Gli Algoritmi
Analisi e Programmazione
PROGRAMMAZIONE: ha lo scopo di descrivere le
operazioni che l’elaboratore deve eseguire per
risolvere il problema.
Fase della programmazione
insieme delle attività e delle funzioni che trasformano il
bisogno (necessità di risolvere il problema con un
elaboratore) in una richiesta di formulazione,
costruzione e definizione delle regole di
comportamento per la soluzione di classi di processi di
elaborazione, fatte ad un insieme di risorse di calcolo.
Bruno Bertaccini (mail to: [email protected])
Gli Algoritmi
Analisi e Programmazione
Tecnica TOP-DOWN: si definiscono inizialmente
un insieme d’azioni a grandi linee (macro
istruzioni) e si procede per raffinamenti
successivi, fino ad arrivare ad operazioni
elementari che l’esperienza designa come
indipendenti dal linguaggio di programmazione
utilizzato per scrivere il programma.
Tecnica BOTTOM-UP: parte dai singoli dati e dalle
operazioni elementari da compiere su di essi,
arrivando, per aggregazione, ad una o più
procedure automatiche.
Bruno Bertaccini (mail to: [email protected])
Gli Algoritmi
Analisi e Programmazione
Indipendentemente dalla tecnica usata, la
programmazione si concretizza nei seguenti passi:
definizione formale dell’algoritmo, spesso in forma
grafica tramite un diagramma a blocchi;
stesura del programma
nel linguaggio di programmazione prescelto;
prova del programma.
La programmazione è sicuramente
un processo creativo non vincolato da regole,
che deve tenere in considerazione alcuni criteri di ottimizzazione
quali i tempi di calcolo e l’occupazione delle memorie.
Bruno Bertaccini (mail to: [email protected])
Gli Algoritmi
Esempi di algoritmi
Una ricetta di cucina.
Lettura di due valori numerici
e stampa del maggiore tra i due
Lettura di due valori numerici A e B
e stampa di (A-B)^2
n
i
2
Lettura del valore numerico n e calcolo di 
i 0
Lettura di due valori numerici M e N (con M>=N)
e calcolo del M.C.D.
Ordinamento di una sequenza di numeri
Bruno Bertaccini (mail to: [email protected])
Gli Algoritmi
Algoritmi rilevanti
Progetto Genoma Umano per la mappatura dei 100000
geni del DNA umano;
Navigazione Internet: percorsi ottimali che i dati devono
percorrere in rete per il rapido accesso a grandi quantità di
informazioni e motori di ricerca;
Percorso stradale minimo data una certa rete viaria (es:
mappe in internet);
Compressione del testo, crittografia e firme digitali;
Allocazione ottimale dei prodotti negli scaffali di un
supermercato (P. L. e Game Theory);
Gestione delle code;
…
Bruno Bertaccini (mail to: [email protected])
Gli Algoritmi
Efficienza di un Algoritmo
Quand’è che un Algoritmo è EFFICIENTE?
quando è CORRETTO: cioè produce il risultato
atteso;
quando è VELOCE (in termini di tempo impiegato
per produrre il risultato);
quando è PARSIMONIOSO (in termini di risorse
allocate per produrre il risultato).
Bruno Bertaccini (mail to: [email protected])
Strutture dati
(fondamenti)
Bruno Bertaccini (mail to: [email protected])
Strutture dati
Classificazione
Variabili numeriche
Bit
Intere
Reali (razionali)
precisione singola
precisione doppia
Complesse
Variabili carattere
Bruno Bertaccini (mail to: [email protected])
Strutture dati
Strutture di memorizzazione
Variabili singole
Vettori: una sequenza indicizzabile di valori numerici
dello stesso tipo
es: stringa = vettore di caratteri
Matrici: una sequenza indicizzabile di vettori dello
stesso tipo
Array: matrici multidimensionali
Liste: array differenziabili per tipo di valori memorizzabili
Bruno Bertaccini (mail to: [email protected])
I DIAGRAMMI
a BLOCCHI
(o Diagrammi di Flusso)
Bruno Bertaccini (mail to: [email protected])
I Diagrammi a Blocchi
Aspetti definitori
I Diagrammi a Blocchi sono uno strumento molto
utilizzato in informatica per una chiara e semplice
esposizione in forma grafica degli algoritmi.
Sono uno strumento fondamentale per l’analista
(servono a definire in modo schematico il processo
algoritmico di scomposizione di un problema),
danno una visione immediata dell’iter risolutivo e facilitano
il controllo di correttezza logica dell’algoritmo.
Inoltre hanno anche uno scopo comunicativo:
la documentazione di un algoritmo nel tempo.
È infatti molto più facile leggere un algoritmo schematizzato mediante
un diagramma a blocchi che leggerne la sua traduzione in uno
specifico linguaggio di programmazione.
Bruno Bertaccini (mail to: [email protected])
I Diagrammi a Blocchi
Aspetti definitori
Requisiti essenziali di un Diagramma a Blocchi:
• deve esistere un solo blocco di inizio;
• deve essere previsto almeno un blocco di fine;
• il diagramma può esibire un numero finito di blocchi
di controllo;
• il diagramma può prevedere un numero finito di
blocchi relativi sia ad operazioni aritmetiche e logiche
che di I/O.
Bruno Bertaccini (mail to: [email protected])
I Diagrammi a Blocchi
Simboli e regole di costruzione
Punto di Inizio e punti di Fine
Operazioni Aritmetiche e Logiche
Operazioni di Input/Output
Decisioni
Sottoprogrammi
Connessioni ad un qualsiasi punto
del diagramma
Bruno Bertaccini (mail to: [email protected])
I Diagrammi a Blocchi
Simboli e regole di costruzione
Regole di implementazione:
• ogni blocco logico/aritmetico o di I/O deve avere una
sola linea in ingresso e una sola in uscita;
• ogni blocco di controllo deve avere una sola linea in
ingresso e due (o più) linee in uscita;
• una linea può inserirsi in un blocco o in un’altra linea;
• dall’unico blocco iniziale parte una sola linea,
seguendo la quale, attraverso un insieme non vuoto
di blocchi deve potersi raggiungere uno dei blocchi
finali.
Bruno Bertaccini (mail to: [email protected])
I Diagrammi a Blocchi
es. 1 : scambio di due valori numerici
START
INPUT A
INPUT B
AUX = B
B=A
A = AUX
PRINT A
PRINT B
STOP
Bruno Bertaccini (mail to: [email protected])
semplice scambio
di 2 valori numerici
immessi da tastiera
nelle variabili A e B
I Diagrammi a Blocchi
es. 1 : scambio di due valori numerici
START
INPUT A
INPUT B
Scambia
A con B
PRINT A
PRINT B
STOP
Bruno Bertaccini (mail to: [email protected])
semplice scambio
di 2 valori numerici
immessi da tastiera
nelle variabili A e B
dove
Scambia
A con B
AUX = B
B=A
A = AUX
I Diagrammi a Blocchi
es. 2 : scambio di due valori numerici
START
INPUT A
INPUT B
A>B
Sì
Scambia
A con B
PRINT A
PRINT B
STOP
Bruno Bertaccini (mail to: [email protected])
No
scambio di 2 valori
numerici immessi da
tastiera nelle variabili A e B
solo se il primo è maggiore
del secondo
I Diagrammi a Blocchi
es. 3 : somma dei valori di un vettore
START
Somma di una certa
sequenza di valori,
immessi da tastiera
all’interno di un vettore
INPUT N
DIM V[N]
INPUT V[1]
…
INPUT V[N]
J=1
S=0
No
J <= N
Sì
S = S + V[J]
J=J+1
Bruno Bertaccini (mail to: [email protected])
PRINT S
STOP
I Diagrammi a Blocchi
es. 3 : somma dei valori di un vettore
Somma degli elementi
di un vettore V
già presente in memoria
Somma
vettore
START
J=1
S=0
No
J <= N
Sì
S = S + V[J]
J=J+1
Bruno Bertaccini (mail to: [email protected])
PRINT S
STOP
I Diagrammi a Blocchi
es. 4 : ricerca del minimo di un vettore
Minimo di
un vettore
Ricerca del minimo
di un vettore V
già presente in memoria
START
min = V[1]
N = length(V)
J=2
No
J <= N
Sì
J = J +1
No
V[J] < min
Sì
min = V[J]
Bruno Bertaccini (mail to: [email protected])
PRINT
min
STOP
I Diagrammi a Blocchi
es. 5 : somma, media, min e max di un vettore
START
A
INPUT N
media = S/N
DIM V[N]
PRINT
media
INPUT V[1]
…
INPUT V[N]
Minimo di un
vettore
Somma
vettore
Massimo di
un vettore
A
STOP
Bruno Bertaccini (mail to: [email protected])
Somma, media, min e max
di una sequenza di valori,
immessi da tastiera
all’interno di un vettore
I Diagrammi a Blocchi
es. 6 : calcolo di una serie parziale
START
Lettura del valore numerico
n e calcolo di
n
2
INPUT N
i 0
J=0
S=0
No
J <= N
Sì
S = S + 2^J
J=J+1
Bruno Bertaccini (mail to: [email protected])
PRINT S
STOP
i
I Diagrammi a Blocchi
es. 7 : calcolo del MCD (algoritmo di Euclide)
Lettura di due valori
numerici M e N
(con M>=N)
e calcolo del M.C.D.
START
INPUT N
INPUT M
No
M>N
Scambia
M con N
Sì
Q = INT(N/M)
R = N - M*Q
N=M
No
Sì
R=0
M=R
Bruno Bertaccini (mail to: [email protected])
PRINT
”MCD :”, M
STOP
I Diagrammi a Blocchi
es. 7 : calcolo del MCD (algoritmo inefficiente)
START
INPUT N
INPUT M
No
M>N
Scambia
M con N
Sì
Lettura di due valori
numerici M e N
(con M>=N)
e calcolo del M.C.D.
con un algoritmo
inefficiente
J=M
Q = INT(N / J)
R = N - J*Q
J=J-1
Sì
No
R=0
Bruno Bertaccini (mail to: [email protected])
PRINT
”MCD :”, J
STOP
I Diagrammi a Blocchi
es. 8 : radici di un polinomio di 2° grado
Ricerca delle due radici
reali x1 e x2, di una
equazione del tipo
ax  bx  c  0
2
se
a , b, c 
>0 :
  b  4ac
2
Bruno Bertaccini (mail to: [email protected])
b  
x
2a
=0 :
b
x
2a
<0 :
non esistono radici reali
I Diagrammi a Blocchi
es. 8 : radici di un polinomio di 2° grado
START
Ricerca delle due radici
reali x1 e x2, di una
equazione del tipo
INPUT
A,B,C
ax  bx  c  0
2
delta =
B*B-4*A*C
STOP
PRINT
”non esistono
radici reali”
>0
<0
delta
rad =
SQRT(delta)
=0
rad = 0
X1 =
(-B + rad)/(2*A)
X2 =
(-B - rad)/(2*A)
PRINT
X1, X2
STOP
Bruno Bertaccini (mail to: [email protected])
I Diagrammi a Blocchi
es. 9 : ricerca in un vettore
Verifica della presenza di
un certo elemento A
all’interno di un vettore V
preesistente in memoria
START
INPUT A
J=1
N = length(V)
Sì
J>N
J = J +1
PRINT
”elemento
non trovato”
STOP
PRINT
”elemento
trovato”
STOP
No
Sì
A = V[J]
No
Bruno Bertaccini (mail to: [email protected])
I Diagrammi a Blocchi
es. 10 : ordinamento
di un vettore
Ordinamento di un vettore V
preesistente in memoria:
un’ipotesi di lavoro
Start
7
4
3
8
1:
7
4
3
8
4:
3
7
4
8
2:
4
7
3
8
5:
3
4
7
8
3:
3
7
4
8
6:
3
4
7
8
3
4
7
8
Bruno Bertaccini (mail to: [email protected])
Stop
I Diagrammi a Blocchi
START
es. 10 : ordinamento
di un vettore
SORT
vettore
N = length(V)
Ordinamento
di un vettore V
preesistente in
memoria
I=1
I <= (N-1)
No
PRINT
V
Sì
J=I+1
J <= N
Sì
J=J+1
No
V[I] > V[J]
Sì
Scambia
V[I] con V[J]
Bruno Bertaccini (mail to: [email protected])
I=I+1
No
STOP
I Diagrammi a Blocchi
es. 11 : ricerca
in un vettore
(alg. dicotomico)
START
INPUT A
SORT
V
Verifica della presenza di un
certo elemento A all’interno di
un vettore V preesistente in
memoria, previa ordinamento
L1 = 1
L2 = length(V)
A < V[L1]
or
A > V[L2]
Sì
PRINT A
“non trovato”
STOP
No
A = V[L1]
or
A = V[L2]
Attenzione:
possibilità di loop infinito
Sì
PRINT A
“trovato”
No
STOP
med =
INT ( (L1 + L2) / 2 )
L2 = med
A >= V[med]
No
Bruno Bertaccini (mail to: [email protected])
L1 = med
Sì
I Diagrammi a Blocchi
START
es. 11 : ricerca
in un vettore
INPUT A
SORT
V
(alg. dicotomico)
L1 = 1
L2 = length(V)
A < V[L1]
or
A > V[L2]
Sì
PRINT A
“non trovato”
STOP
No
A = V[L1]
or
A = V[L2]
Verifica della presenza di un
certo elemento A all’interno di
un vettore V preesistente in
memoria, previa ordinamento
Sì
PRINT A
“trovato”
No
STOP
L1 = L2 - 1
Sì
No
med =
INT ( (L1 + L2) / 2 )
L2 = med
Bruno Bertaccini (mail to: [email protected])
A >= V[med]
No
L1 = med
Sì
Lo PSEUDOLINGUAGGIO
un ponte verso
i linguaggi di programmazione
Bruno Bertaccini (mail to: [email protected])
Lo pseudolinguaggio
La traduzione del diagramma
a blocchi in pseudolinguaggio
Condizioni:
IF (condizione) THEN
inizio blocco
istruzione 1
istruzione 2
…
ELSE
fine blocco
inizio blocco
istruzione 1
istruzione 2
…
fine blocco
Bruno Bertaccini (mail to: [email protected])
Lo pseudolinguaggio
La traduzione del diagramma
a blocchi in pseudolinguaggio
Condizioni:
IF (condizione) THEN
[blocco istruzioni]
ELSE IF (condizione) THEN
[blocco istruzioni]
ELSE
[blocco istruzioni]
Bruno Bertaccini (mail to: [email protected])
Lo pseudolinguaggio
La traduzione del diagramma
a blocchi in pseudolinguaggio
Condizioni:
SWITCH (espressione)
CASE (condizione1):
NON
in tutti i
linguaggi di
programmazione
[blocco istruzioni]
CASE (condizione2):
[blocco istruzioni]
CASE (condizione3):
[blocco istruzioni]
…
OTHER:
[blocco istruzioni]
Bruno Bertaccini (mail to: [email protected])
Lo pseudolinguaggio
La traduzione del diagramma
a blocchi in pseudolinguaggio
Iterazioni:
FOR (variabile) = (inizio) TO (fine) (step)
inizio blocco
istruzione 1
istruzione 2
…
fine blocco
WHILE (condizione)
inizio blocco
istruzione 1
istruzione 2
…
fine blocco
Bruno Bertaccini (mail to: [email protected])
Lo pseudolinguaggio
es. 1 : scambio di due valori numerici
START
INPUT A
INPUT B
AUX = B
B=A
A = AUX
PRINT A
PRINT B
STOP
Bruno Bertaccini (mail to: [email protected])
main
{
input A
input B
AUX = B
B=A
A = AUX
print A
print B
}
Lo pseudolinguaggio
es. 2 : scambio di due valori numerici
START
INPUT A
INPUT B
A>B
No
Sì
Scambia
A con B
PRINT A
PRINT B
STOP
Bruno Bertaccini (mail to: [email protected])
main
{
input A
input B
if (A > B) then {
AUX = B
B=A
A = AUX
}
print A
print B
}
Lo pseudolinguaggio
es. 3 : somma dei valori di un vettore
START
INPUT N
DIM V[N]
INPUT V[1]
…
INPUT V[N]
J=1
S=0
No
J <= N
PRINT S
Sì
S = S + V[J]
J=J+1
Bruno Bertaccini (mail to: [email protected])
STOP
main
{
input N
dim V(N)
S=0
for I = 1 to N {
input V(I)
S = S + V(I)
}
print S
}
Lo pseudolinguaggio
es. 4 : ricerca del minimo di un vettore
main
{
input N
dim W(N)
for I = 1 to N {
input W(I)
}
MIN = minimo(W)
print MIN
}
Bruno Bertaccini (mail to: [email protected])
minimo(V)
{
N = length(V)
M = V(1)
for I = 2 to N {
if (V(I) < M) then {
M = V(I)
}
}
return (M)
}
Lo pseudolinguaggio
n
es. 6 : calcolo della serie parziale
2
i
i 0
START
INPUT N
J=0
S=0
No
J <= N
PRINT S
Sì
S = S + 2^J
J=J+1
Bruno Bertaccini (mail to: [email protected])
STOP
main
{
input N
S=0
for I = 0 to N {
S = S + 2^I
}
print S
}
Lo pseudolinguaggio
es. 7 : calcolo del MCD (algoritmo di Euclide)
main {
input N
input M
if (M > N) then {
START
INPUT N
INPUT M
No
M>N
Scambia
M con N
Sì
Q = INT(N/M)
R = N - M*Q
N=M
No
Sì
R=0
M=R
Bruno Bertaccini (mail to: [email protected])
PRINT
”MCD :”, M
STOP
AUX = M
M=N
N = AUX
}
Q = int(N/M)
R = N - M*Q
while (R<>0) {
N=M
M=R
Q = int(N/M)
R = N - M*Q
}
print “MCD :”, M
}
Lo pseudolinguaggio
es. 8 : radici di un polinomio di 2° grado
main {
input A, B, C
if (A <> 0) then {
DELTA = B*B – 4*A*C
if (DELTA >= 0) then {
RAD = 0
if (DELTA > 0) then {
RAD = SQRT(DELTA)
}
X1 = (-B + RAD)/(2*A)
X2 = (-B - RAD)/(2*A)
print “le radici sono: “, X1, X2
}
else{
print “non esistono radici reali”
}
}
else {
print “è stato inserito un polinomio non di 2° grado”
}
}
Bruno Bertaccini (mail to: [email protected])
Lo pseudolinguaggio
es. 9 : ricerca in un vettore
ricerca1 (V,E)
{
N = length(V)
F=0
for I = 1 to N {
if (V(I) = E) then {
F=I
I=N
}
}
return (F)
}
main
{
input N
dim W(N)
for I = 1 to N {
input W(I)
}
input A
POS = ricerca1 (W,A)
if (POS > 0) then {
print “trovato in posizione ”, POS
}
}
Bruno Bertaccini (mail to: [email protected])
Lo pseudolinguaggio
es. 10 : ordinamento di un vettore
main
{
input N
dim W(N)
for I = 1 to N {
input W(I)
}
W = ordina (W)
for I = 1 to N {
print W(I)
}
}
Bruno Bertaccini (mail to: [email protected])
ordina (V)
{
N = length(V)
for I = 1 to N-1 {
for J = I+1 to N {
if (V(J) < V(I)) then {
A = V(I)
V(I) = V(J)
V(J) = A
}
}
}
return (V)
}