0
INFORMATICA  Algoritmi, funzioni e procedure (teoria  di base)
DAL PROBLEMA AL PROGRAMMA <ul><li>PROBLEMA  ALGORITMO  PROGRAMMA </li></ul><ul><li>  </li></ul><ul><li>1.  Analisi del pro...
ALGORITMO DEFINIZIONE (1) <ul><li>Un algoritmo e' una successione finita ed ordinata di azioni da eseguire per risolvere i...
ALGORITMO DEFINIZIONE (2) <ul><li>L'algoritmo e' indipendente dal linguaggio di programmazione e può essere rappresentato ...
PSEUDOCODIFICA(1) <ul><li>Utilizzando la pseudocodifica, il programmatore esprime le proprie idee attraverso espressioni e...
PSEUDOCODIFICA(2) <ul><li>Le istruzioni  LEGGI  e   SCRIVI  vengono utilizzate per descrivere le operazioni input ed outpu...
ESEMPIO PSEUDOCODIFICA <ul><li>Problema:  Trovare l'area di un rettangolo conoscendo la base e l'altezza. </li></ul><ul><l...
DIAGRAMMI A BLOCCHI (1) <ul><li>Attraverso il diagramma a blocchi (o  flow chart ) si può indicare l’ordine di esecuzione ...
DIAGRAMMI A BLOCCHI (2) <ul><li>I blocchi elementari sono i seguenti: </li></ul>
DIAGRAMMI A BLOCCHI (3) <ul><li>Un diagramma a blocchi descrive un algoritmo se: </li></ul><ul><li>ha un blocco iniziale e...
CONDIZIONI DI VALIDITÀ <ul><li>ciascun blocco azione, lettura/scrittura ha una sola freccia entrante e una sola freccia us...
ESEMPIO DIAGRAMMA A BLOCCHI <ul><li>Pseudocodifica:  Diagramma a blocchi: </li></ul>INIZIO FINE Chiedi(base, altezza) Legg...
SCOMPOSIZIONE DI UN PROBLEMA <ul><li>Sappiamo che un  programma  è un algoritmo scritto in un linguaggio comprensibile al ...
FUNZIONI E PROCEDURE <ul><li>Un sottoprogramma è un algoritmo per la soluzione di un sottoproblema scritto in un linguaggi...
PROCEDURA DEFINIZIONE <ul><li>Sottoprogramma che, attivato dall’apposita istruzione di chiamata nel programma principale, ...
ESEMPIO: CALCOLO DELLA MEDIA <ul><li>Problema:   chiedere all’utente 3 interi, calcolarne la media aritmetica, e stamparla...
FUNZIONI E PROCEDURE PER IL CALCOLO DELLA MEDIA <ul><li>Modelliamo come funzione il sottoprogramma per: </li></ul><ul><ul>...
FUNZIONE: ESEMPIO <ul><li>float media (int a, int b, int c){ </li></ul><ul><li>int somma = a + b + c; </li></ul><ul><li>fl...
PROCEDURA: ESEMPIO <ul><li>void stampa(float m){ </li></ul><ul><li>cout << “La media è: ” << m << “n”; </li></ul><ul><li>}...
USO DELLA FUNZIONE E DELLA PROCEDURA NEL PROGRAMMA FINALE <ul><li>… </li></ul><ul><li>float media (int a, int b, int c){ <...
PASSAGGIO DEI PARAMETRI <ul><li>Nell’esempio precedente, a, b, e c sono i  parametri formali  della funzione media, a cui,...
PASSAGGIO DI PARAMETRI PER VALORE <ul><li>Il passaggio del valore di x ad a consiste, di fatto, nella creazione di  una va...
POSSIBILE PROBLEMA <ul><li>A volte, il fatto che un parametro attuale non subisca modifiche da parte della funzione può no...
PASSAGGIO DI PARAMETRI PER INDIRIZZO <ul><li>Si ha questo tipo di passaggio quando alla funzione non è fornita una copia d...
ESEMPIO <ul><li>#include <iostream> </li></ul><ul><li>using namespace std;   </li></ul><ul><li>void azzera(int &n) { </li>...
PASSAGGIO DI PARAMETRI STRUTTURATI <ul><li>Attenzione: nel linguaggio C++, se un parametro è un dato strutturato (ad esemp...
DEFINIZIONE ARRAY(1) <ul><li>Un array può essere definito come una &quot;collezione organizzata di oggetti&quot;. Il conce...
DEFINIZIONE DI ARRAY(2)  <ul><li>Collezione finita di  N  variabili dello stesso tipo, ognuna identificata da un  indice  ...
DICHIARAZIONE ARRAY <ul><li>Vediamo come è possibile dichiarare un array: </li></ul><ul><ul><li>int  myarray[10] ;  </li><...
ARRAY COME PARAMETRI <ul><li>In particolare, quando un array viene passato come parametro, l’informazione che il sottoprog...
ESEMPIO <ul><li>int somma_valori (int v[], int dim){ int i; int somma = 0; for (i = 0; i < dim; i++) somma = somma + v[i];...
ESEMPIO COMPLETO  (SOMMA VALORI DI UN VETTORE ) <ul><li>#include <iostream> </li></ul><ul><li>using namespace std; </li></...
Upcoming SlideShare
Loading in...5
×

Informatica 1

1,804

Published on

Teoria di base con esempi in C++

Published in: Education
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total Views
1,804
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
37
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Transcript of "Informatica 1"

  1. 1. INFORMATICA Algoritmi, funzioni e procedure (teoria di base)
  2. 2. DAL PROBLEMA AL PROGRAMMA <ul><li>PROBLEMA ALGORITMO PROGRAMMA </li></ul><ul><li>  </li></ul><ul><li>1. Analisi del problema e identificazione di una soluzione; </li></ul><ul><li>2. Stesura dell’algoritmo risolutivo; </li></ul><ul><li>3. Programmazione, cioè scrittura dell’algoritmo in un linguaggio di programmazione; </li></ul><ul><li>4. Esecuzione traduzione del programma in un linguaggio direttamente eseguibile dalla macchina e verifica del suo funzionamento </li></ul>
  3. 3. ALGORITMO DEFINIZIONE (1) <ul><li>Un algoritmo e' una successione finita ed ordinata di azioni da eseguire per risolvere il problema. </li></ul><ul><li>Un algoritmo deve essere: </li></ul><ul><li>Finito costituito cioè da un numero limitato di passi (le istruzioni sono in numero finito e vengono eseguite un numero finito di volte); </li></ul><ul><li>Deterministico deve considerare tutti i casi possibili che si possono verificare durante l'esecuzione e per ogni caso deve indicare la soluzione da eseguire ; </li></ul><ul><li>Eseguibile cioè la sua esecuzione deve essere possibile con gli strumenti di cui si dispone; </li></ul><ul><li>Non ambiguo ogni istruzione deve consentire un’interpretazione chiara ed univoca; </li></ul>
  4. 4. ALGORITMO DEFINIZIONE (2) <ul><li>L'algoritmo e' indipendente dal linguaggio di programmazione e può essere rappresentato in: </li></ul><ul><ul><li>PSEUDOCODIFICA: descrizione di un algoritmo utilizzando termini del linguaggio comune. Non si tratta di un vero e proprio linguaggio di programmazione, ma di un linguaggio sintetico composto da un vocabolario e una sintassi molto ristretti. </li></ul></ul><ul><ul><li>DIAGRAMMI A BLOCCHI: linguaggio formale di tipo grafico per rappresentare l’ordine di esecuzione delle istruzioni negli algoritmi. </li></ul></ul>
  5. 5. PSEUDOCODIFICA(1) <ul><li>Utilizzando la pseudocodifica, il programmatore esprime le proprie idee attraverso espressioni elementari della lingua italiana. </li></ul><ul><li>Le regole seguenti vanno eseguite con rigore: </li></ul><ul><li>Le parole chiave che aprono e chiudono il testo di un algoritmo sono: INIZIO e   FINE  </li></ul><ul><li>Ogni istruzione è indicata con una frase del linguaggio corrente e può contenere un'espressione di tipo aritmetico o logico. </li></ul>
  6. 6. PSEUDOCODIFICA(2) <ul><li>Le istruzioni LEGGI e  SCRIVI vengono utilizzate per descrivere le operazioni input ed output dei dati. </li></ul><ul><ul><ul><li>leggi (lista di variabili) e scrivi (variabili e costanti) </li></ul></ul></ul><ul><li>La richiesta all'utente, per acquisire i dati necessari all'elaborazione, può essere fatta nel seguente modo: </li></ul><ul><ul><ul><li>chiedi (lista dei dati che servono) </li></ul></ul></ul><ul><li>Oltre a INIZIO e FINE sono utilizzate in pseudocodifica altre parole chiave che corrispondono ai passaggi fondamentali dell'algoritmo.    </li></ul>
  7. 7. ESEMPIO PSEUDOCODIFICA <ul><li>Problema: Trovare l'area di un rettangolo conoscendo la base e l'altezza. </li></ul><ul><li>Analisi del problema: </li></ul><ul><li>Dati di INPUT : base ed altezza del rettangolo. </li></ul><ul><li>Dati di OUTPUT : area del rettangolo. </li></ul><ul><li>Pseudocodifica: </li></ul>
  8. 8. DIAGRAMMI A BLOCCHI (1) <ul><li>Attraverso il diagramma a blocchi (o flow chart ) si può indicare l’ordine di esecuzione delle istruzioni: </li></ul><ul><li>Un particolare simbolo grafico detto blocco elementare è associato a ciascun tipo di istruzione elementare. </li></ul><ul><li>I blocchi sono collegati fra loro tramite frecce che indicano il susseguirsi delle istruzioni. </li></ul>
  9. 9. DIAGRAMMI A BLOCCHI (2) <ul><li>I blocchi elementari sono i seguenti: </li></ul>
  10. 10. DIAGRAMMI A BLOCCHI (3) <ul><li>Un diagramma a blocchi descrive un algoritmo se: </li></ul><ul><li>ha un blocco iniziale e uno finale; </li></ul><ul><li>è costituito da un numero finito di blocchi azione e/o blocchi lettura/scrittura e/o blocchi di controllo; </li></ul><ul><li>ciascun blocco elementare soddisfa le condizioni di validità . </li></ul><ul><li>  </li></ul>
  11. 11. CONDIZIONI DI VALIDITÀ <ul><li>ciascun blocco azione, lettura/scrittura ha una sola freccia entrante e una sola freccia uscente; </li></ul><ul><li>ciascun blocco di controllo ha una sola freccia entrante e due frecce uscenti; </li></ul><ul><li>ciascuna freccia entra in un blocco o si innesta su un’altra freccia; </li></ul><ul><li>ciascun blocco è raggiungibile dal blocco iniziale; </li></ul><ul><li>il blocco finale è raggiungibile da qualsiasi altro blocco. </li></ul>
  12. 12. ESEMPIO DIAGRAMMA A BLOCCHI <ul><li>Pseudocodifica: Diagramma a blocchi: </li></ul>INIZIO FINE Chiedi(base, altezza) Leggi(base, altezza) Scrivi(area) area=base*altezza
  13. 13. SCOMPOSIZIONE DI UN PROBLEMA <ul><li>Sappiamo che un programma è un algoritmo scritto in un linguaggio comprensibile al calcolatore </li></ul><ul><li>Un problema può essere talvolta scomposto in parti, che possono essere risolte in maniera indipendente per ottenere una soluzione al problema di partenza </li></ul><ul><li>Un programma quindi può essere suddiviso in diverse parti ( sottoprogrammi ) ognuna delle quali risolve un sottoproblema. </li></ul>
  14. 14. FUNZIONI E PROCEDURE <ul><li>Un sottoprogramma è un algoritmo per la soluzione di un sottoproblema scritto in un linguaggio di programmazione </li></ul><ul><li>Sottoprogrammi che restituiscono un risultato parziale tramite l’istruzione return prendono il nome di funzioni </li></ul><ul><li>Sottoprogrammi che prevedono solo l’esecuzione di un blocco di istruzioni senza l’esplicita restituzione di un risultato si chiamano procedure </li></ul>
  15. 15. PROCEDURA DEFINIZIONE <ul><li>Sottoprogramma che, attivato dall’apposita istruzione di chiamata nel programma principale, svolge le azioni in esso specificate allo scopo di risolvere il problema per il quale e’ stato realizzato. </li></ul><ul><li>Una procedura è individuata da un nome ed è composta da un insieme di istruzioni. Essa può essere chiamata da un punto qualsiasi del programma principale tutte le volte che si desidera </li></ul><ul><li>Utilità: </li></ul><ul><ul><li>Migliorano la leggibilità, la revisione e la correzione dei programmi </li></ul></ul><ul><ul><li>Raggruppano le istruzioni che devono essere eseguite più volte </li></ul></ul><ul><ul><li>Riutilizzo in altri programmi </li></ul></ul>
  16. 16. ESEMPIO: CALCOLO DELLA MEDIA <ul><li>Problema: chiedere all’utente 3 interi, calcolarne la media aritmetica, e stamparla su schermo </li></ul><ul><li>Il problema può essere scomposto nei seguenti sottoproblemi: </li></ul><ul><ul><li>richiesta numeri </li></ul></ul><ul><ul><li>calcolo media </li></ul></ul><ul><ul><li>stampa del risultato </li></ul></ul>
  17. 17. FUNZIONI E PROCEDURE PER IL CALCOLO DELLA MEDIA <ul><li>Modelliamo come funzione il sottoprogramma per: </li></ul><ul><ul><li>calcolo media </li></ul></ul><ul><li>Risolviamo il seguente sottoproblema per mezzo di una procedura: </li></ul><ul><ul><li>stampa del risultato </li></ul></ul><ul><li>La scrittura di questi sottoprogrammi in riferimento allo stesso programma principale (main) riflette il fatto che essi sono parte della soluzione a un unico problema </li></ul>
  18. 18. FUNZIONE: ESEMPIO <ul><li>float media (int a, int b, int c){ </li></ul><ul><li>int somma = a + b + c; </li></ul><ul><li>float risultato = somma/3; </li></ul><ul><li>return risultato; </li></ul><ul><li>} </li></ul>tipo del risultato restituito nome della funzione lista dei tipi e dei nomi dei parametri formali inizio del blocco di istruzioni della funzione fine del blocco di istruzioni della funzione istruzione return con cui si conclude l’esecuzione della funzione e si restituisce il risultato
  19. 19. PROCEDURA: ESEMPIO <ul><li>void stampa(float m){ </li></ul><ul><li>cout << “La media è: ” << m << “n”; </li></ul><ul><li>} </li></ul>non c’è alcun risultato restituito dal sottoprogramma, quindi il tipo del risultato è void (vuoto) non c’è alcun risultato da restituire, e infatti il blocco di istruzioni non include una istruzione return
  20. 20. USO DELLA FUNZIONE E DELLA PROCEDURA NEL PROGRAMMA FINALE <ul><li>… </li></ul><ul><li>float media (int a, int b, int c){ </li></ul><ul><li>int somma = a + b + c; </li></ul><ul><li>float risultato = somma/3; </li></ul><ul><li>return risultato; </li></ul><ul><li>} </li></ul><ul><li>void stampa(float m){ </li></ul><ul><li>cout << “La media è: ” << m << “n”; </li></ul><ul><li>} </li></ul><ul><li>int main(){ </li></ul><ul><li>int x,y,z; </li></ul><ul><li>float r; </li></ul><ul><li>cout << “inserisci 3 numeri:n”; </li></ul><ul><li>cin >> x >> y >> z; </li></ul><ul><li>r = media(x,y,z); </li></ul><ul><li>stampa(r); </li></ul><ul><li>… </li></ul><ul><li>} </li></ul>il risultato restituito dalla funzione va salvato in una variabile l’esecuzione di una procedura, invece, non prevede alcun risultato se non l’effetto delle istruzioni che la compongono
  21. 21. PASSAGGIO DEI PARAMETRI <ul><li>Nell’esempio precedente, a, b, e c sono i parametri formali della funzione media, a cui, al momento della chiamata della funzione nel main, vengono associati i valori dei parametri attuali x, y, e z </li></ul><ul><li>Tale corrispondenza è posizionale : ad a viene associato il valore di x perché sono entrambi i primi della lista, e così via </li></ul><ul><ul><li>Dei parametri attuali occorre indicare solo il nome, dei formali, invece, è necessario indicare il nome ed il tipo. </li></ul></ul>
  22. 22. PASSAGGIO DI PARAMETRI PER VALORE <ul><li>Il passaggio del valore di x ad a consiste, di fatto, nella creazione di una variabile temporanea con lo stesso valore di x che viene usata nelle istruzioni della funzione al posto di a </li></ul><ul><li>Per tutta l’esecuzione della funzione, la variabile x, quindi, non viene minimamente modificata: al termine della funzione sarà rimasta come prima </li></ul>
  23. 23. POSSIBILE PROBLEMA <ul><li>A volte, il fatto che un parametro attuale non subisca modifiche da parte della funzione può non essere ciò che desideriamo. Ad esempio: </li></ul><ul><li>#include <iostream> </li></ul><ul><li>using namespace std; </li></ul><ul><li>void azzera(int n) { </li></ul><ul><li>n=0; </li></ul><ul><li>cout << &quot;stampa il valore della procedura= &quot; <<n <<&quot;n&quot;; </li></ul><ul><li>} </li></ul><ul><li>int main(){ </li></ul><ul><li>int x; </li></ul><ul><li>cout <<&quot;inserisci il valore di X: n&quot;; </li></ul><ul><li>cin>>x; </li></ul><ul><li>azzera(x); </li></ul><ul><li>cout<< &quot;stampa il valore del main= &quot; <<x<<&quot;n&quot;; </li></ul><ul><li>system(&quot; pause&quot;); </li></ul><ul><li>return(0); </li></ul><ul><li>} </li></ul>in questo caso la X non viene azzerata
  24. 24. PASSAGGIO DI PARAMETRI PER INDIRIZZO <ul><li>Si ha questo tipo di passaggio quando alla funzione non è fornita una copia del valore del parametro attuale (come nel passaggio per valore) bensì l’ indirizzo della cella di memoria contenente il parametro attuale. </li></ul><ul><li>In questo modo, la funzione non esegue le sue istruzioni su una copia, ma direttamente sul parametro attuale. </li></ul>
  25. 25. ESEMPIO <ul><li>#include <iostream> </li></ul><ul><li>using namespace std; </li></ul><ul><li>void azzera(int &n) { </li></ul><ul><li>n=0; </li></ul><ul><li>cout << &quot;stampa il valore della procedura= &quot; <<n <<&quot;n&quot;; </li></ul><ul><li>} </li></ul><ul><li>int main(){ </li></ul><ul><li>int x; </li></ul><ul><li>cout <<&quot;inserisci il valore di X: n&quot;; </li></ul><ul><li>cin>>x; </li></ul><ul><li>azzera(x); </li></ul><ul><li>cout<< &quot;stampa il valore del main= &quot; <<x<<&quot;n&quot;; </li></ul><ul><li>system(&quot;pause&quot;); </li></ul><ul><li>return(0); </li></ul><ul><li>} </li></ul>il simbolo & indica che il passaggio del parametro è per indirizzo questa volta la variabile x è veramente azzerata e su schermo compare ‘0’
  26. 26. PASSAGGIO DI PARAMETRI STRUTTURATI <ul><li>Attenzione: nel linguaggio C++, se un parametro è un dato strutturato (ad esempio: un array), viene sempre passato per indirizzo , per risparmiare la memoria che verrebbe occupata da una copia del parametro attuale </li></ul><ul><li>Data questa regola, nella scrittura della lista dei parametri formali di un sottoprogramma si omette il simbolo ‘ & ’ quando trattiamo gli array </li></ul>
  27. 27. DEFINIZIONE ARRAY(1) <ul><li>Un array può essere definito come una &quot;collezione organizzata di oggetti&quot;. Il concetto di &quot;collezione&quot; implica che tali oggetti siano dello stesso tipo, un array in C++ è una collezione di variabili dello stesso tipo. </li></ul><ul><ul><li>&quot;Organizzata&quot; significa che è possibile identificare univocamente tutti gli oggetti dell'array in modo preciso; questo in C++ viene fatto tramite l'uso di indici numerici che, in un array di dimensione N, vanno da 0 ad N-1. </li></ul></ul>
  28. 28. DEFINIZIONE DI ARRAY(2) <ul><li>Collezione finita di N variabili dello stesso tipo, ognuna identificata da un indice compreso tra 0 e N-1 , dove N è la dimensione dell’array </li></ul><ul><ul><li>Gli array sono sequenze di variabili dello stesso tipo, posizionate consecutivamente nella memoria. Questo significa, ad esempio,  che possiamo memorizzare 5 valori di tipo int senza bisogno di dichiarare cinque diverse variabili. Per fare questo è sufficiente dichiarare un array di cinque elementi di tipo int .   </li></ul></ul>
  29. 29. DICHIARAZIONE ARRAY <ul><li>Vediamo come è possibile dichiarare un array: </li></ul><ul><ul><li>int myarray[10] ; </li></ul></ul><ul><li>Come si può notare un array viene dichiarato mettendo il nome della variabile ( myarray ) e, tra parentesi quadre, la cifra che identifica il numero di elementi dello stesso tipo ( int ) e quindi la dimensione dell'array. </li></ul>
  30. 30. ARRAY COME PARAMETRI <ul><li>In particolare, quando un array viene passato come parametro, l’informazione che il sottoprogramma riceve è solo l’indirizzo della prima cella dell’array </li></ul><ul><li>Sarà cura del programmatore aggiungere un altro parametro che indichi la dimensione dell’array in modo che il sottoprogramma possa eseguire le istruzioni sull’array in maniera corretta </li></ul>
  31. 31. ESEMPIO <ul><li>int somma_valori (int v[], int dim){ int i; int somma = 0; for (i = 0; i < dim; i++) somma = somma + v[i]; return somma; </li></ul><ul><li>} </li></ul><ul><li>int main(){ int vettore[10]; int s; … s = somma_valori(vettore, 10); cout << “la somma dei valori dell’array e’: ” << s << “n”; … </li></ul><ul><li>} </li></ul>il parametro è un array di int e la sua dimensione è un parametro separato nel parametro attuale viene specificato solo il nome dell’array
  32. 32. ESEMPIO COMPLETO (SOMMA VALORI DI UN VETTORE ) <ul><li>#include <iostream> </li></ul><ul><li>using namespace std; </li></ul><ul><li>int somma_valori (int v[], int dim){ </li></ul><ul><li>int i; int somma = 0; </li></ul><ul><li>for (i = 0; i < dim; i++) </li></ul><ul><li>somma = somma + v[i]; </li></ul><ul><li>return somma; </li></ul><ul><li>} </li></ul><ul><li>int main(){ </li></ul><ul><li>int vettore[5], s, i; </li></ul><ul><li>cout <<&quot; Inserisci il vettore n&quot;; </li></ul><ul><li>for (i=0; i<5; i++) { </li></ul><ul><li>cout<< &quot;inserisci l'elemento di indice &quot;<< i<< &quot; del vettore:&quot;; </li></ul><ul><li>cin >> vettore[i]; </li></ul><ul><li>cout<<&quot;n&quot;; } </li></ul><ul><li>s= somma_valori(vettore, 5); </li></ul><ul><li>cout << &quot;la somma dei valori dell' array e': &quot; << s << &quot;n&quot;; </li></ul><ul><li>system(&quot; pause &quot; ); </li></ul><ul><li>return 0; </li></ul><ul><li>} </li></ul>
  1. A particular slide catching your eye?

    Clipping is a handy way to collect important slides you want to go back to later.

×