MAPPE relative alla seconda settimana di lezione (CLICK

PRINCIPI DI PROGRAMMAZIONE PRINCIPI
DI PROGRAMMAZIONE
INFORMATICA
Prof. Folgieri, aa
Prof.
Folgieri, aa 2009
2009‐2010
2010
Università dell’Insubria ‐ Varese
ALGORITMI
RAPPRESENTAZIONE ALGORITMI
LINGUAGGIO NATURALE
Non confondere con i significati finanziari:
Strategia top down. Strategia di investimento volta ad individuare i
settori e le industrie dai quali ci si attende una buona performance e i
titoli più appetibili al loro interno
Approccio bottom-up l'investitore infatti concentra la propria
attenzione su una società specifica anziché sul settore in cui la
società opera o sull'economia nel suo complesso.
METAFORA DELL’ALTALENA
METAFORA DELL’ALTALENA (più recente)
DIAGRAMMA A BLOCCHI standard
DIAGRAMMA A BLOCCHI non standard
• elaborazione alternativa
• documento
• documenti multipli
• input manuale
input manuale
• operazione manuale
• dati memorizzati
• disco magnetico (supporto /
)
dati/base di dati)
UML
CASI D’USO
d
descrivono il comportamento esterno di un sistema
i
il
di
i
DIAGRAMMI DI CLASSE
tipi di entità, relative caratteristiche, relazioni tra tipi
i i di
ià l i
i i h
l i i
i i
DIAGRAMMI DI SEQUENZA
scenari, generici e istanze
i
i i i
DIAGRAMMI DI COLLABORAZIONE
cooperazione componenti per soluzione
i
i
l i
DIAGRAMMI DI STATO
passaggi stato entità o classe
i
ià l
PSEUDOCODICE e UTILIZZO DI PSEUDOCODICE
UTILIZZO DI
LINGUAGGIO DI PROGRAMMAZIONE
LINGUAGGIO DI PROGRAMMAZIONE
saranno chiari quando entreremo nel vivo…
COMPILATORI ED INTERPRETI
STRUTTURA LINGUAGGI
•
•
•
•
•
Inizialmente sequenziale
Poi destrutturata (salti)
Poi destrutturata (salti)
Poi routine
Poi strutturata
Fino a OO
Fino a OO
NIDIFICAZIONE
• In generale linguaggio strutturato a blocchi
– Inizio‐fine programma e blocco
p g
• Nidificazione:
STRUTTURE COMUNI
ITERAZIONE E RICORSIONE
Strutture viste: iterazione
Ricorsione: procedura o funzione che chiama se stessa
Esempio Fibonacci:
Fib(n) = Fib(n - 1) + Fib(n - 2); Fib(0) = Fib(1) = 1
Esempio codice C
/* questo programma calcola l’n-simo numero di Fibonacci */
/* con fib(0) = fib(1) = 1
1; fib(
fib(n)) = fib(
fib(n-1)
1) + fib(n-2)
fib( 2) per n1
1 */
#include int fib (int x)
{ if ((x == 1) || (x == 0))
{ return 1; }
else
{ return fib(x-1)
( ) + fib(x-2);
( ) }
} main()
{ int n; do
{ printf("Enter
printf( Enter n: (0<n<20)
(0 n 20) ");
); scanf(
scanf("%d",
%d , &n); }
while ((n <= 0) || (n = 20)); printf("\n\nThe value of fib(%d) is:\t%d\n", n, fib(n)); }
ALGORITMI DI BASE
ALGORITMI DI BASE
• da conoscere
• Tra questi: ricerca di un elemento in un insieme. Diversa a seconda di come organizzato:
d di
i t
– insieme organizzato ad elenco sequenziale, cioe` come un array, array
– elementi dell'array disordinati
– elementi dell'array ordinati alfabeticamente per Nome
elementi dell'array ordinati alfabeticamente per Nome
– elementi dell'array ordinati alfabeticamente per Numero
– insieme organizzato come lista lineare
i i
i t
li t li
– insieme organizzato come albero binario (a dizionario) ARRAY
• Elenco con più campi
• Se non ordinato o no informazioni: ricerca sequenziale
RICERCA BINARIA IN ARRAY ORDINATO
per nome (ovvero: A[i].nome < = A[j].nome per 0 < = i < j < n) se si può calcolare a priori l'indirizzo di dove si trova l'i‐esimo elemento dell'array (0 < = i < n). La ricerca binaria è basata sul seguente algoritmo espresso in pseudo codice: pseudo‐codice:
Per trovare una chiave in A[Sx ...Dx], Calcolare il punto di mezzo dell'elenco:
Calcolare il punto di mezzo dell
elenco: Mid = (Sx+Dx)/2
Mid = (Sx+Dx)/2
Guardare cosa si è trovato a metà elenco (A[Mid].Nome)
Se il campo nome è quello cercato la ricerca è conclusa
Se il campo nome è quello cercato, la ricerca è conclusa
Altrimenti, se A[Mid] > Chiave, e se la chiave è nell'elenco
e se la chiave è nell
elenco, dovrà
dovrà
essere nella metà sinistra
dell'elenco
dell
elenco, ovvero in A[Sx ... Mid‐1]
ovvero in A[Sx Mid 1]
Altrimenti, la chiave cercata non può essere che nella metà destra
che nella metà destra,
ovvero A[Mid+1 ... Dx]
RICERCA IN ARRAY ORDINATO PER NUMERO (di telefono)
Caso semplice: ricerca sequenziale.
In alternativa ricerca binaria:
In alternativa ricerca binaria:
trovo il punto medio dell’array
Se il nome è in questa posizione mi fermo altrimenti cerco
Se il nome è in questa posizione mi fermo, altrimenti cerco nella metà di sinistra. In caso contrario nella metà di destra.
Proviamo a scriverlo in pseudo‐codice…
ORDINAMENTO DI UN VETTORE (ARRAY)
Algoritmi noti:
• SelectionSort
l
• BubbleSort
• HeapSort
• ShellSort
• MergeSort
• Per le velocità e le complessità degli algoritmi far riferimento al libro (le chiedo)