#include #include #include #include #include void storedata (Array >& data, const char* file); double pearsonCorrelation (int size, double* a, double* b); double getMean (int size, double* a); void printCorrelations (Array >& dataa, Array >& datar); double dixonDistance (Array >& dataa, Array >& datar, int i, int j); void getDifference (Array& output, Array& newer, Array& older); using namespace std; int main(int argc, char** argv) { if (argc < 3) { cout << "Error: not enough files" << endl; exit(1); } Array > dataa; Array > datar; const char* filea = argv[1]; const char* filer = argv[2]; storedata(dataa, filea); storedata(datar, filer); printCorrelations(dataa, datar); return 0; } void printCorrelations(Array >& dataa, Array >& datar) { int i; int j; double correlation; for (i=0; i >& data, const char* file) { ifstream reader; reader.open(file); if (!reader.is_open()) { cout << "ERROR reading " << file << endl; exit(1); } data.setSize(100000); data.setSize(0); Array temparray; temparray.setSize(100000); temparray.setSize(0); double value; int i; int location; char buffer[1024 * 1024] = {0}; while (!reader.eof()) { temparray.setSize(0); reader.getline(buffer, 1024*1024); char* ptr = strtok(buffer, " \t\n,"); while (ptr != NULL) { if (sscanf(ptr, "%lf", &value)) { temparray.append(value); } ptr = strtok(NULL, " \t\n,"); } // append the new row to the data output location = data.getSize(); data.setSize(data.getSize()+1); data[location].setSize(temparray.getSize()); data[location].allowGrowth(0); for (i=0; i >& dataa, Array >& datar, int i, int j) { if ((i==0) || (j==0)) { return 0.0; } Array differenceA; Array differenceR; getDifference(differenceA, dataa[i], dataa[i-1]); getDifference(differenceR, datar[j], datar[j-1]); if (differenceA.getSize() == 0) { return 0.0; } if (differenceR.getSize() == 0) { return 0.0; } double sum = 0.0; double value; for (i=0; i& output, Array& newer, Array& older) { int i; output.setSize(newer.getSize()); output.allowGrowth(0); for (i=0; i