Разчитане на алгоритми и резултат от алгоритмичен фрагмент
Да разчетем алгоритъм означава да проследим стъпките му и да предвидим резултата, без да пускаме програмата. Удобно е да водим таблица със стойностите на променливите след всяка стъпка (трасиране). Особено внимание изискват циклите, условията и операциите // (целочислено деление) и % (остатък). В урока решаваме задачи от типа „Какво ще изведе този фрагмент?“ и броим колко пъти се изпълнява дадено действие.
Какво да запомним
- Трасиране: записваме стойностите на променливите след всяка стъпка.
- n // k е целочислено деление, n % k е остатъкът: 13 // 4 = 3, 13 % 4 = 1.
- range(1, 5) дава 1, 2, 3, 4 (без 5).
- Линейното търсене в списък от n елемента прави най-много n сравнения.
Пример
s = 0; for i in range(1, 5): s = s + i. Стойностите на s са 1, 3, 6, 10, затова print(s) извежда 10.
Проверете се: 15 въпроса
Натиснете въпроса, за да видите верния отговор и обяснението.
Какво ще изведе: x = 4; y = x + 3; print(y)
- 4
- 3
- 7
- 43
Отговор: 7
y = 4 + 3 = 7.
Какво ще изведе: s = 0, после for i in range(1, 5): s = s + i, накрая print(s)
- 15
- 4
- 9
- 10
Отговор: 10
range(1, 5) дава 1, 2, 3, 4, а 1 + 2 + 3 + 4 = 10.
Какво ще изведе: a = 5; b = 2; a = a * b; b = a - b; print(a, b)
- 10 8
- 10 3
- 5 2
- 10 2
Отговор: 10 8
Първо a = 10, после b = 10 − 2 = 8, защото се използва новата стойност на a.
Какво ще изведе: n = 13; print(n // 4, n % 4)
- 3.25 1
- 3 1
- 1 3
- 3 0
Отговор: 3 1
// е целочислено деление (13 = 3 · 4 + 1), а % дава остатъка 1.
k = 0; x = 20; докато x > 1, изпълнявай x = x // 2 и k = k + 1. Колко е k накрая?
- 3
- 5
- 4
- 10
Отговор: 4
x става 10, 5, 2, 1, т.е. цикълът се изпълнява 4 пъти.
Какво ще изведе: x = 10; x = x - 3; print(x)
- 7
- 10
- 3
- 13
Отговор: 7
x се намалява с 3: 10 − 3 = 7.
Какво ще изведе: print("ab" * 3)
- ab3
- ababab
- aaabbb
- грешка
Отговор: ababab
Умножението на низ по цяло число го повтаря.
Какво ще изведе: a = [3, 8, 1]; print(max(a) - min(a))
- 8
- 2
- 7
- 11
Отговор: 7
max е 8, min е 1, а 8 − 1 = 7.
x = 7; ако x > 5, то x = x * 2, иначе x = x + 1. Колко е x накрая?
- 8
- 7
- 15
- 14
Отговор: 14
Условието 7 > 5 е вярно, затова се изпълнява x = 7 · 2 = 14.
c = 0; for i in range(10): ако i % 3 == 0, то c = c + 1. Колко е c накрая?
- 4
- 3
- 10
- 9
Отговор: 4
Кратни на 3 сред 0, 1, ..., 9 са 0, 3, 6 и 9, т.е. четири числа.
Колко сравнения прави линейното търсене в най-лошия случай в списък от 100 елемента?
- 1
- 7
- 100
- 50
Отговор: 100
Линейното търсене проверява елементите един по един; двоичното търсене в подреден списък би стигнало до 7.
Какво ще изведе: a = 3; b = a + a; print(b * 2)
- 6
- 12
- 9
- 18
Отговор: 12
b = 6, а b * 2 = 12.
Какво ще изведе: print(17 % 5)
- 3
- 5
- 3.4
- 2
Отговор: 2
17 = 3 · 5 + 2, остатъкът е 2.
Колко пъти ще се изпълни print в: for i in range(2, 8): print(i)
- 8
- 5
- 7
- 6
Отговор: 6
range(2, 8) дава 2, 3, 4, 5, 6, 7, тоест 6 числа.
Какво ще изведе: s = 1; for i in range(1, 5): s = s * i; накрая print(s)
- 24
- 120
- 10
- 6
Отговор: 24
s става 1, 2, 6, 24.