suffering
This commit is contained in:
parent
04e2b81674
commit
92766cd621
6 changed files with 48 additions and 20 deletions
Binary file not shown.
|
|
@ -1,5 +1,7 @@
|
||||||
C:\Users\danit\Desktop\2026-27-cpp-homework\feladat3\UnitTest1\dataset\testin5.dat
|
|
||||||
C:\Users\danit\Desktop\2026-27-cpp-homework\feladat3\UnitTest1\dataset\testin10.dat
|
|
||||||
C:\Users\danit\Desktop\2026-27-cpp-homework\feladat3\UnitTest1\dataset\testin50.dat
|
|
||||||
C:\Users\danit\Desktop\2026-27-cpp-homework\feladat3\UnitTest1\dataset\testin100.dat
|
|
||||||
C:\Users\danit\Desktop\2026-27-cpp-homework\feladat3\UnitTest1\dataset\testin10000.dat
|
C:\Users\danit\Desktop\2026-27-cpp-homework\feladat3\UnitTest1\dataset\testin10000.dat
|
||||||
|
|
||||||
|
C:\Users\danit\Desktop\2026-27-cpp-homework\feladat3\UnitTest1\dataset\testin5.dat
|
||||||
|
|
@ -99,9 +99,7 @@ int SortFile(char* infn, char* outfn, unsigned char* buf,
|
||||||
{
|
{
|
||||||
return NOK;
|
return NOK;
|
||||||
}
|
}
|
||||||
unsigned short files[16][MYBUFSIZE/2]; //this is probably a terrible solution. too bad!
|
char filenames[16][30];
|
||||||
int filesizes[16] = { 0 };
|
|
||||||
int ptrshifts[16] = { 0 };
|
|
||||||
|
|
||||||
*pmin = MYMAXVALUE;
|
*pmin = MYMAXVALUE;
|
||||||
*pmax = 0;
|
*pmax = 0;
|
||||||
|
|
@ -118,6 +116,7 @@ int SortFile(char* infn, char* outfn, unsigned char* buf,
|
||||||
int i = 0;
|
int i = 0;
|
||||||
int j = 0;
|
int j = 0;
|
||||||
int usedfilescnt = 0;
|
int usedfilescnt = 0;
|
||||||
|
char filename[15];
|
||||||
while (readifs.read((char*)&n, sizeof(n))) {
|
while (readifs.read((char*)&n, sizeof(n))) {
|
||||||
if (*pmax < n) {
|
if (*pmax < n) {
|
||||||
*pmax = n;
|
*pmax = n;
|
||||||
|
|
@ -136,26 +135,34 @@ int SortFile(char* infn, char* outfn, unsigned char* buf,
|
||||||
if (i % (MYBUFSIZE / 2) == 0)
|
if (i % (MYBUFSIZE / 2) == 0)
|
||||||
{
|
{
|
||||||
BubbleSort(buf, MYBUFSIZE);
|
BubbleSort(buf, MYBUFSIZE);
|
||||||
|
sprintf_s(filename, "filename%d.dat", usedfilescnt);
|
||||||
|
CopyStr(filenames[usedfilescnt], filename);
|
||||||
|
ofstream tempoutofs(filename, ios_base::binary);
|
||||||
while (j < MYBUFSIZE/2)
|
while (j < MYBUFSIZE/2)
|
||||||
{
|
{
|
||||||
files[usedfilescnt][j] = buf[j * 2] + buf[(j * 2) + 1] * 256;
|
unsigned short insert = buf[j * 2] + buf[(j * 2) + 1] * 256;
|
||||||
j++;
|
tempoutofs.write((char*)&insert, sizeof(insert));
|
||||||
|
j+=2;
|
||||||
}
|
}
|
||||||
filesizes[usedfilescnt] = MYBUFSIZE / 2;
|
tempoutofs.close();
|
||||||
usedfilescnt++;
|
usedfilescnt++;
|
||||||
j = 0;
|
j=0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
readifs.close();
|
readifs.close();
|
||||||
|
|
||||||
int size = (*pn * 2) % MYBUFSIZE;
|
int size = (*pn * 2) % MYBUFSIZE;
|
||||||
BubbleSort(buf, size);
|
BubbleSort(buf, size);
|
||||||
|
sprintf_s(filename, "filename%d.dat", usedfilescnt);
|
||||||
|
CopyStr(filenames[usedfilescnt], filename);
|
||||||
|
ofstream tempoutofs(filename, ios_base::binary);
|
||||||
while (j < size / 2)
|
while (j < size / 2)
|
||||||
{
|
{
|
||||||
files[usedfilescnt][j] = buf[j * 2] + buf[(j * 2) + 1] * 256;
|
unsigned short insert = buf[j * 2] + buf[(j * 2) + 1] * 256;
|
||||||
|
tempoutofs.write((char*)&insert, sizeof(insert));
|
||||||
j++;
|
j++;
|
||||||
}
|
}
|
||||||
filesizes[usedfilescnt] = size/2;
|
tempoutofs.close();
|
||||||
usedfilescnt++;
|
usedfilescnt++;
|
||||||
|
|
||||||
if (test)
|
if (test)
|
||||||
|
|
@ -164,20 +171,31 @@ int SortFile(char* infn, char* outfn, unsigned char* buf,
|
||||||
}
|
}
|
||||||
|
|
||||||
i = 0;
|
i = 0;
|
||||||
|
ifstream* streams = new ifstream[16];
|
||||||
|
for (j = 0; j < usedfilescnt*2; j+=2)
|
||||||
|
{
|
||||||
|
streams[j].open(filenames[j / 2], ios_base::binary);
|
||||||
|
unsigned short num;
|
||||||
|
streams[j].read((char*)&num, sizeof(num));
|
||||||
|
buf[j] = num;
|
||||||
|
buf[j+1] = num >> 8;
|
||||||
|
}
|
||||||
|
bool doneFile[16] = {false};
|
||||||
while (i < *pn)
|
while (i < *pn)
|
||||||
{
|
{
|
||||||
int savedJ = 0;
|
int savedJ = 0;
|
||||||
unsigned short smallest = MYMAXVALUE;
|
unsigned short smallest = MYMAXVALUE;
|
||||||
for (j = 0; j < usedfilescnt; j++)
|
for (size_t j = 0; j < usedfilescnt*2; j+=2)
|
||||||
{
|
{
|
||||||
if (ptrshifts[j] >= filesizes[j])
|
if (doneFile[j])
|
||||||
{
|
{
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
if (files[j][ptrshifts[j]] < smallest)
|
int currentnum = buf[j] + buf[j + 1] * 256;
|
||||||
|
if (currentnum < smallest)
|
||||||
{
|
{
|
||||||
smallest = files[j][ptrshifts[j]];
|
smallest = currentnum;
|
||||||
savedJ = j;
|
savedJ = j/2;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (test)
|
if (test)
|
||||||
|
|
@ -185,7 +203,15 @@ int SortFile(char* infn, char* outfn, unsigned char* buf,
|
||||||
cout << i << ".\t" << smallest << "\n";
|
cout << i << ".\t" << smallest << "\n";
|
||||||
}
|
}
|
||||||
outofs.write((char *)&smallest, sizeof(smallest));
|
outofs.write((char *)&smallest, sizeof(smallest));
|
||||||
ptrshifts[savedJ]++;
|
ifstream tempinifs(filenames[savedJ], ios_base::binary);
|
||||||
|
unsigned short num;
|
||||||
|
if (streams[savedJ].read((char*)&num, sizeof(num)))
|
||||||
|
{
|
||||||
|
doneFile[savedJ] = true;
|
||||||
|
}
|
||||||
|
buf[savedJ] = num;
|
||||||
|
buf[savedJ + 1] = num >> 8;
|
||||||
|
int debugnum = buf[savedJ] + buf[savedJ] * 256;
|
||||||
i++;
|
i++;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
BIN
feladat3/feladat3/filename0.dat
Normal file
BIN
feladat3/feladat3/filename0.dat
Normal file
Binary file not shown.
BIN
feladat3/feladat3/filename1.dat
Normal file
BIN
feladat3/feladat3/filename1.dat
Normal file
Binary file not shown.
BIN
feladat3/feladat3/filename2.dat
Normal file
BIN
feladat3/feladat3/filename2.dat
Normal file
Binary file not shown.
Loading…
Add table
Add a link
Reference in a new issue