Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Visual C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 28.04.2021, 18:04   #1
hittz
Новичок
Джуниор
 
Регистрация: 28.04.2021
Сообщений: 1
По умолчанию Найти максимальный четный элемент массива.

Код:
#include <iostream>
#include <iomanip>
#include <time.h>
#include <math.h>
#include <cmath>

using namespace std;
int mass[10], N = 10;
void gen_mass()
{
    for (int i = 0; i < N; i++)
    {
        mass[i] = rand() % 100;
    }
}

void vivod()
{
    for (int i = 0; i < N; i++)
    {
        cout << setw(5) << mass[i];
    }
}

int findmax()
{
    int max = -10000;
    int temp = 0;
    for (int i = 0; i < N; i++)
    {
        if ((mass[i]%2==0)&&(mass[i] > max))
        {
            temp=mass[i];
        }
    }



    return temp;
}


int main()
{
    setlocale(LC_ALL, "ru");
    srand(time(0));
    gen_mass();
    cout << "Исходный массив: ";
    vivod();
    cout << endl;
    cout << "Максимальный четный элемент массива = " << findmax() << endl;
   
    system("pause");
    return 0;
}
В массиве нужно найти максимальный четный элемент, не могу понять, правильно ли я делаю эту задачу?
hittz вне форума Ответить с цитированием
Старый 28.04.2021, 19:04   #2
digitalis
Старожил
 
Аватар для digitalis
 
Регистрация: 04.02.2011
Сообщений: 4,537
По умолчанию

Код:
int findmax()
{
    int max = -10000;
    for (int i = 0; i < N; i++)
        if ((mass[i]%2==0)&&(mass[i] > max))  max=mass[i];
    return max ;
    }
Насколько помнит мой склероз - вроде так.
А как быть, если в массиве - ни одного чётного элемента ? А если числа в массиве больше 10000 по абс. величине ?

Последний раз редактировалось digitalis; 28.04.2021 в 19:12.
digitalis вне форума Ответить с цитированием
Старый 29.04.2021, 10:38   #3
Алексей1153
фрилансер
Форумчанин
 
Регистрация: 11.10.2019
Сообщений: 951
По умолчанию

Цитата:
Сообщение от digitalis Посмотреть сообщение
А как быть, если
быть так

Код:
std::optional<int> findmax()
{
    std::optional<int> max;
    for (auto i:mass)
    {
        if(max)
        {
            if ( (i > *max) && (i%2==0) ) *max=i;
        }
        else
        {
            max=i;
        }
    }
    return max;
}
Алексей1153 вне форума Ответить с цитированием
Старый 30.04.2021, 14:07   #4
digitalis
Старожил
 
Аватар для digitalis
 
Регистрация: 04.02.2011
Сообщений: 4,537
По умолчанию

Замысловато, и ни к чему, по моему мнению. Исходно поместить в max наибольшее, но нечётное число, и если на выходе оно так и осталось - значит, ни одного удовлетворяющего условию не было.
digitalis вне форума Ответить с цитированием
Старый 30.04.2021, 19:42   #5
waleri
Старожил
 
Регистрация: 13.07.2012
Сообщений: 6,493
По умолчанию

Цитата:
Сообщение от digitalis Посмотреть сообщение
наибольшее, но нечётное число
Можно еще проще - просто взять первое число.
waleri вне форума Ответить с цитированием
Старый 30.04.2021, 22:41   #6
digitalis
Старожил
 
Аватар для digitalis
 
Регистрация: 04.02.2011
Сообщений: 4,537
По умолчанию

Э, нет! Так было бы, если бы мы искали просто наибольший элемент массива, а не наибольший чётный. А если первое окажется нечётным?
15,6,8,12. Что имеем в результате ?

Последний раз редактировалось digitalis; 30.04.2021 в 22:43.
digitalis вне форума Ответить с цитированием
Старый 01.05.2021, 17:53   #7
Алексей1153
фрилансер
Форумчанин
 
Регистрация: 11.10.2019
Сообщений: 951
По умолчанию

Цитата:
Сообщение от digitalis Посмотреть сообщение
Замысловато
чего тут замысловатого? std:: optional умеет содержать значение null, а тип int - не умеет
Алексей1153 вне форума Ответить с цитированием
Старый 01.05.2021, 17:58   #8
Алексей1153
фрилансер
Форумчанин
 
Регистрация: 11.10.2019
Сообщений: 951
По умолчанию

кстати, у меня ошибка была. Так надо

Код:
std::optional<int> findmax()
{
    std::optional<int> max;
    for (auto i:mass)
    {
        if(i % 2)continue;

        if(max)
        {
            if( i > *max) *max=i;
        }
        else
        {
            max=i;
        }
    }
    return max;
}
Алексей1153 вне форума Ответить с цитированием
Старый 01.05.2021, 21:44   #9
digitalis
Старожил
 
Аватар для digitalis
 
Регистрация: 04.02.2011
Сообщений: 4,537
По умолчанию

Я до таких высот ультра-С++ писательства не поднимался, но неужели вот эта конструкция
Код:
     for (auto i:mass)
может организовать цикл, при этом телепатически определить N, до которого крутить этот цикл ?
Вот просто интересно узнать бы мнение по этому поводу настоящих С++ программеров.
digitalis вне форума Ответить с цитированием
Старый 02.05.2021, 00:01   #10
waleri
Старожил
 
Регистрация: 13.07.2012
Сообщений: 6,493
По умолчанию

Цитата:
Сообщение от digitalis Посмотреть сообщение
при этом телепатически определить N,
А зачем телепатически?
mass объявлен как массив с вполне определенным размером.
waleri вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Найти максимальный и минимальный элемент массива Programmist. Помощь студентам 3 04.01.2019 22:47
Найти максимальный элемент массива и переставить его. Andrei.Ch Общие вопросы C/C++ 3 03.02.2018 13:45
Найти максимальный и минимальный элемент массива и сложить их OlgaRostov Помощь студентам 3 09.12.2015 19:37
одномерный массив размера n. Найти максимальный элемент массива среди элементов массива,после первого отрицательного (Паскаль) Элиза12345 Паскаль, Turbo Pascal, PascalABC.NET 7 13.11.2012 16:03
найти максимальный элемент одномерного массива Серый777 Паскаль, Turbo Pascal, PascalABC.NET 4 05.05.2010 20:54