wohyperion

Binary files

Mar 9th, 2016
79
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.88 KB | None | 0 0
  1. #include <iostream>
  2. #include <clocale>
  3. #include <fstream>
  4. #include <cstdlib>
  5.  
  6. using namespace std;
  7.  
  8. int *lineSort(int *kLine, int lineSize) {
  9.     int temp;
  10.     for (int i = 0; i < lineSize - 1; i++) {
  11.         for (int j = 0; j < lineSize - 1; j++) {
  12.             if (kLine[j] > kLine[j + 1]) {
  13.                 temp = kLine[j];
  14.                 kLine[j] = kLine[j + 1];
  15.                 kLine[j + 1] = temp;
  16.             }
  17.         }
  18.     }
  19.     return kLine;
  20. }
  21.  
  22. void sumElements(int *kLine, int lineSize) {
  23.     int sum = 0;
  24.     for (int i = 0; i < lineSize; i++) {
  25.         if (kLine[i] > 0) {
  26.             for (int j = i + 1; kLine[j] <= 0; j++) {
  27.                 sum += kLine[j];
  28.             }
  29.             break;
  30.         }
  31.     }
  32.     if (sum == 0) {
  33.         cout << "\nПодходящих элементов нет!\n";
  34.     } else {
  35.         cout << "\nСумма элементов, расположенных между 1 и 2 положительным эл-ом: " << sum << endl;
  36.     }
  37. }
  38.  
  39. void binaryOut(int *array) {
  40.     cout << "Содержимое двоичного файла: \nN: " << array[0] << "; M: " << array[1] << ";\n";
  41.     cout << "Матрица, считанная из двоичного файла: \n";
  42.     for (int i = 0; i < array[0]; i++) {
  43.         int el = 0;
  44.         for (int j = 2 + (i * array[1]); el < array[1]; el++) {
  45.             cout << array[j++] << ' ';
  46.         }
  47.         cout << endl;
  48.     }
  49. }
  50.  
  51. int main() {
  52.     setlocale(LC_ALL, "russian");
  53.     system("color F0");
  54.     int n, m;
  55.     ifstream textInput("source.txt");
  56.     fstream binaryInOut("output.txt", ios_base::binary | ios_base::in | ios_base::out | ios_base::trunc);
  57.     textInput >> n >> m;
  58.     binaryInOut.write((char *)&n, sizeof(n));
  59.     binaryInOut.write((char *)&m, sizeof(m));
  60.     int *textTemp = new int[m];
  61.     while (!textInput.eof()) {
  62.         for (int i = 0; i < m; i++) {
  63.             textInput >> textTemp[i];
  64.         }
  65.         binaryInOut.write((char *)textTemp, sizeof(int) *m);
  66.     }
  67.     delete[] textTemp;
  68.     binaryInOut.seekg(0, ios_base::beg);
  69.     int *binaryTemp = new int[2 + (n * m)];
  70.     binaryInOut.read((char *)binaryTemp, sizeof(int) *(2 + (n * m)));
  71.     binaryOut(binaryTemp);
  72.     delete[] binaryTemp;
  73.     int k;
  74.     cout << "\nВведите номер обрабатываемой строки(k): ";
  75.     cin >> k;
  76.     if (k <= n) {
  77.         int *line = new int[m];
  78.         binaryInOut.seekg((2 + (k - 1) * m) * sizeof(int));
  79.         binaryInOut.read((char *)line, sizeof(int) *m);
  80.         sumElements(line, m);
  81.         binaryInOut.seekp(0, ios_base::end);
  82.         binaryInOut.write((char *)lineSort(line, m), sizeof(int) *m);
  83.         delete[] line;
  84.         int *binaryLine = new int[m];
  85.         binaryInOut.seekg((2 + n * m) * sizeof(int));
  86.         binaryInOut.read((char *)binaryLine, sizeof(int) *m);
  87.         cout << "\nОтсартированная строка, считанная из двоичного файла: ";
  88.         for (int i = 0; i < m; i++) {
  89.             cout << binaryLine[i] << ' ';
  90.         }
  91.         cout << "\n\n";
  92.         delete[] binaryLine;
  93.     } else {
  94.         cout << "\nТакой строки не сущетсвует!\n\n";
  95.     }
  96.     binaryInOut.close();
  97.     textInput.close();
  98.     system("pause");
  99.     return 0;
  100. }
Advertisement
Add Comment
Please, Sign In to add comment