Quarta esercitazione

Esercizio 1 (svolto)
Esercizio 2
Esercizio 3 (svolto)
Esercizio 4 (svolto)
Esercizio 5
Esercizio 6
Esercizio 7 (svolto)
Esercizio 8
Esercizio 9

Esercizi sui puntatori

Esercizio 1
Puntatori, operatori * e &.
#include <iostream>

main(){

  double a=8.0,b=4.0;
  double *p=NULL; // puntatore inizializzato a 0 (nessuna zona di memoria)

  p = &a;  // Faccio in modo che p punti alla locazione di memoria di a
  cout << a << " " << p << " " << *p << endl;
  p = &b;  // Faccio in modo che p punti alla locazione di memoria di b
  cout << b << " " << p << " " << *p << endl;
  b = 5.0; // Cambio il contenuto della locazione di memoria di b
  cout << b << " " << p << " " << *p << endl;
  *p = 10; // Assegno il valore 10 alla locazione puntata da p
  cout << b << " " << p << " " << *p << endl;

  double v[3]={0.0,1.0,2.0};

  cout << v << " " << *v << endl;
  p = v;     // Il nome del vettore coincide con il puntatore alla prima componente
  cout << p << " " << *p << endl;
  p = &v[0]; // Equivalente..
  cout << p << " " << *p << endl;
  p = &v[1]; // Il puntatore viene fatto puntare alla seconda componente di v;
  cout << p << " " << *p << endl;
  

}

Esercizio 2
Definite un vettore di int a 5 elementi ed un vettore di short int a 5 elementi ed inizializzarli da tastiera.
Stampare l'indirizzo ed il valore di ciascuna componente dei vettori (utilizzando i puntatori).

Esercizi sull' allocazione dinamica

Esercizio 3
Allocazione dinamica di una variabile:
#include <iostream>

main(){
   double *p;

   p = new double;
   *p = 37.;
   cout << p << " " << *p << endl;
   delete p;

   double *x = new double;

   p = new double;
   *p = 11.;
   cout << p << " " << *p << endl;
   cout << x << " " << *x << endl;
   
}

Esercizio 4
Allocazione dinamica di un vettore:
#include <iostream>
main(){

  double *p=NULL;
  int n,i;

  cout << "Inserisci la dimensione del vettore " << endl;

  cin >> n;
  p = new double[n];

  cout << "Inserisci le " << n << " componenti del vettore "<< endl;
  for (i=0; i < n;i++){
    cin >> p[i];
  }
  cout << "Puntatore alla prima componente " << p << endl;
  cout << "Componenti del vettore ";

  for (i=0;i < n;i++){
    cout << " " << p[i];
  }
  cout  << endl;

  delete[] p;

}


Esercizio 5
Calcolo di un polinomio di grado n per x dato.
Leggere da terminale il grado n e gli n+1 parametri di un polinomio di grado n (allocazione dinamica).
Chiedere all'utente di specificare, da terminale, il valore della variabile x e calcolare il valore del polinomio in quel punto.

Esercizio 6
Modificare il programma che calcola media e varianza (es6 della precedente lezione) in modo che allochi dinamicamente il vettore di dati.
Per copiare l'esercizio della scorsa esercitazione:
  cp ../esercitazione3/es6.cpp .

Esercizio 7
Introduzione delle matrici
#include <iostream>
main(){

  // Matrice allocata staticamente
  double x[2][3]={ 0.0,  3.0, 2.0,  
                   1.0,  4.0, 1.0  };

 cout << " Valori della matrice: " << endl;
  for (int j=0; j < 2; j++){
    for (int i=0; i < 3; i++){
       cout << x[j][i] << " ";
    }  
  }  
  cout << endl;
  
  // Matrice allocata dinamicamente
  int nrow,ncol;
  double **matrix;

  cin >> nrow >> ncol;

  matrix = new double*[nrow];
  for (int i=0; i < nrow; i++){
    matrix[i] = new double[ncol];
  }

  for (int i=0; i < nrow; i++){
    for (int j=0; j < ncol; j++){
      matrix[i][j] = i*ncol+j;
    }  
  }

  for (int i=0; i < nrow; i++){
    delete[] matrix[i];
  }
  delete[] matrix;

}

Esercizio 8
Leggere da file una matrice X (NxM). Utilizzate il file matrici.dat scritto nel seguente formato
N M
X_11 X12 ...   X_NM
M L
Y_11 Y12 ...   Y_ML
Dopo aver letto la matrice moltiplicatela per una costante a piacimento e stampate il risultato.
Utilizzare l'allocazione dinamica per creare la matrice.

Esercizio 9
Leggere da file una matrice X (NxM) ed una matrice Y (MxL). Utilizzate il file matrici.dat scritto nel seguente formato
N M
X_11 X12 ...   X_NM
M L
Y_11 Y12 ...   Y_ML
Calcolare la matrice prodotto W definita secondo:

e stamparne il risultato.
(Utilizzate l'allocazione dinamica)