Категория B14 • задача №3
Условие задачи
Дано:
дан следующий программный код (для удобства, код программы приведен на самом популярном языке программирования высокого уровня – Pascal)
var
i : integer;
begin
f := true;
for i := 2 to pn div 2 do
if(pn mod i = 0) then
f := false;
end;
var
n : integer;
k : integer;
begin
k := 0;
for n := 2 to 20 do
if(f(n) = true) then
k := k + 1;
writeln(k);
end.
Найти:
определите, что будет напечатано в результате выполнения приведенного алгоритма
Решение
I этап: детальный анализ каждой строки заданной программы
Проанализируем код заданной функции:
Код программы (функция) | Комментарии |
function f(pn : integer) : boolean; | f - название функции. Данная функция принимает в качестве |
var | раздел декларации переменных |
i : integer; | переменная-счетчик, используемая в цикле for |
begin | начало тела функции |
f := true; | по умолчанию присваиваем функции значение равное false, то есть функция вернет ложь, если ни один оператор в теле функции не будет выполнен |
for i := 2 to pn div 2 do | div - операция нахождения целой части при делении; перебираем натуральные числа от двух до половины значения, являющегося параметром функции |
if(pn mod i = 0) then | если проверяемое число делится на значение переменной-счетчика без остатка, то |
f := false; | функция в качестве ответа вернет ложь |
end; | конец тела функции |
Промежуточный вывод: данный алгоритм проверяет, является ли переданное число простым (напомню, что число является простым, если делится без остатка только на единицу и на само себя) и возвращает истину, если число простое. Если число делится на какое-либо другое число (данная проверка заключена в строке кода if (pn mod i = 0) then), то число не является простым, и тогда функция вернет значение false, то есть ложь. Также, важно понимать, что достаточно проверить делители, начиная с двойки и заканчивая половиной проверяемого числа. Например, нет необходимости проверять все числа от двух до самого это числа, так как, начиная с "экватора" в результате не может получиться целое число.
Проанализируем код главного блока программы:
Код программы (главный блок) | Комментарии |
var | раздел описания переменных |
n : integer; | переменная-счетчик, отвечающая за перебор натуральных чисел в диапазоне от двух до двадцати |
k : integer; | отвечает за количество простых чисел из диапазона от двух до двадцати |
begin | начало главного блока программы |
k := 0; | поскольку расчет еще не начался, то необходимо обнулить переменную, отвечающую за количество |
for n := 2 to 20 do | последовательно перебираем все натуральные числа из диапазона от двух до двадцати включительно |
if(f(n) = true) then | если текущее натуральное число является простым, то |
k := k + 1; | увеличиваем счетчик простых чисел на единицу |
writeln(k); | выпечатываем на экран количество простых чисел |
end. | конец главного блока программы |
Промежуточный вывод: данная программа детерминирует количество простых чисел из диапазона от двух до двадцати включительно и печатает рассчитанное значение на дисплей пользователя
II этап: тестирование программы на реальных точечных данных
Итак, нашей целью является детерминировать количество простых чисел из диапазона от двух до двадцати включительно.
2 - простое число, так как делится без остатка только на единицу и на само себя;
3 - простое число, так как делится без остатка только на единицу и на само себя;
4 - непростое число, так как делится на два без остатка;
5 - простое число, так как делится без остатка только на единицу и на само себя;
6 - непростое число, так как делится на два и на три без остатка;
7 - простое число, так как делится без остатка только на единицу и на само себя;
8 - непростое число, как минимум делится еще на два без остатка;
9 - непростое число, так как делится на три без остатка;
10 - непростое число, как минимум делится на 5 без остатка;
11 - простое число, так как делится без остатка только на единицу и на само себя;
12 - непростое число, как минимум делится на 6 без остатка;
13 - простое число, так как делится без остатка только на единицу и на само себя;
14 - непростое число, как минимум делится на семь без остатка;
15 - непростое число, как минимум делится на три без остатка;
16 - непростое число, как минимум делится на восемь без остатка;
17 - простое число, так как делится без остатка только на единицу и на само себя;
18 - непростое число, как минимум делится на девять без остатка;
19 - простое число, так как делится без остатка только на единицу и на само себя;
20 - непростое число, как минимум делится на десять без остатка.
Все простые числа я пометил полужирным синим цветом, очевидно, что их количество составляет восемь штук.
Вывод: |
после выполнения предложенного фрагмента программы на экран будет выведено число восемь |
Резюме
проанализировали код предложенной функции;
проанализировали код предложенного главного фрагмента;
"прогнали" программу по всем заданным значениям и посчитали количество простых чисел и заданного диапазона.
Ответ: |
8 |
Категория B14 • задача №3
Остальные решения из билета №3 для подготовки к ЕГЭ по информатике 2013
Условие задачи (наведите курсор мыши на ссылку) |
Аудиовизуальное решение |
Мультимедийная видеопрезентация |
Решение в формате слайд-шоу |
Текстовое решение |
---|
Комментарии