Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /******************************************************************************
- Найти максимальный отрицательный элемент в массиве с нечетным индексом. Также
- найти среднее арифметическое таких элементов, начиная от индекса минимального
- элемента массива.
- *******************************************************************************/
- #include <algorithm>
- #include <climits>
- #include <iomanip>
- #include <iostream>
- #include <string>
- #include <vector>
- using namespace std;
- int GetNumber(const string& message) {
- cout << message;
- string number;
- getline(cin, number);
- while (number.empty() || number.find_first_not_of("-0123456789") != string::npos) {
- cout << "Ошибка" << endl;
- getline(cin, number);
- }
- return stoi(number);
- }
- void FIllManual(vector<int64_t>& numbers) { // заполнение матрицы с клавиатуры
- cout << "Введите массив" << endl;
- for (int64_t i = 0; i < numbers.size(); i++) {
- numbers[i] = GetNumber("Введите элемент с индексом" + to_string(i) + "]: "); // перевод из string в int
- }
- }
- void FillRandom(vector<int64_t>& numbers) { // заполнение матрицы случайными числами
- int64_t min = GetNumber("Введите начальное значение: ");
- int64_t max = GetNumber("Введите конечное значение: ");
- if (min > max) {
- swap(min, max);
- }
- for (int64_t i = 0; i < numbers.size(); i++) {
- numbers[i] = min + rand() % (max - min + 1); // случайное число в диапозоне [min, max]
- }
- }
- int main()
- {
- srand(time(0));
- setlocale(LC_ALL, "Rus");
- int numbers_count = GetNumber("Введите число элементов массива: ");
- vector<int64_t> numbers(numbers_count);
- string message = "Введите 1, если хотите заполнить массив с клавиатуры\nВведите 2, если хотите заполнить массив случайными числами\n";
- int command_type = GetNumber(message);
- while (command_type != 1 && command_type != 2) {
- cout << "Ошибка";
- command_type = GetNumber(message);
- }
- if (command_type == 1) {
- FIllManual(numbers);
- } else {
- FillRandom(numbers);
- }
- cout << "Исходный массив: " << endl;
- for (auto number : numbers) {
- cout << setw(3) << number; // вывод массива
- }
- cout << endl;
- int64_t sum = 0;
- int64_t count = 0;
- int64_t max_negative_number = LLONG_MIN;
- int64_t minimum_number_index = min_element(numbers.begin(), numbers.end()) - numbers.begin();
- bool is_negative_number_found = false;
- for (int64_t i = 1; i < numbers.size(); i += 2) {
- if (numbers[i] >= 0) {
- continue;
- }
- is_negative_number_found = true;
- max_negative_number = max(max_negative_number, numbers[i]); //фанкция max() возвращает максимум из двух чисел, есть такая же min()
- if (i >= minimum_number_index) {
- sum += numbers[i];
- count++;
- }
- }
- if (!is_negative_number_found) {
- cout << "В массиве нет нечетного отрицательного элемента " << endl;
- } else {
- cout << "Максимальный отрицательный элемент в массиве с нечетным индексом " << max_negative_number << endl;
- }
- double arithmetic_mean = 0;
- if (count != 0) {
- arithmetic_mean = (double)sum / count;
- }
- cout << "Среднее арифметическое отрицательных элементов массива с нечетным индексом " << arithmetic_mean << endl;
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement