Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <fstream>
- using namespace std;
- int takeСhoise(int MIN, int MAX) {
- const string error = "Проверьте корректность введнных данных!\n";
- bool isIncorrect;
- int num;
- do {
- isIncorrect = false;
- cin >> num;
- if (cin.fail()) {
- isIncorrect = true;
- cout << error;
- cin.clear();
- while (cin.get() != '\n');
- }
- if (!isIncorrect && cin.get() != '\n') {
- cin.clear();
- while (cin.get() != '\n');
- cout << error;
- isIncorrect = true;
- }
- if (!isIncorrect && (num < MIN || num > MAX)) {
- isIncorrect = true;
- cout << error;
- }
- } while (isIncorrect);
- return num;
- }
- int* takeAmount(int& n) {
- cout << "Пожалуйста, введите количество чисел в массиве\n";
- n = takeСhoise(0, INT_MAX);
- int* sequence = new int[n];
- return sequence;
- }
- void takeNums(int* sequence, int n) {
- cout << "Введите числа\n";
- for (int i = 0; i < n; i++) {
- sequence[i] = takeСhoise(1, INT_MAX);
- }
- }
- int* findFrequency(int* sequence, int n) {
- int* frequency = new int[n];
- for (int i = 0; i < n; i++) {
- frequency[i] = 0;
- }
- for (int i = 0; i < n; i++) {
- int k = sequence[i];
- for (int j = 0; j < n; j++) {
- if (k == sequence[j]) {
- frequency[i]++;
- }
- }
- }
- return frequency;
- }
- void sortArray(int* frequency, int n, int*& sequence) {
- for (int i = 0; i < n; i++) {
- for (int j = 0; j < n; j++) {
- if (frequency[i] < frequency[j]) {
- int swap = frequency[i];
- frequency[i] = frequency[j];
- frequency[j] = swap;
- swap = sequence[i];
- sequence[i] = sequence[j];
- sequence[j] = swap;
- }
- }
- }
- }
- string wayToFile() {
- fstream checkFile;
- string way;
- bool isIncorrect;
- do {
- isIncorrect = false;
- cout << "Введите путь к файлу\n";
- cin >> way;
- checkFile.open(way);
- if (!checkFile.is_open()) {
- cout << "Проверьте правильность и нахождение вашего файла по заданному пути\n";
- isIncorrect = true;
- checkFile.close();
- }
- else {
- isIncorrect = false;
- }
- if(!isIncorrect)
- checkFile.close();
- } while (isIncorrect);
- return way;
- }
- int* takeAmountFromFile(int& n) {
- fstream outFile;
- bool isIncorrect;
- do {
- isIncorrect = false;
- string name = wayToFile();
- outFile.open(name);
- if (!outFile.bad()) {
- outFile >> n;
- if (n < 0 || n > INT_MAX || n == 0) {
- cout << "Ошибка. Проверьте содержание файла\n";
- isIncorrect = true;
- outFile.close();
- }
- }
- } while (isIncorrect);
- int* sequence = new int[n];
- return sequence;
- }
- void takeNumsFromFile(int* sequence, int n) {
- fstream outFile;
- bool isIncorrect;
- do {
- isIncorrect = false;
- string name = wayToFile();
- outFile.open(name);
- if (!outFile.bad()) {
- outFile >> n;
- for (int i = 0; i < n; i++ && !isIncorrect) {
- outFile >> sequence[i];
- if (sequence[i] < 1 || sequence[i] > INT_MAX) {
- cout << "Ошибка. Проверьте содержание файла";
- isIncorrect = true;
- }
- }
- outFile.close();
- }
- } while (isIncorrect);
- }
- int* choiseEnter(int& n) {
- int choise;
- int* sequence{};
- cout << "Выберете способ ввода. \n 1. Введите 1 для использования консоли. \n 2. Введите 0 для использования файла.\n";
- choise = takeСhoise(0, 1);
- if (choise == 1) {
- sequence = takeAmount(n);
- takeNums(sequence, n);
- }
- else {
- sequence = takeAmountFromFile(n);
- takeNumsFromFile(sequence, n);
- }
- int* chastota = findFrequency(sequence, n);
- sortArray(chastota, n, sequence);
- return sequence;
- }
- void resultInConsole(int* sequence, int n) {
- cout << "Отсортированный массив: ";
- for (int i = 0; i < n; i++) {
- cout << sequence[i] << " ";
- }
- }
- void resultInFile(string name, int* sequence, int n) {
- fstream inFile;
- inFile.open(name);
- if (!inFile.bad()) {
- for (int i = 0; i < n; i++) {
- inFile << sequence[i] << " ";
- }
- }
- inFile.close();
- }
- void choiseExit(int* sequence, int n) {
- int choise;
- cout << "Выберете способ вывода результата. \n 1. Введите 1 для использования консоли. \n 2. Введите 0 для использования файла.\n";
- choise = takeСhoise(0, 1);
- if (choise == 1) {
- resultInConsole(sequence, n);
- }
- else {
- string name = wayToFile();
- resultInFile(name, sequence, n);
- }
- }
- int main()
- {
- setlocale(LC_ALL, "Rus");
- int n;
- int* sequence = choiseEnter(n);
- choiseExit(sequence, n);
- }
Advertisement
Add Comment
Please, Sign In to add comment