Quinta esercitazione 

Esercizio 1 (svolto)

Esercizio 2 (svolto)

Esercizio 3

Esercizio 4 

Esercizio 5 (svolto) 

Esercizio 6 

Esercizi sulle funzioni

Esercizio 1 

Esempi di uso di funzioni.

Cominciamo con una funzione che non comunica con il modo esterno: 

 
#include <iostream>
 
void hello() {
  cout << “Questa e’ la mia prima funzione” << endl;
 
}
 
int main() {
  hello();
 
  return 0;
}
 

Proviamo ora a passare un parametro alla funzione:

 
#include <iostream>
 
void sum(double a, double b) {
  int c;
        
  c = a + b;
  cout << “La somma vale “ << c << endl;
 
}
 
int main() {
  double v1,v2;
 
  cout << “Valore di v1: “; cin >> v1;
  cout << “Valore di v2: “; cin >> v2;
  sum(v1,v2);
 
  return 0;
}

Proviamo ora ad utilizzare il “return value”

 
#include <iostream>
 
double sum(double a, double b);
 
int main() {
  double v1,v2;
 
  cout << “Valore di v1: “; cin >> v1;
  cout << “Valore di v2: “; cin >> v2;
  cout << “La somma di v1 e v2 vale “ << sum(v1,v2) << endl;
 
  return 0;
}
double sum(double a, double b) {
  int c;
        
  c = a + b;
  return c;
 
}
 

Verificate che la funzione non può modificare il valore il valore delle variabili passate (provate ad esempio a modificare b dentrosum e verificate che il valore di v2 non cambia nel main).

 

Esercizio 2
Passaggio di vettori.

Ci sono due metodi per passare un vettore ad una funzione. Il primo consiste nel definire il vettore come variabile globale:

 
#include <iostream>
 
int ndat=10;
double dat[10];
double vsum() {
  int i;
  double sum = 0;
  for (i=0; i<ndat; i++) {
    sum += dat[i];
  }
  return sum;
}
 
int main() {
  int i;
 
  for (i=0; i<ndat; i++) {
    cout << “Valore di dat[“ << i << “] : “; cin >> dat[i];
  }
  cout << “La somma delle componenti vale “ << sum() << endl;
 
  return 0;
}
 

Il secondo metodo consiste nel passare alla funzione un puntatore al vettore

 
#include <iostream>
 
double vsum(int &ndat, double *dat) {
  int i;
  double sum = 0;
  for (i=0; i<ndat; i++) {
    sum += dat[i];
  }
  return sum;
}
 
int main() {
  int i;
  int np=10;
  double points[10];
 
  for (i=0; i<np; i++) {
    cout << “Valore di points[“ << i << “] : “; cin >> points[i];
  }
  cout << “La somma delle componenti vale “ << sum(np, points) << endl;
 
  return 0;
}
 

Verificate che in entrambi i casi la funzione può modificare il valore della variabile passata dal programma chiamante.

La “&” davanti a ndat nella dichiarazione di vsum indica che ndat non viene passato “by value” ma “by refernce”; anche in questo caso la function può modificare il valore.


Esercizio 3
Creare un programma, strutturato a funzioni, che letti due numeri complessi ne calcoli, il prodotto e la somma
.


Esercizio 4 
Estrarre dall'esercizio 6 dell'esercitazione 3 una funzione che dato un vettore di n elementi ne calcoli media, deviazione standard adattata ed errore standard
.


Esercizio 5 
Esempio di utilizzo delle librerie grafiche: disegno di N punti date i vettori di coordinate x e y. 

 
#include<iostream>
#include<croot.h>
 
int main(){
 
  int ndat=5;
  double  x[5]={0.0,1.0,2.0,3.0,4.0};
  double  y[5]={0.1,0.3,0.5,0.4,0.6};
  double ex[5]={0.0,0.0,0.0,0.0,0.0};
  double ey[5]={0.05,0.05,0.05,0.05,0.05};
 
  R_Init();                        // Inizializza il pacchetto grafico
  R_DrawFrame(-0.5,4.5,0.0,1.0);   // Disegna gli assi con estremi xmin,xmax,ymin,ymax
  R_Graph(5,x,y,"P");              // Disegna 5 punti
  // Oppure R_GraphErrors(5,x,y,ex,ey,"P");  // Disegna 5 punti con gli errori
  R_AxisTitles("X","Y");           // Scrive il nome sugli assi
  R_End();                         // Chiude il pacchetto grafico
 
  return 0;
}
 

Per compilare:

 
> g++ -o es6 es6.cpp `crootlib`


Esercizio 6 
Nel file pendolo.datsono contenuti i risultati di un esperimento sulla misura di g tramite un pendolo semplice.
Per ogni misura di lunghezza (L in tutto) sono state prese N misure di periodo (a lunghezza fissata)   

L  N
Lunghezza_1
Periodo1_1
Periodo1_2
..
Periodo1_N
Lunghezza_2
Periodo2_1
Periodo2_2
..
Periodo2_N
...
Lunghezza_L
PeriodoL_1
PeriodoL_2
..
PeriodoL_N

 

Calcolare per ogni lunghezza L la media delle N misure di periodo effettuate per tale lunghezza e graficare T medio (con errore il suo errore standard) in funzione di L.