C.L. Matematica
Gruppo Facebook: LP2 @ Unina
PROGRAMMA (provvisorio) | |
1) Strutture dati dinamiche e algoritmi ricorsivi.
scrivere una function C per la risoluzione di un sistema di equazioni lineari (alg. Gauss + back substitution) con la seguente testata: int linesolve(int N, int LD, float A[][LD], float B [], float X []) N: ordine del sistema LD: leading dimension A: matrice dei coefficienti B: vettore dei termini noti X: vettore soluzione valori di ritorno: 0: soluzione calcolata 1: errore (es: matrice singolare)
Inserire nella cartella nomecognome di Dropbox solo il file linesolve.c che contiene la funzione linesolve ed altre, eventuali, funzioni necessarie. Altri file verranno cancellati. Assicurarsi della correttezza dei nomi del file e della funzione
2)
Rubrica (scadenza 30/10/2016) scrivere le function C per la
gestione di una rubrica telefonica organizzata secondo una lista ordinata
3) Integratore automatico Ricorsivo (scadenza 20/11/2016) scrivere una function ricorsiva C per un integratore automatico con la seguente testata
int intautric(float A, float B, int MAXFUN, float TOL, float *Q, float *E, int *N, float FUN(float))
A estremo inferiore dell'intervallo di integrazione (input) B estremo superiore dell'intervallo di integrazione (input) MAXFUN massimo numero di valutazioni di funzione (input) TOL tolleranza assoluta richiesta (input) Q stima dell'integrale (input e output. Porre nel main Q=0) E stima dell'errore (input e output. Porre nel main E=0) N numero di valutazioni di funzioni (input e output. Porre nel main N=0) FUN funzione integranda valori di ritorno: 0= tolleranza raggiunta, 1= superato MAXFUN
utilizzare la function quadra presente nella propria cartella nomecognome Dropbox per il calcolo della stima dell'integrale e dell'errore in un sottointervallo
testare la function almeno con i seguenti dati f1(x) = 4/(1+ x^2) nell'intervallo [0,1], TOL = 0.0001, MAXFUN = 200. Risultati: ret = 1, N=201, Q=2.875299 f1(x) = 4/(1+ x^2) nell'intervallo [0,1], TOL = 0.0001, MAXFUN = 300. Risultati: ret = 0, N=219, Q=3.141577 Inserire nella propria cartella nomecognome di Dropbox solo il file intautric.c che contiene la funzione assegnata (senza la function quadra e senza la function per la funzione integranda) ed altre, eventuali, funzioni necessarie. Altri file verranno cancellati. Assicurarsi della correttezza dei nomi del file e delle funzioni. Non inserire stampe nella function.
4) matmat (scadenza 4/12/2016)
scrivere 6 function C per l'operazione matriciale C = C+A*B: void matmatijk(int LDA, int LDB, int LDC, float A[][LDA], float B [][LDB], float C[][LDC], int N, int M, int P) void matmatjik(int LDA, int LDB, int LDC, float A[][LDA], float B [][LDB], float C[][LDC], int N, int M, int P) void matmatikj(int LDA, int LDB, int LDC, float A[][LDA], float B [][LDB], float C[][LDC], int N, int M, int P) void matmatkij(int LDA, int LDB, int LDC, float A[][LDA], float B [][LDB], float C[][LDC], int N, int M, int P) void matmatkji(int LDA, int LDB, int LDC, float A[][LDA], float B [][LDB], float C[][LDC], int N, int M, int P) void matmatjki(int LDA, int LDB, int LDC, float A[][LDA], float B [][LDB], float C[][LDC], int N, int M, int P) LDA: leading dimension della matrice A LDB: leading dimension della matrice B LDC: leading dimension della matrice C A: matrice di dimensione NxM B: matrice di dimensione MxP C: matrice di dimensione NxP N: numero righe di A e di C M: numero colonne di A e di righe di B N: numero colonne di B e di C
le 6 function differiscono nella disposizione degli indici dei 3 cicli for costituenti il corpo della function
Utilizzare ciascuna function per il prodotto di matrici quadrate di ordine N=M=P=10, 20, 30,...,500 (50 esecuzioni), e determinare la function che effettua il maggior numero di operazioni al secondo. A tal fine utilizzare la function get_cur_time() presente nel file c_timer.c e c_timer.h disponibili nella propria cartella Dropbox
Inserire nella cartella nomecognome di Dropbox solo il file matmat.c che contiene le 6 function. Altri file verranno cancellati. Assicurarsi della correttezza dei nomi del file e della funzione
5) matmat thread(scadenza 18/12/2016)
scrivere una function C per l'operazione matriciale C = C+A*B utilizzando una griglia con thread NT=NTROW*NTCOL: void matmatthread(int LDA, int LDB, int LDC, float A[][LDA], float B [][LDB], float C[][LDC], int N, int M, int P, int NTROW, int NTCOL)
LDA: leading dimension della matrice A LDB: leading dimension della matrice B LDC: leading dimension della matrice C A: matrice di dimensione NxM B: matrice di dimensione MxP C: matrice di dimensione NxP N: numero righe di A e di C M: numero colonne di A e di righe di B N: numero colonne di B e di C NTROW: numero di righe nella griglia di thread NTCOL: numero di colonne nella griglia di thread
Utilizzare la function per il prodotto di matrici quadrate di ordine N=M=P=500 , con 1, 2 e 4 thread (3 esecuzioni distinte). Nel caso di 1 thread l'esecuzione e' equivalente alla tradizionale esecuzione di un programma per il calcolo del prodotto di due matrici. Nel caso di piu' thread, le matrici vengono immaginate suddivise in blocchi e il calcolo di C si esegue effettiuando un prodotto "a blocchi", in maniera coerente con le dimensioni delle matrici .
Ad esempio, con NT = 4 thread, il thread 0 deve calcolare il blocco C(0,0) , corrispondente alle prime 250 righe e 250 colonne di C , mediante il prodotto tra matrice composta dalle prime 250 righe (e tutte le colonne) di A, e la matrice composta dalle prime 250 colonne (e tutte le righe) di B utilzzando la function matmatikj sviluppata in occasione della consegna 4
Calcolare i tempi di esecuzione con 1, 2 e 4 thread con la function get_cur_time() presente nel file c_timer.c e c_timer.h disponibili nella propria cartella Dropbox
Inserire nella cartella nomecognome di Dropbox solo il file matmatthread.c che contiene la function assegnata e le altre function ausiliarie (ad es. matmatikj). Altri file verranno cancellati. Assicurarsi della correttezza dei nomi del file e della funzione
Kerninghan, Ritchie - Linguaggio C: principi di programmazione e manuale di riferimento - Pearson ed. (disponibile versione digitale in inglese)
Cormen, Leiserson, Rivest, Stein - Introduzione agli algoritmi e strutture
dati, 3a ed. - McGrow Hill (disponibile versione digitale in inglese)
SLIDE (2014)
Per chi non dispone di una macchina con s.o. Linux, in via sperimentale, viene fornita una piattaforma software di supporto che replica l'ambiente disponibile nel laboratorio didattico e che puo' essere utilizzata per lavorare a casa. Si tratta di una "macchina virtuale" , (cioe' un programma, con tutte le funzionalita' di un vero calcolatore) che esegue un sistema operativo Linux (Ubuntu) e che puo' essere eseguito sul proprio computer, qualunque sia il sistema operativo (Windows, Mac OS o anche Linux stesso). A tal fine e' necessario installare sul proprio computer un software di interfacciamento (chiamato anche Supervisore, oppure Virtual Machine Player) tra il proprio sistema operativo e il calcolatore virtuale. passi per installare il Supervisore
PER LE CONSEGNE ( IMPORTANTE ! ) Le consegne avverranno, in via sperimentale, attraverso il servizio cloud Dropbox, gia' installato nella macchina virtuale LabProgMachine operazioni da esegure 1 sola volta !
1) Se non lo si dispone, crearsi un account Dropbox su www.dropbox.com e accedere 2) accedere alla sezione "condivisione" del menu presente sulla sinistra nella pagina principale, 3) cliccare su "Nuova cartella condivisa" e poi su "Avanti" 4) dare alla cartella condivisa il nome nomecognome ovviamente usando il proprio nome e cognome 5) invitare come membro con cui condividere la cartella marco.lapegna@unina.it
6) avviare la macchina virtuale ed aggiornare Dropbox all'ultima versione con il comando cd ~ && wget -O - "https://www.dropbox.com/download?plat=lnx.x86_64" | tar xzf - 7) Avviare Dropobox (dalla sezione internet del menu principale) e collegare la macchina virtuale con Dropbox, inserendo le credenziali definite al punto 1)
|
|