PhotoShaman

Laba11

Feb 17th, 2017
120
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 5.53 KB | None | 0 0
  1. #include <fstream>          //--------------------------Вариант 4--------------------------
  2. #include <iostream>
  3. #include <clocale>
  4. #include <windows.h>
  5.  
  6. using namespace std;
  7.  
  8. string const FileAddress = "C:\\Users\\User\\Desktop\\OutputScaners.scaners"; // Адрес файла
  9.  
  10. struct scan_info {
  11.     char model[25];                 // найменування моделі
  12.     int price;                      // ціна
  13.     double x_size;                  // горизонтальний розмір області сканування
  14.     double y_size;                  // вертикальний розмір області сканування
  15.     int optr;                       // оптичний дозвіл
  16.     int grey;                       // число градацій сірого
  17. };
  18.  
  19. int IntInput() // Проверка на Int
  20. {
  21.     int imputNumber;
  22.     while (!(cin >> imputNumber) || (cin.peek() != '\n'))
  23.     {
  24.         cin.clear();
  25.         while (cin.get() != '\n');
  26.         cout << "Это не целое число. Попробуйте еще раз.\n";
  27.     }
  28.     return imputNumber;
  29. }
  30.  
  31. double DoubleInput() // Проверка на Double
  32. {
  33.     double imputNumber;
  34.     while (!(cin >> imputNumber) || (cin.peek() != '\n'))
  35.     {
  36.         cin.clear();
  37.         while (cin.get() != '\n');
  38.         cout << "Это не число. Попробуйте еще раз.\n";
  39.     }
  40.     return imputNumber;
  41. }
  42.  
  43. void DataInput(int scanersCount) // Ввод данных в файл
  44. {
  45.     system("cls");
  46.     ofstream Fout;
  47.     Fout.open(FileAddress, ios::binary);
  48.  
  49.     scan_info TScanerOutput;
  50.     for (int i = 1; i <= scanersCount; i++)
  51.     {
  52.         cout << "----- Сканер #" << i << " -----";
  53.         cout << "\nВведите название модели: ";
  54.         cin >> TScanerOutput.model;
  55.         cout << "\nВведите цену модели: ";
  56.         TScanerOutput.price = IntInput();
  57.         cout << "\nВведите горизонтальный размер области сканирования: ";
  58.         TScanerOutput.x_size = DoubleInput();
  59.         cout << "\nВведите вертикальный размер области сканирования: ";
  60.         TScanerOutput.y_size = DoubleInput();
  61.         cout << "\nВведите оптическое разрешение: ";
  62.         TScanerOutput.optr = IntInput();
  63.         cout << "\nВведите число градаций серого: ";
  64.         TScanerOutput.grey = IntInput();
  65.         system("cls");
  66.         Fout.write((char*)&TScanerOutput, sizeof(TScanerOutput));
  67.     }
  68.     Fout.close();
  69. }
  70.  
  71. void DataOutput(int scanersCount, string Address) // Вывод инфы из файла
  72. {
  73.     ifstream Fin;
  74.     Fin.open(Address, ios::binary);
  75.     scan_info TScanerInput;
  76.     for (int i = 0; i < scanersCount; i++)
  77.     {
  78.         Fin.read((char*)&TScanerInput, sizeof(TScanerInput));
  79.         cout << endl << "-----Сканер № " << i + 1;
  80.         cout << endl << "Модель:                " << TScanerInput.model;
  81.         cout << endl << "Цена:                  " << TScanerInput.price;
  82.         cout << endl << "Горизонтальный размер: " << TScanerInput.x_size;
  83.         cout << endl << "Вертикальный размер:   " << TScanerInput.y_size;
  84.         cout << endl << "Оптическое разрешение: " << TScanerInput.optr;
  85.         cout << endl << "Число градаций серого: " << TScanerInput.grey << endl;
  86.     }
  87.     Fin.close();
  88. }
  89.  
  90. void moreThanThousandOutput() // Вывод сканеров дороже 1000
  91. {
  92.     ifstream Fin;
  93.     scan_info TScanerInput;
  94.     Fin.open(FileAddress, ios::binary);
  95.  
  96.     int moreThanThousand = 0;
  97.     while (!Fin.eof())
  98.         if (Fin.read((char*)&TScanerInput, sizeof(TScanerInput)))
  99.             if (TScanerInput.price > 1000)
  100.                 moreThanThousand++;
  101.     Fin.close();
  102.     cout << endl << "Сканеров дороже 1000: " << moreThanThousand << " шт." << endl;
  103. }
  104.  
  105. void QuickSort(scan_info *Array, int nStart, int nEnd) {
  106.     if (nStart >= nEnd) return; // готово
  107.     int L = nStart, R = nEnd, c, X;
  108.     X = Array[(L + R) / 2].price; // или X = A[irand(L,R)];      
  109.     while (L <= R) { // разделение
  110.         while (Array[L].price < X) L++;
  111.         while (Array[R].price > X) R--;
  112.         if (L <= R) {
  113.             c = Array[L].price;
  114.             Array[L].price = Array[R].price;
  115.             Array[R].price = c;
  116.             L++; R--;
  117.         }
  118.     }
  119.     QuickSort(Array, nStart, R);   // рекурсивные вызовы
  120.     QuickSort(Array, L, nEnd);
  121. }
  122.  
  123. void SortedByPrice(int scanersCount)
  124. {
  125.     scan_info *ScanersArray;
  126.     ScanersArray = new scan_info[scanersCount];
  127.  
  128.     int count = 0;
  129.     ifstream Fin;
  130.     Fin.open(FileAddress, ios::binary);
  131.  
  132.     while (!Fin.eof() && count < scanersCount) //Считываем из файлового потока в массив
  133.         if (Fin.read((char*)&ScanersArray[count], sizeof(scan_info)))
  134.             count++;
  135.  
  136.     QuickSort(ScanersArray, 0, scanersCount);
  137.  
  138.     cout << "------Сортировка по цене------" << endl;
  139.     for (int i = 0; i<scanersCount; i++)
  140.         cout << i + 1 << ". Название модели: " << ScanersArray[i].model << ", цена: " << ScanersArray[i].price << " , X-size: "
  141.         << ScanersArray[i].x_size << " , Y-size: " << ScanersArray[i].y_size << " , DPI: " << ScanersArray[i].optr << " , Grey: "
  142.         << ScanersArray[i].grey << endl;
  143. }
  144.  
  145. void main()
  146. {
  147.     setlocale(LC_ALL, "Russian");
  148.  
  149.     int scanersCount;
  150.     cout << "Введите количество сканеров: ";
  151.     scanersCount = IntInput();
  152.  
  153.     DataInput(scanersCount);  // Ввод данных в файл
  154.     moreThanThousandOutput(); // Вывод количества сканеров дороже 1000
  155.     DataOutput(scanersCount, FileAddress); // Вывод инфы из файла
  156.     SortedByPrice(scanersCount); // Сортировка по цене
  157.  
  158.     cout << endl << "Выход - Esc";
  159.     while (!GetAsyncKeyState(VK_ESCAPE));
  160. }
Advertisement
Add Comment
Please, Sign In to add comment