|
|
№1
14 06 2019, 13:33
Есть массив
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] Или программа работает не так? точнее она и работает не так, не понимаю логику, объясните пожалуйста. |
|
№2
14 06 2019, 13:44
Макс!Вечера дождись-раскроем тему...
1.Не забывать о родителях 2.Никому не верить |
|
№3
14 06 2019, 13:46
Ну у тебя как минимум ошибка. цикл надо стартовать с int i = 0; тк первый элемент массива имеет индекс 0 а не 1. Хотя ты устанавливаешь границы в нулевом индексе до цикла потому смысла и нет проходить по нулеваой итерации. Далее в условии ты отдельно ищешь максимум и минимум. а соответсвенно, условие будет верно только когда массив будет пройден до конца. Но опять же условие берет первый элемент массива и ставит его как отправную точку. Соответственно на каждой итерации если элемент больше текущего максимума то это максимум на данном этапе. если меньше, то это минимум. И если значение не изменится, то мы сразу попали в верхнюю или нижнюю границу. Так что алгоритм верен. |



