Advertisement
Derga

Untitled

May 7th, 2023 (edited)
954
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 4.06 KB | None | 0 0
  1. /******************************************************************************
  2. Найти максимальный отрицательный элемент в массиве с нечетным индексом. Также
  3. найти среднее арифметическое таких элементов, начиная от индекса минимального
  4. элемента массива.
  5. *******************************************************************************/
  6.  
  7. #include <algorithm>
  8. #include <climits>
  9. #include <iomanip>
  10. #include <iostream>
  11. #include <string>
  12. #include <vector>
  13.  
  14. using namespace std;
  15.  
  16. int GetNumber(const string& message) {
  17.     cout << message;
  18.  
  19.     string number;
  20.     getline(cin, number);
  21.     while (number.empty() || number.find_first_not_of("-0123456789") != string::npos) {
  22.         cout << "Ошибка" << endl;
  23.         getline(cin, number);
  24.     }
  25.  
  26.     return stoi(number);
  27. }
  28.  
  29. void FIllManual(vector<int64_t>& numbers) { // заполнение матрицы с клавиатуры
  30.     cout << "Введите массив" << endl;
  31.     for (int64_t i = 0; i < numbers.size(); i++) {
  32.         numbers[i] = GetNumber("Введите элемент с индексом" + to_string(i) + "]: "); // перевод из string в int
  33.     }
  34. }
  35.  
  36. void FillRandom(vector<int64_t>& numbers) { // заполнение матрицы случайными числами
  37.     int64_t min = GetNumber("Введите начальное значение: ");
  38.     int64_t max = GetNumber("Введите конечное значение: ");
  39.     if (min > max) {
  40.         swap(min, max);
  41.     }
  42.  
  43.     for (int64_t i = 0; i < numbers.size(); i++) {
  44.         numbers[i] = min + rand() % (max - min + 1); // случайное число в диапозоне [min, max]
  45.     }
  46. }
  47.  
  48. int main()
  49. {
  50.     srand(time(0));
  51.     setlocale(LC_ALL, "Rus");
  52.  
  53.     int numbers_count = GetNumber("Введите число элементов массива: ");
  54.     vector<int64_t> numbers(numbers_count);
  55.  
  56.     string message = "Введите 1, если хотите заполнить массив с клавиатуры\nВведите 2, если хотите заполнить массив случайными числами\n";
  57.     int command_type = GetNumber(message);
  58.     while (command_type != 1 && command_type != 2) {
  59.         cout << "Ошибка";
  60.         command_type = GetNumber(message);
  61.     }
  62.  
  63.     if (command_type == 1) {
  64.         FIllManual(numbers);
  65.     } else {
  66.         FillRandom(numbers);
  67.     }
  68.  
  69.     cout << "Исходный массив: " << endl;
  70.     for (auto number : numbers) {
  71.         cout << setw(3) << number; // вывод массива
  72.     }
  73.     cout << endl;
  74.  
  75.     int64_t sum = 0;
  76.     int64_t count = 0;
  77.     int64_t max_negative_number = LLONG_MIN;
  78.     int64_t minimum_number_index = min_element(numbers.begin(), numbers.end()) - numbers.begin();
  79.     bool is_negative_number_found = false;
  80.     for (int64_t i = 1; i < numbers.size(); i += 2) {
  81.         if (numbers[i] >= 0) {
  82.             continue;
  83.         }
  84.  
  85.         is_negative_number_found = true;
  86.         max_negative_number = max(max_negative_number, numbers[i]); //фанкция max() возвращает максимум из двух чисел, есть такая же min()
  87.  
  88.         if (i >= minimum_number_index) {
  89.             sum += numbers[i];
  90.             count++;
  91.         }
  92.     }
  93.     if (!is_negative_number_found) {
  94.         cout << "В массиве нет нечетного отрицательного элемента " << endl;
  95.     } else {
  96.         cout << "Максимальный отрицательный элемент в массиве с нечетным индексом " << max_negative_number << endl;
  97.     }
  98.  
  99.     double arithmetic_mean = 0;
  100.     if (count != 0) {
  101.         arithmetic_mean = (double)sum / count;
  102.     }
  103.     cout << "Среднее арифметическое отрицательных элементов массива с нечетным индексом " << arithmetic_mean << endl;
  104.  
  105.     return 0;
  106. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement