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

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



НазваниеТема : Анализ программы, содержащей подпрограммы, циклы и ветвления
Дата конвертации24.06.2012
Размер155.05 Kb.
ТипДокументы

© К. Поляков, 2009-2012

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


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

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

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

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

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


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

var x, L, M: integer;

begin

readln(x);

L:=0; M:=0;

while x > 0 do begin

L:=L+1;

if M < (x mod 10) then begin

M:=x mod 10;

end;

x:= x div 10;

end;

writeln(L); write(M);

end.


Решение:

  1. для решения задачи необходимо понять, что делает эта программа

  2. если это не видно сразу, можно выполнить ручную прокрутку для какого-то простого числа, например, для числа 251:

    оператор

    условие

    x

    L

    M

    readln(x);




    251

    ?

    ?

    L:=0; M:=0;







    0

    0

    while x > 0 do…

    251 > 0? да










    L:=L+1;







    1




    if M<(x mod 10) then…

    M <(251 mod 10)? да










    M:=x mod 10;










    1

    x:=x div 10;




    25







    while x > 0 do…

    25 > 0? да










    L:=L+1;







    2




    if M<(x mod 10) then…

    M <(25 mod 10)? да










    M:=x mod 10;










    5

    x:=x div 10;




    2







    while x > 0 do…

    2 > 0? да










    L:=L+1;







    3




    if M<(x mod 10) then…

    M <(2 mod 10)? нет










    x:=x div 10;




    0







    while x > 0 do…

    0 > 0? нет










    writeln(L); write(M);







    3

    5

  3. можно догадаться, что в результате работы программы в переменной L окажется число цифр числа, а в переменной M – наибольшая цифра, но это предположение нужно постараться доказать

  4. нужно вспомнить (и запомнить), что для целого числа остаток от деления на 10 (x mod 10) – это последняя цифра в десятичной записи числа, а целочисленное деление (x div 10) отсекает последнюю цифру, то есть из 123 получается 12

  5. рассмотрим цикл, число шагов которого зависит от изменения переменной x:

while x > 0 do begin

...

x:= x div 10; { отсечение последней цифры }

end;

здесь оставлены только те операторы, которые влияют на значение x

  1. из приведенного цикла видно, что на каждом шаге от десятичной записи x отсекается последняя цифра до тех пор, пока все цифры не будут отсечены, то есть x не станет равно 0; поэтому цикл выполняется столько раз, сколько цифр в десятичной записи введенного числа

  2. на каждом шаге цикла переменная ^ L увеличивается на 1:

L:=L+1;

других операторов, меняющих значение L, в программе нет; поэтому после завершения цикла в переменной L действительно находится количество цифр

  1. теперь разберемся с переменной ^ M, которая сначала равна 0; оператор, в котором она меняется, выглядит так:

if M < (x mod 10) then begin

M:=x mod 10;

end;

учитывая, что x mod 10 – это последняя цифра десятичной записи числа, получается что если эта цифра больше, чем значение M, она записывается в переменную M;

  1. этот оператор выполняется в цикле, причем выражение x mod 10 по очереди принимает значения всех цифр исходного числа; поэтому после завершения циклам в переменной M окажется наибольшая из всех цифр, то есть наша догадка подтверждается

  2. итак, по условию задачи фактически требуется найти наибольшее трехзначное число со старшей цифрой 7; очевидно, что это 777.

  3. ответ: 777.

Возможные ловушки и проблемы:

    • это очень неплохая задача на понимание, тут достаточно сложно «вызубрить» метод решения, можно только освоить последовательность (системность) анализа

    • ручной прокрутки в такой задаче недостаточно, по её результатам можно угадать алгоритм, но можно и не угадать; в критическом случае можно сделать ручную прокрутку для нескольких чисел им попытаться понять закономерность



^

Задачи для тренировки1:


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

var x, L, M: integer;

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: integer;

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: integer;

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: integer;

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: integer;

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: integer;

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: integer;

begin

readln(x);

L:=0; M:=0;

while x > 0 do begin

L:=L+1;

if M < x then begin

M:=x mod 10;

end;

x:= x div 10;

end;

writeln(L); write(M);

end.

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

var x, L, M: integer;

begin

readln(x);

L:=0; M:=0;

while x > 0 do begin

L:=L+1;

if (M < x) and (x mod 2 = 0) then begin

M:=x mod 10;

end;

x:= x div 10;

end;

writeln(L); write(M);

end.

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

var x, L, M: integer;

begin

readln(x);

L:=0; M:=0;

while x > 0 do begin

L:=L+1;

if (M < x) and (x mod 2 = 1) then begin

M:= (x mod 10) * 2;

end;

x:= x div 10;

end;

writeln(L); write(M);

end.

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

var x, L, M: integer;

begin

readln(x);

L:=0; M:=0;

while x > 0 do begin

L:=L+1;

if M < x then begin

M:= (x mod 10) * 2;

end;

x:= x div 10;

end;

writeln(L); write(M);

end.

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

var x, a, b: integer;

begin

readln(x);

a:=0; b:=1;

while x>0 do begin

a:=a+1;

b:=b*(x mod 10);

x:= x div 10;

end;

writeln(a); write(b);

