Ho scritto un programma che legge da un file una serie di valori double e una volta trovati minimo e massimo dovrebbe suddividere i valori assegnando ciascuno al suo intervallo (il numero di intervalli è deciso dall'utente). Questo programma girava tranquillamente fino all'altro giorno e non capisco perché ora mi vada in crush
#include <iostream>
#include <fstream>
#include <string>
using namespace std;
double *a;
void resize (int at,int* &veclen,double** &vect,double value);
int main()
{
ifstream inn;
ofstream outt;
string filename;
int inter,pos,*veclength;
double value,max,min,**vec;
cout << "Inserire file di input: ";
cin >> filename;
inn.open(filename.c_str());
outt.open("distribution.txt");
cout << "Numero di intervalli: ";
cin >> inter;
vec = new double* [inter];
veclength = new int [inter];
for(int i=0; i<inter; i++)
veclength[i]=0;
inn >> value;
max = value;
min = value;
while(inn)
{
inn >> value;
if(value > max)
max = value;
if(value < min)
min = value;
}
inn.close();
inn.open(filename.c_str());
while(inn)
{
inn >> value;
if(value == max) // il valore di massimo deve rientrare nell'intervallo subito precedente
{
resize(inter-1,veclength,vec,value);
continue;
}
pos = (value-min)*inter/(max-min); // algoritmo per distribuzione
// di frequenza
resize (pos,veclength,vec,value);
}
inn.close();
for(int i=0; i<inter; i++)
outt << veclength[i] << endl;
for(int i=0; i<inter;i++)
{
cout << "Da " << min+i*(max-min)/inter << " a " << min+(i+1)*(max-min)/inter
<< endl;
for(int j=0; j<veclength[i];j++)
cout << vec[i][j] << " ";
cout << endl;
}
outt.close();
return 0;
}
void resize (int at,int* &veclen,double** &vect,double value)
{
a = new double[veclen[at]];
for(int i=0;i<veclen[at];i++)
a[i] = vect[at][i];
delete [] vect[at];
veclen[at]++;
vect[at] = new double[veclen[at]];
for(int i=0;i<veclen[at]-1;i++)
vect[at][i] = a[i];
vect[at][veclen[at]-1] = value;
}
Posto anche un esempio di file di input
5.74
5.27
0.72
0.24
1.85
2.47
3.48
4.16
7.51
4.60
5.35
5.23
2.22
5.29
5.05
3.48
2.86
3.48
5.41
4.75
5.31
4.95
3.98
5.33
5.57
2.59
5.20