#include <iostream>
class Histogram
{
private:
int** matrix;
int lines;
void SortMatrix();
public:
Histogram(){ }
Histogram(int elements[], int elementsNr);
Histogram(int** m, int l);
void Print();
};
using namespace std;
Histogram::Histogram(int** m, int l)
{
matrix=m;
lines=l;
SortMatrix();
}
Histogram::Histogram(int elements[], int elementsNr)
{
lines=0;
//initialize matrix : elementrNr lines and 2 columns
matrix=new int*[elementsNr];
for(int i=0;i<elementsNr;i++)
{
matrix[i]=new int[2];
matrix[i][0]=5;
matrix[i][1]=5;
}
//search each element from the array in the matrix
bool found=false;
for(int i=0;i<elementsNr;i++)
{
found=false;
for(int j=0;j<elementsNr;j++)
{
//the element was found in the matrix ( on the first column )
if(matrix[j][0] == elements[i])
{
matrix[j][1]++;
found=true;
break;
}
}
if(!found)
{
matrix[lines][0]=elements[i];
matrix[lines][1]=1;
lines++;
}
}
SortMatrix();
}
void Histogram::SortMatrix()
{
bool flag=true;
int temp1;
int temp2;
int i=0;
for (int i = 0; (i < lines - 1); i++) {
for (int o = 0; (o < lines - 1); o++) {
if ( matrix[ i ][0] < matrix[ o ][0] ) {
temp1 = matrix[ i ][0];
temp2 = matrix[ i ][1];
matrix[ i ][0] = matrix[ o ][0];
matrix[ i ][1] = matrix[ o ][1];
matrix[ o ][0] = temp1;
matrix[ o ][1] = temp2;
}
}
}
}
void Histogram::Print()
{
for(int i=0;i<lines;i++)
{
cout<<matrix[i][0]<<" : " <<matrix[i][1]<<endl;
}
}
int main() {
int arr[] = {4, 2, 7, 8, 3, 5, 7, 8, 3, 1, 5, 7, 9, 4, 2, 33, 7};
Histogram h(arr, 17);
h.Print();
}
I2luY2x1ZGUgPGlvc3RyZWFtPgoKY2xhc3MgSGlzdG9ncmFtCnsKcHJpdmF0ZToKICAgIGludCoqIG1hdHJpeDsKICAgIGludCBsaW5lczsKICAgIHZvaWQgU29ydE1hdHJpeCgpOwpwdWJsaWM6CiAgICBIaXN0b2dyYW0oKXsgfQogICAgSGlzdG9ncmFtKGludCBlbGVtZW50c1tdLCBpbnQgZWxlbWVudHNOcik7CiAgICBIaXN0b2dyYW0oaW50KiogbSwgaW50IGwpOwogICAgdm9pZCBQcmludCgpOwp9OwoKdXNpbmcgbmFtZXNwYWNlIHN0ZDsKSGlzdG9ncmFtOjpIaXN0b2dyYW0oaW50KiogbSwgaW50IGwpCnsKICAgIG1hdHJpeD1tOwogICAgbGluZXM9bDsKICAgIFNvcnRNYXRyaXgoKTsKfQoKSGlzdG9ncmFtOjpIaXN0b2dyYW0oaW50IGVsZW1lbnRzW10sIGludCBlbGVtZW50c05yKQp7CiAgICBsaW5lcz0wOwogICAgLy9pbml0aWFsaXplIG1hdHJpeCA6IGVsZW1lbnRyTnIgbGluZXMgYW5kIDIgY29sdW1ucwogICAgbWF0cml4PW5ldyBpbnQqW2VsZW1lbnRzTnJdOwogICAgZm9yKGludCBpPTA7aTxlbGVtZW50c05yO2krKykKICAgIHsKICAgICAgICBtYXRyaXhbaV09bmV3IGludFsyXTsKICAgICAgICBtYXRyaXhbaV1bMF09NTsKICAgICAgICBtYXRyaXhbaV1bMV09NTsKICAgIH0KICAgIC8vc2VhcmNoIGVhY2ggZWxlbWVudCBmcm9tIHRoZSBhcnJheSBpbiB0aGUgbWF0cml4CiAgICBib29sIGZvdW5kPWZhbHNlOwogICAgZm9yKGludCBpPTA7aTxlbGVtZW50c05yO2krKykKICAgIHsKICAgICAgICBmb3VuZD1mYWxzZTsKICAgICAgICBmb3IoaW50IGo9MDtqPGVsZW1lbnRzTnI7aisrKQogICAgICAgIHsKICAgICAgICAgICAgLy90aGUgZWxlbWVudCB3YXMgZm91bmQgaW4gdGhlIG1hdHJpeCAoIG9uIHRoZSBmaXJzdCBjb2x1bW4gKQogICAgICAgICAgICBpZihtYXRyaXhbal1bMF0gPT0gZWxlbWVudHNbaV0pCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIG1hdHJpeFtqXVsxXSsrOwogICAgICAgICAgICAgICAgZm91bmQ9dHJ1ZTsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGlmKCFmb3VuZCkKICAgICAgICB7CiAgICAgICAgICAgIG1hdHJpeFtsaW5lc11bMF09ZWxlbWVudHNbaV07CiAgICAgICAgICAgIG1hdHJpeFtsaW5lc11bMV09MTsKICAgICAgICAgICAgbGluZXMrKzsKICAgICAgICB9CiAgICB9CiAgICBTb3J0TWF0cml4KCk7Cgp9CnZvaWQgSGlzdG9ncmFtOjpTb3J0TWF0cml4KCkKewogICAgYm9vbCBmbGFnPXRydWU7CiAgICBpbnQgdGVtcDE7CiAgICBpbnQgdGVtcDI7CiAgICBpbnQgaT0wOwogICAgZm9yIChpbnQgaSA9IDA7IChpIDwgbGluZXMgLSAxKTsgaSsrKSB7CgogICAgZm9yIChpbnQgbyA9IDA7IChvIDwgbGluZXMgLSAxKTsgbysrKSB7CgogICAgICAgIGlmICggbWF0cml4WyBpIF1bMF0gPCBtYXRyaXhbIG8gXVswXSApIHsKCiAgICAgICAgICAgIHRlbXAxID0gbWF0cml4WyBpIF1bMF07CiAgICAgICAgICAgIHRlbXAyID0gbWF0cml4WyBpIF1bMV07CgogICAgICAgICAgICBtYXRyaXhbIGkgXVswXSA9IG1hdHJpeFsgbyBdWzBdOwogICAgICAgICAgICBtYXRyaXhbIGkgXVsxXSA9IG1hdHJpeFsgbyBdWzFdOwoKICAgICAgICAgICAgbWF0cml4WyBvIF1bMF0gPSB0ZW1wMTsKICAgICAgICAgICAgbWF0cml4WyBvIF1bMV0gPSB0ZW1wMjsKCiAgICAgICAgfQoKICAgIH0KCn0KfQp2b2lkIEhpc3RvZ3JhbTo6UHJpbnQoKQp7CgogICAgZm9yKGludCBpPTA7aTxsaW5lcztpKyspCiAgICB7CiAgICAgICAgY291dDw8bWF0cml4W2ldWzBdPDwiIDogIiA8PG1hdHJpeFtpXVsxXTw8ZW5kbDsKICAgIH0KCn0KCmludCBtYWluKCkgewogICAgaW50IGFycltdID0gezQsIDIsIDcsIDgsIDMsIDUsIDcsIDgsIDMsIDEsIDUsIDcsIDksIDQsIDIsIDMzLCA3fTsKICAgIEhpc3RvZ3JhbSBoKGFyciwgMTcpOwogICAgaC5QcmludCgpOwp9