Advertisement
Kentoo

N#1

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