Lezione 1
Lezione 1
Ripasso dei Costrutti del C(++)

In questa prima lezione svolgeremo dei semplici esercizi per rinfrescarci la memoria e "sgranchirci" le dita...

ESERCIZIO 1.0 - La funzione scambia:
Il programma legge due dati da tastiera, li immagazzina in due variabili poi usa una funzione per scambiare il contenuto delle due variabili. Provare l'effetto di diverse sintassi della funzione scambia().

Brevi Richiami
Struttura del programma

cin e cout

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


ESERCIZIO 1.1 - Scambia e Makefile:
Riorganizzare il programma dell'esercizio precedente compilando la funzione scambia in un oggetto indipendente dal programma,
utilizzando un Makefile

Brevi richiami
Il Makefile

ESERCIZIO 1.2 - Scambio di elementi di un vettore (da consegnare):
Leggere i dati dal file /home/comune/labTNDS_aa1011_materiale/lezione1/dati.dat, immagazzinarli in un vettore, ciclare sul vettore e scambiare ciascun elemento di indice pari con il successivo (che è di indice dispari).
Scrivere su un file chiamato output.txt il vettore con gli elementi scambiati.
Il file dati.dat contiene nella prima riga il numero (intero) di componenti del vettore, e nelle successive righe gli N valori delle componenti.

Brevi richiami
fstream

Allocazione dinamica della memoria


ESERCIZIO 1.3 - Precisione e Formattazione (da consegnare):
In questo esercizio verificheremo i problemi degli errori di arrotondamendo connessi al fatto che un calcolatore può rappresentare numeri solo con una precisione finita. Metteremo un po' in crisi la rappresentazione floating point dei numeri vedendo che operazioni "esatte" dal punto di vista analitico non lo sono quando calcolate numericamente.
  1. Stampare il risultato delle seguenti operazioni:
  2. Valutare la funzione f(x) quando x è una potenza di 10, da x = 1E0 a x = 1E18
    f(x) = sqrt(x+1) - sqrt(x)
    e trovare un modo per valutare f con un errore più piccolo (le somme sono meno problematiche delle sottrazioni...).
    Per poter usare la funzione sqrt in C++ è necessario includere l'header <cmath>

  3. Dato il seguente array

    double data[4] = {4, 7, 13, 16}

    calcolare la media aritmetica <x> e la varianza V definita dalla formula

    V =N/(N-1) (<x^2> - <x>^2)

    Calcolare la media la varianza dell'array data_hugenumber, uguale all'array data ma in cui gli elementi sono maggiorati di 1E9.
    Qual è la varianza di data_hugenumber?
    Si ricorda che V[X+C] = V[X] dove C è una costante.

  4. Se avete una calcolatrice provate a ripetere gli esercizi precedenti.
    Provate a trovare l'esponente x per cui (1Ex + 1 ) - 1Ex dà un risultato sbagliato (vedi punto 1).

  5. Formattare l'output del programma:
    * per i punti 1) e 2) l'output deve essere in notazione scientifica;
    * per il punto 2) si richiede come output una tabella del tipo
    ------------------------------------------------------
    x fconerrore(x) fmigliore(x)
    ------------------------------------------------------
    .......................................................
    in cui valori siano allineati (usare setw);
    * per le altri parti si lascia al gusto personale.

Brevi richiami
Rappresentazione floating point

Formattazione dell'output


Per i curiosi guardare qui (courtesy of dott. R. Turra)

ESERCIZIO 1.4 - Overloading di funzione (da consegnare):
Calcolare il modulo di un numero (input da tastiera), di un vettore a due componenti (input da tastiera) e di un vettore a più componenti (prendendo l'input dal file dati.dat che vi è stato fornito). L'esercizio deve essere risolto implementando 3 funzioni con lo stesso nome, ma con argomenti differenti (overloading di funzione).

Brevi richiami
Overloading di funzioni



Back to Home Page