Advertisement
oshige_san

Untitled

Apr 17th, 2022
732
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 6.43 KB | None | 0 0
  1. #include "pch.h"
  2. #include <fstream>
  3. #include <iomanip>
  4. #include <string>
  5. #include <sstream>
  6. #include <iostream>
  7. #include <conio.h>
  8. using namespace std;
  9.  
  10. int main()
  11. {
  12.     setlocale(LC_ALL, "ru");
  13.     typedef int elemType;
  14.     elemType *C = nullptr;
  15.     fstream f1; int q;
  16.     int zap;
  17.     do {
  18.         system("cls");
  19.         char ch; string fname;
  20.         cout << "1. Создать файл с исходными данными." << endl << "2. Загрузить исходные данные." << endl << "3. Вывести исходные данные." << endl << "4. Обработать данные." << endl << "5. Завершить работу с программой." << endl;
  21.         cout << "Для выполнения необходимого действия нажмите соответствующую цифровую клавишу: ";
  22.         bool b = false;
  23.         ch = _getch();
  24.         system("cls");
  25.  
  26.         switch (ch) {
  27.         case '1':
  28.         {
  29.             do {
  30.  
  31.                 cout << "Введите количество элементов массива или \"*\" для возврата в меню: ";
  32.                 cin.ignore(cin.rdbuf()->in_avail());
  33.                 if (cin.rdbuf()->in_avail() == 2 && cin.peek() == '*') {
  34.                     cin.ignore(cin.rdbuf()->in_avail(), '\n');
  35.                     b = true;
  36.                     break;
  37.                 }
  38.                 cin >> q;
  39.  
  40.                 if (cin.peek() == '\n') {
  41.                     if (q < 1) {
  42.                         cin.clear();
  43.                         cin.ignore(std::cin.rdbuf()->in_avail(), '\n');
  44.                         cout << "Введено недопустимое значение! Повторите ввод!\n";
  45.  
  46.                     }
  47.                     else {
  48.                         if (C != nullptr)
  49.                             delete[]C;
  50.                         C = new (nothrow) elemType[q];
  51.                         if (!C) {
  52.                             cout << "Ошибка выделения памяти!]\n";
  53.                             system("pause");
  54.                             system("cls");
  55.                             continue;
  56.                         }
  57.                         break;
  58.                     }
  59.                 }
  60.                 else {
  61.                     cin.clear();
  62.                     cin.ignore(cin.rdbuf()->in_avail(), '\n');
  63.                     cout << "Введено некорректное значение! Повторите ввод!" << endl;
  64.                 }
  65.             } while (true);
  66.  
  67.             if (b) break;
  68.  
  69.             for (int j = 0; j < q;)
  70.             {
  71.                 cout << "Введите " << j + 1 << " элемент массива или \"*\" для возврата в меню: ";
  72.                 cin >> ws;
  73.                 if (cin.rdbuf()->in_avail() == 2 && cin.peek() == '*') {
  74.                     cin.ignore(cin.rdbuf()->in_avail(), '\n');
  75.                     b = true;
  76.                     system("cls");
  77.                     break;
  78.                 }
  79.                 cin >> C[j];
  80.                 if (cin.peek() != '\n')
  81.                 {
  82.                     cin.clear();
  83.                     cin.ignore(cin.rdbuf()->in_avail(), '\n');
  84.                     cout << "Элемент содержит ошибку! Повторите ввод!" << endl;
  85.                     continue;
  86.                 }
  87.                 j++;
  88.             }
  89.  
  90.             if (b) {
  91.                 delete[] C;
  92.                 C = nullptr;
  93.                 break;
  94.             }
  95.  
  96.             cin.ignore(cin.rdbuf()->in_avail(), '\n');
  97.  
  98.             do {
  99.                 getline(cin, fname);
  100.  
  101.                 f1.open(fname, ios_base::in);
  102.                 if (f1.is_open()) {
  103.                     f1.close();
  104.                     b = false;
  105.                     if (b) continue;
  106.                 }
  107.  
  108.                 f1.open(fname, ios_base::out | ios_base::binary);
  109.  
  110.  
  111.                 f1.write((char*)&q, sizeof(q));
  112.                 f1.write((char*)C, q * sizeof(elemType));
  113.  
  114.                 f1.close();
  115.                 cout << "Успешно!" << endl;
  116.                 _getch();
  117.                 break;
  118.             } while (true);
  119.  
  120.         }
  121.  
  122.         case '2':
  123.  
  124.             do {
  125.                 cin.ignore(cin.rdbuf()->in_avail(), '\n');
  126.                 cout << "Введите название файла или \"*\" для возврата в меню: ";
  127.                 getline(cin, fname);
  128.                 if (fname == "*") {
  129.                     system("cls");
  130.                     break;
  131.                 }
  132.  
  133.                 f1.open(fname, ios_base::in | ios_base::binary);
  134.  
  135.  
  136.                 f1.seekg(0, ios_base::end);
  137.  
  138.                 C = new (nothrow) elemType[q];
  139.                 if (!C)
  140.                 {
  141.                     f1.close();
  142.                     system("cls");
  143.                     cout << "Ошибка выделения памяти!\n";
  144.                     continue;
  145.  
  146.                 }
  147.                 break;
  148.  
  149.             } while (true);
  150.  
  151.             if (fname == "*") break;
  152.  
  153.             f1.seekg(sizeof(q));
  154.             f1.read((char*)C, q * sizeof(elemType));
  155.             f1.close();
  156.  
  157.             cout << "Успешно!";
  158.  
  159.         case '3':
  160.         {
  161.                 cout << setw(10) << "Номер";
  162.                 for (int i = 1; i <= q; i++)
  163.                     cout << setw(4) << i;
  164.                 cout << endl << setw(10) << "Элемент";
  165.                 for (int i = 0; i < q; i++)
  166.                     cout << setw(4) << C[i];
  167.                 cout << endl << endl;
  168.             _getch();
  169.             break;
  170.         }
  171.  
  172.         case '4': {
  173.                 int na = 0, nb = 0;
  174.                 for (int i = 0; i < q; i++)
  175.                     if (C[i] < 0)
  176.                         na++;
  177.                     else
  178.                         if (C[i] > 0)
  179.                             nb++;
  180.  
  181.                 int *A = new (nothrow) int[na];
  182.  
  183.                 int *B = new (nothrow) int[nb];;
  184.                
  185.                 int pa = 1, pb = 1;
  186.                 int j1 = 0, j2 = 0;
  187.  
  188.                 for (int i = 0; i < q; i++) {
  189.                     if (C[i] < 0) {
  190.                         A[j1] = C[i];
  191.                         pa *= A[j1];
  192.                         j1++;
  193.                     }
  194.                     else
  195.                         if (C[i] > 0) {
  196.                             B[j2] = C[i];
  197.                             pb *= B[j2];
  198.                             j2++;
  199.                         }
  200.                 }
  201.                 cout << endl;
  202.                 cout << setw(10) << "Номер";
  203.                 for (int i = 1; i <= q; i++)
  204.                     cout << setw(4) << i;
  205.                 cout << endl << setw(10) << "Элемент";
  206.                 for (int i = 0; i < q; i++)
  207.                     cout << setw(4) << C[i];
  208.                 cout << endl << endl;
  209.  
  210.                 cout << endl;
  211.                 if (na == 0)
  212.                     cout << "Массив не имеет отрицательных элементов!";
  213.                 else {
  214.                     cout << setw(10) << "Массив A" << endl;
  215.                     cout << setw(10) << "Номер";
  216.                     for (int i = 1; i <= na; i++)
  217.                         cout << setw(4) << i;
  218.                     cout << endl << setw(10) << "Элемент";
  219.                     for (int i = 0; i < na; i++)
  220.                         cout << setw(4) << A[i];
  221.                 }
  222.                 cout << endl;
  223.                 delete[] A;
  224.  
  225.                 cout << endl;
  226.                 if (nb == 0)
  227.                     cout << "Массив не имеет положительных элементов!";
  228.                 else {
  229.                     cout << setw(10) << "Массив B" << endl;
  230.                     cout << setw(10) << "Номер";
  231.                     for (int i = 1; i <= nb; i++)
  232.                         cout << setw(4) << i;
  233.                     cout << endl << setw(10) << "Элемент";
  234.                     for (int i = 0; i < nb; i++)
  235.                         cout << setw(4) << B[i];
  236.                 }
  237.                 delete[] B;
  238.  
  239.                 cout << endl << endl;
  240.  
  241.                 if (na != 0 && nb != 0)
  242.                     cout << "Отношение произведения элементов массива  В к произведению элементов массива А: " << (double)pb / pa << endl;
  243.                 else
  244.                     cout << "Невозможно вычислить отношение произведений!";
  245.                 cout << endl;
  246.                 cout << endl;
  247.             _getch();
  248.             break;
  249.         }
  250.         case '5': {
  251.             cout << "Работа программы завершена";
  252.             return 0;
  253.         }
  254.  
  255.         default:
  256.             cout << "Введено неверное значение" << endl;
  257.             _getch();
  258.             break;
  259.         }
  260.     } while (true);
  261. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement