/ Вопрос к Тарику и другим кто шарит. на BMW
закрыть

Начни общаться с фанатами BMW!

Регистрация
BMW E46 Club BMW Fanatics Форум Российского клуба любителей БМВ Е46 - БМВ Фанатикс

  • Не в сети
  • Аватара пользователя
  • Админ
    • Кощей клуба
    • На форуме с 04 07 2012, 22:46
    • Сообщений 25979
    • Профиль
    • Торговая репутация: +3
    • Изображения: 5
    • Репутация: 15585
    • ГуруГуруГуруГуруГуруГуруГуруГуруГуруГуру
Есть массив

const int N = 5
A[N] = {10,5,7,8,11}
осуществляю поиск минимума и максимума осуществляется как показано ниже:

int Max = A[0], Min = A[0];

for (int i = 1; i < N; i++)
{
if (Max < A[i])
Max = A[i];
if (Min > A[i])
Min = A[i];
}
Объясните на пальцах, почему именно так? Ведь по сути получилось, что:

Максимумом и минимумом одновременно, назначен нулевой (первый) элемент массива. Дальше он по циклу сравнивает, нулевой элемент массива, с каждым следующим, и постепенно если нулевой больше или меньше следующего назначает минимумы и максимумы. Таким образом например массив A из [N] элементов, где N=5.И массив имеет следующие значения {10,5,7,8,11};

Я вижу что цикл по идее будет работать так:

шаг 1.

If (10 < 5)
Max = A[0]
if (10 > 5)
Min = A[1]

шаг 2.
if (10 < 7)
Max = A[0]
if (10 > 7)
Min = A[2] - уже ошибка т.к. 5 < 7

шаг 3.
if (10 < 8)
Max = A[0]
if (10 > 8)
Min = A[3]

шаг 4.
if (10 < 11)
Max = A[4]
if (10 > 11)
Min = A[3]

Или программа работает не так? точнее она и работает не так, не понимаю логику, объясните пожалуйста.
Последний раз редактировалось Кощей 14 06 2019, 14:01, всего редактировалось 1 раз.
  • Не в сети
  • Аватара пользователя
  • Админ
    • ветеран клуба
    • ветеран клуба
    • На форуме с 16 06 2013, 10:51
    • Сообщений 22034
    • Профиль
    • Авто: ЗАЗ епт Ваз 2106(был),Ваз 2199(был),Ваз 2112(был)e46 sedan(был),е46 coupe(есть),e70(есть)
    • Торговая репутация: +18
    • Откуда: Moscow
    • Изображения: 5
    • Репутация: 12613
    • ГуруГуруГуруГуруГуруГуруГуруГуруГуруГуру
Макс!Вечера дождись-раскроем тему... ::xa::
Жизнь научила двум вещам:
1.Не забывать о родителях
2.Никому не верить
  • Не в сети
  • Аватара пользователя
  • Админ
    • ветеран клуба
    • ветеран клуба
    • На форуме с 24 12 2007, 11:03
    • Сообщений 18520
    • Профиль
    • Авто: e10 2002, e30 320 conv, e30 325i tour, e53 X5 3.0d Individual
    • Торговая репутация: +1
    • Откуда: Never Sleeps
    • Изображения: 1
    • Репутация: 7621
    • ГуруГуруГуруГуруГуруГуруГуруГуруГуруГуру
Ну у тебя как минимум ошибка.
цикл надо стартовать с int i = 0; тк первый элемент массива имеет индекс 0 а не 1. Хотя ты устанавливаешь границы в нулевом индексе до цикла потому смысла и нет проходить по нулеваой итерации.

Далее в условии ты отдельно ищешь максимум и минимум. а соответсвенно, условие будет верно только когда массив будет пройден до конца.

Но опять же условие берет первый элемент массива и ставит его как отправную точку.
Соответственно на каждой итерации если элемент больше текущего максимума то это максимум на данном этапе. если меньше, то это минимум. И если значение не изменится, то мы сразу попали в верхнюю или нижнюю границу.

Так что алгоритм верен.