Skip to content

Instantly share code, notes, and snippets.

@Poplava
Last active August 29, 2015 14:08
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save Poplava/48c81f26ec2c63709aac to your computer and use it in GitHub Desktop.
Save Poplava/48c81f26ec2c63709aac to your computer and use it in GitHub Desktop.
/*
Дан файл f, компоненты которого являются целыми числами.
Число компонент файла делится на 2n.
Записать в файл g наибольшее значение первых 2n компонент файла f, затем следующих 2n и т.д.
*/
#include <iostream>
#include <fstream>
using namespace std;
void readFileData(ifstream &f, char fileName[20]);
void writeFileData(ofstream &f, char fileName[20]);
void calculateFileData(ifstream &iFile, ofstream &oFile, char sourceFileName[20], char resultFileName[20]);
int n;
int main()
{
char sourceFileName[20], resultFileName[20], action;
ifstream iFile;
ofstream oFile;
cout << "Please enter surce file name: ";
cin >> sourceFileName;
cout << "Please enter result file name: ";
cin >> resultFileName;
cout << "Please enter n: ";
cin >> n;
restartMark:
cout << "Read source (r). Write source (w). Calculate (c). Read result (d). Exit (e). ? ";
cin >> action;
switch (action) {
case 'r':
case 'R':
readFileData(iFile, sourceFileName);
break;
case 'w':
case 'W':
writeFileData(oFile, sourceFileName);
break;
case 'c':
case 'C':
calculateFileData(iFile, oFile, sourceFileName, resultFileName);
break;
case 'd':
case 'D':
readFileData(iFile, resultFileName);
break;
default:
return 0;
}
goto restartMark;
return 0;
}
void readFileData(ifstream &f, char fileName[20])
{
int element, i = 0;
cout << "Reading file \"" << fileName << "\":" << endl;
f.open(fileName, ios::binary | ios::in);
if (f.is_open()) {
if (f.eof()) {
f.clear();
f.seekg(0);
}
while (f.read((char *)&element, sizeof element)) {
cout << ++i << ") " << element << endl;
}
f.close();
}
else {
cout << "An error ocured while reading file." << endl;
}
}
void writeFileData(ofstream &f, char fileName[20])
{
char action = 'n';
int i, j, element;
cout << "Writing file \"" << fileName << "\":" << endl;
f.open(fileName, ios::binary | ios::out);
if (f.is_open()) {
while (action != 'y' && action != 'Y') {
for (i = 0; i < 2; i++) {
for (j = 0; j < n; j++) {
cout << "Enter element (int): ";
cin >> element;
f.write((char *)&element, sizeof element);
}
}
cout << "Do you want to stop entering numbers? (y/n) ";
cin >> action;
}
f.close();
cout << "File \"" << fileName << "\" successfully writed." << endl;
}
else {
cout << "An error ocured while writing file." << endl;
}
}
void calculateFileData(ifstream &iFile, ofstream &oFile, char sourceFileName[20], char resultFileName[20])
{
int element, i = 0, max = -100000;
cout << "Reading file \"" << sourceFileName << "\":" << endl;
iFile.open(sourceFileName, ios::binary | ios::in);
oFile.open(resultFileName, ios::binary | ios::out);
if (iFile.is_open() && oFile.is_open()) {
if (iFile.eof()) {
iFile.clear();
iFile.seekg(0);
}
while (iFile.read((char *)&element, sizeof element)) {
if (i == 0 || element > max) {
max = element;
}
i++;
if (i == 2 * n) {
oFile.write((char *)&max, sizeof element);
i = 0;
}
}
iFile.close();
oFile.close();
cout << "File \"" << resultFileName << "\" successfully writed." << endl;
}
else {
cout << "An error ocured while opening file." << endl;
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment