Question: #include #include #include #include #include #include #include class Analyzer { public: Analyzer ( int * values, int size ) : values ( values ) ,

#include #include #include #include #include #include #include class Analyzer { public: Analyzer(int* values, int size) : values(values), size(size){} virtual std::string analyze()=0; protected: int* values; int size; }; class SearchAnalyzer : public Analyzer { public: SearchAnalyzer(int* values, int size) : Analyzer(values, size){ selection_sort(this->values, this->size); } std::string analyze() override { int foundCount =0; for (int i =0; i <100; ++i){ int randomValue = rand()%1000; if (binary_search(values, size, randomValue)){++foundCount; }} return "There were "+ std::to_string(foundCount)+" random values found"; } private: void selection_sort(int* values, int size){ for (int i =0; i < size -1; ++i){ int minIndex = i; for (int j = i +1; j < size; ++j){ if (values[j]< values[minIndex]){ minIndex = j; }} std::swap(values[i], values[minIndex]); }} bool binary_search_recursive(int* values, int key, int start, int end){ if (start > end){ return false; } int mid = start +(end - start)/2; if (values[mid]== key){ return true; } else if (values[mid]> key){ return binary_search_recursive(values, key, start, mid -1); } else { return binary_search_recursive(values, key, mid +1, end); }} bool binary_search(int* values, int size, int key){ return binary_search_recursive(values, key, 0, size -1); }}; class StatisticsAnalyzer : public Analyzer { public: StatisticsAnalyzer(int* values, int size) : Analyzer(values, size){ selection_sort(this->values, this->size); } std::string analyze() override { int min = values[0]; int max = values[size -1]; double mean =0; for (int i =0; i < size; ++i){ mean += values[i]; } mean /= size; double median; if (size %2==0){ median =(values[size /2-1]+ values[size /2])/2.0; } else { median = values[size /2]; } std::unordered_map frequency; for (int i =0; i < size; ++i){ frequency[values[i]]++; } int mode = values[0]; int maxCount =0; for (const auto& pair : frequency){ if (pair.second > maxCount){ maxCount = pair.second; mode = pair.first; }} return "The minimum value is "+ std::to_string(min)+"
"+ "The maximum value is "+ std::to_string(max)+"
"+ "The mean value is "+ std::to_string(mean)+"
"+ "The median value is "+ std::to_string(median)+"
"+ "The mode value is "+ std::to_string(mode)+" which occurred "+ std::to_string(maxCount)+" times"; } private: void selection_sort(int* values, int size){ for (int i =0; i < size -1; ++i){ int minIndex = i; for (int j = i +1; j < size; ++j){ if (values[j]< values[minIndex]){ minIndex = j; }} std::swap(values[i], values[minIndex]); }}}; int main(){ const int SIZE =1000; createBinaryFile("binary.dat", SIZE); BinaryReader br("binary.dat"); StatisticsAnalyzer sa(br.getValues(), br.getSize()); std::cout << sa.analyze()<<'
'; DuplicateAnalyzer da(br.getValues(), br.getSize()); std::cout << da.analyze()<<'
'; MissingAnalyzer ma(br.getValues(), br.getSize()); std::cout << ma.analyze()<<'
'; SearchAnalyzer ra(br.getValues(), br.getSize()); std::cout << ra.analyze()<<'
'; return 0; }

Step by Step Solution

There are 3 Steps involved in it

1 Expert Approved Answer
Step: 1 Unlock blur-text-image
Question Has Been Solved by an Expert!

Get step-by-step solutions from verified subject matter experts

Step: 2 Unlock
Step: 3 Unlock

Students Have Also Explored These Related Programming Questions!