#include <iostream>
#include <vector>
#include <fstream>
#include <algorithm>
#include <string>
#include <random>
using namespace std;
class rs_with_Shuffle
{
private:
int x,y,z;
string file_Name;
void i_Sort(int* tab, int s);
public:
int **tab;
rs_with_Shuffle(int x, int y, int z, string fn);
~rs_with_Shuffle();
void run_Rand();
void write_Tab();
void Save();
};
rs_with_Shuffle::rs_with_Shuffle(int a, int b, int c, string fn)
{
x=a;
y=b;
z=c;
file_Name=fn;
tab=new int* [x];
for(int i=0;i<x;i++)
tab[i]=new int[y];
}
rs_with_Shuffle::~rs_with_Shuffle()
{
for(int i;i<x;i++)
{
delete [] tab[i];
delete [] tab;
}
}
void rs_with_Shuffle::i_Sort(int *tab, int s)
{
int i,j,k;
for(i=1;i<s;i++)
{
j=i;
k=tab[j];
while((j>0) && (tab[j-1]>k))
{
tab[j]=tab[j-1];
j--;
}
tab[j]=k;
}
}
void rs_with_Shuffle::run_Rand()
{
std::random_device rd;
std::mt19937 gen(rd());
vector <int> all;
int x1=1;
int y1=z;
for(int i=x1;i<y1;i++)
all.push_back(i);
std::shuffle(all.begin(),all.end(),gen);
x1=0;
for(int i=0;i<x;i++)
{
for(int j=0;j<y;j++)
{
tab[i][j]=all[x1];
++x1;
}
}
for(int i=0;i<x;i++)
i_Sort(tab[i],y);
}
void rs_with_Shuffle::write_Tab()
{
for(int i=0;i<x;i++)
{
for(int j=0;j<y;j++)
{
cout<<tab[i][j]<<" ";
}
cout<<"\n";
}
}
void rs_with_Shuffle::Save()
{
fstream file(file_Name,ios::out);
if(file.good())
{
for(int i=0;i<x;i++)
{
for(int j=0;j<y;j++)
{
file<<tab[i][j]<<" ";
file.flush();
}
file<<"\n";
}
}
}
int main()
{
rs_with_Shuffle my_Shuffle(4,10,99,"date.txt");
my_Shuffle.run_Rand();
my_Shuffle.write_Tab();
my_Shuffle.Save();
return 0;
}