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)