end.

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

var x, a, b : integer;

begin

readln(x);

a := 0; b := 1;

while x > 0 do begin

a := a + 1;

b := b * (x mod 10);

x := x div 10;

end;

writeln(a); write(b);

end.

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

var x, a, b : integer;

begin

readln(x);

a := 0; b := 1;

while x > 0 do begin

a := a + 1;

b := b * (x mod 10);

x := x div 10;

end;

writeln(a); write(b);

end.

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

var x, a, b : integer;

begin

readln(x);

a := 0; b := 1;

while x > 0 do begin

a := a + 1;

b := b * (x mod 10);

x := x div 10;

end;

writeln(a); write(b);

end.

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

var x, L, M: integer;

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: integer;

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: integer;

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: integer;

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: integer;

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: integer;

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: integer;

begin

readln(x);

L:=0; M:=0;

while x > 0 do begin

L:=L+1;

if M < x then begin

M:=x mod 10;

end;

x:= x div 10;

end;

writeln(L); write(M);

end.

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

var x, L, M: integer;

begin

readln(x);

L:=0; M:=0;

while x > 0 do begin

L:=L+1;

if (M < x) and (x mod 2 = 0) then begin

M:=x mod 10;

end;

x:= x div 10;

end;

writeln(L); write(M);

end.

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

var x, L, M: integer;

begin

readln(x);

L:=0; M:=0;

while x > 0 do begin

L:=L+1;

if (M < x) and (x mod 2 = 1) then begin

M:= (x mod 10) * 2;

end;

x:= x div 10;

end;

writeln(L); write(M);

end.

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

var x, L, M: integer;

begin

readln(x);

L:=0; M:=0;

while x > 0 do begin

L:=L+1;

if M < x then begin

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

end;

x:= x div 10;

end;

writeln(L); write(M);

end.

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

var x, a, b: integer;

begin

readln(x);

a:=0; b:=1;

while x>0 do begin

a:=a+1;

b:=b*(x mod 10);

x:= x div 10;

end;

writeln(a); write(b);

end.

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

var x, a, b : integer;

begin

readln(x);

a := 0; b := 1;

while x > 0 do begin

a := a + 1;

b := b * (x mod 10);

x := x div 10;

end;

writeln(a); write(b);

end.

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

var x, a, b : integer;

begin

readln(x);

a := 0; b := 1;

while x > 0 do begin

a := a + 1;

b := b * (x mod 10);

x := x div 10;

end;

writeln(a); write(b);

end.

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

var x, a, b : integer;

begin

readln(x);

a := 0; b := 1;

while x > 0 do begin

a := a + 1;

b := b * (x mod 10);

x := x div 10;

end;

writeln(a); write(b);

end.



1 Источники заданий:

  1. Авторские разработки.

  2. Тренировочные и диагностические работы МИОО 2010-2011 гг.




Похожие:

Тема : Анализ программы, содержащей подпрограммы, циклы и ветвления iconТема : Анализ программы, содержащей подпрограммы, циклы и ветвления
Ниже записана программа. Получив на вход число, эта программа печатает два числа, и. Укажите наибольшее из таких чисел, при вводе...
Тема : Анализ программы, содержащей подпрограммы, циклы и ветвления iconТема : Анализ программы
Определите, что будет напечатано в результате работы следующего фрагмента программы
Тема : Анализ программы, содержащей подпрограммы, циклы и ветвления iconТема : Анализ программы
Определите, что будет напечатано в результате работы следующего фрагмента программы
Тема : Анализ программы, содержащей подпрограммы, циклы и ветвления iconТема : Анализ программы с подпрограммами
...
Тема : Анализ программы, содержащей подпрограммы, циклы и ветвления iconТема : Анализ программы с подпрограммами
...
Тема : Анализ программы, содержащей подпрограммы, циклы и ветвления iconТема : Блок-схемы алгоритмов. Переменные, присваивание значений. Ветвления. Организация циклов с помощью блока «ветвление»
Тема: Блок-схемы алгоритмов. Переменные, присваивание значений. Ветвления. Организация циклов с помощью блока «ветвление»
Тема : Анализ программы, содержащей подпрограммы, циклы и ветвления iconТема урока Кол-во
Уметь записывать условие ветвления в алгоритме, используя слова «если» и «то», выполнять алгоритмы с ветвлениями
Тема : Анализ программы, содержащей подпрограммы, циклы и ветвления iconДокументы
1. /Ввод-вывод/Ввод-вывод.doc
2. /Графика/Графика.doc
Тема : Анализ программы, содержащей подпрограммы, циклы и ветвления iconТема: Ветвления
Ветвление это такая форма организации действий, при которой в зависимости от истинности некоторого условия выполняется либо одна,...
Тема : Анализ программы, содержащей подпрограммы, циклы и ветвления icon«Опыт. Проблемы. Перспективы»
Анализ и формирование программы деятельности оу на основе Программы развития учреждения (опыт работы сош №17)
Разместите кнопку на своём сайте:
Документы


База данных защищена авторским правом ©podelise.ru 2000-2014
При копировании материала обязательно указание активной ссылки открытой для индексации.
обратиться к администрации
Документы

Разработка сайта — Веб студия Адаманов