Codici sorgenti per esami di programmazione
Esame TRAP
Il codice sorgente per l'esame TRAP è il seguente:
#include <iostream>
#include <fstream>
#include <math.h>
#include <iomanip>
using namespace std;
double funz(double x);
#define NINT (4)
#define NRAFF (10)
int main() {
int n = NINT;
double b = 1., a = 0.;
double I0 = 97 - 35 * M_E;
double errnd2 = 1.;
ofstream fout("esame5_trap.dat");
for(int k = 0; k < NRAFF; k++) {
double h = (b - a) / n; // step
double xk = a;
double xk1 = xk + h;
double s_trap = 0.; // Integrale trapezi
for(int i = 0; i < n; i++) {
s_trap = s_trap + 0.5 * (funz(xk) + funz(xk1)) * h;
xk = xk + h; // update xk
xk1 = xk + h; // update xk1
}
double errn = fabs(s_trap - I0);
fout << setw(8) << setprecision(4) << fixed << n << " " // valore del raffinamento
<< setw(8) << setprecision(8) << fixed << s_trap << " " // valore dell'integrale
<< setw(8) << setprecision(8) << fixed << errn/errnd2 << " " // errore
<< setw(8) << setprecision(8) << fixed << errn << "\n";
errnd2 = errn;
n = n * 2;
}
fout.close();
return 0;
}
double funz(double x) {
return exp(x) * (pow(x, 5) + pow(x, 4) + x);
}
Esame BISEZ
Il codice sorgente per l'esame BISEZ è il seguente:
#include <iostream>
#include <fstream>
#include <cmath>
#include <iomanip>
using namespace std;
double funz(double x);
#define NINT (20)
int main() {
int n = NINT;
double b = 0.857, a = .311;
double ak = a;
double bk = b;
double xk1 = 0.5 * (ak + bk);
double h = 0.5 * (b - a);
double z0 = 0.45 + (0.03 * 5); // 0.6
ofstream fout("dati1.dat");
for(int k = 0; k < n; k++) {
fout << setw(3) << k + 1 << " " // iterazioni
<< setw(8) << xk1 << " " // stima dello zero approssimato
<< setw(12) << setprecision(7) << fixed << fabs(0.5 * (ak + bk) - z0) / fabs(xk1 - z0) << " "
<< setw(12) << setprecision(7) << fixed << fabs(0.5 * (ak + bk) - z0) / pow(fabs(xk1 - z0), 2) << " "
<< setw(12) << setprecision(7) << fixed << funz(xk1) << "\n";
if(funz(xk1) * funz(ak) < 0) {
bk = xk1;
} else {
ak = xk1;
}
xk1 = 0.5 * (ak + bk);
}
fout.close();
return 0;
}
double funz(double x) {
return (exp(3.5 * x)) * (x - (0.45 + 0.03 * (5))) * (x + 6) * (x + 7);
}
Esame DIFF2
Il codice sorgente per l'esame DIFF2 è il seguente:
#include <iostream>
#include <fstream>
#include <iomanip>
#include <cmath>
using namespace std;
#define NINT (80)
double funz(double x);
double deriv1(double x);
double deriv2(double x);
double deriv3(double x);
int main() {
double fk[NINT + 1];
double fd1k_a[NINT + 1];
double fd2k_a[NINT + 1];
double fd3k_a[NINT + 1];
ofstream fout("dati5_80.dat");
int n = NINT + 1;
double a = 0.;
double b = 1.;
double h = (b - a) / (n - 1);
for(int i = 0; i < n - 3; i++) { // se indietro i=3
double xk = a + i * h;
fd1k_a[i] = (funz(xk + h) - funz(xk)) / h; // formula derivata prima avanti
fd2k_a[i] = (funz(xk + 2 * h) - 2 * funz(xk + h) + funz(xk)) / (h * h); // formula derivata seconda avanti
fd3k_a[i] = (-3 * funz(xk + 2 * h) + 3 * funz(xk + h) - funz(xk) + funz(xk + 3 * h)) / (h * h * h); // formula derivata terza avanti
}
for(int i = 0; i < n; i++) {
double xk = a + i * h;
fout << setw(5) << setprecision(4) << fixed << xk << " " // ascissa xk
<< setw(10) << setprecision(7) << fixed << fd3k_a[i] << " "
<< setw(10) << setprecision(7) << fixed << fd2k_a[i] << " "
<< setw(10) << setprecision(7) << fixed << fabs(fd2k_a[i] - deriv2(xk)) << "\n";
}
fout.close();
return 0;
}
double funz(double x) {
double y = exp(-2 * x) * cos(3 * x);
return y;
}
double deriv1(double x) {
double y = -exp(-2 * x) * (3 * sin(3 * x) + 2 * ...