Подготовка к ОГЭ 2021 года, занятие 7, часть 2.
Формальный исполнитель алгоритмов, записанных на алгоритмическом языке. Задание 6
Алгоритм – понятное и точное предписание исполнителю выполнить конечную последовательность команд, приводящую от исходных данных к искомому результату.
Алгоритм должен обладать следующими свойствами:
понятность - означает, что он должен быть записан с помощью команд, понятных исполнителю этих команд;
конечность – означает, что результат должен быть получен за конечное число шагов;
точность – означает, что каждая команда алгоритма должна определять однозначное действие исполнителя;
дискретность – означает, что алгоритм должен быть разбит на последовательность отдельно выполняемых шагов.
Существует три вида алгоритмических конструкций:
следование (линейные алгоритмы);
ветвление (алгоритмы с использованием условий «если»);
циклы (повторение одного или нескольких действий в одном месте программы).
Для наглядной записи алгоритмов используют блок-схемы. Вот некоторые элементы (блоки), их составляющие:
- овал, означает начало или конец алгоритма;
- параллелограмм, означает ввод или вывод данных;
- прямоугольник, означает выполняемое действие;
- ромб, означает выбор условия для дальнейшего выполнения алгоритма.
Циклические алгоритмы (циклы) обеспечивают выполнение некоторой последовательности действий (так называемого тела цикла). Количество таких повторений (шагов цикла) может быть как заранее неизвестно, так и точно определено до начала выполнения цикла.
При этом циклы бывают:
со счетчиком «для», когда количество повторений (шагов) цикла заранее известно и определяется заданным счетчиком цикла (простейший циклический алгоритм);
с предусловием («пока») – выполняются, когда количество по принципу «пока … делай», то есть действия повторяются, пока выполняется предварительно заданное условие цикла;
с постусловием («до») - выполняются по принципу «делай … пока», то есть действия повторяются до наступления условия, заданного после тела цикла.
Пример алгоритма «Утро школьника» с использованием цикла со счетчиком «для»:
Для 5 дней недели выполнить:
проснулся
умылся
позавтракал
пошел в школу.
Пример блок схемы цикла со счетчиком дан на рис.1. Рис..
Пример алгоритма «Утро школьника» с использованием цикла с предусловием («пока»):
Пока день недели будний:
проснулся
умылся
позавтракал
пошел в школу.
Пример блок схемы цикла с предусловием дан на рис.3. Рис.2
Пример алгоритма «Утро школьника» с использованием цикла с постусловием:
проснулся
умылся
позавтракал
пошел в школу, пока не наступила суббота.
Пример блок схемы цикла с постусловием дан на рис.3. Рис.3
На ОГЭ циклы с предусловием и постусловием не встречаются.
Простейший циклический алгоритм, записанный на алгоритмическом языке
Рассмотрим подробно работу оператора цикла со счетчиком (цикла «для»), в котором действие цикла повторяется определенное число раз. На алгоритмическом языке КуМир этот цикл называется «цикл n раз».
Формат оператора цикла «для» в алгоритмическом языке выглядит следующим образом:
нц для i от i1 до i2
кц
Здесь переменная i называется счетчиком цикла, так как в ней считается количество шагов (раз) выполнения цикла, изменяемых его от i1 - начального значения счетчика до i2 – конечного значения счетчика. При этом значение i на каждом шаге цикла увеличивается на единицу, при этом шаг равен +1, если i1 i2 и -1 при i1 i2.
Последовательность действий, многократно повторяющаяся в процессе выполнения цикла, называется телом цикла.
Рассмотрим решение задачи с циклом «для» на конкретных примерах, так как именно они
Задача 1.
Запишите значение переменной s, полученное в результате работы следующей программы:
алг
нач
цел s, k
s := 0
нц для k от 12 до 15
s := s + 13
кц
вывод s
кон
Решение.
В данном алгоритме используются две переменные s и k, значенями которых являются целые числа.
Перед началом цикла переменной s присвоено значение 0.
Далее в цикле, который будет выполняться четыре раза (значения счетчика будут равны по шагам соответственно 12, 13, 14, 15). Количество шагов цикла в данном случае можно вычислить по формуле i = i2 – i1 + 1 (15-12+1=4).
В теле цикла выполняется всего одно действие s := s + 13. Тогда по окончании цикла значение переменной s будет равно 0 + 13*4 = 52
Ответ: 52
Задача 2.
Запишите значение переменной s, полученное в результате работы следующей программы:
алг
нач
цел s, n
s := 5
нц для n от 2 до 4
s := s + (n-1)
кц
вывод s
кон
Решение.
В данном алгоритме используются две переменные s и n, значенями которых являются целые числа.
Перед началом цикла переменной s присвоено значение 5.
Далее в цикле, который будет выполняться три раза (значения счетчика будут равны по шагам соответственно 2, 3, 4). Количество шагов цикла в данном случае можно вычислить по формуле i = i2 – i1 + 1 (4-2+1=3).
В теле цикла выполняется всего одно действие s := s + (n-1).
Далее по шагам:
s := 5 + (2-1) = 6
s := 6 + (3-1) = 8
s := 8 + (4-1) = 11
Ответ: 11
Задача 3.
Запишите значение переменной s, полученное в результате работы следующей программы:
алг
нач
цел s, k
s := 1
нц для k от 3 до 0
s := s*3
кц
вывод s
кон
Решение.
В данном алгоритме используются две переменные s и n, значенями которых являются целые числа.
Перед началом цикла переменной s присвоено значение 1.
Далее в цикле, который будет выполняться четыре раза с шагом -1 (значения счетчика будут равны по шагам соответственно 3, 2, 1, 0). Количество шагов цикла в данном случае можно вычислить по формуле i = i2 + i1 + 1 (3 + 0 + 1 = 4).
В теле цикла выполняется всего одно действие s := s*3. Тогда по окончании цикла значение переменной s будет равно 1 * 3 * 3 * 3 * 3 = 3 4 = 81.
Ответ: 81
Циклический алгоритм обработки массива чисел
Задачи такого типа были на ОГЭ предыдущих лет, поэтому так же разберем их.
Массив – это набор однотипных элементов, имеющих общее имя и расположенных в памяти рядом.
Для обращения к элементу массива используют квадратные скобки, запись A[i] обозначает элемент массива A с номером (индексом) i, который пишется в квадратных скобках, то есть элемент массива с индексом i записывается как A[i].
Для обработки всех элементов массива используется цикл вида
for i:=1 to N do begin
{ действия с элементом A[i] }
end;
Переменная i (счетчик цикла) здесь обозначает номер текущего элемента массива, она меняется от 1 до N с шагом 1, то есть мы ″проходим″ последовательно все элементы.
Массив часто называют таблицей, что и встречается в задачах, рассмотренных ниже на алгоритмическом языке.
Пример массива из 10 элементов выглядит так:
i | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 |
A[i] | 5 | 13 | -7 | 2 | 0 | 10 | 103 | -21 | 7 | 12 |
Здесь первая строка i обозначает номера (индексы) элементов массива, А – имя массива, а вторая строка A[i] – значение этих элементов.
Разберем решение таких задач на конкретных примерах.
Задача 4.
В таблице Dat хранятся данные измерений среднесуточной температуры за 10 дней в градусах (Dat[1] — данные за первый день, Dat[2] — за второй и т. д.). Определите, какое число будет напечатано в результате работы следующей программы.
алг
нач
целтаб Dat[1:10]
цел к, m
Dat[1] := 12
Dat[2] := 15
Dat[3] := 17
Dat[4] := 15
Dat[5] := 14
Dat[6] := 12
Dat[7] := 10
Dat[8] := 13
Dat[9] := 14
Dat[10] := 15
m := 0
нц для к от 1 до 10
если Dat[к]=15 то
m : = m+1
все
КЦ
вывод m
КОН
Решение.
Массив Dat можно представить в виде таблицы:
i | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 |
Dat [i] | 12 | 15 | 17 | 15 | 14 | 12 | 10 | 13 | 14 | 15 |
Переменной m до начала цикла присвоено значение 0.
Далее в цикле, который повторяется 10 раз, проверяется условие:
если Dat[к]=15 то
m : = m+1
Таким образом, данный оператор проверяет, равен ли текущий элемент массива 15, и если да, то увеличивает значение m на единицу.
Всего в массиве три элемента, равных 15, тогда по окончании цикла m = 3.
Ответ: 3
Вывод: данный алгоритм находит и выводит количество элементов массива, равных заданному значению (в данном случае – значению 15). Если знак сравнения поменять на или =, то ответе будет указано количество элементов массива, больших или равных заданному соответственно.
Задача 5.
В таблице Dat хранятся данные измерений среднесуточной температуры за 10 дней в градусах (Dat[1] — данные за первый день, Dat[2] — за второй и т. д.). Определите, какое число будет напечатано в результате работы следующей программы.
алг
нач
целтаб Dat[1:10]
цел к, m
Dat[1] := 12
Dat[2] := 15
Dat[3] := 17
Dat[4] := 15
Dat[5] := 14
Dat[6] := 12
Dat[7] := 10
Dat[8] := 13
Dat[9] := 14
Dat[10] := 15
m := 0
нц для к от 1 до 10
если Dat[к] m то
m : = Dat[к]
все
КЦ
вывод m
КОН
Решение.
Массив Dat можно представить в виде таблицы:
i | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 |
Dat [i] | 12 | 15 | 17 | 15 | 14 | 12 | 10 | 13 | 14 | 15 |
Переменной m до начала цикла присвоено значение 0.
Далее в цикле, который повторяется 10 раз, проверяется условие:
если Dat[к] m то
m : = Dat[к]
Таким образом, данный оператор проверяет, равен ли текущий элемент массива больше значения переменной m, и если да, то этой переменной присваивается значение этого элемента.
При выполнении первого шага цикла Dat [i] = 12, а m = 0, то в переменную m запоминается значение первого элемента массива – 12.
На всех остальных шагах цикла в переменную m запоминаются все элементы массива, которые больше текущего значения этой переменной.
Тогда по окончании цикла значение переменной m будет равно элементу массива, имеющему наибольшему значение, то есть 17.
Ответ: 17
Вывод: Данный алгоритм находит и выводит значение максимального элемента массива.
Если знак в условном операторе поменять на минимального элемента.