Advertisement
frustration

DONE. одномерный массив функция. вариант 12

May 17th, 2019
142
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.78 KB | None | 0 0
  1. /*В одномерном массиве, состоящем из н вещ элементов, вычислить:
  2. 1)номер максимального по модулю элемента массива
  3. 2)сумму элементов массива, расположенных после первого положительного элемента
  4.  
  5. преобразовать массив таким образом, чтобы сначала располагались все элементы, целая часть которых лежит
  6. в интервале [а...б], а потом все остальные */
  7.  
  8. #include <iostream>
  9. #include <time.h>
  10. #include <conio.h>
  11. #include <cmath>
  12. #include <memory>
  13.  
  14. using namespace std;
  15.  
  16. void input(float *arr, int N){
  17.     for (int i = 0; i < N; i++)
  18.         scanf_s("%f", &arr[i]);
  19. }
  20.  
  21. void output(float *arr, int N){
  22.     for (int i = 0; i < N; i++)
  23.         printf("%6.2f ", arr[i]);
  24.  
  25.     printf("\n");
  26. }
  27. int max_index(float *arr, int N) {
  28.     int indmax = 0;
  29.     float max;
  30.     max = abs(arr[0]);
  31.    
  32.         for (int i = 1; i < N; ++i) {
  33.             if (max < abs(arr[i])) {
  34.                 max = abs(arr[i]);
  35.                 indmax = i;
  36.             }
  37.         }
  38.    
  39.         cout << "\n" << "1) index of max: ";
  40.         return indmax + 1;
  41. }
  42. void sum(float *arr, int N){
  43.     int indpos = -1;
  44.     float sum = 0;
  45.     for (int i = 0; i < N; ++i) {
  46.                 if (arr[i] > 0) {
  47.                     indpos = i;
  48.                     break;
  49.                 }
  50.             }
  51.        
  52.             if (indpos == -1)
  53.                 cout << "2) array hasn't positive items " << "\n\n";
  54.             else if (indpos == N - 1)
  55.                 cout << "2) positive item is last" << "\n\n";
  56.             else {
  57.                 for (int i = indpos + 1; i < N; ++i)
  58.                     sum += arr[i];
  59.                 cout << "2) sum after first positive item: " << sum << "\n\n";
  60.             }
  61. }
  62.  
  63. void interval(float *arr, int N){
  64.  
  65.     int a, b;
  66.         cout << "[a...b]" << "\n";
  67.         cin >> a >> b;
  68.    
  69.    
  70.         for (int k = 0; k < N; k++)
  71.         for (int i = k + 1; i < N; i++)
  72.                 if (int(arr[i]) >= a && int(arr[i]) <= b)
  73.                     swap(arr[k], arr[i]);
  74.    
  75.         cout << "new array with interval [" << a << ".." << b << "]: " << "\n";
  76.         for (int i = 0; i < N; ++i) {
  77.             cout << arr[i] << "   ";
  78.         }
  79. }
  80. void Shell_sort(float *a, int N){
  81.     int  k, l;
  82.     float item;
  83.     for (int step = N / 2; step>0; step /= 2)
  84.         for (l = step; l < N; ++l) {
  85.             item = a[l];
  86.             for (k = l; k >= step; k -= step) {
  87.                 if (item > a[k - step])
  88.                     a[k] = a[k - step];
  89.                 else
  90.                     break;
  91.             }
  92.             a[k] = item;
  93.         }
  94. }
  95.  
  96.  
  97. int main() {
  98.     int N;
  99.     cout << "size array: ";
  100.     cin >> N;
  101.     float *arr = new float[N];
  102.     cout << "original array: " << "\n";
  103.     input(arr, N);
  104.     output(arr, N);
  105.     cout << max_index(arr, N)<<"\n";
  106.     sum(arr, N);
  107.     interval(arr, N);
  108.     cout << "new array after interval sort" << "\n";
  109.     output(arr, N);
  110.     Shell_sort(arr, N);
  111.     cout << "\n\n" << "new array after Shell sort" << "\n";
  112.     output(arr, N);
  113.     _getch();
  114.     return 0;
  115. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement