Funzioni e procedure
|
|
- Demetrio Tortora
- 8 anni fa
- Visualizzazioni
Transcript
1 Funzioni e procedure DOTT. ING. LEONARDO RIGUTINI DIPARTIMENTO INGEGNERIA DELL INFORMAZIONE UNIVERSITÀ DI SIENA VIA ROMA SIENA UFF RIGUTINI@DII.UNISI.IT
2 Sottoprogrammi
3 Sottoprogrammi Nella creazione di un programma può accadere che problemi simili appaiano in varie parti diverse La soluzione più ovvia è quella di replicare il codice in ogni parte dove è necessario, ma questa soluzione non è certamente la più comoda ed efficace: - Se il codice ha un errore, infatti, esso sarà replicato in tutte le parti in cui quel codice è stato copiato - Se quella parte di codice viene aggiornata, sarà necessario aggiornare tutte le parti in cui è stato copiato Molto poco flessibile e manutenibile: - uso di sottoprogrammi
4 Sottoprogrammi Sottoprogrammi: parti di codice separate dal flusso principale del programma che possono essere richiamate laddove sia richiesta tale funzionalità senza dover replicare il codice ogni volta Un sottoprogramma deve essere innanzitutto definito, cioè deve essere dichiarato da qualche parte ciò che esso esegue, su cosa lo esegue e cosa restituisce (se restituisce qualcosa)
5 Sottoprogrammi Una volta definito, il sottoprogramma può e deve essere implementato Implementare: scrivere il corpo del sottoprogramma, dichiarando le variabili necessarie e scrivendo le istruzioni che permettono di eseguire il compito per cui è stato progettato Una volta dichiarato e implementato, si può far riferimento a tale sottoprogramma ogni volta che nel codice è richiesta la funzionalità implementata nel sottoprogramma
6 Struttura completa di un programma C
7 Struttura di un programma La struttura di un programma C deve includere: - Una parte di direttive - Un programma principale (il main) che a sua volta è costituito da una parte dichiarativa (dichiarazione variabili) ed una esecutiva (istruzioni) A questa struttura possiamo aggiungere nuovi elementi derivati dalla scomposizione del problema in sottoprogrammi: Una parte dichiarativa globale Una serie di definizioni di sottoprogrammi
8 Struttura di un programma In particolare: - Parte dichiarativa globale: questa parte è compresa tra la parte di direttive ed il programma principale (il main). Essa contiene la dichiarazione di tutti gli elementi che sono condivisi (ossia usati in comune) dal programma principale e dai sottoprogrammi. Tali elementi possono essere costanti, tipi, variabili ed altro ancora. Per esempio se nella parte dichiarativa troviamo la dichiarazione int x; ciò significa che alla variabile x possono avere accesso il programma principale e tutti i suoi sottoprogrammi. - Una serie di definizioni di sottoprogrammi: in questa parte sono dichiarate tutti i sottoprogrammi che poi sono implementati nel progetto.
9 Struttura di un programma La nuova struttura dei programmi appena costruita introduce una importante novità: diversi elementi (variabili, tipi ecc ) possono essere dichiarati in posti diversi Vedremo in effetti che anche i sottoprogrammi possono avere la propria parte dichiarativa. Ma allora: - Perché abbiamo bisogno di dichiarare diversi elementi in posti diversi? - Esistono delle regole che dicono quali elementi possono essere usati dai sottoprogrammi?
10 Struttura di un programma Le domande precedenti avranno risposta più avanti Per adesso limitiamoci a dire che: - Il programma principale e tutti i sottoprogrammi possono utilizzare tutti e soli gli elementi dichiarati nella propria parte dichiarativa, nonché quelli che sono stati dichiarati nella parte dichiarativa globale
11 Funzioni e procedure
12 Funzioni e procedure Ma cosa sono di preciso i sottoprogrammi? Ogni sottoprogramma è un blocco più o meno lungo di codice che riceve in ingresso alcuni parametri (anche nessuno) e può restituire un valore: I parametri di ingresso sono variabili in cui sono inseriti i valori nel momento in cui il sottoprogramma è utilizzato nelle varie parti del codice Il sottoprogramma utilizza questi parametri per eseguire il suo compito ed eventualmente restituisce a sua volta al chiamante un valore
13 Funzioni e procedure Formalmente esistono due tipologie di sottoprogrammi: - Le funzioni, che in analogia con le funzioni matematiche, ricevono alcuni valori in ingresso e restituiscono un valore in uscita - Le procedure, che ricevuti alcuni dati in ingresso, eseguono un compito che non può concettualmente essere associato ad una funzione (es. stampa, aggiornamento ecc ) La distinzione è formale ma utile dal punto di vista didattico: Le procedure, in effetti possono essere assimilate a funzioni che non restituiscono alcun valore, ma eseguono semplicemente un compito
14 Funzioni
15 Funzioni Dal punto di vista matematico, una funzione è una regola matematica che prende valori da un dominio e genera valori appartenenti ad un codominio: - Somme, funzioni aritmetiche, ecc In informatica una funzione è molto simile alla definizione matematica: una funzione utilizza alcune variabili ognuna di un certo tipo (=dominio) e resituisce un valore (=codominio)
16 Funzioni Per costruire ed usare come sottoprogrammi operazioni non già disponibili nel linguaggio sono necessari due passi: - La definizione della funzione - La chiamata della funzione
17 Dichiarazione di funzione Un sottoprogramma di tipo funzione viene chiamato brevemente funzione La dichiarazione di una funzione è costituita da: - Una testata (o header) - L implementazione racchiusa tra parentesi graffe e costituita a sua volta da: La parte dichiarativa (detta parte dichiarativa locale) La parte esecutiva (detta corpo della funzione)
18 Header La testa contiene le informazioni più rilevanti per il corretto utilizzo della funzione ed è costituita a sua volta da: - Tipo del risultato - Identificatore della funzione (nome della funzione) - Lista dei parametri, su cui la funzione è applicata. In termini matematici la lista dei parametri costituisce il dominio della funzione mentre il tipo del risultato ne è il codominio
19 Lista dei parametri La lista dei parametri è racchiusa tra due parentesi tonde, aperta e chiusa e consiste in una successione di dichiarazione di parametri formali, separate tra loro da una virgola. Ogni dichiarazione di parametro formale è costituita a sua volta da un identificatore di tipo di dato che può essere sia un tipo predefinito (int, char, double ) sia un tipo di dato definito dall utente (struct, enum, ). I parametri formali si chiamano così poiché non hanno valore proprio ma sono semplicemente dei riferimenti simbolici agli argomenti delle funzioni
20 Valore di ritorno Il valore di ritorno (risultato) di una funzione è il tipo di dato del risultato della funzione stessa Esso può essere di tipo predefinito o definito dall utente. In particolare una funzione non può restituire un array o funzioni ma può restituire un puntatore a qualsiasi tipo.
21 Dichiarazione di funzione La sintassi comune di una dichiarazione di funzione è la seguente: Dove [tipo_di_dato] [nome_della_funzione] ([lista di parametri]) [lista di parametri] = lista di dichiarazioni di variabili visibili dall interno e dall esterno della funzione double potenza( int x, int y); questa riga di codice dice che da qualche parte esiste una funzione potenza che riceve in ingresso due interi, esegue qualcosa e ritorna un double.
22 Dichiarazione locale Dopo la testata seguono le dichiarazioni locali in cui sono definiti tutti gli oggetti necessari alla realizzazione della funzionalità desiderata Esse seguono le stesse leggi per la costruzione della parte dichiarativa di un programma Si possono trovare quindi dichiarazioni di tipi, di costanti, di variabili e di altri sottoprogrammi
23 Corpo della funzione e return Infine si trova il corpo della funzione costruito con le medesime regole sintattiche del programma principale Al suo interno però si trova normalmente una o più istruzioni di return la cui sintassi è definita dalla parola chiave return seguita da una espressione. L istruzione return assegna alla variabile risultato (che può essere immaginata come identificata dal nome dellafunione) il valore dell espressione coinvolta nel return e fa sì che l esecuzione della funzione termini. L espressione coinvolta nell istruzione return è quindi del tipo del codominio della funzione (ovvero il tipo di dato restituito dalla funzione): il suo valore nell istante di esecuzione dell istruzione return sarà il risultato della funzione
24 Istruzione return Nel corpo di un sottoprogramma possono essere presenti più istruzioni return ma ovviamente solo la prima che si incontra durante l esecuzione del flusso di istruzioni nel sottoprogramma viene eseguita Se nessuna istruzione return è presente nel corpo della funzione o se quelle presenti non vengono eseguite (perché in rami condizionali non utilizzati), il sottoprogramma termina in corrispondenza del simbolo } che conclude il corpo della funzione: in tal caso però il risultato della funzione è indefinito e ciò provoca una segnalazione di errore.
25 Esempi di funzioni double fatturato_totale(elencofatture ef) { double totale; int cont; } totale=0; for (cont=0; cont < ef.numfatture;cont++) { totale=totale+ef.sequenza[cont].importo; } return totale; Questa funzione restituisce il valore del totale degli importi delle fatture appartenenti ad un elenco di fatture (ElencoFatture è un tipo di dato definito dall utente tramite struct). Si noti l uso delle variabili locali cont e totale che sono utilizzate esclusivamente allo scopo di memorizzare valori all interno della funzione
26 Esempio di funzione int RadiceIntera (int par) { int cont=0; } while (cont*cont <= par) { cont = cont +1; } return (cont - 1); Questa funzione produce la radice quadrata intera del parametro par, cioè il massimo intero il cui quadrato non sia superiore al valore di par. Si noti come se par è negativo, il risultato è -1 e questo valore può essere utilizzato per segnalare un uso improprio della fuinzione
27 Chiamata delle funzioni Una funzione viene applicata ad una serie di valori appartenenti al dominio della funzione e restituisce un risultato. Più precisamente, la sintassi di una chiamata di funzione consiste nel nome della funzione stessa seguito dalla lista dei parametri attuali racchiusa tra parentesi tonde. I parametri attuali indicano i valori degli argomenti rispetto ai quali la funzione deve essere calcolata. Ogni parametro può quindi essere una espressione qualsiasi, eventualmente contenente una chiamata di funzione.
28 Chiamata delle funzioni La corrispondenza tra parametri segue l ordine della dichiarazione: al primo parametro formale viene fatto corrispondere il primo parametro attuale di ogni chiamata e via di seguito. Da questo segue che il numero ed il tipo di dato di parametri attuali in ogni chiamata deve essere lo stesso di quello dei parametri formali. Il tipo dei parametri è fissato una volta per tutte dalla dichiarazione della funzione come abbiamo visto precedentemente.
29 Chiamata delle funzioni Esempi: x = sin (y) cos(pigreco alfa); x = cos (atan(y) beta ); RisultatoGestione = FatturatoTotale(ArchivioFatture) SommaCosti(ArchivioCosti); Det1 = Determinante(Matrice1); Det2 = Determinante(MatriceInversa(Matrice1)); TotaleAssoluto = Sommatoria(lista1) + Sommatoria(lista2); ElencoOrdinato = Ordina(Elenco); ecc
30 Prototipo delle funzioni All interno di un programma C una funzione può essere chiamata purchè risulti definita oppure dichiarata. Definizione e Dichiarazione non sono termini equivalenti: la dichiarazione di una funzione (normalmente chiamata prototipo) si limita a richiamare la testata nel modo spiegato precedentemente ed ha lo scopo di facilitare la compilazione e la comprensione del programma.
31 Prototipo delle funzioni Talvolta infatti la chiamata di una funzione precede nel codice la definizione della funzione (ossia l implementazione) mentre altre volte le funzioni utilizzate da un programma sono definite in file propri del sistema C. Le funzioni di libreria sono esempi di funzioni richiamabili da diversi programmi: - La loro definizione è contenuta in file messi a disposizione dal creatore della libreria e non è necessario ridefinire tali funzioni internamente al programma che desidera richiamarle
32 Parte dichiarativa del programma e delle funzioni Riconsiderando quanto detto circa le parti dichiarative del programma principale e delle funzioni di un programma C, esse possono contenere i seguenti elementi: - Dichiarazioni di costanti - Dichiarazioni di tipo - Dichiarazioni di variabili - Prototipi delle funzioni
33 Procedure
34 Procedure Non sempre le funzionalità di cui abbiamo bisogno possono essere descritte come funzioni matematiche Per esempio, supponiamo di voler stampare un elenco di fatture. Ciò deve essere fatto in maniera parametrica poiché può capitare di voler stampare elenchi diversi in momenti diversi: abbiamo bisogno di una operazione StampaFatture che ha in comune con una funzione il fatto di avere le fatture da stampare come parametri ma, diversamente da essa, ha come scopo non il calcolo di un valorema la produzione di un tabulato di stampa
35 Le procedure Vi sono alcuni casi in cui l effetto dell operazione non è ben descritto come il calcolo di una operazione matematica: - Inserimento di una nuova fattura in un archiviofatture: il risultato atteso non è un nuovo archiviofatture ma l aggiornamento di una variabile già esistente. - Ordinare una archivio di fatture secondo per esempio la data di emissione. L effetto di un sottoprogramma Ordina(archivio) non deve restituire un risultato ma deve modificare archivio in modo che gli elementi in esso contenuti siano ordinati per data. In conclusione in diverse occasioni il compito di una operazione non (o non è soltanto) quello di produrre un risultato di un certo tipo, ma è modificare lo stato, cioè il contenuto, del programma che ne chiede l esecuzione: in tali casi il sottoprogramma utilizzato è chiamato procedura
36 Procedura Le procedure sono del tutto simili alle funzioni. Hanno una parte dichiarativa composta da: - Header - Dichiarazioni variabili locali - Corpo La differenza è che una procedura, quindi, in generale, non restituisce un valore e quindi l header ha come valore di ritorno un tipo speciale: void Il tipo void può essere impiegato come tipo dei parametri formali nel caso non esistano parametri passati alla funzione o procedura
37 Chiamata delle procedure La chiamata ad una procedura è una istruzione uguale alla chiamata ad una funzione. Consiste ne: - Identificatore della procedura - Elenco dei parametri attuali fra parentesi tonde La differenza sta nel fatto che tale chiamata non produce come risultato un valore ma solamente la modifica di uno o più parametri attuali. I parametri attuali indicano i valori degli argomenti con i quali deve essere eseguita la procedura: ogni paramtero può essere costituito da un qualsiasi genera di espressione
38 Chiamata delle procedure La corrispondenza tra parametri formali e parametri attuali segue le stesse regole della chiamata delle funzioni: il rpimo parametro formale viene assegnato al primo parametro attuale e così via. Esempio: Typedef struct { String indirizzo; double ammontare; Data DataFattura; } DescrizioneFatture;
39 Chiamata delle procedure Typedef struct { int NumFatture; DescrizioneFatture Sequenza[MaxNumFatt]; } ElencoFatture; ElencoFatture ArchivioFatture; void inseriscifattura(descrizionefatture Fattura); boolean Precede(Data d1, Data d2); void main() { Data DataOdierna; DescrizioneFatture Fattura1,Fattura2; inseriscifattura(fattura1); if (Precede(Fattura2.DataFattura,DataOdierna)) { inseriscifattura(fattura2); } }
40 Chiamata delle procedure void inseriscifattura(descrizionefatture fattura) { if (ArchivioFatture.NumFatture == MaxNumFatture) { printf( L archivio è pieno ); } else { ArchivioFatture.NumFatture=ArchivioFatture.NumFatture+1; ArchivioFatture.Sequenza[ArchivioFatture.NumFatture-1]=fattura; } }
41 Passaggio di parametri
42 Passaggio di parametri Cosa succede quando si passa una variabile come parametro ad una funzione? Ossia, se all interno della funzione modifico il valore di quel parametro, il valore della variabile originaria viene modificato? La risposta è: dipende!! Esistono due modi per il passaggio dei parametri: - Per valore - Per riferimento
43 Passaggio di parametri per valore Quando è richiesto che i valori delle variabili non siano modificati dal corpo della funzione, quello che avviene è che il valore della variabile viene copiato nella variabile-parametro della funzione. In questo modo: - ogni modifica alla variabile locale non si riflette sulla variabile esterna - ogni modifica fatta alle variabili locali, però, va persa all uscita dalla funzione e solo il risultato ritornato è visibile dall esterno della funzione Questo metodo di passaggio dei parametri va sotto il nome di passaggio per copia o per valore
44 Passaggio di parametri per riferimento Quando invece è richiesto che le variabili interne alla funzione siano non una copia di quelle esterne, ma la stessa cosa, si parla di passaggio per riferimento: - In questo caso, la variabile locale assume il riferimento in memoria alla variabile esterna - Quindi ogni modifica ad essa è una modifica alla cella di memoria originale e permane anche alla chiusura dalla funzione Normalmente questa situazione è richiesta quando si ha un sottoprogramma che deve effettuare delle operazioni su un dato e non ritorna alcun valore: ES. aggiornamento del fatturato totale, ecc in questo caso il fatturato totale, una volta aggiornato deve rimanere tale, quindi è necessario operare l aggiornamento sulla variabile originale e non su una copia del valore
45 Passaggio di parametri Notiamo che il passaggio per valore richiede la copia della variabile nella nuova variabile locale, mentre il riferimento ha un costo costante, viene copiato comunque un indirizzo di memoria - Se stiamo passando dati strutturati particolarmente complessi, array di grandi dimensioni, ecc il passaggio per valore può essere molto più lento del passaggio per riferimento E anche vero però che il passaggio per valore è molto più safety rispetto all altro, dato che qualsiasi modifica, anche quella non voluta ed erronea non si riflette sul dato originario
46 Passaggio di parametri Il metodo utilizzato per il passaggio dei parametri cambia da linguaggio a linguaggio: - Il C e C++ utilizzano il passaggio per valore, ma forniscono dei tipi di dato che permettono di realizzare il passaggio per riferimento (puntatori e riferimenti) - Il JAVA utilizza il passaggio per riferimento. Il passaggio per valore può comunque essere effettuato costruendo ogni volta una copia del parametro e passare quella alla funzione.
47 Funzioni e procedure La differenza sul metodo di passaggio dei parametri stabilisce un altra fondamentale differenza tra una funzione ed una procedura: - Funzione: lo scopo principale è quello di utilizzare alcuni valori in ingresso per produrre un valore di uscita, senza modificare null altro passaggio per valore - Procedura: lo scopo principale è quello di operare delle operazioni sui parametri in ingresso che abbiano una semantica tale da poterle racchiudere in un corpo unico passaggio per riferimento Comunque la differenza è solamente formale: - In C++ o in JAVA non esistono metodi per dichiarare una funzione piuttosto che una procedura. In realtà il primo prevede solamente funzioni, il secondo procedure.
48 Passaggio di parametri per valore Spazio di memoria del chiamante int a copia Spazio di memoria del chiamato par1 Programma chiamante chiamata di funzione valore di ritorno modifica locale Funzione chiamata
49 Passaggio di parametri per riferimento Spazio di memoria del chiamante int a Programma chiamante riferimento modifica chiamata di funzione valore di ritorno Spazio di memoria del chiamato par1 modifica locale Funzione chiamata
50 La funzione main
51 Il corpo del programma Adesso che abbiamo acquisito il concetto di funzione è possibile descrivere la struttura completa di un programma (procedurale) Un programma procedurale è composto da: - Dichiarazioni di variabili - Dichiarazioni di funzioni (prototipi) - Implementazioni delle funzioni (anche su più file) - Corpo del programma Ma cosa s intende per corpo del programma? - Il corpo del programma è a sua volta una funzione globale particolare che utilizzando tutte le altre funzioni ed i dati a disposizione, assembla il tutto per eseguire il compito ell algoritmo
52 La funzione main In definitiva, un programma non è altro che una funzione dal prototipo particolare e fissato: - int main(int argc,char[] argv) C e C++ Questa funzione accetta due parametri in ingresso e restituisce un valore intero in uscita: - I due parametri in ingresso permettono di leggere eventuali parametri passati da linea di comando all applicazione - Es. il comando copy in windows accetta due parametri - copy file_a file_b argc=2, argv=[file_a,file_b] - Il valore di ritorno permette di stabilire se l esecuzione del programma è andata a buon fine o meno. Solitamente un programma ritorna 0 se esce correttamente, 1 se vi sono stati errori
53 Variabili globali e locali La dichiarazione di una variabile normalmente può avvenire in qualsiasi punto del programma, sempre però prima che la variabile sia utilizzata per la prima volta In particolare, la variabile può essere dichiarata fuori da qualsiasi funzione oppure all interno di una funzione (o procedura : - Nel primo caso, ambito globale, la variabile esiste in ogni parte del programma (con le debite eccezioni), a partire dal momento in cui il compilatore legge la riga di dichiarazione e la istanzia - Nel secondo caso, ambito locale, invece, la variabile esiste solamente all interno della funzione in cui è stata dichiarata e sarà deallocata all uscita della funzione stessa
54 Visibilità di variabili (scope) Ma cosa accade se una variabile locale ha lo stesso nome di una variabile globale? Quando la funzione è chiamata, con quel nome a quale variabile ci riferiamo, quella globale o quella locale? Risposta: la variabile più vicina, è quella a cui viene fatto riferimento con il nome ( nesting rule ) - Il campo di visibilità di una variabile (scope) è sempre quello ultimo in cui la variabile è stata dichiarata, anche se due variabili portano lo stesso nome Quindi durante l esecuzione di tutta la procedura, ogni riferimento alla variabile A sarà risolto con un riferimento alla variabile A locale alla procedura. Tale riferimento cessa non appena la procedura e lo scope relativo ad essa terminano
55 Lo spazio di memoria globale Per tutto quello che si è detto, anche le variabili dichiarate nella funzione principale sono variabili locali alla funzione main: - Un programma allora è composto da più spazi di memoria distinti, di cui solamente uno, lo spazio di memoria globale è condiviso in tutto il progetto Lo spazio di memoria globale è composto dalle variabili dichiarate fuori da ogni funzione, compresa la funzione principale (il main())
56 Schema di un programma procedurale Spazio di memoria del main Spazio di memoria globale Spazio di memoria delle funzioni f 1 int main(int,int) f 2 Chiamate di funzione Accessi alla memoria globale f n
57 Le funzioni nella CPU
58 Cambio di contesto Ma cosa succede a basso livello quando viene chiamata una funzione? La chiamata di una funzione genera un cambio di contesto (context switch) nella CPU: - Lo stato attuale della CPU deve essere salvato da qualche parte affinchè una volta eseguita la procedura sia possibile riprendere correttamente l esecuzione delle istruzioni - Anche i registri devono essere salvati dato che le istruzioni della procedura non devono assolutamente modificare i valori eterni alla procedura stessa Lo stato del processo viene allora salvato sullo stack di sistema
59 Lo stack Una parte di memoria centrale viene gestita come stack di sistema (pila) Alla chiamata di una procedura: - il contesto attuale viene inserito in cima allo stack: operazione push - Prepara la CPU ad eseguire la nuova procedura: Setta l istruzione da eseguire, il registro dati e quello indirizzi con i parametri passati alla procedura - La procedura esegue le istruzioni - Quando la procedura termina, il contesto in cima allo stack viene ripristinato: Operazione pop Lo stack memorizza le chiamate a procedura e le richiama in ordine inverso di memorizzazione
60 Stack Alla chiamata della funzione f, il contesto della funzione in esecuzione attualmente viene memorizzato in cima allo stack CPU f3 push f4 funzione in esecuzione f2 f1 main() stack f3 f2 f1 main() stack
61 Stack Quando poi la funzione termina, viene ripristinato l ultimo contesto inserito nello stack, la funzione f(t-1): pop f3 CPU f f2 funzione in esecuzione Funzioni chiamate e terminate f1 main() stack
62 Stack Quando anche la funzione f(t-1) termina, viene ripristinato il contesto di f(t-2), e così via pop f2 CPU f3 f1 funzione in esecuzione f Funzioni chiamate e terminate main() stack
63 Stack L ultimo contesto nello stack sarà quello relativo alla funzione main(). Quando questo termina, l applicazione termina. pop main() funzione in esecuzione CPU f1 f2 f3 empty stack f Funzioni chiamate e terminate
64 La ricorsione
65 La ricorsione Si parla di ricorsione quando all interno di una funzione P, viene richiamata P stessa, normalmente su un diverso set di dati La chiamata ricorsiva può essere sia esplicita che implicita: - Esplicita la funzione P è richiamata esplicitamente all interno del corpo di P stesso - Implicita la funzione P è richiamata attraverso la chiamata ad un altra funzione Q che contiene la chiamata a P A prima vista la cosa può apparire sorprendente dato che una funzione (o procedura) è dedita a risolvere un sottoproblema: - La ricorsione è come dire che per risolvere il sottoproblema P è necessario risolvere il sottoproblema P stesso!!
66 La ricorsione In realtà la programmazione ricorsiva a profonde radici concettuali derivanti dal fatto che per molti problemi la soluzione per un caso generico può essere ricavata sulla base della soluzione di un caso più semplice dello stesso problema : - L ordinamento di un array, il calcolo del fattoriale, ecc sono tipici problemi di questo tipo
67 Es. somma come ricorsione La ricorsione è nascosta in moltissime forme del ragionamento umano. Per esempio la somma tra due numeri può essere vista come ricorsione dell operatore successore(): - successore(x)=numero successivo ad x Algoritmo ricorsivo per l addizione - x+0 = x; - x+y = x+successore(y-1) = successore(x+y-1) = successore(1+2) = successore(sucessore(1+1)) = - = successore(successore(successore(1+0))) = - = successore(successore(successore(1))) = - = successore(successore(2)) = successore(3) = 4
68 Es. 1 Pesate Problema: date un gruppo di palline di forma identica e tutte di peso identico tranne una di peso maggiore delle altre, trovare la pallina più pesante utilizzando una bilancia ed il minor numero di pesate (supponiamo di avere un numero di palline multiplo di 3) Algoritmo: - Dividi il gruppo in tre gruppi di egual numero di palline e pesa due di questi gruppi - Se i due gruppi hanno lo stesso peso scartarli entrambi, altrimenti scartare il gruppo non pesato e quello sulla bilancia con il peso minore (la pallina cercata si troverà nel gruppo con peso maggiore) - Dividi il gruppo rimasto in tre sottogruppi e ripeti il procedimento finché i sottogruppi non contengano una sola palline: in tal caso l ultima pesata indica quale delle tre palline rimaste è quella cercata
69 Es. 1 Pesate Notiamo come l ultimo punto sia la ripetizione dell algoritmo su un set ridotto di dati fino a che non ci troviamo di fronte ad un caso notevole, di cui possiamo dare una immediata soluzione: - tre gruppi di una pallina ciascuno Per avere una visione più informatica dell algoritmo: - Se il gruppo di palline consiste di una sola pallina, la pallina è la soluzione cercata, altrimenti - Dividi il gruppo di palline in tre sottogruppi e poni due sottogruppi sulla bilancia - Se i due gruppi hanno peso uguale scartarli entrambi, altrimenti scartare il gruppo non pesato e quello di peso minore - Applica l algoritmo pesate al sottogruppo individuato
70 Es. 2 Successione di Fibonacci La successione di numeri di Fibonacci fu definita dal matematico come modello di crescita dei conigli in allevamento: - f0=0 - f1=1 - fn=fn-1 + fn-2, per n> 1 Es. calcolando f per i primi 6 numeri: - f0=0 - f1=1 - f2=f1+f0=1+0=1 - f3=f2+f1=1+1=2 - f4=f3+f2=2+1=3 - f5=f4+f3=3+2=5 -
71 Es. 3 Fattoriale Il fattoriale di un numero è la produttoria di tutti i numeri fino al numero stesso, escluso lo 0: - 5! = 5 x 4 x 3 x 2 x 1 = 120 Il fattoriale può essere espresso in forma ricorsiva: - 0! = 1 - n! = n x (n-1)! Infatti: - 5!=5 x (4 x 3 x 2 x 1) = 5 x 4! Anche il fattoriale è un tipico esempio di algoritmo ricorsivo
72 Es. 4 ricerca in un vettore Un esempio tipico di algoritmo di ricerca dati in un vettore ordinato è il seguente: - Se il vettore è composto da un solo elemento, confronta l elemento con D e se è uguale ritorna D altrimenti ritorna non trovato - Seleziona l elemento centrale P del vettore - Confronta il dato D da cercare con l elemento centrale P - Se D<P, ripeti l algoritmo sulla prima metà del vettore, altrimenti ripetilo sulla seconda
73 Es. 5 Sommatoria La sommatoria di una sequenza di n numeri può essere vista come la somma numero n-esimo alla sommatoria dei rimanenti (n-1) numeri: 0 i= 0 n a i = 0 n 1 a = a + a i n i i= 1 i= 1 La sommatoria comunque può essere risolta semplicemente con un ciclo, risparmiando così il carico aggiuntivo della ricorsione
74 Caso generale Si può generalizzare il concetto di ricorsione. Affinché un algoritmo sia scrivibile in forma ricorsiva, è necessario che: - l algoritmo abbia una soluzione banale, f(0)=0 - l algoritmo al passo n possa essere espresso come funzione del valore al passo (n-1) La condizione banale è necessarie per evitare una ricorsione infinita: Se infatti non esiste una condizione in cui siamo in grado di dare la soluzione, le iterazioni non terminano mai In questo caso, solitamente si verifica un errore di stack overflow, ovvero pila piena
75 Ricorsione e stack La ricorsione viene realizzata mantenendo nello stack la sequenza delle chiamate alla procedura che non possono essere risolte fino al caso banale Una volta trovata la soluzione banale questa viene passata a ritroso a tutte le istanze dell algoritmo sospese nello stack fino alla istanza finale che restituisce il risultato finale
76 Successione di Fibonacci Scriviamo l algoritmo ricorsivo per la successione di Fibonacci: - int fibonacci(int n) { - int ris=0; - if (n==0) return 0; - else if (n==1) return 1; - else ris = fibonacci(n-1) + fibonacci(n-2); - }
77 Fattoriale e sommatoria Scriviamo l algoritmo ricorsivo per il calcolo del fattoriale: - int fatt(int n) { - int ris=0; - if (n==0) return 1; - else ris = n * fatt(n-1); - return ris; - } Scriviamo l algoritmo ricorsivo per la sommatoria: int sum(int a[]) { int ris=0; if (vuota(a)==true) return 0; else ris = testa(a) + coda(a); return ris; }
78 Fattoriale 1 y=fatt(5) CPU fatt(2) push fatt(1) funzione in esecuzione fatt(3) fatt(4) fatt(5) stack fatt(2) fatt(3) fatt(4) fatt(5) stack
79 Fattoriale 2 y=fatt(5) pop fatt(2) CPU fatt(1)=1 fatt(3) funzione in esecuzione Funzioni chiamate e terminate fatt(4) fatt(5) stack
80 Fattoriale 3 y=fatt(5) pop fatt(5) funzione in esecuzione CPU fatt(4)=24 fatt(3)=6 fatt(2)=2 empty stack fatt(1)=1 Funzioni chiamate e terminate
81 Programmazione ad oggetti
82 Paradigma ad oggetti Come detto, i linguaggi di programmazione procedurali sono stati quasi tutti sostituiti dalle rispettive versioni ad oggetti (tranne nei casi in cui la programmazione ad oggetti non è consigliata, ad esempio programmazione di basso livello, S.O., programmazione PLC ecc ) Ma cos è questo diverso tipo di programmazione? In cosa differisce dalla programmazione classica?
83 Object Oriented Programming (OOP) La maggior parte dei programmi utili non manipola soltanto numeri e stringhe, ma gestisce dati più complessi e più aderenti alla realtà: - Conti bancari, informazioni sugli impiegati, forme grafiche L idea della programmazione ad oggetti è di rappresentare questi dati così come sono anche nel linguaggio di programmazione: gli oggetti o classi La programmazione ad oggetti estende al massimo l idea di dato strutturato presente nella programmazione classica: - una classe (o oggetto) è un tipo di dato strutturato a cui sono associate variabili e funzioni
84 Object Oriented Programming (OOP) Il programmatore individua degli oggetti nella applicazione che deve progettare: - Conto corrente, client e server, documento, ecc Ogni oggetto ha delle proprietà e delle capacità (o funzioni) L applicazione è poi costruita facendo interagire correttamente gli oggetti esistenti nell ambiente che si va a progettare Ma la funzione main() che fine ha fatto? Se non si usano più le procedure/funzioni globali, come si rende eseguibile un programma? Cioè qual è il corpo principale dell applicazione? Due filosofie differenti per rispondere a queste domande: il C++ ed il JAVA
85 Object Oriented Programming(OOP) Il C++ ha mantenuto comunque una certa compatibilità con i linguaggi procedurali: - in C++ è ancora possibile infatti definire funzioni globali, variabili globali e quindi la funzione main() rimane una funzione definita globalmente e cercata dal compilatore per rendere eseguibile un programma Il JAVA ha seguito un altro approccio: In JAVA non esistono funzioni globali, cioè esterne da qualsiasi oggetto, ma ogni funzione o variabile deve appartenere ad un oggetto (o meglio classe): è possibile però definire una funzione main() per ogni classe e rendere eseguibile la classe stessa In compilazione, vengono creati degli oggetti eseguibili (non un unico programma). La scelta di cosa far partire viene fatta dall utente selezionando l oggetto eseguibile desiderato.
86 Object Oriented Programming(OOP) Es di oggetti JAVA ObjectA: -datoy -funzione1 -funzione2 -main() ObjectB: -datox -funzione1 -funzione2 -funzione3 -main() Normalmente quello che accade in JAVA è che viene creato un oggetto che rappresenta l applicazione e che contiene la funzione main(): - Eseguire l applicazione significa lanciare il main() di tale oggetto
Funzioni in C. Violetta Lonati
Università degli studi di Milano Dipartimento di Scienze dell Informazione Laboratorio di algoritmi e strutture dati Corso di laurea in Informatica Funzioni - in breve: Funzioni Definizione di funzioni
DettagliConcetto di Funzione e Procedura METODI in Java
Fondamenti di Informatica Concetto di Funzione e Procedura METODI in Java Fondamenti di Informatica - D. Talia - UNICAL 1 Metodi e Sottoprogrammi Mentre in Java tramite le classi e gli oggetti è possibile
DettagliCorso di Informatica
Corso di Informatica Modulo T3 1-Sottoprogrammi 1 Prerequisiti Tecnica top-down Programmazione elementare 2 1 Introduzione Lo scopo di questa Unità è utilizzare la metodologia di progettazione top-down
DettagliIntroduzione alla programmazione in C
Introduzione alla programmazione in C Testi Consigliati: A. Kelley & I. Pohl C didattica e programmazione B.W. Kernighan & D. M. Ritchie Linguaggio C P. Tosoratti Introduzione all informatica Materiale
DettagliSommario. Definizione di informatica. Definizione di un calcolatore come esecutore. Gli algoritmi.
Algoritmi 1 Sommario Definizione di informatica. Definizione di un calcolatore come esecutore. Gli algoritmi. 2 Informatica Nome Informatica=informazione+automatica. Definizione Scienza che si occupa dell
DettagliINFORMATICA 1 L. Mezzalira
INFORMATICA 1 L. Mezzalira Possibili domande 1 --- Caratteristiche delle macchine tipiche dell informatica Componenti hardware del modello funzionale di sistema informatico Componenti software del modello
DettagliAA 2006-07 LA RICORSIONE
PROGRAMMAZIONE AA 2006-07 LA RICORSIONE AA 2006-07 Prof.ssa A. Lanza - DIB 1/18 LA RICORSIONE Il concetto di ricorsione nasce dalla matematica Una funzione matematica è definita ricorsivamente quando nella
DettagliStrutture. Strutture e Unioni. Definizione di strutture (2) Definizione di strutture (1)
Strutture Strutture e Unioni DD cap.10 pp.379-391, 405-406 KP cap. 9 pp.361-379 Strutture Collezioni di variabili correlate (aggregati) sotto un unico nome Possono contenere variabili con diversi nomi
DettagliUniversità degli Studi di Cassino Corso di Fondamenti di Informatica Puntatori. Anno Accademico 2010/2011 Francesco Tortorella
Corso di Informatica Puntatori Anno Accademico 2010/2011 Francesco Tortorella Variabili, registri ed indirizzi Abbiamo visto che la definizione di una variabile implica l allocazione (da parte del compilatore)
DettagliAlgebra di Boole: Concetti di base. Fondamenti di Informatica - D. Talia - UNICAL 1. Fondamenti di Informatica
Fondamenti di Informatica Algebra di Boole: Concetti di base Fondamenti di Informatica - D. Talia - UNICAL 1 Algebra di Boole E un algebra basata su tre operazioni logiche OR AND NOT Ed operandi che possono
DettagliFONDAMENTI di INFORMATICA L. Mezzalira
FONDAMENTI di INFORMATICA L. Mezzalira Possibili domande 1 --- Caratteristiche delle macchine tipiche dell informatica Componenti hardware del modello funzionale di sistema informatico Componenti software
DettagliAllocazione dinamica della memoria - riepilogo
Università degli studi di Milano Dipartimento di Scienze dell Informazione Laboratorio di algoritmi e strutture dati Corso di laurea in Informatica In breve Storage duration Allocazione dinamica della
Dettagli12 - Introduzione alla Programmazione Orientata agli Oggetti (Object Oriented Programming OOP)
12 - Introduzione alla Programmazione Orientata agli Oggetti (Object Oriented Programming OOP) Programmazione e analisi di dati Modulo A: Programmazione in Java Paolo Milazzo Dipartimento di Informatica,
DettagliUniversità di Torino Facoltà di Scienze MFN Corso di Studi in Informatica. Programmazione I - corso B a.a. 2009-10. prof.
Università di Torino Facoltà di Scienze MFN Corso di Studi in Informatica Programmazione I - corso B a.a. 009-10 prof. Viviana Bono Blocco 9 Metodi statici: passaggio parametri, variabili locali, record
DettagliTipi primitivi. Ad esempio, il codice seguente dichiara una variabile di tipo intero, le assegna il valore 5 e stampa a schermo il suo contenuto:
Tipi primitivi Il linguaggio Java offre alcuni tipi di dato primitivi Una variabile di tipo primitivo può essere utilizzata direttamente. Non è un riferimento e non ha senso tentare di istanziarla mediante
DettagliFondamenti di Informatica e Laboratorio T-AB T-16 Progetti su più file. Funzioni come parametro. Parametri del main
Fondamenti di Informatica e Laboratorio T-AB T-16 Progetti su più file. Funzioni come parametro. Parametri del main Paolo Torroni Dipartimento di Elettronica, Informatica e Sistemistica Università degli
DettagliLezione 8. La macchina universale
Lezione 8 Algoritmi La macchina universale Un elaboratore o computer è una macchina digitale, elettronica, automatica capace di effettuare trasformazioni o elaborazioni su i dati digitale= l informazione
Dettaglivoid funzioneprova() { int x=2; cout<<"dentro la funzione x="<<x<<endl; }
FUNZIONI 57. Cosa servono le funzioni? A spezzare il programma in diverse parti relativamente indipendenti fra loro, ovvero interagenti sono attraverso i parametri di input ed IL VALORE di uscita. In questo
Dettaglirisulta (x) = 1 se x < 0.
Questo file si pone come obiettivo quello di mostrarvi come lo studio di una funzione reale di una variabile reale, nella cui espressione compare un qualche valore assoluto, possa essere svolto senza necessariamente
DettagliGESTIONE INFORMATICA DEI DATI AZIENDALI
GESTIONE INFORMATICA DEI DATI AZIENDALI Alberto ZANONI Centro Vito Volterra Università Tor Vergata Via Columbia 2, 00133 Roma, Italy zanoni@volterra.uniroma2.it Rudimenti di programmazione Programming
DettagliUna funzione è detta ricorsiva se chiama, direttamente o indirettamente, se stessa. In C tutte le funzioni possono essere usate ricorsivamente.
Ricorsione Funzioni ricorsive Una funzione è detta ricorsiva se chiama, direttamente o indirettamente, se stessa. In C tutte le funzioni possono essere usate ricorsivamente. Un esempio di funzione ricorsiva
DettagliLa struttura dati ad albero binario
La struttura dati ad albero binario L albero è una struttura dati nella quale le informazioni sono organizzate in modo gerarchico, dall alto verso il basso. Gli elementi di un albero si chiamano nodi,
DettagliLa selezione binaria
Andrea Marin Università Ca Foscari Venezia Laurea in Informatica Corso di Programmazione part-time a.a. 2011/2012 Introduzione L esecuzione di tutte le istruzioni in sequenza può non è sufficiente per
DettagliFunzioni funzione dominio codominio legge argomento variabile indipendente variabile dipendente
Funzioni In matematica, una funzione f da X in Y consiste in: 1. un insieme X detto dominio di f 2. un insieme Y detto codominio di f 3. una legge che ad ogni elemento x in X associa uno ed un solo elemento
DettagliSiamo così arrivati all aritmetica modulare, ma anche a individuare alcuni aspetti di come funziona l aritmetica del calcolatore come vedremo.
DALLE PESATE ALL ARITMETICA FINITA IN BASE 2 Si è trovato, partendo da un problema concreto, che con la base 2, utilizzando alcune potenze della base, operando con solo addizioni, posso ottenere tutti
DettagliAPPUNTI DI MATEMATICA LE FRAZIONI ALGEBRICHE ALESSANDRO BOCCONI
APPUNTI DI MATEMATICA LE FRAZIONI ALGEBRICHE ALESSANDRO BOCCONI Indice 1 Le frazioni algebriche 1.1 Il minimo comune multiplo e il Massimo Comun Divisore fra polinomi........ 1. Le frazioni algebriche....................................
DettagliOggetti Lezione 3. aspetti generali e definizione di classi I
Programmazione a Oggetti Lezione 3 Il linguaggio Java: aspetti generali e definizione di classi I Sommario Storia e Motivazioni Definizione di Classi Campi e Metodi Istanziazione di oggetti Introduzione
Dettagli3 - Variabili. Programmazione e analisi di dati Modulo A: Programmazione in Java. Paolo Milazzo
3 - Variabili Programmazione e analisi di dati Modulo A: Programmazione in Java Paolo Milazzo Dipartimento di Informatica, Università di Pisa http://www.di.unipi.it/ milazzo milazzo di.unipi.it Corso di
Dettaglihttp://www.programmiamo.altervista.org/c/oop/o...
PROGRAMMIAMO Programma per la gestione di un conto corrente C++ - Costruttore e distruttore C++ Home Contatti Supponiamo ora di voler scrivere un programma a menu per la gestione di un conto corrente bancario.
Dettagli(Esercizi Tratti da Temi d esame degli ordinamenti precedenti)
(Esercizi Tratti da Temi d esame degli ordinamenti precedenti) Esercizio 1 L'agenzia viaggi GV - Grandi Viaggi vi commissiona l'implementazione della funzione AssegnaVolo. Tale funzione riceve due liste
DettagliGli array. Gli array. Gli array. Classi di memorizzazione per array. Inizializzazione esplicita degli array. Array e puntatori
Gli array Array e puntatori Laboratorio di Informatica I un array è un insieme di elementi (valori) avente le seguenti caratteristiche: - un array è ordinato: agli elementi dell array è assegnato un ordine
DettagliLE FUNZIONI A DUE VARIABILI
Capitolo I LE FUNZIONI A DUE VARIABILI In questo primo capitolo introduciamo alcune definizioni di base delle funzioni reali a due variabili reali. Nel seguito R denoterà l insieme dei numeri reali mentre
DettagliInizializzazione, Assegnamento e Distruzione di Classi
Inizializzazione, Assegnamento e Distruzione di Classi Lezione 9 Operazioni Automatiche In ogni programma C++ oggetti classe vengono gestiti automaticamente dal compilatore Inizializzati al momento della
DettagliEsercizi su. Funzioni
Esercizi su Funzioni ๒ Varie Tracce extra Sul sito del corso ๓ Esercizi funz_max.cc funz_fattoriale.cc ๔ Documentazione Il codice va documentato (commentato) Leggibilità Riduzione degli errori Manutenibilità
DettagliExcel. A cura di Luigi Labonia. e-mail: luigi.lab@libero.it
Excel A cura di Luigi Labonia e-mail: luigi.lab@libero.it Introduzione Un foglio elettronico è un applicazione comunemente usata per bilanci, previsioni ed altri compiti tipici del campo amministrativo
DettagliArduino: Programmazione
Programmazione formalmente ispirata al linguaggio C da cui deriva. I programmi in ARDUINO sono chiamati Sketch. Un programma è una serie di istruzioni che vengono lette dall alto verso il basso e convertite
DettagliLINGUAGGI DI PROGRAMMAZIONE
LINGUAGGI DI PROGRAMMAZIONE Il potere espressivo di un linguaggio è caratterizzato da: quali tipi di dati consente di rappresentare (direttamente o tramite definizione dell utente) quali istruzioni di
DettagliINTRODUZIONE AGLI ALGORITMI INTRODUZIONE AGLI ALGORITMI INTRODUZIONE AGLI ALGORITMI INTRODUZIONE AGLI ALGORITMI
INTRODUZIONE AGLI ALGORITMI Prima di riuscire a scrivere un programma, abbiamo bisogno di conoscere un metodo risolutivo, cioè un metodo che a partire dai dati di ingresso fornisce i risultati attesi.
DettagliGli algoritmi: definizioni e proprietà
Dipartimento di Elettronica ed Informazione Politecnico di Milano Informatica e CAD (c.i.) - ICA Prof. Pierluigi Plebani A.A. 2008/2009 Gli algoritmi: definizioni e proprietà La presente dispensa e da
DettagliAutomatizzare i compiti ripetitivi. I file batch. File batch (1) File batch (2) Visualizzazione (2) Visualizzazione
Automatizzare i compiti ripetitivi I file batch Anno accademico 2000-01 1 Spesso capita di dover eseguire ripetutatmente una data sequenza di comandi Introdurli uno a uno da tastiera è un processo lento
DettagliDefinizione di nuovi tipi in C
Definizione di nuovi tipi in C typedef Ancora sui tipi di dato Ogni elaboratore è intrinsecamente capace di trattare domini di dati di tipi primitivi numeri naturali, interi, reali caratteri e stringhe
DettagliAlgoritmo. I dati su cui opera un'istruzione sono forniti all'algoritmo dall'esterno oppure sono il risultato di istruzioni eseguite precedentemente.
Algoritmo Formalmente, per algoritmo si intende una successione finita di passi o istruzioni che definiscono le operazioni da eseguire su dei dati (=istanza del problema): in generale un algoritmo è definito
DettagliA intervalli regolari ogni router manda la sua tabella a tutti i vicini, e riceve quelle dei vicini.
Algoritmi di routing dinamici (pag.89) UdA2_L5 Nelle moderne reti si usano algoritmi dinamici, che si adattano automaticamente ai cambiamenti della rete. Questi algoritmi non sono eseguiti solo all'avvio
DettagliWorkland CRM. Workland CRM Rel 2570 21/11/2013. Attività --> FIX. Magazzino --> NEW. Nessuna --> FIX. Ordini --> FIX
Attività Attività --> FIX In alcuni casi, in precedenza, sulla finestra trova attività non funzionava bene la gestione dei limiti tra date impostati tramite il menu a discesa (Oggi, Tutte, Ultima Settimana,
DettagliRICORSIVITA. Vediamo come si programma la soluzione ricorsiva al problema precedente: Poniamo S 1 =1 S 2 =1+2 S 3 =1+2+3
RICORSIVITA 1. Cos è la ricorsività? La ricorsività è un metodo di soluzione dei problemi che consiste nell esprimere la soluzione relativa al caso n in funzione della soluzione relativa al caso n-1. La
DettagliOrganizzazione degli archivi
COSA E UN DATA-BASE (DB)? è l insieme di dati relativo ad un sistema informativo COSA CARATTERIZZA UN DB? la struttura dei dati le relazioni fra i dati I REQUISITI DI UN DB SONO: la ridondanza minima i
DettagliCosa è un foglio elettronico
Cosa è un foglio elettronico Versione informatica del foglio contabile Strumento per l elaborazione di numeri (ma non solo...) I valori inseriti possono essere modificati, analizzati, elaborati, ripetuti
DettagliMANUALE MOODLE STUDENTI. Accesso al Materiale Didattico
MANUALE MOODLE STUDENTI Accesso al Materiale Didattico 1 INDICE 1. INTRODUZIONE ALLA PIATTAFORMA MOODLE... 3 1.1. Corso Moodle... 4 2. ACCESSO ALLA PIATTAFORMA... 7 2.1. Accesso diretto alla piattaforma...
DettagliProof. Dimostrazione per assurdo. Consideriamo l insieme complementare di P nell insieme
G Pareschi Principio di induzione Il Principio di Induzione (che dovreste anche avere incontrato nel Corso di Analisi I) consente di dimostrare Proposizioni il cui enunciato è in funzione di un numero
DettagliSoluzione dell esercizio del 2 Febbraio 2004
Soluzione dell esercizio del 2 Febbraio 2004 1. Casi d uso I casi d uso sono riportati in Figura 1. Figura 1: Diagramma dei casi d uso. E evidenziato un sotto caso di uso. 2. Modello concettuale Osserviamo
DettagliGestione della memoria centrale
Gestione della memoria centrale Un programma per essere eseguito deve risiedere in memoria principale e lo stesso vale per i dati su cui esso opera In un sistema multitasking molti processi vengono eseguiti
DettagliFondamenti di Informatica Ingegneria Clinica Lezione 19/10/2009. Prof. Raffaele Nicolussi
Fondamenti di Informatica Ingegneria Clinica Lezione 19/10/2009 Prof. Raffaele Nicolussi FUB - Fondazione Ugo Bordoni Via B. Castiglione 59-00142 Roma Docente Raffaele Nicolussi rnicolussi@fub.it Lezioni
DettagliRicorsione. (da lucidi di Marco Benedetti)
Ricorsione (da lucidi di Marco Benedetti) Funzioni ricorsive Dal punto di vista sintattico, siamo in presenza di una funzione ricorsiva quando all interno della definizione di una funzione compaiono una
DettagliLaboratorio di Programmazione 1. Docente: dr. Damiano Macedonio Lezione 18 31/03/2014
Laboratorio di Programmazione 1 1 Docente: dr. Damiano Macedonio Lezione 18 31/03/2014 Funzioni: Dichiarazione e Definizione La dichiarazione di una funzione serve a comunicare al compilatore quali sono
DettagliStrutturazione logica dei dati: i file
Strutturazione logica dei dati: i file Informazioni più complesse possono essere composte a partire da informazioni elementari Esempio di una banca: supponiamo di voler mantenere all'interno di un computer
DettagliDall Algoritmo al Programma. Prof. Francesco Accarino IIS Altiero Spinelli Sesto San Giovanni
Dall Algoritmo al Programma Prof. Francesco Accarino IIS Altiero Spinelli Sesto San Giovanni IL PROGRAMMA Gli algoritmi sono modelli di descrizione astratti e per controllarne il funzionamento devono essere
DettagliI sistemi di numerazione
I sistemi di numerazione 01-INFORMAZIONE E SUA RAPPRESENTAZIONE Sia dato un insieme finito di caratteri distinti, che chiameremo alfabeto. Utilizzando anche ripetutamente caratteri di un alfabeto, si possono
DettagliTesti di Esercizi e Quesiti 1
Architettura degli Elaboratori, 2009-2010 Testi di Esercizi e Quesiti 1 1. Una rete logica ha quattro variabili booleane di ingresso a 0, a 1, b 0, b 1 e due variabili booleane di uscita z 0, z 1. La specifica
DettagliAnalisi sensitività. Strumenti per il supporto alle decisioni nel processo di Valutazione d azienda
Analisi sensitività. Strumenti per il supporto alle decisioni nel processo di Valutazione d azienda Premessa Con l analisi di sensitività il perito valutatore elabora un range di valori invece di un dato
DettagliI Thread. I Thread. I due processi dovrebbero lavorare sullo stesso testo
I Thread 1 Consideriamo due processi che devono lavorare sugli stessi dati. Come possono fare, se ogni processo ha la propria area dati (ossia, gli spazi di indirizzamento dei due processi sono separati)?
DettagliLe variabili. Olga Scotti
Le variabili Olga Scotti Cos è una variabile Le variabili, in un linguaggio di programmazione, sono dei contenitori. Possono essere riempiti con un valore che poi può essere riletto oppure sostituito.
Dettaglif(x) = 1 x. Il dominio di questa funzione è il sottoinsieme proprio di R dato da
Data una funzione reale f di variabile reale x, definita su un sottoinsieme proprio D f di R (con questo voglio dire che il dominio di f è un sottoinsieme di R che non coincide con tutto R), ci si chiede
DettagliUniversità di Roma Tor Vergata Corso di Laurea triennale in Informatica Sistemi operativi e reti A.A. 2013-14. Pietro Frasca.
Università di Roma Tor Vergata Corso di Laurea triennale in Informatica Sistemi operativi e reti A.A. 2013-14 Pietro Frasca Lezione 11 Martedì 12-11-2013 1 Tecniche di allocazione mediante free list Generalmente,
DettagliCodifica: dal diagramma a blocchi al linguaggio C++
Codifica: dal diagramma a blocchi al linguaggio C++ E necessario chiarire inizialmente alcuni concetti. La compilazione Il dispositivo del computer addetto all esecuzione dei programmi è la CPU La CPU
DettagliCOS È UN LINGUAGGIO? LINGUAGGI DI ALTO LIVELLO LA NOZIONE DI LINGUAGGIO LINGUAGGIO & PROGRAMMA
LINGUAGGI DI ALTO LIVELLO Si basano su una macchina virtuale le cui mosse non sono quelle della macchina hardware COS È UN LINGUAGGIO? Un linguaggio è un insieme di parole e di metodi di combinazione delle
Dettagli13 - Gestione della Memoria nella Programmazione Orientata agli Oggetti
13 - Gestione della Memoria nella Programmazione Orientata agli Oggetti Programmazione e analisi di dati Modulo A: Programmazione in Java Paolo Milazzo Dipartimento di Informatica, Università di Pisa http://www.di.unipi.it/
DettagliMatematica generale CTF
Successioni numeriche 19 agosto 2015 Definizione di successione Monotonìa e limitatezza Forme indeterminate Successioni infinitesime Comportamento asintotico Criterio del rapporto per le successioni Definizione
DettagliTraccia di soluzione dell esercizio del 25/1/2005
Traccia di soluzione dell esercizio del 25/1/2005 1 Casi d uso I casi d uso sono in Figura 1. Ci sono solo due attori: il Capo officina e il generico Meccanico. Figura 1: Diagramma dei casi d uso. 2 Modello
Dettagli10 - Programmare con gli Array
10 - Programmare con gli Array Programmazione e analisi di dati Modulo A: Programmazione in Java Paolo Milazzo Dipartimento di Informatica, Università di Pisa http://www.di.unipi.it/ milazzo milazzo di.unipi.it
DettagliCorso di Fondamenti di Informatica
Corso di Fondamenti di Informatica I tipi strutturati: gli array e le strutture Claudio De Stefano - Corso di Fondamenti di Informatica 1 arrays un array (o vettore) è una sequenza di oggetti dello stesso
DettagliAlcune regole di base per scrivere un programma in linguaggio C
Alcune regole di base per scrivere un programma in linguaggio C Un programma il linguaggio C (listato) viene scritto in formato testo ed archiviato in un file: *.c Per scrivere un listato C si utilizza
DettagliCapitolo 2. Operazione di limite
Capitolo 2 Operazione di ite In questo capitolo vogliamo occuparci dell operazione di ite, strumento indispensabile per scoprire molte proprietà delle funzioni. D ora in avanti riguarderemo i domini A
DettagliCorrettezza. Corso di Laurea Ingegneria Informatica Fondamenti di Informatica 1. Dispensa 10. A. Miola Novembre 2007
Corso di Laurea Ingegneria Informatica Fondamenti di Informatica 1 Dispensa 10 Correttezza A. Miola Novembre 2007 http://www.dia.uniroma3.it/~java/fondinf1/ Correttezza 1 Contenuti Introduzione alla correttezza
DettagliRIFERIMENTI ATTORI GLOSSARIO. ERRORI COMUNI REV. REQUISITI INGEGNERIA DEL SOFTWARE Università degli Studi di Padova
RIFERIMENTI ERRORI COMUNI REV. REQUISITI INGEGNERIA DEL SOFTWARE Università degli Studi di Padova Dipartimento di Matematica Corso di Laurea in Informatica, A.A. 2014 2015 I riferimenti devono essere precisi
DettagliSistemi Operativi MECCANISMI E POLITICHE DI PROTEZIONE. D. Talia - UNICAL. Sistemi Operativi 13.1
MECCANISMI E POLITICHE DI PROTEZIONE 13.1 Protezione Obiettivi della Protezione Dominio di Protezione Matrice di Accesso Implementazione della Matrice di Accesso Revoca dei Diritti di Accesso Sistemi basati
DettagliMECCANISMI E POLITICHE DI PROTEZIONE 13.1
MECCANISMI E POLITICHE DI PROTEZIONE 13.1 Protezione Obiettivi della Protezione Dominio di Protezione Matrice di Accesso Implementazione della Matrice di Accesso Revoca dei Diritti di Accesso Sistemi basati
DettagliInformatica. Rappresentazione dei numeri Numerazione binaria
Informatica Rappresentazione dei numeri Numerazione binaria Sistemi di numerazione Non posizionali: numerazione romana Posizionali: viene associato un peso a ciascuna posizione all interno della rappresentazione
DettagliCorrispondenze e funzioni
Corrispondenze e funzioni L attività fondamentale della mente umana consiste nello stabilire corrispondenze e relazioni tra oggetti; è anche per questo motivo che il concetto di corrispondenza è uno dei
Dettagli( x) ( x) 0. Equazioni irrazionali
Equazioni irrazionali Definizione: si definisce equazione irrazionale un equazione in cui compaiono uno o più radicali contenenti l incognita. Esempio 7 Ricordiamo quanto visto sulle condizioni di esistenza
DettagliMANUALE PARCELLA FACILE PLUS INDICE
MANUALE PARCELLA FACILE PLUS INDICE Gestione Archivi 2 Configurazioni iniziali 3 Anagrafiche 4 Creazione prestazioni e distinta base 7 Documenti 9 Agenda lavori 12 Statistiche 13 GESTIONE ARCHIVI Nella
DettagliInformatica 3. Informatica 3. LEZIONE 10: Introduzione agli algoritmi e alle strutture dati. Lezione 10 - Modulo 1. Importanza delle strutture dati
Informatica 3 Informatica 3 LEZIONE 10: Introduzione agli algoritmi e alle strutture dati Modulo 1: Perchè studiare algoritmi e strutture dati Modulo 2: Definizioni di base Lezione 10 - Modulo 1 Perchè
DettagliCorso di Laurea Ingegneria Informatica Fondamenti di Informatica
Corso di Laurea Ingegneria Informatica Fondamenti di Informatica Dispensa E01 Esempi di programmi A. Miola Ottobre 2011 1 Contenuti Vediamo in questa lezione alcuni primi semplici esempi di applicazioni
DettagliMatematica - SMID : Programmazione Febbraio 2009 FOGLIO RISPOSTE
Matematica - SMID : Programmazione Febbraio 2009 FOGLIO RISPOSTE NOME: COGNOME: ============================================================== Esercizio 1 ci sono tante "righe"; non è detto servano tutte...
DettagliIntroduzione a ROOT. 1. Informazioni generali
Introduzione a ROOT 1. Informazioni generali ROOT è un ambiente visualizzazione e trattamento dati interattivo sviluppato al CERN (si veda il sito ufficiale http://root.cern.ch interamente sviluppato in
DettagliLa ricorsione. Politecnico di Milano Sede di Cremona
La ricorsione Politecnico di Milano Sede di Cremona Gianpaolo Cugola Dipartimento di Elettronica e Informazione cugola@elet.polimi.it http://www.elet.polimi.it/~cugola Definizioni ricorsive Sono comuni
DettagliLinguaggi e Paradigmi di Programmazione
Linguaggi e Paradigmi di Programmazione Cos è un linguaggio Definizione 1 Un linguaggio è un insieme di parole e di metodi di combinazione delle parole usati e compresi da una comunità di persone. È una
DettagliStruttura di un programma Java
Struttura di un programma Java Un programma in Java è un insieme di dichiarazioni di classi. Una classe non può contenere direttamente delle istruzioni, ma può contenere la dichiarazione di metodi, che
DettagliUso di base delle funzioni in Microsoft Excel
Uso di base delle funzioni in Microsoft Excel Le funzioni Una funzione è un operatore che applicato a uno o più argomenti (valori, siano essi numeri con virgola, numeri interi, stringhe di caratteri) restituisce
DettagliLaboratorio di Informatica
Laboratorio di Informatica Introduzione a Python Dottore Paolo Parisen Toldin - parisent@cs.unibo.it Argomenti trattati Che cosa è python Variabili Assegnazione Condizionale Iterazione in una lista di
DettagliRISOLUTORE AUTOMATICO PER SUDOKU
RISOLUTORE AUTOMATICO PER SUDOKU Progetto Prolog - Pierluigi Tresoldi 609618 INDICE 1.STORIA DEL SUDOKU 2.REGOLE DEL GIOCO 3.PROGRAMMAZIONE CON VINCOLI 4.COMANDI DEL PROGRAMMA 5.ESEMPI 1. STORIA DEL SUDOKU
DettagliProbabilità discreta
Probabilità discreta Daniele A. Gewurz 1 Che probabilità c è che succeda...? Una delle applicazioni della combinatoria è nel calcolo di probabilità discrete. Quando abbiamo a che fare con un fenomeno che
DettagliSISTEMI DI NUMERAZIONE E CODICI
SISTEMI DI NUMERAZIONE E CODICI Il Sistema di Numerazione Decimale Il sistema decimale o sistema di numerazione a base dieci usa dieci cifre, dette cifre decimali, da O a 9. Il sistema decimale è un sistema
DettagliAPPUNTI DI MATEMATICA ALGEBRA \ INSIEMISTICA \ TEORIA DEGLI INSIEMI (1)
ALGEBRA \ INSIEMISTICA \ TEORIA DEGLI INSIEMI (1) Un insieme è una collezione di oggetti. Il concetto di insieme è un concetto primitivo. Deve esistere un criterio chiaro, preciso, non ambiguo, inequivocabile,
DettagliLe funzioni in C. I programmi C sono costituiti da definizioni di variabili e funzioni.
Le funzioni in C I programmi C sono costituiti da definizioni di variabili e funzioni. Una definizione di funzione ha il seguente formato: tipo-ritornato nome-funzione(lista-parametri) { dichiarazioni
DettagliPOLIAGE GUIDA RAPIDA
www.candian.itinfo@candian.it!!"#$% &%'%$%(%)*)+,-,'!-#,%$. POLIAGE GUIDA RAPIDA I. Codifica di una prestazione Pag. 2 II. Inserimento di un nuovo professionista 4 I Creazione Profilo Agenda 6 II Gestione
Dettagli4 3 4 = 4 x 10 2 + 3 x 10 1 + 4 x 10 0 aaa 10 2 10 1 10 0
Rappresentazione dei numeri I numeri che siamo abituati ad utilizzare sono espressi utilizzando il sistema di numerazione decimale, che si chiama così perché utilizza 0 cifre (0,,2,3,4,5,6,7,8,9). Si dice
DettagliProgrammazione I - Laboratorio
Programmazione I - Laboratorio Esercitazione 2 - Funzioni Gianluca Mezzetti 1 Paolo Milazzo 2 1. Dipartimento di Informatica, Università di Pisa http://www.di.unipi.it/ mezzetti mezzetti di.unipi.it 2.
DettagliEsempio: dest = parolagigante, lettere = PROVA dest (dopo l'invocazione di tipo pari ) = pprrlogvgante
Esercizio 0 Scambio lettere Scrivere la funzione void scambiolettere(char *dest, char *lettere, int p_o_d) che modifichi la stringa destinazione (dest), sostituendone i caratteri pari o dispari (a seconda
DettagliCorso di Informatica
Corso di Informatica Modulo T2 3-Compilatori e interpreti 1 Prerequisiti Principi di programmazione Utilizzo di un compilatore 2 1 Introduzione Una volta progettato un algoritmo codificato in un linguaggio
DettagliI Problemi e la loro Soluzione. Il Concetto Intuitivo di Calcolatore. Risoluzione di un Problema. Esempio
Il Concetto Intuitivo di Calcolatore Fondamenti di Informatica A Ingegneria Gestionale Università degli Studi di Brescia Docente: Prof. Alfonso Gerevini I Problemi e la loro Soluzione Problema: classe
Dettagli