СДЕЛАЙТЕ СВОИ УРОКИ ЕЩЁ ЭФФЕКТИВНЕЕ, А ЖИЗНЬ СВОБОДНЕЕ

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

Скидки до 50 % на комплекты
только до

Готовые ключевые этапы урока всегда будут у вас под рукой

Организационный момент

Проверка знаний

Объяснение материала

Закрепление изученного

Итоги урока

Анализ программы, содержащей циклы и ветвления..docx

Категория: Информатика

Нажмите, чтобы узнать подробности

22Анализ программы, содержащей циклы и ветвления..docx

Просмотр содержимого документа
«Анализ программы, содержащей циклы и ветвления..docx»

22 (повышенный уровень, время – 7 мин)

Тема: Анализ программы, содержащей циклы и ветвления.

Что нужно знать:

  • перевод чисел в другие системы счисления

  • операции целочисленного деления (div) и взятия остатка (mod)

  • как работают операторы присваивания, циклы и условные операторы в языке программирования

Пример задания:

P-13 (демо-2021). Получив на вход число x, этот алгоритм печатает два числа: L и M. Укажите наибольшее число x, при вводе которого алгоритм печатает сначала 4, а потом 5.

var x, L, M, Q: integer;

begin

readln(x);

Q := 9;

L := 0;

while x = Q do begin

L := L + 1;

x := x - Q;

end;

M := x;

if M

M := L;

L := x;

end;

writeln(L);

writeln(M);

end.

Решение (программа):

  1. если анализ алгоритма провести не удалось, можно попробовать найти подходящее значение перебором (методом «грубой силы», brute force)

  2. для этого выполним следующие действия:

    1. удаляем строчку, где вводится x:

readln(x);

    1. вводим новую переменную x0 и заключаем основную часть программы в цикл

x0 := 1;

while True do begin

x := x0;

{ здесь нужно поместить запись основного алгоритма }

x0 := x0 + 1;

end;

    1. можно использовать и цикл по переменной, если вы уверены, что максимальное значение, скажем, не больше 1000:

for x0:=1 to 1000 do begin

{ здесь нужно поместить запись основного алгоритма }

end;

    1. заменяем строчки, в которых выводятся результаты, на проверку нужного нам случая; если должны быть выведены числа 4 и 5, выводим на экран число x0:

writeln(L);

writeln(M);

if (L = 4) and (M = 5) then

writeln(x0);

  1. приведём полностью изменённую программу (добавленные строки выделены фоном):

var x0, x, L, M, Q: integer;

begin

for x0:=1 to 1000 do begin

// readln(x);

x := x0;

Q := 9;

L := 0;

while x = Q do begin

L := L + 1;

x := x - Q;

end;

M := x;

if M

M := L;

L := x;

end;

// writeln(L);

// writeln(M);

if (L = 4) and (M = 5) then

writeln(x0);

end;

end.

  1. при запуске программа выдаёт два числа – 41 и 49.

  2. Ответ: 49.

Решение (программа на языке Python):

for x0 in range(1,1001):

# x = int(input())

x = x0

Q = 9

L = 0

while x = Q:

L = L + 1

x = x - Q

M = x

if M

M = L

L = x

# print(L)

# print(M)

if L == 4 and M == 5:

print(x0)

Задачи для тренировки:
  1. Ниже записана программа. Получив на вход число , эта программа печатает два числа, и . Укажите наибольшее из таких чисел , при вводе которых алгоритм печатает сначала 3, а потом 7.

var x, L, M: longint;

begin

readln(x);

L:=0; M:=0;

while x 0 do begin

L:= L + 1;

M:= M + x mod 10;

x:= x div 10;

end;

writeln(L); write(M);

end.

  1. Ниже записана программа. Получив на вход число , эта программа печатает два числа, и . Укажите наибольшее из таких чисел , при вводе которых алгоритм печатает сначала 3, а потом 8.

var x, L, M: longint;

begin

readln(x);

L:=0; M:=0;

while x 0 do begin

L:= L + 1;

if x mod 2 = 0 then

M:= M + x mod 10;

x:= x div 10;

end;

writeln(L); write(M);

end.

  1. Ниже записана программа. Получив на вход число , эта программа печатает два числа, и . Укажите наибольшее из таких чисел , при вводе которых алгоритм печатает сначала 3, а потом 0.

var x, L, M: longint;

begin

readln(x);

L:=0; M:=0;

while x 0 do begin

L:= L + 1;

if x mod 2 = 0 then

M:= M + x mod 10;

x:= x div 10;

end;

writeln(L); write(M);

end.

  1. Ниже записана программа. Получив на вход число , эта программа печатает два числа, и . Укажите наибольшее из таких чисел , при вводе которых алгоритм печатает сначала 3, а потом 8.

var x, L, M: longint;

begin

readln(x);

L:=0; M:=0;

while x 0 do begin

L:= L + 1;

if x mod 2 = 1 then

M:= M + x mod 10;

x:= x div 10;

end;

writeln(L); write(M);

end.

  1. Ниже записана программа. Получив на вход число , эта программа печатает два числа, и . Укажите наибольшее из таких чисел , при вводе которых алгоритм печатает сначала 3, а потом 7.

var x, L, M: longint;

begin

readln(x);

L:=0; M:=0;

while x 0 do begin

L:= L + 1;

if x mod 2 = 0 then

M:= M + (x mod 10) div 2;

x:= x div 10;

end;

writeln(L); write(M);

end.

  1. Ниже записана программа. Получив на вход число , эта программа печатает два числа, и . Укажите наибольшее из таких чисел , при вводе которых алгоритм печатает сначала 3, а потом 7.

var x, L, M: longint;

begin

readln(x);

L:=0; M:=0;

while x 0 do begin

L:= L + 1;

if x mod 2 = 1 then

M:= M + (x mod 10) div 2;

x:= x div 10;

end;

writeln(L); write(M);

end.

  1. Ниже записана программа. Получив на вход число , эта программа печатает два числа, и . Укажите наибольшее из таких чисел , при вводе которых алгоритм печатает сначала 3, а потом 7.

var x, L, M: longint;

begin

readln(x);

L:=0; M:=0;

while x 0 do begin

L:=L+1;

if M

M:=x mod 10;

end;

x:= x div 10;

end;

writeln(L); write(M); end.