Advertisement
Kentoo

Barinov #2

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