Advertisement
oshige_san

Untitled

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