... > Информатика (ЕГЭ) > Обработка целочисленного набора...

Обработка целочисленного набора данных на языке программирования

НАВИГАЦИЯ ПО СТРАНИЦЕ

Базовые алгоритмы перебора Поиск
ПОЛНЫЙ ОТВЕТ
БЕЗ ВОДЫ
Без воды — краткий вариант ответа,
легко понять и запомнить

В данном вопросе мы рассмотрим задания прототипа 17. Решить данные задания мы можем, написав собственную программу на языке Python или используя офисную программу Excel.

Задачи прототипа 17 направлены на различные действия с элементами некой числовой последовательности.

Для решения задания с помощью Excel необходимо знать:

  • как заполнить столбец числами с определенным шагом через прогрессию;

  • функции: ЕСЛИ, СЧЕТ, МИН, МАКС, ОСТАТ.

Функция

Пример

= ЕСЛИ(логическое_выражение; значение_если_истина; значение_если_ложь)

=ЕСЛИ(C2=6;1;0)

означает следующее: если С2=6, то вернуть 1, в противном случае вернуть 0

 = СЧЕТ(значение1; [значение2];...)

=СЧЕТ(A2:A7)

Подсчитывает количество ячеек, содержащих числа, в диапазоне A2:A7

= МИН(число1; [число2];...)

=МИН(A1:A5)

Наименьшее из чисел в диапазоне A1:A5

= МАКС(число1; [число2];...)

=МАКС(A1:A5)

Наибольшее значение в диапазоне A1:A5

= ОСТАТ(число; делитель)

=ОСТАТ(-5; -3)

Остаток от деления -5/-3. Знак тот же, что и у делителя

Для написания своей программы необходимо знать:

  • структуру цикла for и условного оператора; 

  • поиск суммы, количества, произведения элементов.

Пусть необходимо перебрать все целые числа на отрезке [a; b]. Общий вид переборного цикла с некоторым условием записывается на Python так.

Базовые алгоритмы перебора

Поиск количества элементов, удовлетворяющих некоторому условию

Поиск суммы элементов, удовлетворяющих некоторому условию

Поиск произведения элементов, удовлетворяющих некоторому условию

kol = 0
for i in range(a, b+1):
  if условие выполнено:
    kol += 1
print( kol )

sum = 0
for i in range(a, b+1):
  if условие выполнено:
    sum += i 
print(sum)
pr = 1
for n in range(a, b+1):
  if условие выполнено:
     pr* = n
print(pr)

Поиск максимального или минимального элемента

Обрабатываем числа на отрезке [a; b]

Поиск минимального элемента 

Поиск максимального элемента

mn — минимальное число. 

Изначально mn всегда больше максимально возможного числа.

1 способ:

mn = b+1 
for n in range (a, b+1):
  if n < mn:
    mn = n
print (mn)

2 способ:

mn = b+1
for n in range (a, b+1):
  mn = min(mn, n)
print(min)

mx — максимальное число. 

Изначально mx всегда меньше минимально возможного числа.

1 способ:

mx = a - 1 
for n in range (a, b+1):
  if n > mx:
    mx = n
print (mx)

2 способ:

mx = a - 1 
for n in range (a, b+1):
  mx = max(mx, n)
print(max)

Теперь разберем примеры.

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

  1. в виде отрезка, указанного в условиях задачи;

  2. в виде файла с числами, записанными построчно.

Задача 1. Рассматривается множество целых чисел, принадлежащих отрезку [2012; 14531], которые делятся на 3 и не делятся на 13, 17, 19 и 21. Найти количество таких чисел и максимальное из них. В ответе записать два числа через пробел: сначала количество, затем максимальное число.

k=0 # изначально количество k обнуляем

mx = 2011  # переменной mx присвоили значение наименьшего элемента -1

for i in range (2012,14532): # перебираем все элементы, принадлежащие заданному отрезку

    if i % 3 == 0  and i % 13 != 0 and i % 17 != 0 and i % 19 != 0 and i % 21 != 0 : # если условие выполняется, то

        k+=1  # счетчик k увеличиваем на 1

        if i > mx: # если элемент, удовлетворяющий всем этим условиям, больше mx, то мы его считаем максимальным

            mx = i   # и кладем в mx

print (k,mx) # выводим на экран количество и максимальное значение элементов, удовлетворяющих условию

# – комментарий на языке Python

!= обозначает «не равно»

k+=1 то же самое, что k = k+1 

Задача 2. Рассматривается множество целых чисел, принадлежащих отрезку [2149; 10579], которые делятся на 3 или на 13 и не делятся на 11, 17, 19 , 21 и 23. Найти количество таких чисел и минимальное из них. В ответе записать два числа через пробел: сначала количество, затем минимальное число.

k=0  # изначально количество k обнуляем

mn = 10580   переменной mn присвоили значение наибольшего элемента +1

for i in range (2149,10580):

    if (i % 3 == 0 or i % 13 == 0) and i % 11 != 0 and i % 17 != 0 and i % 19 != 0 and i % 21 != 0 and i % 23 != 0:    # если условие выполняется, то

        k+=1   # счетчик k увеличиваем на 1

        if i < mn:  если элемент, удовлетворяющий всем этим условиям, меньше mn, то мы его считаем минимальным

            mn = i # и кладем в mn

print (k,mn) # выводим на экран количество и минимальное значение элементов, удовлетворяющих условию

Обратите внимание на скобки в условии. Они здесь потому, что конъюнкция (and) по приоритету сильнее дизъюнкции (or), и в отсутствии скобок в начале выполнится сложное условие i % 13 == 0 and i % 11 != 0 and i % 17 != 0 and i % 19 != 0 and i % 21 != 0 and i % 23 != 0, а потом уже дизъюнкция or i % 3 == 0.