fisica:informatica:201415:esercitazioni:esercitazione7
Differenze
Queste sono le differenze tra la revisione selezionata e la versione attuale della pagina.
Entrambe le parti precedenti la revisioneRevisione precedenteProssima revisione | Revisione precedente | ||
fisica:informatica:201415:esercitazioni:esercitazione7 [26/01/2015 alle 12:27 (10 anni fa)] – [Esercizio 1: Media] Susanna Pelagatti | fisica:informatica:201415:esercitazioni:esercitazione7 [13/04/2015 alle 12:42 (10 anni fa)] (versione attuale) – [Esercizio 8: Algoritmi di ordinamento su Array] Susanna Pelagatti | ||
---|---|---|---|
Linea 1: | Linea 1: | ||
- | ====== Esercitazione: | + | ====== Esercitazione: |
- | ===== Esercizio 1: ===== | + | ===== Esercizio 1: Funzione swap ===== |
+ | Scrivere una funzione di prototipo | ||
+ | < | ||
+ | void swap (int *a, int*b); | ||
+ | </ | ||
+ | che ha l' | ||
+ | < | ||
+ | int a=5; | ||
+ | int b=63; | ||
+ | swap(& | ||
+ | printf(" | ||
+ | .... | ||
+ | </ | ||
+ | deve stampare | ||
+ | < | ||
+ | a = 63, b = 5 | ||
+ | </ | ||
+ | Sarebbe stato possibile ottenere lo stesso effetto utilizzando una funzione di prototipo | ||
+ | < | ||
+ | void swap (int a, int b); | ||
+ | </ | ||
+ | ? Perche' | ||
+ | ===== Esercizio 2: Somma e prodotto di matrici ===== | ||
+ | Scrivere un programma C costituito da un '' | ||
+ | |||
+ | |||
+ | ===== Esercizio 3: Ricerca in un array ===== | ||
+ | |||
+ | Scrivere una funzione di prototipo | ||
+ | <code c> | ||
+ | int cerca (int * vec, int lung, int x); | ||
+ | </ | ||
+ | che cerca se l' | ||
+ | |||
+ | Verificare la correttezza della funzione utilizzando un opportuno '' | ||
+ | |||
+ | |||
+ | ===== Esercizio 4: Generazione di numero casuali in C ===== | ||
+ | |||
+ | In alcuni casi e' importante riuscire a generare casualmente dei valori all' | ||
+ | In realta' | ||
+ | |||
+ | Inoltre le sequenze pseudocasuali possono, su richiesta, rigenerare la stessa sequenza di numeri. Questo e' molto utile ad esempio in fase di testing del codice. | ||
+ | |||
+ | La generazione di numeri pseudocasuali e' molto complessa. Tutti i linguaggi di programmazione ad alto livello mettono a disposizione delle opportune funzioni per generare una sequenza. In C, per generare una sequenza pseudocasuale si utilizzano due funzioni di stdlib.h: la funzione | ||
+ | <code c> | ||
+ | void srand(unsigned int seed); | ||
+ | </ | ||
+ | che serve a fissare il seme (//seed//) ovvero il valore iniziale della sequenza. E la funzione | ||
+ | <code c> | ||
+ | int rand(void); | ||
+ | </ | ||
+ | che genera un intero nell' | ||
+ | |||
+ | La '' | ||
+ | |||
+ | Partendo dallo stesso valore iniziale si ottiene sempre la stessa sequenza quindi fornendo lo stessp seme a '' | ||
+ | |||
+ | Utilizzare le funzioni '' | ||
+ | < | ||
+ | void init (int * vec, int lung); | ||
+ | </ | ||
+ | che inizializza il vettore vec di lunghezza lung con dei valori pseudocasuali nell' | ||
+ | ===== Esercizio 5: MSS, Maximum Segment Sum ===== | ||
+ | |||
+ | |||
+ | Dato un array di interi positivi e negativi, il segmento di somma massima e' la porzione contigua dell' | ||
+ | Ad esempio l' | ||
+ | <code c> | ||
+ | [2, | ||
+ | </ | ||
+ | ha come SSM il segmento [2,-1,6] di valore 7. Si chiede di definire due funzioni | ||
+ | <code c> | ||
+ | /** stampa l' | ||
+ | void print_array(int s[], int n); | ||
+ | /** calcola SSM sull' | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | |||
+ | | ||
+ | */ | ||
+ | int ssm (int s[], int n, int * s_init, int * s_lung); | ||
+ | </ | ||
+ | |||
+ | ===== Esercizio 6: Invasion Percolation ===== | ||
+ | //Invasion percolation// | ||
+ | |||
+ | **(Passo 1)** Si genera una griglia quadrata '' | ||
+ | < | ||
+ | 26 17 72 45 38 | ||
+ | 10 38 39 92 38 | ||
+ | 44 29 12 29 77 | ||
+ | 61 26 90 35 11 | ||
+ | 83 84 18 56 52 | ||
+ | </ | ||
+ | **(Passo 2)** poi si marca il centro della griglia come //pieno//, ad esempio ' | ||
+ | < | ||
+ | 26 17 72 45 38 | ||
+ | 10 38 39 92 38 | ||
+ | 44 29 * 29 77 | ||
+ | 61 26 90 35 11 | ||
+ | 83 84 18 56 52 | ||
+ | </ | ||
+ | **(Passo 3)** Si effettua un ciclo in cui ad ogni passo: | ||
+ | - si esaminano i 4 vicini di tutte le celle gia' piene (gia' marcate con ' | ||
+ | - si sceglie la cella con il valore minore, | ||
+ | - si marca tale cella come ' | ||
+ | |||
+ | Ad esempio, i quattro vicini della cella (2,2) nella griglia sono: | ||
+ | < | ||
+ | 39 | ||
+ | | ||
+ | 90 | ||
+ | </ | ||
+ | L' | ||
+ | < | ||
+ | 26 17 72 45 38 | ||
+ | 10 38 39 92 38 | ||
+ | 44 + * 29 77 | ||
+ | 61 26 90 35 11 | ||
+ | 83 84 18 56 52 | ||
+ | </ | ||
+ | < | ||
+ | 26 17 72 45 38 | ||
+ | 10 38 39 92 38 | ||
+ | 44 * * 29 77 | ||
+ | 61 + 90 35 11 | ||
+ | 83 84 18 56 52 | ||
+ | </ | ||
+ | < | ||
+ | 26 17 72 45 38 | ||
+ | 10 38 39 92 38 | ||
+ | 44 * * + 77 | ||
+ | 61 * 90 35 11 | ||
+ | 83 84 18 56 52 | ||
+ | </ | ||
+ | Si richiede di implementare un programma C invocabile da shell con | ||
+ | < | ||
+ | ./ | ||
+ | </ | ||
+ | che legge dall ostandard input i valori di '' | ||
+ | Ogni iterazione viene visualizzata sullo schermo. La computazione si ferma quando il 50% delle celle e' stata marcata. | ||
+ | |||
+ | Per l' | ||
+ | Per ottenere valori fra 1 ed r basta usare la funzione modulo (%), infatti l' | ||
+ | < | ||
+ | rand()%r + 1 | ||
+ | </ | ||
+ | genera ogni volta che viene valutata un numero fra 1 ed r. | ||
+ | Per inizializzare il generatore dei numeri casuali con valori diversi (e ottenere quindi sequenze diverse ad ogni run) usare | ||
+ | < | ||
+ | srand(time(NULL)) | ||
+ | </ | ||
+ | la '' | ||
+ | Per pulire lo schermo fra una stampa e l' | ||
+ | < | ||
+ | system(" | ||
+ | </ | ||
+ | per attendere un istante fra le varie visualizzazioni (che altrimenti non sono visibili) si puo' usare | ||
+ | < | ||
+ | sleep(1); | ||
+ | </ | ||
+ | che aspetta un secondo, prima di riprendere la computazione (in '' | ||
+ | |||
+ | ===== Esercizio 7: Stampa del triangolo di Tartaglia ===== | ||
+ | Il triangolo di Tartaglia è una disposizione geometrica dei coefficienti binomiali, ad esempio: | ||
+ | < | ||
+ | 1 | ||
+ | 1 2 1 | ||
+ | 1 3 3 1 | ||
+ | 1 4 6 4 1 | ||
+ | 1 5 10 10 5 1 | ||
+ | | ||
+ | </ | ||
+ | Scrivere un programma C che legge un intero '' | ||
+ | |||
+ | |||
+ | ===== Esercizio 8: Algoritmi di ordinamento su Array ===== | ||
+ | Facendo riferimento agli algoritmi di ordinamento visti a lezione, implementare un algoritmo di ordinamento non ricorsivo (bubblesort o selection sort) e l' | ||
+ | |||
+ | Valutare i tempi di esecuzione su array di lunghezza crescente generati casualmente nell' | ||
+ | |||
+ | ===== Esercizio 9: Algoritmi di ordinamento su Array: costo ... ===== | ||
+ | Cercare una formula (approssimata) che fornisca il numero di istruzioni eseguite dai tre algoritmi di ordinamento (selection sort, bubblesort e mergesort) in funzione di //n//, lunghezza dell' |
fisica/informatica/201415/esercitazioni/esercitazione7.1422275270.txt.gz · Ultima modifica: 26/01/2015 alle 12:27 (10 anni fa) da Susanna Pelagatti