Lezione 1
Lezione 1
Introduzione all'analisi dati e ripasso dei costrutti del C(++)

In questa prima lezione proviamo a rinfrescarci la memoria sulla programmazione lavorando direttamente su un caso concreto: abbiamo a disposizione un file in cui sono immagazzinati i valori ottenuti da una certa misura e vogliamo scrivere un codice per farci sopra una analisi statistica minimale. Calcoliamo la media, la varianza e la mediana della distribuzione: il calcolo della mediana in particolare richiede che il set di dati sia ordinato e quindi ci obbliga a fare un pò di esercizio aggiuntivo. In questa lezione lavoreremo con : Prima di incominciare a scrivere il codice è utile ripassare rapidamente alcuni elementi base del linguaggio :

Passaggio di input da linea di comando

cin e cout

Allocazione dinamica della memoria


fstream

ESERCIZIO 1.0 - Primo codice per analisi :
Proviamo a scrivere un unico codice che legga dati da file, li immagazzini in un array dinamico, calcoli la media, la varianza e la mediana dei dati raccolti. Scriviamo su un file di output i dati riordinati in ordine crescente. Il numero di elementi da caricare e il nome del file in cui trovare i dati sono passati da tastiera nel momento in cui il programma viene eseguito. Cerchiamo di costruire il codice passo passo.

Struttura del programma

Provate ad implementare le parti mancanti. Se non ci riuscite sbirciate pure sotto.

1) Caricamento elementi da file

2) Calcolo della media e della varianza

3) Riordino elementi di un array

4) Calcolo della mediana

5) Scrittura elementi su file


- Compiliamo il programma invocando al solito g++:
g++ main.cpp -o main

- Eseguiamo il programma :
./main 1000000 data.dat


ESERCIZIO 1.1 - Codice di analisi con funzioni: :
Vogliamo ora riorganizzare il codice precedente per renderlo più modulare e facilmente riutilizzabile. Per capirci meglio: il calcolo della media e' una operazione generale che può essere immaginata come un blocco di codice che accetta in input un array di dati e una dimensione e restituisce un valore ( la media appunto ). Se in uno stesso codice principale dobbiamo calcolare più volte la media di array di dati diversi non vogliamo ripetere più volte il frammento di codice relativo. Lo stesso vale per la lettura di un set di dati da un file o per il calcolo della mediana. Il codice dovrebbe avere quindi una struttura del tipo
  • Dichiarazione di tutte le funzioni che verranno utilizzate.
  • Programma vero e proprio int main() {....} in cui le funzioni vengono utilizzate.
  • Al termine del programma principale l'implementazione di tutte le funzioni dichiarate.
Dal momento che abbiamo deciso di spezzare il codice in funzioni proviamo a fare uso di una funzione dedicata che scambi tra loro due elementi di un array. In questo caso ripassiamo prima rapidamente come funziona il passaggio di dati in una funzione.

Funzioni con argomenti by reference e by value (e by pointer)

Vediamo passo passo come fare :

Struttura del programma


- Come nel caso dell'esercizio precedente compiliamo il programma invocando al solito g++:
g++ main.cpp -o main

- Eseguiamo il programma :
./main 1000000 data.dat

ESERCIZIO 1.2 - Codice di analisi con funzioni e Makefile.:
In questo esercizio terminiamo il processo di riorganizzazione dell'esercizio 1.0. Procederemo in questo modo:
  • Tutte le dichiarazioni di variabili che abbiamo messo in testa al programma le spostiamo in un file separato funzioni.h.
  • Tutte le implementazioni delle funzioni in coda al programma le spostiamo in un file separato funzioni.cpp.
  • Ricordiamoci di includere il file funzioni.h sia in main.cpp sia in funzioni.cpp tramite il solito #include "funzioni.h"
  • Compiliamo separatamente main.cpp e funzioni.cpp utilizzando un Makefile
Prima di incominciare rivediamo rapidamente come si scrive un Makefile:

Il Makefile


ESERCIZIO 1.3 - Overloading di funzione (da consegnare):
Aggiungete alla vostra libreria di funzioni una funzione void Print(double *, int) che permetta di scrivere gli elementi di un array a video. Questo è possibile grazie all'overloading (funzioni con stesso nome, ma con argomenti differenti).

Overloading di funzioni



Ulteriori suggerimenti :

Formattazione dell'output


Questione di stile
Back to Home Page