Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #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 = nullptr;
- fstream f1; int q;
- 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.ignore(cin.rdbuf()->in_avail());
- if (cin.rdbuf()->in_avail() == 2 && cin.peek() == '*') {
- cin.ignore(cin.rdbuf()->in_avail(), '\n');
- b = true;
- break;
- }
- cin >> q;
- if (cin.peek() == '\n') {
- if (q < 1) {
- cin.clear();
- cin.ignore(std::cin.rdbuf()->in_avail(), '\n');
- cout << "Введено недопустимое значение!\n";
- }
- else {
- if (C != nullptr)
- delete[]C;
- C = new (nothrow) elemType[q];
- if (!C) {
- cout << "Ошибка выделения памяти!]\n";
- system("pause");
- system("cls");
- continue;
- }
- break;
- }
- }
- else {
- cin.clear();
- cin.ignore(cin.rdbuf()->in_avail(), '\n');
- cout << "Введено некорректное значение! Повторите ввод!" << endl;
- }
- } while (true);
- if (b) break;
- do{
- 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 = nullptr;
- break;
- }
- cin.ignore(cin.rdbuf()->in_avail(), '\n');
- cout << "Введите имя файла";
- getline(cin, fname);
- f1.open(fname, ios_base::in);
- if (f1.is_open()) {
- f1.close();
- b = false;
- if (b) continue;
- }
- f1.open(fname, ios_base::out | ios_base::binary);
- f1.write((char*)&q, sizeof(q));
- f1.write((char*)C, q * sizeof(elemType));
- f1.close();
- cout << "Успешно!" << endl;
- _getch();
- break;
- break;
- }
- case '2':
- do {
- cin.ignore(cin.rdbuf()->in_avail(), '\n');
- cout << "Введите название файла или \"*\" для возврата в меню: ";
- getline(cin, fname);
- if (fname == "*") {
- system("cls");
- break;
- }
- f1.open(fname, ios_base::in | ios_base::binary);
- f1.seekg(0, ios_base::end);
- C = new (nothrow) elemType[q];
- if (!C)
- {
- f1.close();
- system("cls");
- cout << "Ошибка выделения памяти!\n";
- continue;
- }
- break;
- } while (true);
- if (fname == "*") break;
- f1.seekg(sizeof(q));
- f1.read((char*)C, q * sizeof(elemType));
- f1.close();
- cout << "Успешно!";
- case '3':
- {
- 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 '4': {
- 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];
- int *B = new (nothrow) int[nb];;
- 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 << 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;
- _getch();
- break;
- }
- case '5': {
- cout << "Работа программы завершена";
- return 0;
- }
- default:
- cout << "Введено неверное значение" << endl;
- _getch();
- break;
- }
- } while (true);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement