Программы while
(+ трассировка)
10в
Задача for-while (1)
for 1
15.2 Напишите программу, которая в последовательности натуральных чисел определяет сумму всех чисел, кратных 6 и оканчивающихся на 4. Программа получает на вход количество чисел в последовательности, а затем сами числа. Количество чисел не превышает 1000. Введенные числа по модулю не превышают 30 000. Программа должна вывести одно число: сумму всех чисел, кратных 6 и оканчивающихся на 4.
Пример работы программы:
Входные данные | Выходные данные |
5 14 24 144 22 12 | 168 |
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)
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
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 |
while 1
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)
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
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 | |
Задача while (2)
Запишите число, которое будет напечатано в результате выполнения следующей программы.
Паскаль
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)
трассировка - пошаговое выполнение программы с остановками на каждой команде или строке
Вычисление с помощью таблицы трассировки
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 |
Алгебраическое вычисление
Преобразовать 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
Задача while (3)
Запишите число, которое будет напечатано в результате выполнения следующей программы.
Паскаль
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
трассировка - пошаговое выполнение программы с остановками на каждой команде или строке
Вычисление с помощью таблицы трассировки
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 |
Алгебраическое вычисление
Преобразовать 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