1 of 18

Программы while

(+ трассировка)

10в

2 of 18

Задача for-while (1)

3 of 18

for 1

15.2 Напишите программу, которая в последовательности натуральных чисел определяет сумму всех чисел, кратных 6 и оканчивающихся на 4. Программа получает на вход количество чисел в последовательности, а затем сами числа. Количество чисел не превышает 1000. Введенные числа по модулю не превышают 30 000. Программа должна вывести одно число: сумму всех чисел, кратных 6 и оканчивающихся на 4.

Пример работы программы:

Входные данные

Выходные данные

5

14

24

144

22

12

168

4 of 18

for 2

var x, s, n, i: integer;

begin

readln(n);

s := 0;

for i:=0 to n-1 do begin

readln(x);

if (x mod 6=0) and (x mod 10=4) then

s:= s+x;

end;

writeln(s)

end.

n = int(input())

s=0

for i in range(n):

x = int(input())

if x%6==0 and x%10==4:

s=s+x

print(s)

5 of 18

for 3

n = int(input())

s=0

for i in range(n):

x = int(input())

if x%6==0 and x%10==4:

s=s+x

print(s)

n - кол-во чисел, вводимых с клавиатуры

(итераций, повторений в цикле )

i - счетчик цикла

x - число вводят с клавиатуры

(в начале итерации)

s - сумма чисел, делящихся на 6 и оканчивающихся на 4

6 of 18

for 4

действия, определяющие

вход в цикл

действия в цикле

n

i

вход в цикл i < n

х

if x%6==0 and x%10==4:

s

(s=s+x)

5

0

0

да

14

нет

0

1

да

144

да

144

2

да

24

да

168

3

да

12

нет

168

4

да

22

нет

168

168

7 of 18

while 1

8 of 18

while 2

var x, s, i: integer;

begin

readln(x);

s := 0;

while x <> 0 do begin

if (x mod 6=0) and (x mod 10=4) then

s:= s+x;

readln(x);

end;

writeln(s)

end.

x = int(input())

s=0

while x!=0:

if x%6==0 and x%10==4:

s=s+x

x = int(input())

print(s)

9 of 18

while 3

x = int(input())

s=0

while x!=0:

if x%6==0 and x%10==4:

s=s+x

x = int(input())

print(s)

x - число вводят с клавиатуры

(в конце предыдущей итерации

или до первой итерации)

является условием для входа в цикл

s - сумма чисел, делящихся на 6 и оканчивающихся на 4

10 of 18

while 4

действия в цикле

действия, определяющие

вход в цикл

х

до цикла

if x != 0

if x%6==0 and x%10==4:

s

(s=s+x)

х

0

14

14

да

нет

0

144

144

да

да

144

24

24

да

да

168

12

12

да

нет

168

22

22

да

нет

168

0

0

нет

168

11 of 18

Задача while (2)

12 of 18

Запишите число, которое будет напечатано в результате выполнения следующей программы.

Паскаль

var n, s: integer;

begin

n := 4;

s := 15;

while s <= 100 do begin

s := s + 12;

n := n + 2

end;

write(n)

end.

Python

n = 4

s = 15

while s <= 100:

s = s + 12

n = n + 2

print(n)

переменные

n перем ( +2)

s перем ( +12)

13 of 18

трассировка - пошаговое выполнение программы с остановками на каждой команде или строке

Вычисление с помощью таблицы трассировки

  1. Кол-во повторений цикла
  2. Значение переменной на выходе

Python

n = 4

s = 15

while s <= 100:

s = s + 12

n = n + 2

print(n)

s (s = s + 12)

n (n = n + 2)

s <= 100

15

4

да

1)

27

6

да

2)

39

8

да

3)

51

10

да

4)

63

12

да

5)

75

14

да

6)

87

16

да

7)

99

18

да

8)

111

20

нет

s > 100

14 of 18

Алгебраическое вычисление

  1. Кол-во повторений цикла
  2. Значение переменной на выходе

Преобразовать while в for

Python (while)

n = 4

s = 15

while s <= 100:

s = s + 12

n = n + 2

print(n)

Python (for)

n = 4

s = 15

for i in range(8):

s = s + 12

n = n + 2

print(n)

Алгебраическое вычисление

1) Кол-во повторений цикла из условия окончания цикла s > 100

s = 15 + 12 * k

s > 100

15 + 12 * k > 100

12 * k > 85

k > 7,1

k = 8

2) Значение переменной на выходе

после k = 8 итераций (повторений)

n = 4 + 2 * k

n = 4 + 2 * 8 = 20

15 of 18

Задача while (3)

16 of 18

Запишите число, которое будет напечатано в результате выполнения следующей программы.

Паскаль

var n, s: integer;

begin

n := 4;

s := 15;

while s <= 350 do begin

s := s + 12;

n := n + 2

end;

write(n)

end.

Python

n = 4

s = 15

while s <= 350:

s = s + 12

n = n + 2

print(n)

переменные

n

s

17 of 18

трассировка - пошаговое выполнение программы с остановками на каждой команде или строке

Вычисление с помощью таблицы трассировки

  • Кол-во повторений цикла
  • Значение переменной на выходе

Python

n = 4

s = 15

while s <= 350:

s = s + 12

n = n + 2

print(n)

s (s = s + 12)

n (n = n + 2)

s <= 350

15

4

да

1)

27

6

да

2)

39

8

да

3) …………………………………..

4) …………………………………..

5) …………………………………..

i) ……………………………………

k-1)

да

s <= 350

k) ?

нет

s > 350

18 of 18

Алгебраическое вычисление

  • Кол-во повторений цикла
  • Значение переменной на выходе

Преобразовать while в for

Python (while)

n = 4

s = 15

while s <= 350:

s = s + 12

n = n + 2

print(n)

Python (for)

n = 4

s = 15

for i in range(28):

s = s + 12

n = n + 2

print(n)

Алгебраическое вычисление

1) Кол-во повторений цикла из условия окончания цикла s > 350

s = 15 + 12 * k

s > 350

15 + 12 * k > 350

12 * k > 335

k > 27,9

k = 28

2) Значение переменной на выходе

после k = 28 итераций (повторений)

n = 4 + 2 * k

n = 4 + 2 * 28 = 60