NickAndNick

Последовательность

Dec 17th, 2012
66
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. #include <iostream>
  2. #include <string>
  3. #include <ctime>
  4.  
  5. using namespace std;
  6.  
  7. void show_array(int *, size_t);
  8. bool random_array(int *, const size_t, const int _left = 0, int _rigth = 32767);
  9. void check_size_t(wstring, size_t &);
  10. void labuda(int *, const size_t, int *, const size_t);
  11.  
  12. int main() {
  13.     srand(unsigned(time(NULL)));
  14.     wcout.imbue(locale("rus_rus.866"));
  15.  
  16.     size_t size;
  17.     check_size_t(L"Введите размер массива: ", size);
  18.     int * arr = new int [size];
  19.     random_array(arr, size);
  20.  
  21.     wcout << L"Исходный массив:\n";
  22.     show_array(arr, size);
  23.  
  24.     wcout << L"Вывод последовательности:\n";
  25.     int digits[] = {0,3,6,9};
  26.  
  27.     labuda(arr, size, digits, sizeof(digits) / sizeof(int));
  28.  
  29.     delete[] arr;
  30.  
  31.     cin.get();
  32.     return 0;
  33. }
  34.  
  35. void labuda(int * _array, const size_t _size, int * _digits, const size_t _q) {
  36.     bool increase = true, decrease = true, pass;
  37.     int prev, current, temp, tmp, jamp;
  38.     size_t count = 0;
  39.  
  40.     for (size_t n = 0; n < _size; n++) {
  41.         temp = _array[n];
  42.         current = 0;
  43.         jamp = 1;
  44.  
  45.         while (temp) {
  46.             pass = false;
  47.             tmp = temp % 10;
  48.  
  49.             for (size_t m = 0; m < _q; m++) {
  50.                 if (tmp == _digits[m]) {
  51.                     pass = true;
  52.                     break;
  53.                 }
  54.             }
  55.  
  56.             if (!pass) {
  57.                 current += tmp * jamp;
  58.                 jamp *= 10;
  59.             }
  60.  
  61.             temp /= 10;
  62.         }
  63.  
  64.         if (current) {
  65.             ++count;
  66.             cout << current << ' ';
  67.  
  68.             if (n) {
  69.                 if (!decrease && !increase) continue;
  70.                 if (prev == current) continue;
  71.                 if (prev < current) decrease = false;
  72.                 else increase = false;
  73.             }
  74.  
  75.             prev = current;
  76.         }
  77.     }
  78.  
  79.     if (!count) wcout << L"\nЭлементы последовательности отсутствуют\n";
  80.     else if (decrease && increase) wcout << L"\nВсе элементы равны\n";
  81.     else if (increase) wcout << L"\nПоследовательность упорядочена по возрастанию\n";
  82.     else if (decrease) wcout << L"\nПоследовательность упорядочена по убыванию\n";
  83.     else wcout << L"\nПоследовательность не упорядочена\n";
  84. }
  85.  
  86. void show_array(int * _array, size_t _size) {
  87.     streamsize width = 6;
  88.     for (size_t n = 0; n < _size; n++) cout << _array[n] << ' ';
  89.     cout << endl;
  90. }
  91.  
  92. inline bool random_array(int * _array, const size_t _size, const int _left, int _rigth) {
  93.     if (_left >= _rigth) return false;
  94.  
  95.     if (_left < 0 && _rigth >= 0) _rigth += abs(_left);
  96.     else if (_left < 0 && _rigth < 0) _rigth = abs(_left) - abs(_rigth);
  97.     else if (_left >= 0 && _rigth > 0) _rigth -= _left;
  98.  
  99.     for (size_t n = 0; n < _size; n++) _array[n] = rand() % _rigth + _left;
  100.  
  101.     return true;
  102. }
  103.  
  104. void check_size_t(wstring _msg, size_t & _size) {
  105.     do {
  106.         int temp;
  107.  
  108.         wcout << _msg;
  109.         cin >> temp;
  110.  
  111.         if (temp < 0) temp = abs(temp);            
  112.         _size = size_t(temp);
  113.  
  114.         if (cin.good() && _size > 0) break;
  115.         else {
  116.             cin.clear();
  117.             cin.ignore(80,'\n');
  118.             wcout << L"\aВы ошиблись!\n";
  119.         }
  120.     } while (true);
  121.  
  122.     fflush(stdin);
  123. }
RAW Paste Data