Thon Условные



бет35/38
Дата23.02.2020
өлшемі2,05 Mb.
#58878
1   ...   30   31   32   33   34   35   36   37   38
Байланысты:
8-3 python


M = A[i] print( M )

Будет ли в этой задаче ошибкой цикл, начинающий перебор с элемента A[0]:

for i in range(N):

...

Викентий решил написать первый оператор в пред-ыдущем фрагменте так:

M = A[N-1]

Закончите программу Викентия.

Кирилл решил написать первый оператор в предыдущем фрагменте так:

M = A[N%2]

Закончите программу Кирилла.

Более аккуратно смотрится вариант с другим типом цикла



for:

M = A[0] for x in A:

if x > M: M = x print( M )

Теперь найдём индекс максимального элемента. Казалось бы, необходимо ввести еще одну переменную nMax для хранения


96 http://kpolyakov.spb.ru

05.04.2019 Информатика, 8 класс К.Ю. Поляков, Е.А. Еремин



номера. Сначала в неё нужно записать 0 (считаем первый эле-мент максимальным) и затем, когда нашли новый максималь-ный элемент, запоминать его значение в переменной M, а ин-декс в переменной nMax:

M = A[0] nMax = 0

for i in range(1,N):

if A[i] > M:

M = A[i] nMax = i

print( "A[{}]={}".format(nMax, M) )

Однако это не самый лучший вариант. В этой программе можно обойтись без одной из переменных.



Можно ли, зная значение максимального элемента массива M, сразу (без перебора!) найти его номер? Если да, то как?

Можно ли, зная номер максимального элемента массива nMax, сразу (без перебора!) найти его значение? Если да, то как?

По индексу элемента i можно всегда определить значение этого элемента: оно равно A[i]. Поэтому достаточно хранить только индекс максимального элемента nMax, а его значение заменить на A[nMax]:

nMax = 0

for i in range(1,N):

if A[i] > A[nMax]:

nMax = i

print( "A[{}]={}".format(nMax, A[nMax]) )

Для поиска максимума можно использовать и встроенные функции Python: сначала найти максимальный элемент, а по-том его индекс с помощью функции index:

M = max(A)

nMax = A.index(M)

print( "A[{}]={}".format(nMax, M) )

97 http://kpolyakov.spb.ru

05.04.2019 Информатика, 8 класс К.Ю. Поляков, Е.А. Еремин



В этом случае фактически придётся выполнить два прохо-да по массиву. Однако такой вариант работает быстрее, чем «рукописный» цикл с одним проходом, потому что встроенные функции написаны на языке C и подключаются в виде готового машинного кода, а не выполняются относительно медленным интерпретатором Python.
Более сложная задача найти максимальное значение не из всех элементов массива, а только из тех, которые удовлетво-ряют некоторому условию. Если вернуться к примеру с поиском арбуза: в некоторых комнатах лежат не арбузы, а дыни, но нужно найти именно самый большой арбуз. Это значит, что мы выбираем новый элемент, если он а) подходит нам по условию отбора и б) больше, чем максимальный, найденный до этого.

Рассмотрим конкретную задачу: найти максимальный из отрицательных элементов массива (предполагается, что такие элементы в массиве есть).

Запишите в тетради условие, при котором обновляется значение максимального значения в переменной М.

Самое сложное определить, каким должно быть началь-ное значение M.



Предположим, что мы сначала записали в переменную M значение какого-либо элемента массива. Когда такой приём может дать неверный результат?

Выполните ручную прокрутку следующей программы:

M = A[0]

for i in range(1,N):

if A[i] < 0 and A[i] > M:


Достарыңызбен бөлісу:
1   ...   30   31   32   33   34   35   36   37   38




©engime.org 2024
әкімшілігінің қараңыз

    Басты бет