Анализ программы с несвязанными переменными

advertisement
© А. Козлов, 2006-2015
8-1 Анализ программ с независимыми переменными.
Тренажеры для самостоятельных тренировок по данной теме: http://somit.ru/8_2015.html
Тема: Анализ программы.
Что нужно знать:
 основные конструкции языка программирования:
o объявление переменных
o оператор присваивания
o оператор вывода
o циклы
Что нужно уметь:
 выполнять ручную прокрутку программы
 выделять переменную цикла - W, изменение которой влияет на количество шагов цикла
 определять количество шагов цикла: N = (W - w0)/ dw
 определять переменную, которая выводится с помощью команды вывода на экран write()
Пример:
Определите, что будет напечатано в результате работы следующего фрагмента программы:
n := 24;
s := 0;
while n <= 28 do begin
s := s + 20;
n := n + 2
end;
write(s)
В задачах с независимыми переменными, при решении можно пользоваться двумя способами:
1. прокрутка программы
2. математический
Решение задачи прокруткой
n<=28
+
+
+
s
20
40
60
n
26
28
Таким образом, видим, что s = 60.
Математический способ
Для визуального различия переменные формулы выделим различными цветами. N = (W - w0)/ dw , где

W – максимально возможное значение переменной цикла

w0 – ее начальное значение

dw – ее приращение (изменение)
http://somit.ru
© А. Козлов, 2006-2015
Исходя из выше сказанного, выделим рассмотренные нами переменные в указанной программе
соответствующим цветом
begin
n := 24;
s := 0;
while n <= 28 do begin
s := s + 20;
n := n + 2
end;
write(s)
end.
1) N = (28 – 24)/2 = 2
Надо понимать, что после двух шагов цикла, значение переменной n станет равно 28, но 28 = 28, т.е.
условие цикла выполнилось, следовательно, входим в цикл еще раз. Отсюда следует правило:
Правило 1
Если полученное значение N - целое число, а в условии кроме знака «<» есть знак «=», то к
найденному значению необходимо добавить единицу
Если полученное значение N - дробное, а в условии кроме знака «<» есть знак «=», то найденное
значение округляем до наибольшего целого.
Согласно правилу 1 получаем, что
N = (28 – 24)/2 = 2 + 1 = 3
По условию на печать необходимо вывести s. Строка s := s + 20; говорит о том, что при каждом шаге
цикла, значение s увеличивается на 20, следовательно за три прокрутки 20 х 3 = 60, благо начальное
значение s = 0, в противном случаем нужно будет еще добавить и его.
Итого: S = 60
Разберем еще один пример
Определите, что будет напечатано в результате работы следующего фрагмента программы:
begin
n := 27;
s := 0;
while n <= 280 do begin
s := s + 5;
n := n + 3
end;
write(s)
end.
1. N = (280-27)/3 = 84,3
Правило 2
если полученное значение N - дробное число, то в независимости от того есть ли в условии знак
«=» или его нет, найденное значение округляем до наибольшего целого,
__________________________________________________________________________________________
http://somit.ru
© А. Козлов, 2006-2015
1. Согласно правилу два N = (280-27)/3 = 84,3 = 85
2. s = 85 х 5 = 425
Разберем еще один пример
Определите, что будет напечатано в результате работы следующего фрагмента программы:
begin
n := 24;
s := 0;
while n <= 2800 do begin
s := s + 20;
n := n + 2
end;
write(s+n)
end.
1)
2)
3)
4)
N = (2800-24)/2 = 1388 = 1388 + 1 = 1389
s = 1389 х 20 = 27780
n = 1389 х 2 + 24 = 2802
и окончательно, s + n = 27780 + 2802 = 30582
Задачи для самостоятельного решения
Задача 1
Определите, что будет напечатано в результате работы следующего фрагмента программы:
begin
n := 24;
s := 0;
while n < 28 do begin
s := s + 20;
n := n + 2
end;
write(s)
write(n)
end.
Задача 2
Определите, что будет напечатано в результате работы следующего фрагмента программы:
var n, s: integer;
begin
n := 23;
s := 0;
while n <= 28 do begin
s := s + 5;
__________________________________________________________________________________________
http://somit.ru
© А. Козлов, 2006-2015
n := n + 2
end;
write(s)
write(n)
end.
Задача 3
Определите, что будет напечатано в результате работы следующего фрагмента программы:
var n, s: integer;
begin
n := 12;
s := 512;
while s >= 0 do begin
s := s - 20;
n := n + 5
end;
write(n)
end.
Задача 4
Определите, что будет напечатано в результате работы следующего фрагмента программы:
var n, s: integer;
begin
n := 120;
s := 1120;
while s >= 0 do begin
s := s - 20;
n := n + 3
end;
write(n)
end.
__________________________________________________________________________________________
http://somit.ru
© А. Козлов, 2006-2015
Ответы к задачам с кратким решением
Решение 1
N = (28-24)/2 = 2
S = 20*2 = 40
n = 2*2+24 = 28
Решение 2
N = (28-23)/2 = 2,5 = (округляем в большую сторону) = 3!
S = 5*3 = 15
n = 3*2+23 = 29
Решение 3
N = 512/20 = 25,6 = 26
n = 26 * 5 + 12 = 142
Решение 4
N = 1120/20 = 56 (если ответ круглый, а в условии
N = 56+1 = 57
n = 57 * 3 + 120 = 291
>= то N = N+1)
__________________________________________________________________________________________
http://somit.ru
Download