Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <fstream> //--------------------------Вариант 4--------------------------
- #include <iostream>
- #include <clocale>
- #include <windows.h>
- using namespace std;
- string const FileAddress = "C:\\Users\\User\\Desktop\\OutputScaners.scaners"; // Адрес файла
- struct scan_info {
- char model[25]; // найменування моделі
- int price; // ціна
- double x_size; // горизонтальний розмір області сканування
- double y_size; // вертикальний розмір області сканування
- int optr; // оптичний дозвіл
- int grey; // число градацій сірого
- };
- int IntInput() // Проверка на Int
- {
- int imputNumber;
- while (!(cin >> imputNumber) || (cin.peek() != '\n'))
- {
- cin.clear();
- while (cin.get() != '\n');
- cout << "Это не целое число. Попробуйте еще раз.\n";
- }
- return imputNumber;
- }
- double DoubleInput() // Проверка на Double
- {
- double imputNumber;
- while (!(cin >> imputNumber) || (cin.peek() != '\n'))
- {
- cin.clear();
- while (cin.get() != '\n');
- cout << "Это не число. Попробуйте еще раз.\n";
- }
- return imputNumber;
- }
- void DataInput(int scanersCount) // Ввод данных в файл
- {
- system("cls");
- ofstream Fout;
- Fout.open(FileAddress, ios::binary);
- scan_info TScanerOutput;
- for (int i = 1; i <= scanersCount; i++)
- {
- cout << "----- Сканер #" << i << " -----";
- cout << "\nВведите название модели: ";
- cin >> TScanerOutput.model;
- cout << "\nВведите цену модели: ";
- TScanerOutput.price = IntInput();
- cout << "\nВведите горизонтальный размер области сканирования: ";
- TScanerOutput.x_size = DoubleInput();
- cout << "\nВведите вертикальный размер области сканирования: ";
- TScanerOutput.y_size = DoubleInput();
- cout << "\nВведите оптическое разрешение: ";
- TScanerOutput.optr = IntInput();
- cout << "\nВведите число градаций серого: ";
- TScanerOutput.grey = IntInput();
- system("cls");
- Fout.write((char*)&TScanerOutput, sizeof(TScanerOutput));
- }
- Fout.close();
- }
- void DataOutput(int scanersCount, string Address) // Вывод инфы из файла
- {
- ifstream Fin;
- Fin.open(Address, ios::binary);
- scan_info TScanerInput;
- for (int i = 0; i < scanersCount; i++)
- {
- Fin.read((char*)&TScanerInput, sizeof(TScanerInput));
- cout << endl << "-----Сканер № " << i + 1;
- cout << endl << "Модель: " << TScanerInput.model;
- cout << endl << "Цена: " << TScanerInput.price;
- cout << endl << "Горизонтальный размер: " << TScanerInput.x_size;
- cout << endl << "Вертикальный размер: " << TScanerInput.y_size;
- cout << endl << "Оптическое разрешение: " << TScanerInput.optr;
- cout << endl << "Число градаций серого: " << TScanerInput.grey << endl;
- }
- Fin.close();
- }
- void moreThanThousandOutput() // Вывод сканеров дороже 1000
- {
- ifstream Fin;
- scan_info TScanerInput;
- Fin.open(FileAddress, ios::binary);
- int moreThanThousand = 0;
- while (!Fin.eof())
- if (Fin.read((char*)&TScanerInput, sizeof(TScanerInput)))
- if (TScanerInput.price > 1000)
- moreThanThousand++;
- Fin.close();
- cout << endl << "Сканеров дороже 1000: " << moreThanThousand << " шт." << endl;
- }
- void QuickSort(scan_info *Array, int nStart, int nEnd) {
- if (nStart >= nEnd) return; // готово
- int L = nStart, R = nEnd, c, X;
- X = Array[(L + R) / 2].price; // или X = A[irand(L,R)];
- while (L <= R) { // разделение
- while (Array[L].price < X) L++;
- while (Array[R].price > X) R--;
- if (L <= R) {
- c = Array[L].price;
- Array[L].price = Array[R].price;
- Array[R].price = c;
- L++; R--;
- }
- }
- QuickSort(Array, nStart, R); // рекурсивные вызовы
- QuickSort(Array, L, nEnd);
- }
- void SortedByPrice(int scanersCount)
- {
- scan_info *ScanersArray;
- ScanersArray = new scan_info[scanersCount];
- int count = 0;
- ifstream Fin;
- Fin.open(FileAddress, ios::binary);
- while (!Fin.eof() && count < scanersCount) //Считываем из файлового потока в массив
- if (Fin.read((char*)&ScanersArray[count], sizeof(scan_info)))
- count++;
- QuickSort(ScanersArray, 0, scanersCount);
- cout << "------Сортировка по цене------" << endl;
- for (int i = 0; i<scanersCount; i++)
- cout << i + 1 << ". Название модели: " << ScanersArray[i].model << ", цена: " << ScanersArray[i].price << " , X-size: "
- << ScanersArray[i].x_size << " , Y-size: " << ScanersArray[i].y_size << " , DPI: " << ScanersArray[i].optr << " , Grey: "
- << ScanersArray[i].grey << endl;
- }
- void main()
- {
- setlocale(LC_ALL, "Russian");
- int scanersCount;
- cout << "Введите количество сканеров: ";
- scanersCount = IntInput();
- DataInput(scanersCount); // Ввод данных в файл
- moreThanThousandOutput(); // Вывод количества сканеров дороже 1000
- DataOutput(scanersCount, FileAddress); // Вывод инфы из файла
- SortedByPrice(scanersCount); // Сортировка по цене
- cout << endl << "Выход - Esc";
- while (!GetAsyncKeyState(VK_ESCAPE));
- }
Advertisement
Add Comment
Please, Sign In to add comment