- Codice:
float *esperimentoPi(int nPunti, float a, int nMisure){
float* results=new float[nMisure];
for(unsigned int i=0; i<nMisure; i++){
results[i]=misurePi(nPunti, a);
}
return &results;
}
float *esperimentoPi(int nPunti, float a, int nMisure){
float* results=new float[nMisure];
for(unsigned int i=0; i<nMisure; i++){
results[i]=misurePi(nPunti, a);
}
return &results;
}
Nel secondo punto, dovrei salvare un certo numero di misure in un array dinamico:
- Codice:
float *esperimentoPi(int nPunti, float a, int nMisure){
float* results=new float[nMisure];
for(unsigned int i=0; i<nMisure; i++){
results[i]=misurePi(nPunti, a);
}
return &results;
}
Ho due dubbi essenziali: è corretto usare & per la variabile di return?
E quando chiamo la funzione nel main con i parametri attuali, devo mettere l'*?
In realtà dovrei fare Nmisure misure e salvarle nel vettore!
Edit: o meglio, dovrei fare Nmisure misure per ciascuna componente del vettore, credo...
int main(){
srand(time(NULL));
ofstream file_out;
file_out.open("risultati.dat",ios::out);
for(unsigned j=1; j<=20; j++)
esperimentoPi(50*j,a,NMISURE);
file_out << "Numero dati:" << 50*j << ", Media: " << media(results, nMisure) << " ,
Deviazione Standard:" << devStd(results, nMisure) << endl;
return 0;
}
#include <stdlib.h>
#include <fstream>
#include <iostream> // cerr
#include <time.h>
#include <cmath>
float misuraPi(int nPunti, float);
float * esperimentoPi(int nPunti, float a, int nMisure);
float media(const float * array, int N);
float devStd(const float * array, int N, const float * media_ptr = nullptr);
inline void
delete_array_of_array(float * array[], int N)
{
for (int i = 0; i != N; i++)
{
delete[] array[i];
array[i] = nullptr;
}
}
int
main( )
{
constexpr int NMISURE = 50;
constexpr int NRIPETIZIONI = 1000 / 50;
constexpr float a = 1.f;
srand(time(nullptr)); // nullptr e' type safe
float * esperimenti[NRIPETIZIONI];
for (int i = 0, nPunti = 50; i != NRIPETIZIONI; ++i, nPunti += 50)
{
esperimenti[i] = esperimentoPi(nPunti, a, NMISURE);
if (!esperimenti)
{
std::cerr << "Errore in esperimentoPi" << std::endl;
delete_array_of_array(esperimenti, i);
return EXIT_FAILURE;
}
}
std::ofstream file_out;
file_out.open("risultati.dat", std::ios::out);
if (file_out.fail( ))
{
std::cerr << "Errore nella creazione del file" << std::endl;
delete_array_of_array(esperimenti, NRIPETIZIONI);
return EXIT_FAILURE;
}
for (int i = 0, nPunti = 50; i != NRIPETIZIONI; ++i, nPunti += 50)
{
float m = media(esperimenti[i], NMISURE);
file_out << "Numero dati: " << nPunti << ", Media: " << m
<< ", Deviazione Standard: "
<< devStd(esperimenti[i], NMISURE, &m) << std::endl;
}
delete_array_of_array(esperimenti, NRIPETIZIONI);
}
#include <stdlib.h>
#include <fstream>
#include <iostream> // cerr
#include <time.h>
#include <cmath>
float misuraPi(int nPunti, float);
float * esperimentoPi(int nPunti, float a, int nMisure);
float media(const float * array, int N);
float devStd(const float * array, int N, const float * media_ptr = nullptr);
int
main( )
{
constexpr int NMISURE = 50;
constexpr float a = 1.0f;
srand(time(nullptr)); // nullptr e' type safe
std::ofstream file_out;
file_out.open("risultati.dat", std::ios::out);
if (file_out.fail( ))
{
std::cerr << "Errore nella creazione del file" << std::endl;
return EXIT_FAILURE;
}
for (int nPunti = 50; nPunti < 1001; nPunti += 50)
{
float const * esperimento = esperimentoPi(nPunti, a, NMISURE);
if (!esperimento)
{
std::cerr << "Errore in esperimentoPi" << std::endl;
return EXIT_FAILURE;
}
float m = media(esperimento, NMISURE);
file_out << "Numero dati: " << nPunti << ", Media: " << m
<< ", Deviazione Standard: " << devStd(esperimento, NMISURE, &m)
<< std::endl;
// un po' uno spreco, sarebbe più pratico allocare una volta e
// riutilizzare
delete[] esperimento;
}
}
#include <stdlib.h>
#include <fstream>
#include <iostream> // cerr
#include <time.h>
#include <cmath>
float misuraPi(int nPunti, float);
float * esperimentoPi(int nPunti, float a, int nMisure);
float media(const float * array, int N);
float devStd(const float * array, int N, const float * media_ptr = nullptr);
inline void
delete_array_of_array(float * array[], int N)
{
for (int i = 0; i != N; i++)
{
delete[] array[i];
array[i] = nullptr;
}
}
int
main( )
{
constexpr int NMISURE = 50;
constexpr int NRIPETIZIONI = 1000 / 50;
constexpr float a = 1.f;
srand(time(nullptr)); // nullptr e' type safe
float esperimenti[NRIPETIZIONI][2];
for (int i = 0, nPunti = 50; i != NRIPETIZIONI; ++i, nPunti += 50)
{
float * esperimento = esperimentoPi(nPunti, a, NMISURE);
if (!esperimento)
{
std::cerr << "Errore in esperimentoPi" << std::endl;
return EXIT_FAILURE;
}
esperimenti[i][0] = media(esperimento, NMISURE);
esperimenti[i][1] = devStd(esperimento, NMISURE, &esperimenti[i][0]);
// che spreco di memoria...
delete[] esperimento;
}
std::ofstream file_out;
file_out.open("risultati.dat", std::ios::out);
if (file_out.fail( ))
{
std::cerr << "Errore nella creazione del file" << std::endl;
return EXIT_FAILURE;
}
for (int i = 0, nPunti = 50; i != NRIPETIZIONI; ++i, nPunti += 50)
{
file_out << "Numero dati: " << nPunti << ", Media: " << esperimenti[i][0]
<< ", Deviazione Standard: " << esperimenti[i][1] << std::endl;
}
}
constexpr
, puoi anche trasformarli in dei #define
o in dei const
.Numero dati: 50, Media: 3.12, Deviazione Standard: 0.191332
Numero dati: 100, Media: 3.1976, Deviazione Standard: 0.189553
Numero dati: 150, Media: 3.112, Deviazione Standard: 0.127024
Numero dati: 200, Media: 3.1508, Deviazione Standard: 0.117997
Numero dati: 250, Media: 3.14432, Deviazione Standard: 0.127368
Numero dati: 300, Media: 3.1312, Deviazione Standard: 0.106178
Numero dati: 350, Media: 3.12777, Deviazione Standard: 0.0758926
Numero dati: 400, Media: 3.132, Deviazione Standard: 0.0843564
Numero dati: 450, Media: 3.14009, Deviazione Standard: 0.0776913
Numero dati: 500, Media: 3.14832, Deviazione Standard: 0.0704584
Numero dati: 550, Media: 3.136, Deviazione Standard: 0.0728145
Numero dati: 600, Media: 3.12987, Deviazione Standard: 0.0595277
Numero dati: 650, Media: 3.14769, Deviazione Standard: 0.0618607
Numero dati: 700, Media: 3.14046, Deviazione Standard: 0.0595722
Numero dati: 750, Media: 3.13696, Deviazione Standard: 0.0575969
Numero dati: 800, Media: 3.1366, Deviazione Standard: 0.0685525
Numero dati: 850, Media: 3.136, Deviazione Standard: 0.0623809
Numero dati: 900, Media: 3.14018, Deviazione Standard: 0.0583372
Numero dati: 950, Media: 3.13651, Deviazione Standard: 0.0692006
Numero dati: 1000, Media: 3.16048, Deviazione Standard: 0.0420867
Visitano il forum: Nessuno e 1 ospite