Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /*
- Дан файл. Переписать его элементы в два новых файла:
- в один — элементы, которые меньше среднего арифметического всех компонентов заданного файла,
- а в другой — которые больше.
- */
- #include <iostream>
- #include <cstdlib>
- #include <ctime>
- #include <string>
- #include <fstream>
- #include <conio.h>
- #include <Windows.h>
- using namespace std;
- void mainMenu();
- bool importFile(string path);
- bool createInputFile(string path);
- bool createOutputFile(string path, int*, int size);
- void calculateResult(int[]);
- int main() {
- //setlocale(LC_ALL, "rus");
- SetConsoleCP(1251);
- SetConsoleOutputCP(1251);
- srand(time(0));
- mainMenu();
- }
- void mainMenu() {
- system("cls");
- cout << "Добро пожаловать. Выберите одну из двух опций:\n\n1\tимпортировать существующий файл\n2\tсгенерировать новый файл\nesc\tвыйти и забыть об этом всём\n";
- cout << "\n| Если вы забыли условие задачи:\n| Дан файл. Переписать его элементы в два новых файла:\n| в один — элементы, которые меньше среднего арифметического всех компонентов заданного файла,\n| а в другой — которые больше.\n\n";
- cout << "Что будем делать? (нажмите соответствующую клавишу): ";
- char input = _getch();
- if (input == '1') {
- system("cls");
- string path;
- cout << "Введите путь к файлу: ";
- getline(cin, path);
- if (!importFile(path)) {
- cout << "Произошла ошибка при открытии/чтении файла. Нажмите любую клавишу для продолжения.";
- _getch();
- }
- mainMenu();
- }
- else if (input == '2') {
- system("cls");
- string path;
- cout << "Введите путь к создаваемому файлу: ";
- getline(cin, path);
- if (!createInputFile(path)) {
- cout << "Произошла ошибка при создании файла. Нажмите любую клавишу для продолжения.";
- _getch();
- }
- mainMenu();
- }
- else if (input == 27) {
- exit(0);
- }
- else {
- system("cls");
- mainMenu();
- }
- _getch();
- }
- bool importFile(string path) {
- system("cls");
- ifstream file;
- file.open(path, ios::out);
- int numbers[15];
- if (!file.is_open()) {
- return false;
- }
- for (int i = 0; !file.eof(); i++) {
- file >> numbers[i];
- }
- file.close();
- cout << "Первые 15 строк натуральных чисел, полученные из указанного файла:\n[" << path << "]\n" << endl;
- for (int i = 0; i < 15; i++) {
- if (i < 9) {
- cout << i + 1 << ") " << numbers[i] << endl;
- }
- else {
- cout << i + 1 << ") " << numbers[i] << endl;
- }
- }
- cout << "\nПродолжить выполнение? Будут проивзедены необходимые рассчёты и предложено создание новых файлов.\n\n1\tпродолжить\nesc\tпрервать и выйти в меню\n";
- cout << "\nЯ выбираю: ";
- calcResultTryAgain:
- char input = _getch();
- if (input == '1') {
- calculateResult(numbers);
- }
- else if (input == 27) {
- system("cls");
- mainMenu();
- }
- else {
- goto calcResultTryAgain;
- }
- return true;
- }
- bool createInputFile(string path) {
- ofstream file;
- file.open(path);
- if (!file.is_open()) {
- return false;
- }
- for (int i = 0; i < 15; i++) {
- file << rand() % 200 - 50 << endl;
- }
- file.close();
- return true;
- }
- void calculateResult(int numbers[]) {
- system("cls");
- float avg = 0;
- int lessThanAvgSize = 0;
- int moreThanAvgSize = 0;
- for (int i = 0; i < 15; i++) {
- avg += numbers[i];
- }
- avg = avg / 15;
- for (int i = 0; i < 15; i++) {
- if (i < 9) {
- cout << i + 1 << ") " << numbers[i] << endl;
- }
- else {
- cout << i + 1 << ") " << numbers[i] << endl;
- }
- }
- cout << "\n\n| Среднее арифметическое всех элементов: " << avg << "\n|\n";
- for (int i = 0; i < 15; i++) {
- if (numbers[i] < avg) {
- lessThanAvgSize++;
- }
- if (numbers[i] > avg) {
- moreThanAvgSize++;
- }
- }
- int* lessThanAvg = new int[lessThanAvgSize];
- int* moreThanAvg = new int[moreThanAvgSize];
- int LTAi = 0;
- int MTAi = 0;
- for (int i = 0; i < 15; i++) {
- if (numbers[i] < avg) {
- lessThanAvg[LTAi] = numbers[i];
- LTAi++;
- }
- if (numbers[i] > avg) {
- moreThanAvg[MTAi] = numbers[i];
- MTAi++;
- }
- }
- cout << "| Элементов, меньших среднего арифметического: " << lessThanAvgSize << endl;
- for (int i = 0; i < lessThanAvgSize; i++) {
- if (i < 9) {
- cout << "| " << i + 1 << ") " << lessThanAvg[i] << endl;
- }
- else {
- cout << "| " << i + 1 << ") " << lessThanAvg[i] << endl;
- }
- }
- cout << "|\n| Элементов, больших среднего арифметического: " << moreThanAvgSize << endl;
- for (int i = 0; i < moreThanAvgSize; i++) {
- if (i < 9) {
- cout << "| " << i + 1 << ") " << moreThanAvg[i] << endl;
- }
- else {
- cout << "| " << i + 1 << ") " << moreThanAvg[i] << endl;
- }
- }
- cout << "\n\nЗаписать полученные данные в файлы?\n\n1\tуказать путь и записать\nesc\tне записывать и вернуться в меню\n";
- createOutputFilesTryAgain:
- char input = _getch();
- if (input == '1') {
- string pathLTA;
- cout << "Введите путь к сохраняемому файлу (числа, меньшие ср. арифм.): ";
- getline(cin, pathLTA);
- createOutputFile(pathLTA, lessThanAvg, lessThanAvgSize);
- string pathMTA;
- cout << "Введите путь к сохраняемому файлу (числа, большие ср. арифм.): ";
- getline(cin, pathMTA);
- createOutputFile(pathMTA, moreThanAvg, moreThanAvgSize);
- }
- else if (input == 27) {
- system("cls");
- mainMenu();
- }
- else {
- goto createOutputFilesTryAgain;
- }
- }
- bool createOutputFile(string path, int *array, int size) {
- ofstream file;
- file.open(path);
- if (!file.is_open()) {
- return false;
- }
- for (int i = 0; i < size; i++) {
- file << array[i] << endl;
- }
- file.close();
- return true;
- }
Advertisement
Add Comment
Please, Sign In to add comment