Advertisement
Kentoo

M.B#1

Feb 8th, 2018
106
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 3.80 KB | None | 0 0
  1. #include "stdafx.h"
  2. #include <iostream>
  3. #include <fstream>
  4. #include <string>
  5. #include <sstream>
  6. #include <iomanip>
  7. #include "windows.h"
  8.  
  9. #define outputWidth 8
  10.  
  11. using namespace std;
  12.  
  13. bool isAcceptableChar(char x) {
  14.     return (x >= '0' && x <= '9') || x == '-' || x == '+';
  15. }
  16.  
  17. double* increaseArray(double* oldArray, unsigned int size, double newElement) {
  18.     double* newArray = new double[size];
  19.  
  20.     if (newArray == NULL)
  21.         return NULL;
  22.  
  23.     for (unsigned int i = 0; i < size - 1; i++)
  24.         newArray[i] = oldArray[i];
  25.     newArray[size - 1] = newElement;
  26.  
  27.     delete[] oldArray;
  28.  
  29.     return newArray;
  30. }
  31.  
  32. void printArray(double* arr, unsigned int size) {
  33.     cout << setw(10) << "Номера: ";
  34.     for (unsigned int i = 0; i < size; i++) {
  35.         cout << setw(outputWidth) << i + 1 << " ";
  36.     }
  37.     cout << endl;
  38.  
  39.     cout << setw(10) << "Элементы: ";
  40.     for (unsigned int i = 0; i < size; i++) {
  41.         cout << setw(outputWidth) << arr[i] << " ";
  42.     }
  43.     cout << endl;
  44. }
  45.  
  46. int main()
  47. {
  48.     system("cls");
  49.     SetConsoleCP(1251);
  50.     SetConsoleOutputCP(1251);
  51.  
  52.     string FNAME = "";
  53.     ifstream fin;
  54.     string s = "";
  55.     string null = "";
  56.  
  57.     double a = 0;
  58.     char c = ' ', q = ' ', k = ' ';
  59.     unsigned int n = 0;
  60.     bool broken = false;
  61.     double* y = new double[n];
  62.  
  63.     while (!fin.is_open()) {
  64.         cout << "Введите имя файла : ";
  65.         cin >> FNAME;
  66.         fin.open(FNAME);
  67.     }
  68.  
  69.     while (fin.get() != EOF) {
  70.         fin.unget();
  71.         c = fin.get();
  72.         q = c;
  73.         if (q != ' ' && q != '\n')
  74.             s.insert(s.begin() + s.size(), q);
  75.         if (q == ' ')
  76.             s.clear();
  77.         c = fin.peek();
  78.         fin.unget();
  79.         if (isAcceptableChar(q) || ((q == ' ' || q == '\n') && isAcceptableChar(c))) {
  80.  
  81.             if (q == ' ' && isAcceptableChar(c))
  82.                 fin.ignore(1);
  83.             fin >> a;
  84.  
  85.             if (fin.fail()) {
  86.                 cout << "Обнаружено переполнение типа в вводе значения под номером " << n + 1 << endl;
  87.                 if (n > 0)
  88.                     printArray(y, n);
  89.                 broken = true;
  90.                 break;
  91.             }
  92.  
  93.             k = fin.peek();
  94.  
  95.             if (k == EOF) {
  96.                 n++;
  97.                 y = increaseArray(y, n, a);
  98.                 if (y == NULL) {
  99.                     cout << "Ошибка выделения памяти" << endl;
  100.                     broken = true;
  101.                     break;
  102.                 }
  103.                 broken = true;
  104.                 break;
  105.             }
  106.  
  107.             else if (k != ' ' && k != '\n') {
  108.                 cout << endl << "Обнаружен как минимум один некорректный символ при вводе значения под номером " << n + 1 << endl;
  109.                 fin.ignore(1);
  110.                 k = fin.get();
  111.                 while (k != ' ') {
  112.                     s.insert(s.begin() + s.size(), k);
  113.                     k = fin.get();
  114.                 }
  115.                 cout << "Последовательность некорректных символов - " << s << endl << endl;
  116.                 broken = true;
  117.                 break;
  118.             }
  119.  
  120.             else {
  121.                 n++;
  122.                 y = increaseArray(y, n, a);
  123.                 if (y == NULL) {
  124.                     cout << "Ошибка выделения памяти" << endl;
  125.                     broken = true;
  126.                     break;
  127.                 }
  128.             }
  129.         }
  130.         else if (q != ' ' && !isAcceptableChar(q) && isAcceptableChar(c)) {
  131.             cout << endl << "Обнаружен как минимум один некорректный символ при вводе значения под номером " << n + 1 << endl;
  132.             fin.ignore(1);
  133.             k = fin.get();
  134.             while (k != ' ') {
  135.                 s.insert(s.begin() + s.size(), k);
  136.                 k = fin.get();
  137.             }
  138.             cout << "Последовательность некорректных символов - " << s << endl << endl;
  139.             broken = true;
  140.             break;
  141.         }
  142.         else
  143.             fin.ignore(1);
  144.     }
  145.  
  146.     if (!broken) {
  147.         double* f = new double[n];
  148.         for (unsigned int i = 0; i < n; i++) {
  149.             f[i] = ((1 - y[i]) / (y[i] * y[i])) + ((y[i] <= 2) ? (2) : (3)) * y[i];
  150.         }
  151.         cout << endl << "Массив y" << endl;
  152.         printArray(y, n);
  153.         cout << endl << "Массив f" << endl;
  154.         printArray(f, n);
  155.         cout << endl;
  156.     }
  157.  
  158.     system("pause");
  159.     return 0;
  160. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement