====== Esercitazione 3 ====== Dove si sviluppano semplici programmi C che utilizzano i costrutti di controllo e gli array e si comincia a parlare di tempo impiegato per risolvere un problema. ===== Esercizio 1: Filtrare un array ===== Scrivere un programma C che legge da tastiera una array di 20 valori reali, trova la media e stampa sullo standard output solo i valori maggiori della media. ===== Esercizio 2: Somma e prodotto di matrici ====== Scrivere un programma C costituito da un ''main()'' che legge da standard input due matrici quadrate 10 x 10 di reali, calcola somma e prodotto e stampa i risultati sullo standard output. Dopo aver testato il programma inserendo numeri da tastiera (con matrici piccole, ad es, 2 x 2), possiamo testare il programma su matrici piu' grandi in questo modo: E' possibile scrivere le matrici (come quelle qui sotto) in un file di testo 'matrici.txt', e indirizzarlo nello standard input del programma scrivendo ./programma < matrici.txt Questo vuol dire che il contenuto del file ''matrici.txt'' potra' essere letto come se fosse stato digitato da tastiera, i.e., potremo leggere i numeri uno ad uno tramite la funzione ''scanf("%d", &variabile)'' (gli spazi e gli a capo vengono ignorati in questo caso). Sara' quindi necessario utilizzare i numeri letti tramite la funzione ''scanf()'' per inizializzare le matrici. possibili matrici per il file matrici.txt: 1 2 3 4 5 6 7 8 9 0 2 3 4 5 6 7 8 9 0 1 3 4 5 6 7 8 9 0 1 2 4 5 6 7 8 9 0 1 2 3 5 6 7 8 9 0 1 2 3 4 6 7 8 9 0 1 2 3 4 5 7 8 9 0 1 2 3 4 5 6 8 9 0 1 2 3 4 5 6 7 9 0 1 2 3 4 5 6 7 8 0 1 2 3 4 5 6 7 8 9 1 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 1 ===== Esercizio 3: Massimo Comun Divisore ====== (1) Scrivere un programma C che * legge da standard input //x// ed //y// * calcola MCD(x,y) utilizzando il metodo delle divisioni successive (pag 80 lucidi sui costrutti di controllo) * stampa il risultato sullo standard output (2) Scrivere un programma C che * legge da standard input //x// ed //y// * calcola MCD(x,y) utilizzando il metodo delle divisioni successive (pag 94 e seguenti lucidi sui costrutti di controllo) * stampa il risultato sullo standard output Utilizzare il comando ''time'' per valutare il tempo impiegato per calcolare ''MCD(m,n)'' con ''m=10000000,n=9457831'' con i due algoritmi. Per evitare di misurare i tempi di attesa dell'input dallo schermo assegnare direttamente i valori alle variabili all'inizio del main e compilare. Supponendo il nome degli eseguibili sia ''euclide1'' ed ''euclide2'' basta utilizzare il comando di shell "time" che ha come argomento un eseguibile, ovvero time ./euclide1 e time ./euclide2 per ottenere il tempo impiegato effettuando operazioni dentro il sistema operativo e fuori. Confrontare i tempi ottenuti con le due implementazioni ed analizzare i risultati. Utilizzare il comando man time per capire come interpretare i valori stampati da time su standard output. ===== Esercizio 4: MSS, Maximum Segment Sum ===== Dato un array di interi positivi e negativi, il segmento di somma massima e' la porzione contigua dell'array in cui la somma deigli elementi ha valore piu' alto. Ad esempio l'array [2,-4,2,-1,6-3] ha come SSM il segmento [2,-1,6] di valore 7. Si chiede di realizzare in programma C che legge dallo standard input N interi, li inserisce in un array lungo N, calcola il segmento di somma massima e lo stampa sullo standard output. N deve essere definito con una opportuna MACRO.