Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include "pch.h"
- #include <fstream>
- #include <iomanip>
- #include <string>
- #include <sstream>
- #include <iostream>
- #include <conio.h>
- using namespace std;
- int main()
- {
- setlocale(LC_ALL, "ru");
- typedef int elemType;
- elemType *C = NULL;
- fstream f1; int q = 0;
- int zap;
- do {
- system("cls");
- char ch; string fname;
- cout << "1. Создать файл с исходными данными." << endl << "2. Загрузить исходные данные." << endl << "3. Вывести исходные данные." << endl << "4. Обработать данные." << endl << "5. Завершить работу с программой." << endl;
- cout << "Для выполнения необходимого действия нажмите соответствующую цифровую клавишу: ";
- bool b = false;
- ch = _getch();
- system("cls");
- switch (ch) {
- case '1':
- {
- do {
- cout << "Введите количество элементов массива или \"*\" для возврата в меню: ";
- //cin >> ws;
- cin.ignore(cin.rdbuf()->in_avail());
- //if (cin.rdbuf()->in_avail() == 2 && cin.peek() == '*') {
- if (cin.peek() == '*') {
- cin.ignore(cin.rdbuf()->in_avail(), '\n');
- //system("cls");
- b = true;
- break;
- }
- cin >> q;
- if (cin.peek() == '\n') {
- if (q < 1) cout << "Введено недопустимое значение! Повторите ввод!\n";
- else {
- C = new (nothrow) elemType[q];
- if (C == NULL) {
- cout << "Ошибка выделения памяти!]\n";
- system("pause");
- system("cls");
- continue;
- }
- break;
- }
- }
- else {
- cin.clear();
- cin.ignore(cin.rdbuf()->in_avail(), '\n');
- cout << "Введено некорректное значение! Повторите ввод!" << endl;
- }
- } while (true);
- if (b) continue;
- b = false;
- /*
- if (cin.peek() == '\n')
- {
- cin.clear();
- cin.ignore(cin.rdbuf()->in_avail(), '\n');
- cout << "Введено некорректное значение! Повторите ввод!" << endl;
- continue;
- }
- if (q <= 0)
- {
- cout << "Введено недопустимое значение! Повторите ввод!" << endl;
- continue;
- }
- if (C != NULL)
- delete[]C;
- C = new (nothrow) int[q];
- if (!C) {
- cout << "Ошибка выделения памяти!" << endl;
- system("cls");
- _getch();
- continue;
- }
- */
- for (int j = 0; j < q;)
- {
- cout << "Введите " << j + 1 << " элемент массива или \"*\" для возврата в меню: ";
- cin >> ws;
- if (cin.rdbuf()->in_avail() == 2 && cin.peek() == '*') {
- cin.ignore(cin.rdbuf()->in_avail(), '\n');
- b = true;
- system("cls");
- break;
- }
- cin >> C[j];
- if (cin.peek() != '\n')
- {
- cin.clear();
- cin.ignore(cin.rdbuf()->in_avail(), '\n');
- cout << "Элемент содержит ошибку! Повторите ввод!" << endl;
- continue;
- }
- j++;
- }
- //break;
- //} while (true);
- if (b) {
- delete[] C;
- C = NULL;
- continue;
- }
- //b = false;
- cin.ignore(cin.rdbuf()->in_avail());
- do {
- cout << "Введите имя файла для записи или \"*\" для возврата в меню: ";
- getline(cin, fname);
- if (fname == "*")
- {
- system("cls");
- break;
- }
- //string z;
- f1.open(fname, ios_base::in);
- if (f1) {
- f1.close();
- b = false;
- do {
- cout << "Файл " << "\"" << fname << "\"" << " уже существует!" << endl << "Хотите перезаписать его?" << endl << "1. Да.\n" << "2. Нет.\n";
- zap = _getch();
- switch (zap) {
- case '1': {
- break;
- }
- case '2': {
- b = true;
- break;
- }
- default:
- cout << "Введено некорректное значение!\n";
- continue;
- }
- break;
- } while (true);
- if (b) continue;
- }
- f1.open(fname, ios_base::out | ios_base::binary);
- if (!f1)
- {
- cout << "Ошибка сохранения массива в файл " << "\"" << fname << "\"" << "! Попробуйте еще раз!" << endl;
- continue;
- }
- //break;
- //} while (true);
- f1.write((char*)&q, sizeof(q));
- f1.write((char*)C, q * sizeof(elemType));
- //f1.write((char*)C, q*sizeof(C[0]));
- f1.close();
- cout << "Файл " << "\"" << fname << "\"" << " успешно создан!" << endl;
- //system("pause");
- _getch();
- break;
- } while (true);
- if (fname == "*") break;
- continue;
- /*cin.ignore(cin.rdbuf()->in_avail(), '\n');
- cin >> z;
- if (z == "*")
- {
- continue;
- }
- }*/
- }
- case '2':
- do {
- cin.ignore(cin.rdbuf()->in_avail());
- cout << "Введите название файла или \"*\" для возврата в меню: ";
- getline(cin, fname);
- if (fname == "*") {
- system("cls");
- break;
- }
- f1.open(fname, ios_base::in | ios_base::binary);
- if (!f1)
- {
- cout << "Не удалось открыть файл " << "\"" << fname << "\"!" << endl;
- continue;
- }
- f1.read((char*)&q, sizeof(q));
- f1.seekg(-(int)(sizeof(q)), ios_base::end);
- int p = f1.tellg();
- //p -= sizeof(q);
- if (p != q * sizeof(elemType))
- {
- f1.close();
- cout << "Файл " << "\"" << fname << "\"" << " содержит некорректные данные.\n";
- cin.ignore(cin.rdbuf()->in_avail(), '\n');
- continue;
- }
- if (C != NULL)
- delete[]C;
- C = new (nothrow) elemType[q];
- if (!C)
- {
- f1.close();
- cout << "Ошибка выделения памяти!\n";
- continue;
- }
- f1.seekg(sizeof(q));
- f1.read((char*)C, q * sizeof(elemType));
- f1.close();
- break;
- } while (true);
- if (fname == "*") break;
- cout << "Данные из файла " << "\"" << fname << "\"" << " успешно загружены!\n\n";
- cout << "Ниже представлены исходные данные." << endl << endl;
- cout << setw(10) << "Номер";
- for (int i = 1; i <= q; i++)
- cout << setw(4) << i;
- cout << endl << setw(10) << "Элемент";
- for (int i = 0; i < q; i++)
- cout << setw(4) << C[i];
- cout << endl << endl;
- _getch();
- break;
- case '3':
- {
- if (C != NULL) {
- cout << "Ниже представлены исходные данные." << endl << endl;
- cout << setw(10) << "Номер";
- for (int i = 1; i <= q; i++)
- cout << setw(4) << i;
- cout << endl << setw(10) << "Элемент";
- for (int i = 0; i < q; i++)
- cout << setw(4) << C[i];
- cout << endl << endl;
- }
- else cout << "Массив не задан!";
- _getch();
- break;
- }
- case '4': {
- if (C != NULL) {
- cout << "Ниже представлена обработка данных соответственно заданию." << endl << endl;
- int na = 0, nb = 0;
- for (int i = 0; i < q; i++)
- if (C[i] < 0)
- na++;
- else
- if (C[i] > 0)
- nb++;
- int *A = new (nothrow) int[na];
- if (!A) {
- cout << "Ошибка выделения памяти!" << endl;
- continue;
- }
- int *B;
- try {
- B = new int[nb];
- }
- catch (...)
- {
- delete[] A;
- cout << "Ошибка выделения памяти" << endl;
- continue;
- }
- int pa = 1, pb = 1;
- int j1 = 0, j2 = 0;
- for (int i = 0; i < q; i++) {
- if (C[i] < 0) {
- A[j1] = C[i];
- pa *= A[j1];
- j1++;
- }
- else
- if (C[i] > 0) {
- B[j2] = C[i];
- pb *= B[j2];
- j2++;
- }
- }
- cout << endl;
- cout << "Ниже представлены исходные данные." << endl << endl;
- cout << setw(10) << "Номер";
- for (int i = 1; i <= q; i++)
- cout << setw(4) << i;
- cout << endl << setw(10) << "Элемент";
- for (int i = 0; i < q; i++)
- cout << setw(4) << C[i];
- cout << endl << endl;
- cout << endl;
- if (na == 0)
- cout << "Массив не имеет отрицательных элементов!";
- else {
- cout << setw(10) << "Массив A" << endl;
- cout << setw(10) << "Номер";
- for (int i = 1; i <= na; i++)
- cout << setw(4) << i;
- cout << endl << setw(10) << "Элемент";
- for (int i = 0; i < na; i++)
- cout << setw(4) << A[i];
- }
- cout << endl;
- delete[] A;
- cout << endl;
- if (nb == 0)
- cout << "Массив не имеет положительных элементов!";
- else {
- cout << setw(10) << "Массив B" << endl;
- cout << setw(10) << "Номер";
- for (int i = 1; i <= nb; i++)
- cout << setw(4) << i;
- cout << endl << setw(10) << "Элемент";
- for (int i = 0; i < nb; i++)
- cout << setw(4) << B[i];
- }
- delete[] B;
- cout << endl << endl;
- if (na != 0 && nb != 0)
- cout << "Отношение произведения элементов массива В к произведению элементов массива А: " << (double)pb / pa << endl;
- else
- cout << "Невозможно вычислить отношение произведений!";
- cout << endl;
- cout << endl;
- }
- else cout << "Массив не задан!";
- _getch();
- break;
- }
- case '5': {
- if (C != NULL) delete[] C;
- cout << "Работа программы завершена!";
- return 0;
- }
- default:
- cout << "Введено неверное значение! Повторите ввод!" << endl;
- _getch();
- break;
- }
- } while (true);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement