slides9-4py

Содержание

Слайд 2

Программирование (Python)

§ 19. Символьные строки

Программирование (Python) § 19. Символьные строки

Слайд 3

Что такое символьная строка?

Символьная строка – это последовательность символов.

строка – единый объект
длина

Что такое символьная строка? Символьная строка – это последовательность символов. строка –
строки может меняться во время работы программы

Слайд 4

Символьные строки

Присваивание:

s = "Вася пошёл гулять"

Ввод с клавиатуры:

s = input()

Вывод на экран:

print(s)

Длина

Символьные строки Присваивание: s = "Вася пошёл гулять" Ввод с клавиатуры: s
строки:

n = len(s)

length – длина

Слайд 5

Сравнение строк

print("Введите пароль: ")
s = input()
if s == "sEzAm":
print("Слушаюсь и повинуюсь!")
else:

Сравнение строк print("Введите пароль: ") s = input() if s == "sEzAm":
print("Пароль неправильный")

стоит раньше в отсортированном списке

Слайд 6

Сравнение строк

s1 = "паровоз"
s2 = "пароход"
if s1 < s2:
print(s1, "<", s2)
elif

Сравнение строк s1 = "паровоз" s2 = "пароход" if s1 print(s1, "
s1 == s2:
print(s1, "=", s2)
else:
print(s1, ">", s2)

паровоз < пароход

первые отличающиеся буквы

паровоз
пароход

Сравниваем с начала:

«в»: код 1074

«х»: код 1093

Слайд 7

Обращение к символу по номеру

print ( s[5] )

print ( s[-2] )

s[len(s)-2]

s =

Обращение к символу по номеру print ( s[5] ) print ( s[-2]
"информатика"
kot = s[-2]+s[3]+s[-4]

составить «кот»

Слайд 8

Посимвольная обработка строк

s[4] = "a"

Задача. Ввести строку и заменить в ней все

Посимвольная обработка строк s[4] = "a" Задача. Ввести строку и заменить в
буквы «э» на буквы «е».

sNew = ""
for i in range(len(s)) :
if s[i] == "э":
sNew += "е"
else:
sNew += s[i]

строим новую строку!

range(len(s))

для каждого символа строки

len(s)-1

Слайд 9

Цикл перебора символов

sNew = ""
for c in s:
if c == "э":

Цикл перебора символов sNew = "" for c in s: if c
sNew += "е"
else:
sNew += c

перебрать все символы строки

for c in s:

c

Слайд 10

Задачи

«A»: Напишите программу, которая вводит строку, состоящую только из точек и букв

Задачи «A»: Напишите программу, которая вводит строку, состоящую только из точек и
Х, и заменяет в ней все точки на нули и все буквы X на единицы.
Пример:
Введите строку: ..X.XX.
Двоичный код: 0010110

«B»: Напишите программу, которая в символьной строке заменяет все нули на единицы и наоборот. Остальные символы не должны измениться.
Пример:
Введите строку: 10а01Bx1010c
Инверсия: 01a10Bx0101c

Слайд 11

Задачи

«С»: Введите битовую строку и дополните её последним битом, который должен быть

Задачи «С»: Введите битовую строку и дополните её последним битом, который должен
равен 0, если в исходной строке чётное число единиц, и равен 1, если нечётное (в получившейся строке должно всегда быть чётное число единиц).
Пример:
Введите битовую строку: 01101010110
Результат: 011010101100

Слайд 12

Операции со строками

Объединение (конкатенация) :

s1 = "Привет"
s2 = "Вася"
s =

Операции со строками Объединение (конкатенация) : s1 = "Привет" s2 = "Вася"
s1 + ", " + s2 + "!"

"Привет, Вася!"

Умножение:

s = "АУ"
s5 = s*5

АУАУАУАУАУ

s5 = s + s + s + s + s

Слайд 13

Срезы строк (выделение части строки)

s = "0123456789"
s1 = s[3:8] # "34567"

Срезы строк (выделение части строки) s = "0123456789" s1 = s[3:8] #

с какого символа

до какого (не включая 8)

s = "0123456789"
s1 = s[:8] # "01234567"

от начала строки

s = "0123456789"
s1 = s[3:] # "3456789"

до конца строки

Слайд 14

Срезы строк

Срезы с отрицательными индексами:

s = "0123456789"
s1 = s[:-2] # "01234567"

len(s)-2

s

Срезы строк Срезы с отрицательными индексами: s = "0123456789" s1 = s[:-2]
= "0123456789"
s1 = s[-6:-2] # "4567"

len(s)-2

len(s)-6

Слайд 15

Операции со строками

Вставка:

s = "0123456789"
s1 = s[:3] + "ABC" + s[3:]

Удаление:

s =

Операции со строками Вставка: s = "0123456789" s1 = s[:3] + "ABC"
"0123456789"
s1 = s[:3] + s[9:]

"012"

"9"

"012ABC3456789"

"0129"

"012"

"3456789"

Слайд 16

Поиск в строках

s = "Здесь был Вася."
n = s.find ( "с" ) #

Поиск в строках s = "Здесь был Вася." n = s.find (
n = 3
if n >= 0:
print ( "Номер символа", n )
else:
print ( "Символ не найден." )

s = "Здесь был Вася."
n = s.rfind ( "с" ) # n = 12

Поиск с конца строки:

Слайд 17

Задачи

«A»: Ввести с клавиатуры в одну строку фамилию и имя, разделив их

Задачи «A»: Ввести с клавиатуры в одну строку фамилию и имя, разделив
пробелом. Вывести первую букву имени с точкой и потом фамилию.
Пример:
Введите фамилию и имя:
Иванов Петр
П. Иванов

«B»: Ввести с клавиатуры в одну строку фамилию, имя и отчество, разделив их пробелом. Вывести фамилию и инициалы.
Пример:
Введите фамилию, имя и отчество:
Иванов Петр Семёнович
П.С. Иванов

Слайд 18

Задачи

«C»: Ввести адрес файла и «разобрать» его на части, разделенные знаком "/".

Задачи «C»: Ввести адрес файла и «разобрать» его на части, разделенные знаком
Каждую часть вывести в отдельной строке.
Пример:
Введите адрес файла:
C:/Фото/2015/Байкал/shaman.jpg
C:
Фото
2015
Байкал
shaman.jpg

Слайд 19

Преобразования «строка» → «число»

Из строки в число:

s = "123"
N = int

Преобразования «строка» → «число» Из строки в число: s = "123" N
( s ) # N = 123
s = "123.456"
X = float ( s ) # X = 123.456

Из числа в строку:

N = 123
s = str ( N ) # s = "123"
s = "{:5d}".format(N) # s = " 123"
X = 123.456
s = str ( X ) # s = "123.456"
s = "{:7.2f}".format(X) # s = " 123.46"
s = "{:10.2e}".format(X) # s = " 1.23e+02"

Слайд 20

Задачи

«A»: Напишите программу, которая вычисляет сумму двух чисел, введенную в форме символьной

Задачи «A»: Напишите программу, которая вычисляет сумму двух чисел, введенную в форме
строки. Все числа целые.
Пример:
Введите выражение:
12+3
Ответ: 15

«B»: Напишите программу, которая вычисляет сумму трёх чисел, введенную в форме символьной строки. Все числа целые.
Пример:
Введите выражение:
12+3+45
Ответ: 60

Слайд 21

Задачи

«D»: Напишите программу, которая вычисляет выражение, содержащее целые числа и знаки сложения

Задачи «D»: Напишите программу, которая вычисляет выражение, содержащее целые числа и знаки
и вычитания.
Пример:
Введите выражение:
12+134–45–17
Ответ: 84

«C»: Напишите программу, которая вычисляет сумму произвольного количества чисел, введенную в форме символьной строки. Все числа целые.
Пример:
Введите выражение:
12+3+45+10
Ответ: 70

Слайд 22

Программирование (Python)

§ 20. Обработка массивов. Поток данных

Программирование (Python) § 20. Обработка массивов. Поток данных

Слайд 23

Обработка потока данных

Задача. С клавиатуры вводятся числа, ввод завершается числом 0. Определить,

Обработка потока данных Задача. С клавиатуры вводятся числа, ввод завершается числом 0.
сколько было введено положительных чисел.

счётчик = 0
пока не введён 0:
если введено число > 0 то
счётчик:= счётчик + 1

нужен счётчик
счётчик увеличивается если число > 0
нужен цикл
это цикл с условием (число шагов неизвестно)

Слайд 24

Обработка потока данных

count = 0
x = int(input())
while x != 0:
if

Обработка потока данных count = 0 x = int(input()) while x !=
x > 0:
count += 1
x = int(input())
print( count )

откуда взять x?

Слайд 25

Найди ошибку!

count = 0
x = int(input())
while x != 0:
if x

Найди ошибку! count = 0 x = int(input()) while x != 0:
> 0:
count += 1

print( count )

x = int(input())

Слайд 26

Найди ошибку!

count = 0

x = int(input())
while x == 0:
if x

Найди ошибку! count = 0 x = int(input()) while x == 0:
> 0:
count += 1
x = int(input())
print( count )

count = 0

!=

Слайд 27

Задачи

«A»: На вход программы поступает неизвестное количество целых чисел, ввод заканчивается нулём.

Задачи «A»: На вход программы поступает неизвестное количество целых чисел, ввод заканчивается
Определить, сколько получено чисел, которые делятся на 3.
«B»: На вход программы поступает неизвестное количество целых чисел, ввод заканчивается нулём. Определить, сколько получено двузначных чисел, которые заканчиваются на 3.

Слайд 28

Задачи

«C»: На вход программы поступает неизвестное количество целых чисел, ввод заканчивается нулём.

Задачи «C»: На вход программы поступает неизвестное количество целых чисел, ввод заканчивается
Найти среднее арифметическое всех двузначных чисел, которые делятся на 7.
«D»: На вход программы поступает неизвестное количество целых чисел, ввод заканчивается нулём. Найти максимальное из введённых чётных чисел.

Слайд 29

Обработка потока данных: сумма

Задача. С клавиатуры вводятся числа, ввод завершается числом 0.

Обработка потока данных: сумма Задача. С клавиатуры вводятся числа, ввод завершается числом
Найти сумму введённых чисел, оканчивающихся на цифру "5".

сумма = 0
пока не введён 0:
если число оканчивается на "5" то
сумма:= сумма + число

нужна переменная для суммы
число добавляется к сумме, если оно заканчивается на "5"
нужен цикл с условием

if x % 10 == 5:

Слайд 30

Обработка потока данных: сумма

Задача. С клавиатуры вводятся числа, ввод завершается числом 0.

Обработка потока данных: сумма Задача. С клавиатуры вводятся числа, ввод завершается числом
Найти сумму введённых чисел, оканчивающихся на цифру "5".

Sum = 0
x = int(input())
while x != 0:
if x % 10 == 5:
Sum += x
x = int(input())
print( Sum )

Слайд 31

Найди ошибку!

Sum = 0
x = int(input())

while x != 0:
if x %

Найди ошибку! Sum = 0 x = int(input()) while x != 0:
10 == 5:
Sum += x
x = int(input())
print( Sum )

x = int(input())

Слайд 32

Задачи

«A»: На вход программы поступает неизвестное количество целых чисел, ввод заканчивается нулём.

Задачи «A»: На вход программы поступает неизвестное количество целых чисел, ввод заканчивается
Определить, сумму чисел, которые делятся на 3.
«B»: На вход программы поступает неизвестное количество целых чисел, ввод заканчивается нулём. Определить, сумму двузначных чисел, которые заканчиваются на 3.

Слайд 33

Задачи

«C»: На вход программы поступает неизвестное количество целых чисел, ввод заканчивается нулём.

Задачи «C»: На вход программы поступает неизвестное количество целых чисел, ввод заканчивается
Найти сумму цифр всех введённых чисел.
«D»: На вход программы поступает неизвестное количество целых чисел, ввод заканчивается нулём. Найти число, у которого максимальная сумма цифр. Если таких чисел несколько, нужно вывести последнее их них.

Слайд 34

"Бесконечный" цикл

s = 0
while True:
x = int(input())
if x ==

"Бесконечный" цикл s = 0 while True: x = int(input()) if x
0: break
if x % 10 == 5:
s += x
print( s )

break

выйти из цикла

Слайд 35

Условия отбора

Положительные числа:

if x > 0: ...

Числа, делящиеся на 3:

if x %

Условия отбора Положительные числа: if x > 0: ... Числа, делящиеся на
3 == 0: ...

Числа, оканчивающиеся на 6:

if x % 10 == 6: ...

Числа, делящиеся на 3 и оканчивающиеся на 6:

if x % 3 == 0 and x % 10 == 6: ...

Двузначные числа:

if 10 <= x and x <= 99: ...

if 9 < x and x < 100: ...

Слайд 36

Если ни одного числа не нашли…

Задача: с клавиатуры вводятся числа, ввод завершается

Если ни одного числа не нашли… Задача: с клавиатуры вводятся числа, ввод
числом 0. Найти сумму введённых чисел, оканчивающихся на "5". Вывести "нет", если таких чисел нет.

сумма = 0
счётчик = 0
пока не введён 0:
если x оканчивается на "5":
сумма += x
счётчик += 1

счётчик += 1

счётчик = 0

Слайд 37

Если ни одного числа не нашли…

сумма = 0
счётчик = 0
пока не введён

Если ни одного числа не нашли… сумма = 0 счётчик = 0
0:
если x оканчивается на "5":
сумма += x
счётчик += 1

if счётчик == 0:
print("Ответ: нет")
else:
print("Ответ:", s)

Слайд 38

s = 0
x = int(input())
while x != 0:
if x %

s = 0 x = int(input()) while x != 0: if x
10 == 5:
k += 1
if k == 1:
print("Ответ: нет")
else:
print("Ответ:", k)

Найди ошибку!

k = 0

s += x

0

s

x = int(input())

Слайд 39

Поиск максимума (минимума)

Поиск максимума (минимума)

Слайд 40

Поиск максимума (минимума)

нужна переменная для хранения максимума
как только прочитали первое число, сохранили

Поиск максимума (минимума) нужна переменная для хранения максимума как только прочитали первое
максимум («из одного»):
читаем следующее значение:
цикл: если новое число больше максимума, заменяем M:
выводим результат M

x = int(input())
M = x

x = int(input())

while x != 0:
if x > M: M = x

Слайд 41

Поиск максимума (минимума)

x = int(input())
M = x
while x != 0:
if x

Поиск максимума (минимума) x = int(input()) M = x while x !=
> M: M = x
print(M)
print(M)

x = int(input())

Слайд 42

Поиск максимума (минимума) – II

x = int(input())
M = x
while True:
x

Поиск максимума (минимума) – II x = int(input()) M = x while
= int(input())
if x == 0: break
if x > M: M = x
print(M)

print(M)

Слайд 43

Максимум не из всех

Задача: с клавиатуры вводятся числа в диапазоне [-100;100], ввод

Максимум не из всех Задача: с клавиатуры вводятся числа в диапазоне [-100;100],
завершается числом 0. Найти наибольшее среди чётных чисел. Вывести "нет", если таких чисел нет.

x = int(input())
M = x
while x != 0:
if x % 2 == 0 and x > M:
M = x
x = int(input())
print(M)

???

Может быть, что x нечётное!

Слайд 44

Минимум не из всех

По условию: x ∈ [-100;100]

x = int(input())
M = -1000
while

Минимум не из всех По условию: x ∈ [-100;100] x = int(input())
x != 0:
if x % 2 == 0 and x > M:
M = x
x = int(input())
if M == -1000:
print("Нет таких чисел")
else:
print(M)

-1000

Любое x больше этого числа!

Слайд 45

Если диапазон неизвестен…

x = int(input())
M = 1 # любое нечётное
while x !=

Если диапазон неизвестен… x = int(input()) M = 1 # любое нечётное
0:
if x % 2 == 0:
if M % 2 == 1 or x > M:
M = x
x = int(input())
if M == 1 :
print("Нет таких чисел")
else:
print(M)

M == 1

новый максимум

Слайд 46

Задачи

«A»: с клавиатуры вводятся числа, ввод завершается числом 0. Определить минимальное и

Задачи «A»: с клавиатуры вводятся числа, ввод завершается числом 0. Определить минимальное
максимальное из введённых чисел.
Пример:
5
13
34
15
0
Минимум: 5
Максимум: 34

Слайд 47

Задачи

«B»: с клавиатуры вводятся числа, ввод завершается числом 0. Определить минимальное и

Задачи «B»: с клавиатуры вводятся числа, ввод завершается числом 0. Определить минимальное
максимальное из тех введённых чисел, которые делятся на 3. Вывести "нет", если таких чисел нет.

Пример:
5
31
18
21
15
0
Минимум: 15
Максимум: 21

Пример:
5
34
17
41
11
0
Ответ: нет

Слайд 48

Задачи

«C»: с клавиатуры вводятся числа, ввод завершается числом 0. Определить минимальное и

Задачи «C»: с клавиатуры вводятся числа, ввод завершается числом 0. Определить минимальное
максимальное из тех введённых двузначных натуральных чисел, которые оканчиваются на 6. Вывести "нет", если таких чисел нет.

Пример:
6
36
18
26
15
0
Минимум: 26
Максимум: 36

Пример:
6
32
176
41
11
0
Ответ: нет

Слайд 49

Задачи

«D»: с клавиатуры вводятся числа, ввод завершается числом 0. Определить минимальное из

Задачи «D»: с клавиатуры вводятся числа, ввод завершается числом 0. Определить минимальное
введённых чисел Фибоначчи. Вывести "нет", если чисел Фибоначчи в последовательности нет.
Числа Фибоначчи – это последовательность чисел, которая начинается с двух единиц и каждое следующее число равно сумме двух предыдущих: 1, 1, 2, 3, 5, 8, 13, …

Пример:
5
36
12
26
13
0
Ответ: 5

Пример:
6
32
176
41
11
0
Ответ: нет

Слайд 50

Обработка потока данных (N чисел)

Задача: с клавиатуры вводится число N, а затем

Обработка потока данных (N чисел) Задача: с клавиатуры вводится число N, а
– N целых чисел. Определить, сколько было введено положительных чисел.

ввести N
счётчик = 0
сделай N раз:
ввести число
если введено число > 0:
счётчик += 1
вывести счётчик

задано количество!

в Python нет такого!

Слайд 51

Обработка потока данных (N чисел)

сделай N раз:
...

for i in range(4):
print(i)

N

Обработка потока данных (N чисел) сделай N раз: ... for i in
раз

0
1
2
3

s = 0
for i in range(4):
s += i
print(s)

6

for i in range(N):
...

Слайд 52

Обработка потока данных (N чисел)

N = int(input())
k = 0
for i in range(N):

Обработка потока данных (N чисел) N = int(input()) k = 0 for
x = int(input())
if x > 0: k += 1
print(k)

сделай N раз!

Числа, делящиеся на 3:

if x % 3 == 0: k += 1

Числа, оканчивающиеся на 6:

if x % 10 == 6: k += 1

Числа, делящиеся на 3 и оканчивающиеся на 6:

if x % 3 == 0 and x % 10 == 6: k += 1

Слайд 53

Задачи

«A»: с клавиатуры вводится число N, а затем – N целых чисел.

Задачи «A»: с клавиатуры вводится число N, а затем – N целых
Определить, сколько было введено положительных и сколько отрицательных чисел (нули не считать!).
Пример:
5
1
3
-34
15
0
Положительных: 3
Отрицательных: 1

Слайд 54

Задачи

«B»: с клавиатуры вводится число N, а затем – N целых чисел.

Задачи «B»: с клавиатуры вводится число N, а затем – N целых
Определить сумму двузначных чисел (как положительных, так и отрицательных). Если двузначных чисел не было, вывести "нет".

Пример:
5
1
13
-34
5
31
Ответ: 10

Пример:
5
1
213
-134
5
3
Ответ: нет

Слайд 55

Задачи

«C»: с клавиатуры вводится число N, а затем – N целых чисел.

Задачи «C»: с клавиатуры вводится число N, а затем – N целых
Определить минимальное и максимальное среди двузначных чисел, которые делятся на 3. Если таких чисел не было, вывести "нет".

Пример:
5
18
33
98
513
31
Минимум: 18
Максимум: 33

Пример:
5
1
-18
-6
-21
32
Минимум: -21 Максимум: -18

Пример:
5
1
23
132
6
32
Ответ: нет

Слайд 56

Задачи

«D»: с клавиатуры вводится число N, а затем – N натуральных чисел.

Задачи «D»: с клавиатуры вводится число N, а затем – N натуральных
Определить минимальное и максимальное среди простых чисел (которые делятся на сами не себя и на 1). Если таких чисел не было, вывести "нет".

Пример:
5
41
15
11
163
39
Минимум: 11
Максимум: 163

Пример:
5
12
25
132
6
39
Ответ: нет

Слайд 57

Программирование (Python)

Массивы (повторение)

Программирование (Python) Массивы (повторение)

Слайд 58

Обращение к элементу массива

A

массив

2

15

НОМЕР элемента массива
(ИНДЕКС)

A[0]

A[1]

A[2]

A[3]

A[4]

ЗНАЧЕНИЕ элемента массива

Индекс элемента — это значение,

Обращение к элементу массива A массив 2 15 НОМЕР элемента массива (ИНДЕКС)
которое указывает на конкретный элемент массива.

Слайд 59

Создание массива

A = [11, 22, 35, 41, 53]

A = [11, 22] +

Создание массива A = [11, 22, 35, 41, 53] A = [11,
[35, 41] + [53]

A = [11]*5

A = [11] + [11] + [11] + [11] +[11]

Слайд 60

Обращение к элементу массива

i = 1
A[2] = A[i] + 2*A[i-1] + A[2*i+1]
print(

Обращение к элементу массива i = 1 A[2] = A[i] + 2*A[i-1]
A[2]+A[4] )

A[2] = A[1] + 2*A[0] + A[3]
print( A[2]+A[4] )

101

152

A[2]

ИНДЕКС элемента массива: 2

ЗНАЧЕНИЕ элемента массива

Слайд 61

Что неверно?

A = [1, 2, 3, 4, 5]
x = 1
print( A[x-8] )
A[x+4]

Что неверно? A = [1, 2, 3, 4, 5] x = 1
= A[x-1] + A[2*x]

print( A[-7] )
A[5] = A[0] + A[2]

Выход за границы массива — это обращение к элементу с индексом, который не существует в массиве.

Слайд 62

Перебор элементов массива

Перебор элементов: просматриваем все элементы массива и, если нужно, выполняем

Перебор элементов массива Перебор элементов: просматриваем все элементы массива и, если нужно,
с каждым из них некоторую операцию.

N = 10
A = [0]*N # память уже выделена

for i in range(N):
# здесь работаем с A[i]

0, 1, 2, 3, …, N-1

Слайд 63

Заполнение массива

for i in range(N):
A[i] = i

В развёрнутом виде

A[0] = 0
A[1]

Заполнение массива for i in range(N): A[i] = i В развёрнутом виде
= 1
A[2] = 2
...
A[N-1] = N-1

0

1

2

N-1

[0, 1, 2, 3, …, N-1]

В стиле Python:

A = [ i for i in range(N) ]

i

i

Слайд 64

X = N

Заполнение массива в обратном порядке

A[0] = N
A[1] = N-1
A[2] =

X = N Заполнение массива в обратном порядке A[0] = N A[1]
N-2
...
A[N-1] = 1

for i in range(N):
A[i] = X

X = X - 1

X = N, N-1, …, 2, 1

начальное значение

уменьшение на 1

Слайд 65

Заполнение массива в обратном порядке

A[i] = X

–1

+1

i + X =

Заполнение массива в обратном порядке A[i] = X –1 +1 i +
N

X = N - i

for i in range(N):
A[i] = N – i

В стиле Python:

A = [ N-i
for i in range(N) ]

Слайд 66

Вывод массива на экран

for i in range(N):
print( A[i] )

или так:

в столбик

Весь

Вывод массива на экран for i in range(N): print( A[i] ) или
массив сразу:

print( A )

[1,2,3,4,5]

По одному элементу:

for x in A:
print( x )

для всех элементов в массиве A

for x in A:
print( x, end=" " )

пробел между элементами

Слайд 67

Вывод массива на экран (Python)

print ( *A )

разбить список на элементы

print (1,

Вывод массива на экран (Python) print ( *A ) разбить список на
2, 3, 4, 5)

[1,2,3,4,5]

1 2 3 4 5

Слайд 68

Задачи

«A»: а) Заполните все элементы массива из 10 элементов значением X ,

Задачи «A»: а) Заполните все элементы массива из 10 элементов значением X
введённым с клавиатуры.
б) Заполните массив из 10 элементов последовательными натуральными числами, начиная с X (значение X введите с клавиатуры).

«B»: а) Заполните массив из 10 элементов натуральными числами в порядке убывания. С клавиатуры вводится значение X. Последний элемент должен быть равен X, предпоследний равен X+1 и т.д.
б) Заполните массив из 10 элементов степенями числа 2 (от 21 до 2N), так чтобы первый элемент был равен 2, следующий – 4, следующий – 8 и т.д.

Слайд 69

Задачи

«C»: а) Заполните массив из 10 элементов степенями числа 2, начиная с

Задачи «C»: а) Заполните массив из 10 элементов степенями числа 2, начиная
конца, так чтобы последний элемент массива был равен 1, а каждый предыдущий был в 2 раза больше следующего.
б) С клавиатуры вводится целое число X. Заполните массив из 11 элементов целыми числами, так чтобы средний элемент массива был равен X, слева от него элементы стояли по возрастанию, а справа – по убыванию. Соседние элементы отличаются на единицу. Например, при X = 3 массив из 5 элементов заполняется так: 1 2 3 2 1.

Слайд 70

Заполнение случайными числами

from random import randint
N = 10 # размер массива
A =

Заполнение случайными числами from random import randint N = 10 # размер
[0]*N # выделить память
for i in range(N):
A[i] = randint(20,100)

В краткой форме:

from random import randint
N = 10
A = [ randint(20,100)
for i in range(N) ]

из библиотеки (модуля) random

взять функцию randint

Слайд 71

Обработка элементов массива

N = 10
A = [0]*N # память уже выделена

for i

Обработка элементов массива N = 10 A = [0]*N # память уже
in range(N):
# здесь работаем с A[i]

Вывести на экран в столбик:

for i in range(N):
???

print( A[i] )

Вывести на экран в строчку:

for i in range(N):
???

print( A[i], end = " " )

print( *A )

Слайд 72

for i in range(N):
???

for i in range(N):
???

Обработка элементов

for i in range(N): ??? for i in range(N): ??? Обработка элементов
массива

Вывести числа, на 1 большие, чем A[i]:

print( A[i]%10 )

Вывести последние цифры:

print( A[i]+1 )

Слайд 73

Обработка элементов массива

Увеличить на 1:

for i in range(N):
???

A[i] += 1

Обработка элементов массива Увеличить на 1: for i in range(N): ??? A[i]

Умножить на 2:

for i in range(N):
???

A[i] *= 2

Заполнить нулями:

for i in range(N):
???

A[i] = 0

Слайд 74

Задачи-2

«A»: Напишите программу, которая заполняет массив из 10 элементов случайными числами в

Задачи-2 «A»: Напишите программу, которая заполняет массив из 10 элементов случайными числами
диапазоне [0,10], выводит его на экран, а затем выводит на экран квадраты всех элементов массива.
Пример:
Массив: 5 6 2 3 1 4 8 7
Квадраты: 25 36 4 9 1 16 64 49

«B»: Напишите программу, которая заполняет массив из 10 элементов случайными числами в диапазоне [100,300] и выводит его на экран. После этого на экран выводятся средние цифры (число десятков) всех чисел, записанных в массив.
Пример:
Массив: 142 324 135 257 167 295 126 223 138 270
Число десятков: 4 2 3 5 6 9 2 2 3 7

Слайд 75

Задачи-2

«C»: Напишите программу, которая заполняет массив из 10 элементов случайными числами в

Задачи-2 «C»: Напишите программу, которая заполняет массив из 10 элементов случайными числами
диапазоне [100,500] и выводит его на экран. После этого на экран выводятся суммы цифр всех чисел, записанных в массив.
Пример:
Массив: 162 425 340 128 278 195 326 414 312 177
Суммы цифр: 9 11 7 11 17 15 11 9 6 15

Слайд 76

Сумма элементов массива

Sum = 0
for i in range(N):
Sum = Sum +

Сумма элементов массива Sum = 0 for i in range(N): Sum =
A[i]
print( Sum )

Задача. Найти сумму элементов массива из N элементов.

0

5

1

7

2

15

3

18

4

19

Sum += A[i]

В стиле Python:

print( sum(A) )

Слайд 77

Сумма элементов массива (Python)

Sum = 0
for x in A:
Sum += x
print(

Сумма элементов массива (Python) Sum = 0 for x in A: Sum
Sum )

Задача. Найти сумму элементов массива A.

или так:

print( sum(A) )

for x in A:

для всех элементов из A

встроенная функция

Слайд 78

Сумма не всех элементов массива

Sum = 0
for i in range(N):
Sum +=

Сумма не всех элементов массива Sum = 0 for i in range(N):
A[i]
print( Sum )

Задача. Найти сумму чётных элементов массива.

if A[i] % 2 == 0:
Sum += A[i]
print( Sum )

if A[i] % 2 == 0:

Слайд 79

Сумма не всех элементов массива

Sum = 0
for x in A:
Sum +=

Сумма не всех элементов массива Sum = 0 for x in A:
x
print( Sum )

Задача. Найти сумму чётных элементов массива.

if x % 2 == 0:
Sum += x
print( Sum )

A

x

Sum

4

3

6

8

1

0

4

10

18

В стиле Python:

B = [x for x in A
if x % 2 == 0]
print ( sum(B) )

отбираем в новый массив все нужные значения

Слайд 80

Задачи

«A»: Напишите программу, которая заполняет массив из 10 элементов случайными числами на

Задачи «A»: Напишите программу, которая заполняет массив из 10 элементов случайными числами
отрезке [–5; 5] и находит сумму положительных элементов.

«B»: Напишите программу, которая заполняет массив из 10 элементов случайными числами на отрезке [–2; 2] и находит произведение ненулевых элементов.

«C»: Напишите программу, которая заполняет массив из 20 элементов случайными числами на отрезке [100; 1000] и находит отдельно сумму элементов в первой и во второй половинах массива.

Слайд 81

Подсчёт элементов по условию

Задача. Найти количество чётных элементов массива.

count = 0
for i

Подсчёт элементов по условию Задача. Найти количество чётных элементов массива. count =
in range(N):
if A[i] % 2 == 0:
count += 1
print( count )

переменная-счётчик

Слайд 82

Подсчёт элементов по условию (Python)

Задача. Найти количество чётных элементов массива.

count = 0
for

Подсчёт элементов по условию (Python) Задача. Найти количество чётных элементов массива. count
x in A:
if x % 2 == 0:
count += 1
print( count )

В стиле Python:

B = [x for x in A
if x % 2 == 0]
print ( len(B) )

размер массива

Слайд 83

Среднее арифметическое

Задача. Найти среднее арифметическое элементов массива, которые больше 180 (рост в

Среднее арифметическое Задача. Найти среднее арифметическое элементов массива, которые больше 180 (рост
см).

Sum = 0
for x in A:
if x > 180:
Sum += x
print( Sum/N )

Слайд 84

Среднее арифметическое

Задача. Найти среднее арифметическое элементов массива, которые больше 180 (рост в

Среднее арифметическое Задача. Найти среднее арифметическое элементов массива, которые больше 180 (рост
см).

Sum = 0
count = 0
for x in A:
if x > 180:
count += 1
Sum += x
print( Sum/count )

Слайд 85

Среднее арифметическое (Python)

Задача. Найти среднее арифметическое элементов массива, которые больше 180 (рост

Среднее арифметическое (Python) Задача. Найти среднее арифметическое элементов массива, которые больше 180
в см).

B = [ x for x in A
if x > 180]
print ( sum(B)/len(B) )

отбираем нужные

Слайд 86

Задачи

«A»: Напишите программу, которая заполняет массив из 20 элементов случайными числами на

Задачи «A»: Напишите программу, которая заполняет массив из 20 элементов случайными числами
отрезке [0; 200] и считает число элементов, которые делятся на 10.

«B»: Напишите программу, которая заполняет массив из 20 элементов случайными числами на отрезке [0; 200] и считает число двузначных чисел в массиве.

«C»: Напишите программу, которая заполняет массив из 20 элементов случайными числами на отрезке [10; 100] и считает число пар соседних элементов, сумма которых делится на 3.

Слайд 87

Перестановка элементов массива

с = a
a = b
b = c

элементы массива:

с = A[i]
A[i]

Перестановка элементов массива с = a a = b b = c
= A[k]
A[k] = c

Слайд 88

Перестановка пар соседних элементов

Задача. Массив A содержит чётное количество элементов N. Нужно

Перестановка пар соседних элементов Задача. Массив A содержит чётное количество элементов N.
поменять местами пары соседних элементов: 0-й с 1-м, 2-й — с 3-м и т. д.

Слайд 89

Перестановка пар соседних элементов

for i in range(N):
поменять местами A[i] и A[i+1]

?

выход

Перестановка пар соседних элементов for i in range(N): поменять местами A[i] и
за границы массива

Слайд 90

Перестановка пар соседних элементов

for i in range(0,N-1,2):
# переставляем A[i] и

Перестановка пар соседних элементов for i in range(0,N-1,2): # переставляем A[i] и
A[i+1]
с = A[i]
A[i] = A[i+1]
A[i+1] = c

A[0]↔A[1]
A[2]↔A[3]
...
A[N-2]↔A[N-1]

range(0,N-1,2):

Слайд 91

Реверс массива

Задача. Переставить элементы массива в обратном порядке (выполнить реверс).

A[0]↔A[N-1]
A[1]↔A[N-2]
A[i]↔A[N-1-i]
A[N-1]↔A[0]

0+N-1 =

Реверс массива Задача. Переставить элементы массива в обратном порядке (выполнить реверс). A[0]↔A[N-1]
N-1
1+N-2 = N-1
i+??? = N-1
N-1+0 = N-1

Слайд 92

Реверс массива

for i in range(N):
поменять местами A[i] и A[N-1-i]

i=0

i=1

i=2

i=3

(N // 2):

Реверс массива for i in range(N): поменять местами A[i] и A[N-1-i] i=0

Слайд 93

Задачи

«A»: Заполнить массив из 10 элементов случайными числами в диапазоне [0; 100],

Задачи «A»: Заполнить массив из 10 элементов случайными числами в диапазоне [0;
поменять местами пары соседних элементов, не трогая первый и последний элементы.
Массив: 53 66 88 39 26 88 35 24 38 50
Результат: 53 88 66 26 39 35 88 38 24 50
«B»: Заполнить массив из 10 элементов случайными числами в диапазоне [0; 100] и выполнить циклический сдвиг влево: каждый элемент перемещается на место предыдущего, а первый – на место последнего.
Массив: 53 66 88 39 26 88 35 24 38 50
Результат: 66 88 39 26 88 35 24 38 50 53

Слайд 94

Задачи

«C»: Заполнить массив из 10 элементов случайными числами в диапазоне [0; 100],

Задачи «C»: Заполнить массив из 10 элементов случайными числами в диапазоне [0;
сделать реверс отдельно в первой и во второй половине массива.
Массив: 53 66 88 39 26 88 35 24 38 50
Результат: 26 39 88 66 53 50 38 24 35 88

Слайд 95

Линейный поиск в массиве

Задача. Найти в массиве элемент, равный X, и его

Линейный поиск в массиве Задача. Найти в массиве элемент, равный X, и
номер.

X = 5

5

i = 0
while A[i]!=X:
i += 1
print("A[", i, "]=", X)

Слайд 96

Линейный поиск в массиве

i = 0
while i<=N and A[i]!=X:
i +=

Линейный поиск в массиве i = 0 while i i += 1
1
if i < N:
print( "A[",i,"]=",X )
else:
print( "Не нашли!" )

i< N

не выходим за границу

Слайд 97

Досрочный выход из цикла

Задача. Найти в массиве элемент, равный X, и его

Досрочный выход из цикла Задача. Найти в массиве элемент, равный X, и
номер.

nX = -1 # номер элемента
for i in range(N):
if A[i]==X:
nX = i # запомнить номер
break
if nX >= 0:
print( "A[", nX, "]=", X )
else:
print( "Не нашли!" )

нашли!

break

сразу выйти из цикла

Слайд 98

for i in range ( N ):
if A[i] == X:
print

for i in range ( N ): if A[i] == X: print
( "A[", i, "]=", X, sep = "" )
break
else:
print ( "Не нашли!" )

Поиск в массиве

Варианты в стиле Python:

if X in A:
nX = A.index(X)
print ( "A[", nX, "]=", X, sep = "" )
else:
print ( "Не нашли!" )

Слайд 99

Задачи

«A»: Напишите программу, которая заполняет массив из N = 10 элементов случайными

Задачи «A»: Напишите программу, которая заполняет массив из N = 10 элементов
числами в диапазоне [0,20], выводит его на экран, а затем находит индекс первого элемента, равного введённому числу X. Программа должна вывести ответ «не найден», если в массиве таких элементов нет.
Пример:
Массив: 5 16 2 13 3 14 18 13 16 9
Что ищем: 13
A[3] = 13

Слайд 100

Задачи

«B»: Напишите программу, которая заполняет массив из N = 10 элементов случайными

Задачи «B»: Напишите программу, которая заполняет массив из N = 10 элементов
числами в диапазоне [-5,5], выводит его на экран, а затем находит индекс последнего элемента, равного введённому числу X. Программа должна вывести ответ «не найден», если в массиве таких элементов нет.
Пример:
Массив: -5 -6 2 3 -3 0 8 -3 0 9
Что ищем: 0
A[8] = 0

Слайд 101

Задачи

«C»: Напишите программу, которая заполняет массив из N = 10 элементов случайными

Задачи «C»: Напишите программу, которая заполняет массив из N = 10 элементов
числами в диапазоне [10,15], выводит его на экран, а затем находит индексы всех элементов, равных введённому числу X. Программа должна вывести ответ «не найден», если в массиве таких элементов нет.
Пример:
Массив: 12 15 10 13 13 15 10 14 12 13
Что ищем: 12
A[0] = 12
A[8] = 12

Слайд 102

Поиск максимального элемента

Поиск максимального элемента

Слайд 103

Поиск максимального элемента

for i in range(N):
if A[i] > M:
M =

Поиск максимального элемента for i in range(N): if A[i] > M: M
A[i]
print( M )

M – значение, которое заведомо меньше всех элементов массива или
M = A[0] (или любой другой элемент)

Слайд 104

Поиск максимального элемента

M = A[0]
for i in range(1,N):
if A[i] > M:

Поиск максимального элемента M = A[0] for i in range(1,N): if A[i]
M = A[i]
print( M )

начинаем с A[1], так как A[0] мы уже посмотрели

Слайд 105

Поиск максимального элемента (Python)

M = A[0]
for x in A:
if x >

Поиск максимального элемента (Python) M = A[0] for x in A: if
M:
M = x
print( M )

перебрать все элементы в массиве A

for x in A:

print( max(A) )

print( min(A) )

Слайд 106

Номер максимального элемента

Задача. Найти в массиве максимальный элемент и его номер.

M =

Номер максимального элемента Задача. Найти в массиве максимальный элемент и его номер.
A[0]; nMax = 0
for i in range(1,N):
if A[i] > M:
M = A[i]
nMax = i
print( "A[", nMax, "]=", M )

nMax = 0

nMax = i

Слайд 107

Номер максимального элемента

M = A[0]; nMax = 0
for i in range(1,N):
if

Номер максимального элемента M = A[0]; nMax = 0 for i in
A[i]> M :
M = A[i]
nMax = i
print( "A[", nMax, "]=", M )

:

A[nMax]

)

A[nMax]

Слайд 108

Максимальный элемент и его номер

M = max(A)
nMax = A.index(M)
print ( "A[", nMax,

Максимальный элемент и его номер M = max(A) nMax = A.index(M) print
"]=", M )

Вариант в стиле Python:

Слайд 109

Максимальный не из всех

Задача. Найти в массиве максимальный из отрицательных элементов.

M =

Максимальный не из всех Задача. Найти в массиве максимальный из отрицательных элементов.
A[0]
for i in range(1,N):
if A[i]<0 and A[i]>M:
M = A[i]
print( M )

M = 5

Слайд 110

Максимальный не из всех

Задача. Найти в массиве максимальный из отрицательных элементов.

M =

Максимальный не из всех Задача. Найти в массиве максимальный из отрицательных элементов.
A[0]
for i in range(1,N):
if A[i] < 0:
if M >= 0 or A[i]> M:
M = A[i]
print( M )

M >= 0

сначала записали неотрицательный!

Слайд 111

Максимальный не из всех (Python)

Задача. Найти в массиве максимальный из отрицательных элементов.

B

Максимальный не из всех (Python) Задача. Найти в массиве максимальный из отрицательных
= [ x for x in A
if x < 0]
print( max(B) )

отбираем нужные

if len(B):
print( max(B) )
else:
print("Нет таких!")

if len(B)!= 0:

Слайд 112

Задачи (без min и max)

«A»: Напишите программу, которая заполняет массив из 20

Задачи (без min и max) «A»: Напишите программу, которая заполняет массив из
элементов случайными числами на отрезке [50; 150] и находит в нём минимальный и максимальный элементы и их номера.
«B»: Напишите программу, которая заполняет массив из 10 элементов в виде
A = [ 10, 2, 3, 4, 5, 10, 7, 8, 9, 10]
и выводит количество элементов, имеющих максимальное значение.
«C»: Напишите программу, которая заполняет массив из 20 элементов случайными числами на отрезке [100; 200] и находит в нём пару соседних элементов, сумма которых минимальна.

Слайд 113

Задачи

«D»: Напишите программу, которая заполняет массив из 20 элементов случайными числами на

Задачи «D»: Напишите программу, которая заполняет массив из 20 элементов случайными числами
отрезке [–100; 100] и находит в каждой половине массива пару соседних элементов, сумма которых максимальна.

Слайд 114

Задачи-2 (максимум в потоке)

«A»: На вход программы поступает неизвестное количество целых чисел,

Задачи-2 (максимум в потоке) «A»: На вход программы поступает неизвестное количество целых
ввод заканчивается нулём. Напишите программу, которая находит минимальное и максимальное среди полученных чисел.
«B»: На вход программы поступает неизвестное количество целых чисел, ввод заканчивается нулём. Напишите программу, которая находит минимальное и максимально из тех чисел, которые делятся на 3.
«C»: На вход программы поступает неизвестное количество чисел целых, ввод заканчивается нулём. Напишите программу, которая находит максимальное двузначное число, заканчивающееся на 6, среди полученных чисел. Если такого числа нет, нужно вывести слово «Нет».

Слайд 115

Задачи-2 (максимум в потоке)

«D»: На вход программы поступает неизвестное количество целых чисел

Задачи-2 (максимум в потоке) «D»: На вход программы поступает неизвестное количество целых
(не менее 2), ввод заканчивается нулём. Напишите программу, которая находит среди полученных чисел пару полученных друг за другом чисел, сумма которых максимальна.

Слайд 116

Сортировка

Сортировка — это расстановка элементов списка (массива) в заданном порядке.

Задача. Отсортировать

Сортировка Сортировка — это расстановка элементов списка (массива) в заданном порядке. Задача.
элементы в порядке возрастания (неубывания – если есть одинаковые).

Алгоритмы сортировки:
простые, но медленные (при больших N)
быстрые, но сложные…

Слайд 117

Сортировка выбором

нашли минимальный, поставили его на первое место
из оставшихся нашли минимальный, поставили

Сортировка выбором нашли минимальный, поставили его на первое место из оставшихся нашли
его на второе место и т.д.

с = A[nMin]
A[nMin] = A[0]
A[0] = c

A[0],A[nMin] = A[nMin],A[0]

Слайд 118

Сортировка выбором

for i in range(N-1):
# ищем минимальный среди A[i]..A[N-1]
nMin

Сортировка выбором for i in range(N-1): # ищем минимальный среди A[i]..A[N-1] nMin
= i
for j in range(i+1,N):
if A[j] < A[nMin]:
nMin = j
# переставляем A[i] и A[nMin]
A[i],A[nMin] = A[nMin],A[i]

Решение в стиле Python:

A.sort()

Слайд 119

Задачи

«A»: Напишите программу, которая заполняет массив из N = 10 элементов случайными

Задачи «A»: Напишите программу, которая заполняет массив из N = 10 элементов
числами в диапазоне [0,20] и сортирует его в порядке убывания.
Пример:
Массив: 5 16 2 13 3 14 18 13 16 9
Сортировка: 18 16 16 14 13 13 9 5 3 2
«B»: Напишите программу, которая заполняет массив из N = 10 элементов случайными числами в диапазоне [10,100] и сортирует его по возрастанию последней цифры числа (сначала идут все числа, которые заканчиваются на 0, потом все, которые заканчиваются на 1, и т.д.).
Пример:
Массив: 12 10 31 40 55 63 28 87 52 92
Сортировка: 10 40 31 12 52 92 63 55 87 28

Слайд 120

Задачи

«C»: Напишите программу, которая заполняет массив из N = 10 элементов случайными

Задачи «C»: Напишите программу, которая заполняет массив из N = 10 элементов
числами в диапазоне [0,20] и сортирует его в порядке возрастания. На каждом шаге цикла выполняется поиск максимального (а не минимального!) элемента.
Пример:
Массив: 5 16 2 13 3 14 18 13 16 9
Сортировка: 2 3 5 9 13 13 14 16 16 18

Слайд 121

Программирование (Python)

§ 21. Матрицы (двумерные массивы)

Программирование (Python) § 21. Матрицы (двумерные массивы)

Слайд 122

Что такое матрица?

Матрица — это прямоугольная таблица, составленная из элементов одного типа

Что такое матрица? Матрица — это прямоугольная таблица, составленная из элементов одного
(чисел, строк и т.д.).

нет знака

нолик

крестик

строка 2, столбец 3

Каждый элемент матрицы имеет два индекса – номера строки и столбца.

Слайд 123

Создание матриц

A = [[-1, 0, 1],
[-1, 0, 1],
[0,

Создание матриц A = [[-1, 0, 1], [-1, 0, 1], [0, 1,
1, -1]]

перенос на другую строку внутри скобок

A = [[-1, 0, 1], [-1, 0, 1], [0, 1, -1]]

или так:

Слайд 124

Создание матриц

N = 3
M = 2
row = [0]*M
A = [row]*N

Нулевая матрица:

row

A

A[0][0] =

Создание матриц N = 3 M = 2 row = [0]*M A
1

а правильно так:

A = []
for i in range(N):
A.append ( [0]*M )

A

A[0][0] = 1

Слайд 125

Вывод матриц

print ( A )

[[1, 2, 3], [4, 5, 6], [7, 8,

Вывод матриц print ( A ) [[1, 2, 3], [4, 5, 6],
9]]

def printMatrix( A ):
for row in A:
for x in row:
print ( "{:4d}".format(x), end = "" )
print ()

1 2 3
4 5 6
7 8 9

Слайд 126

Простые алгоритмы

Заполнение случайными числами:

from random import randint
for i in range(N):
for j

Простые алгоритмы Заполнение случайными числами: from random import randint for i in
in range(M):
A[i][j] = randint ( 20, 80 )
print ( "{:4d}".format(A[i][j]),
end = "" )
print()

Суммирование:

s = 0
for i in range(N):
for j in range(M):
s += A[i][j]
print ( s )

s = 0
for row in A:
s += sum(row)
print ( s )

Слайд 127

Перебор элементов матрицы

Главная диагональ:

for i in range(N):
# работаем с  A[i][i]

Побочная

Перебор элементов матрицы Главная диагональ: for i in range(N): # работаем с
диагональ:

for i in range(N):
# работаем с  A[i][N-1-i]

Главная диагональ и под ней:

for i in range(N):
for j in range( i+1 ):
# работаем с  A[i][j]

Слайд 128

Перестановка строк

2-я и 4-я строки:

for j in range(M):
c = A[2][j]
A[2][j]

Перестановка строк 2-я и 4-я строки: for j in range(M): c =
= A[4][j]
A[4][j] = c

Решение в стиле Python:

A[2], A[4] = A[4], A[2]

Слайд 129

Перестановка столбцов

2-й и 4-й столбцы:

for i in range(N):
c = A[i][2]
A[i][2]

Перестановка столбцов 2-й и 4-й столбцы: for i in range(N): c =
= A[i][4]
A[i][4] = c

Слайд 130

Задачи

«A»: Напишите программу, которая заполняет матрицу случайными числами в диапазоне [10; 100]

Задачи «A»: Напишите программу, которая заполняет матрицу случайными числами в диапазоне [10;
и находит максимальный элемент на главной диагонали квадратной матрицы.
Пример:
Матрица А:
12 34 14 65
71 88 23 45
87 46 53 39
76 58 24 92
Результат: A[3][3] = 92

Слайд 131

Задачи

«B»: Напишите программу, которая заполняет матрицу случайными числами в диапазоне [10; 100]

Задачи «B»: Напишите программу, которая заполняет матрицу случайными числами в диапазоне [10;
и находит максимальный элемент матрицы и его индексы (номера строки и столбца).
Пример:
Матрица А:
12 34 14 65
71 88 23 98
87 46 53 39
76 58 24 92
Максимум: A[1][3] = 98

Слайд 132

Задачи

«C»: Напишите программу, которая заполняет матрицу случайными числами в диапазоне [-50; 50]

Задачи «C»: Напишите программу, которая заполняет матрицу случайными числами в диапазоне [-50;
и находит минимальный из чётных положительных элементов матрицы. Учтите, что таких элементов в матрице может и не быть.
Пример:
Матрица А:
16 34 14 65
71 88 23 45
87 12 53 39
76 58 24 92
Результат: A[2][1] = 12

Слайд 133

Программирование (Python)

§ 22. Сложность алгоритмов

Программирование (Python) § 22. Сложность алгоритмов

Слайд 134

Как сравнивать алгоритмы?

быстродействие (временна́я сложность)
объём требуемой памяти (пространственная сложность)
понятность

Время работы алгоритма –

Как сравнивать алгоритмы? быстродействие (временна́я сложность) объём требуемой памяти (пространственная сложность) понятность
это количество элементарных операций T, выполненных исполнителем.

зависит от количества данных (размера массива N)

Функция T(N) называется
временно́й сложностью алгоритма

T(N) = 2N3

Слайд 135

Примеры определения сложности

Задача 1. Вычислить сумму первых трёх элементов массива (при N

Примеры определения сложности Задача 1. Вычислить сумму первых трёх элементов массива (при
≥ 3).

Sum = A[0] + A[1] + A[2]

T(N) = 3

2 сложения + запись в память

Задача 2. Вычислить сумму всех элементов массива.

Sum = 0
for i in range(N):
Sum += A[i]

T(N) = 2N + 1

N сложений, N+1 операций записи

Слайд 136

Примеры определения сложности

Задача 3. Отсортировать все элементы массива по возрастанию методом выбора.

Примеры определения сложности Задача 3. Отсортировать все элементы массива по возрастанию методом

for i in range(N-1):
nMin = i
for j in range(i+1,N):
if A[i] < A[nMin]:
nMin = j
A[i],A[nMin] = A[nMin],A[i]

Число сравнений:

Число перестановок: Tn(N) = N – 1

Слайд 137

Примеры определения сложности

Задача 4. Найти сумму элементов квадратной матрицы размером N×N.

Sum

Примеры определения сложности Задача 4. Найти сумму элементов квадратной матрицы размером N×N.
= 0
for i in range(N):
for j in range(N):
Sum += A[i][j]

Слайд 138

Сравнение алгоритмов по сложности

при N < 100:

при N > 100:

Сравнение алгоритмов по сложности при N при N > 100:

Слайд 139

Асимптотическая сложность

Асимптотическая сложность – это оценка скорости роста количества операций при больших

Асимптотическая сложность Асимптотическая сложность – это оценка скорости роста количества операций при
значениях N.

сложность O(N) ⇔ T(N) ≤ c⋅ N для N ≥ N0

линейная

сумма элементов массива:

T(N) = 2⋅ N – 1 ≤ 2⋅ N для N ≥ 1 ⇒ O(N)

сложность O(1) ⇔ T(N) ≤ c для N ≥ N0

не зависит от N

постоянная

T(N) = 100 ≤ 101 для всех N≥ 1 ⇒ O(1)

Слайд 140

Асимптотическая сложность

сложность O(N2) ⇔ T(N) ≤ c⋅ N2 для N ≥ N0

квадратичная

сортировка

Асимптотическая сложность сложность O(N2) ⇔ T(N) ≤ c⋅ N2 для N ≥
методом выбора:

для N ≥ 0 ⇒ O(N2)

сложность O(N3) ⇔ T(N) ≤ c⋅ N3 для N ≥ N0

кубичная

Слайд 141

Асимптотическая сложность

сложность O(2N)

сложность O(N!)

задачи оптимизации, полный перебор вариантов

Факториал числа N: N !

Асимптотическая сложность сложность O(2N) сложность O(N!) задачи оптимизации, полный перебор вариантов Факториал
= 1 ⋅ 2 ⋅ 3 … ⋅ N

N = 100,
1 млрд оп/с

Слайд 142

Асимптотическая сложность

Алгоритм относится к классу O( f(N) ), если найдется такая постоянная

Асимптотическая сложность Алгоритм относится к классу O( f(N) ), если найдется такая
c, что начиная с некоторого N = N0 выполняется условие
T(N) ≤ c⋅ f (N)

это верхняя оценка!

O( N ) ⇒ O( N2 ) ⇒ O( N3 ) ⇒ O( 2N )

«Алгоритм имеет сложность O(N2)».

обычно – наиболее точная верхняя оценка!

Слайд 143

Программирование (Python)

§ 23. Как разрабатывают программы

Программирование (Python) § 23. Как разрабатывают программы

Слайд 144

Этапы разработки программ

I. Постановка задачи

Документ: техническое задание.

II. Построение модели

Формализация: запись модели в

Этапы разработки программ I. Постановка задачи Документ: техническое задание. II. Построение модели
виде формул (на формальном языке).

III. Разработка алгоритма и способа хранения данных

«Алгоритмы + структуры данных = программы»
(Н. Вирт)

Слайд 145

Этапы разработки программ

IV. Кодирование

Запись алгоритма на языке программирования.

V. Отладка

Поиск и исправление ошибок

Этапы разработки программ IV. Кодирование Запись алгоритма на языке программирования. V. Отладка
в программах:
синтаксические – нарушение правил языка программирования
логические – ошибки в алгоритме
могут приводить к отказам – аварийным ситуациям во время выполнения (run-time error)

Слайд 146

Этапы разработки программ

VI. Тестирование

Тщательная проверка программы во всех режимах:
альфа-тестирование – внутри компании

Этапы разработки программ VI. Тестирование Тщательная проверка программы во всех режимах: альфа-тестирование
(тестировщики)
бета-тестирование – (доверенные) пользователи

VII. Документирование

Технические писатели

VIII. Внедрение и сопровождение

обучение пользователей
исправление найденных ошибок
техподдержка

Слайд 147

Методы проектирования программ

«Сверху вниз» (последовательное уточнение)

Задача

30-40 строк каждая

Методы проектирования программ «Сверху вниз» (последовательное уточнение) Задача 30-40 строк каждая

Слайд 148

Методы проектирования программ

«Сверху вниз» (последовательное уточнение)

сначала задача решается «в целом»
легко распределить работу
легче

Методы проектирования программ «Сверху вниз» (последовательное уточнение) сначала задача решается «в целом»
отлаживать программу (всегда есть полный работающий вариант)

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

Слайд 149

Методы проектирования программ

«Снизу вверх» (восходящее)

Задача

библиотека функций

Методы проектирования программ «Снизу вверх» (восходящее) Задача библиотека функций

Слайд 150

Методы проектирования программ

«Снизу вверх» (восходящее)

нет дублирования
сразу видно быстродействие

сложно распределять работу
сложнее отлаживать

Методы проектирования программ «Снизу вверх» (восходящее) нет дублирования сразу видно быстродействие сложно
(увеличение числа связей)
плохо видна задача «в целом», может быть нестыковка на последнем этапе

Слайд 151

Отладка программы

from math import sqrt
print("Введите a, b, c: ")
a = float(input())
b =

Отладка программы from math import sqrt print("Введите a, b, c: ") a
float(input())
c = float(input())
D = b*b - 4*a*a
x1 = (-b+sqrt(D))/2*a
x2 = (-b-sqrt(D))/2*a
print("x1=", x1, " x2=", x2, sep="")

Программа решения квадратного уравнения

float – преобразовать в вещественное число

Слайд 152

Тестирование

Тест 1. a = 1, b = 2, c = 1.

x1=-1.0 x2=-1.0

x1=-1.0

Тестирование Тест 1. a = 1, b = 2, c = 1.
x2=-1.0

Реальность:

Тест 2. a = 1, b = – 5, c = 6.

x1=3.0 x2=2.0

x1=4.791 x2=0.209

Ожидание:

Найден вариант, когда программа работает неверно. Ошибка воспроизводится!

Возможные причины:
неверный ввод данных
неверное вычисление дискриминанта
неверное вычисление корней
неверный вывод результатов

Слайд 153

Отладочная печать

a = float(input())
b = float(input())
c = float(input())
print(a, b, c)
D = b*b

Отладочная печать a = float(input()) b = float(input()) c = float(input()) print(a,
- 4*a*a
print("D=", D)
...

print(a, b, c)

print("D=", D)

Идея: выводить все промежуточные результаты.

Слайд 154

Отладочная печать

Введите a, b, c:
1
-5
6
1.0 -5.0 6.0
D= 21.0

Результат:

D= 21.0

Идея: выводить

Отладочная печать Введите a, b, c: 1 -5 6 1.0 -5.0 6.0
все промежуточные результаты.

Слайд 155

Отладка программы

Тест 1. a = 1, b = 2, c = 1.

x1=-1.0

Отладка программы Тест 1. a = 1, b = 2, c =
x2=-1.0

x1=-1.0 x2=-1.0

Реальность:

Тест 2. a = 1, b = – 5, c = 6.

x1=3.0 x2=2.0

Ожидание:

x1=3.0 x2=2.0

Тест 3. a = 8, b = – 6, c = 1.

x1=0.5 x2=0.25

x1=32.0 x2=16.0

x1 = (-b+sqrt(D))/2*a
x2 = (-b-sqrt(D))/2*a

(2*a)

(2*a)

Слайд 156

Документирование программы

назначение программы
формат входных данных
формат выходных данных
примеры использования программы

Назначение: программа для решения

Документирование программы назначение программы формат входных данных формат выходных данных примеры использования
уравнения

Формат входных данных: значения коэффициентов a, b и c вводятся с клавиатуры через пробел в одной строке

Слайд 157

Документирование программы

Формат выходных данных: значения вещественных корней уравнения; если вещественных корней нет,

Документирование программы Формат выходных данных: значения вещественных корней уравнения; если вещественных корней
выводится слово «нет»

Примеры использования программы: 1. Решение уравнения

Введите a, b, c: 1 -5 6
x1=3 x2=2

2. Решение уравнения

Введите a, b, c: 1 1 6
Нет.

Слайд 158

Программирование (Python)

§ 24. Процедуры

Программирование (Python) § 24. Процедуры

Слайд 159

Два типа подпрограмм

Процедуры

Функции

Подпрограммы

выполняют действия

+ возвращают некоторый
результат

а) рисует окружность на экране
б)

Два типа подпрограмм Процедуры Функции Подпрограммы выполняют действия + возвращают некоторый результат
определяет площадь круга
в) вычисляет значение синуса угла
г) изменяет режим работы программы
д) возводит число x в степень y
е) включает двигатель автомобиля
ж) проверяет оставшееся количество бензина в баке
з) измеряет высоту полёта самолёта

Слайд 160

Простая процедура

...
printLine()
...

какие-то операторы

def printLine():
print("----------")

вызов процедуры

можно вызывать сколько угодно раз
нет дублирования кода
изменять

Простая процедура ... printLine() ... какие-то операторы def printLine(): print("----------") вызов процедуры
– в одном месте

define – определить

Слайд 161

Линии разной длины

def printLine5():
print("-----")

def printLine10():
print("----------")

def printLine10():
print("-"*10)

def printLine( n ):

Линии разной длины def printLine5(): print("-----") def printLine10(): print("----------") def printLine10(): print("-"*10)
print("-"*n)

параметр процедуры

Слайд 162

Процедура с параметром

...
printLine(10)
...
printLine(7)
printLine(5)
printLine(3)

def printLine( n ):
...

Параметр – величина, от которой зависит

Процедура с параметром ... printLine(10) ... printLine(7) printLine(5) printLine(3) def printLine( n
работа процедуры.

Слайд 163

Несколько параметров

def printLine(c, n):
print(c*n)

символьная строка

printLine( 5, "+" )

printLine( "+", 5

Несколько параметров def printLine(c, n): print(c*n) символьная строка printLine( 5, "+" )
)

printLine( "+-+", 5 )

Слайд 164

В других языках программирования

Паскаль:

procedure printLine(c: string; n: integer);
var i: integer;
begin
for

В других языках программирования Паскаль: procedure printLine(c: string; n: integer); var i:
i:=1 to n do
write(c);
writeln
end;

Слайд 165

В других языках программирования

С:

void printLine(int n)
{
int i;
for (i=1; i<=n; i++)

В других языках программирования С: void printLine(int n) { int i; for
putchar("-");
putchar("\n");
}

Слайд 166

Как не нужно писать процедуры

def summa():
print(x + y)

x = 10
y =

Как не нужно писать процедуры def summa(): print(x + y) x =
5
summa()

только x + y
не перенести в другую программу

def summa( x, y ):
print(x + y)

x = 10
y = 5
summa( x, y )
summa( 2*x+y, 7 )

Слайд 167

Задачи

«A»: Напишите процедуру, которая принимает параметр – натуральное число N – и

Задачи «A»: Напишите процедуру, которая принимает параметр – натуральное число N –
выводит на экран две линии из N символов "–".
Пример:
Длина цепочки: 7
-------
-------
«B»: Напишите процедуру, которая принимает один параметр – натуральное число N, – и выводит на экран прямоугольник длиной N и высотой 3 символа.
Пример:
Длина прямоугольника: 7
ooooooo
o o
ooooooo

Слайд 168

Задачи

«C»: Напишите процедуру, которая выводит на экран квадрат со стороной N символов.

Задачи «C»: Напишите процедуру, которая выводит на экран квадрат со стороной N
При запуске программы N нужно ввести с клавиатуры.
Пример:
Сторона квадрата: 5
ooooo
o o
o o
o o
ooooo

Слайд 169

Задачи

«D»: Напишите процедуру, которая выводит на экран треугольник со стороной N символов.

Задачи «D»: Напишите процедуру, которая выводит на экран треугольник со стороной N
При запуске программы N нужно ввести с клавиатуры.
Пример:
Сторона: 5
o
oo
ooo
oooo
ooooo

Слайд 170

Рекурсия

Задача. Вывести на экран двоичный код натурального числа.

def printBin( n ):
...

Алгоритм

Рекурсия Задача. Вывести на экран двоичный код натурального числа. def printBin( n
перевода через остатки:

while n!=0:
print(n % 2, end="")
n = n // 2

011

в обратном порядке!

Слайд 171

Рекурсия

Чтобы вывести двоичную запись числа n, нужно сначала вывести двоичную запись числа

Рекурсия Чтобы вывести двоичную запись числа n, нужно сначала вывести двоичную запись
(n // 2), а за- тем — его последнюю двоичную цифру, равную (n % 2).

110

Это и есть рекурсия!

Слайд 172

Рекурсивная процедура

Рекурсивная процедура — это процедура, которая вызывает сама себя.

def printBin( n

Рекурсивная процедура Рекурсивная процедура — это процедура, которая вызывает сама себя. def
):
printBin(n % 2)
print(n % 2, end = "")

вызывает сама себя!

printBin(6)

printBin(3)

printBin(1)

printBin(0)

printBin(0)

бесконечные вызовы

Слайд 173

Рекурсивная процедура

def printBin( n ):
if n == 0: return
printBin(n

Рекурсивная процедура def printBin( n ): if n == 0: return printBin(n
// 2)
print(n % 2, end="")

printBin(6)

printBin(3)

printBin(1)

printBin(0)

if n == 0: return

print(1 % 2)

print(3 % 2)

print(6 % 2)

1

1

0

рекурсия заканчивается!

Слайд 174

Задачи

«A»: Напишите рекурсивную процедуру, которая переводит число в восьмеричную систему.
Пример:
Введите число:

Задачи «A»: Напишите рекурсивную процедуру, которая переводит число в восьмеричную систему. Пример:
66
В восьмеричной: 102
«B»: Напишите рекурсивную процедуру, которая переводит число в любую систему счисления с основанием от 2 до 9.
Пример:
Введите число: 75
Основание: 6
В системе с основанием 6: 203

Слайд 175

Задачи

«С»: Напишите рекурсивную процедуру, которая переводит число в шестнадцатеричную систему.
Пример:
Введите число:

Задачи «С»: Напишите рекурсивную процедуру, которая переводит число в шестнадцатеричную систему. Пример:
123
В шестнадцатеричной: 7B
«D»: Напишите рекурсивную процедуру, которая переводит число в любую систему счисления с основанием от 2 до 36.
Пример:
Введите число: 350
Основание: 20
В системе с основанием 20: HA

Слайд 176

Программирование (Python)

§ 25. Функции

Программирование (Python) § 25. Функции

Слайд 177

Что такое функция?

Функция — это вспомогательный алгоритм, который возвращает результат (число, строку

Что такое функция? Функция — это вспомогательный алгоритм, который возвращает результат (число,
символов и др.).

Задача. Написать функцию, которая вычисляет среднее арифметическое двух целых чисел.

целые

цел

вещ

def Avg(a, b):
return (a+b)/2

Слайд 178

Как вызывать функцию?

Запись результата в переменную:

sr = Avg(5, 8)

x = 2;

Как вызывать функцию? Запись результата в переменную: sr = Avg(5, 8) x
y = 5
sr = Avg(x, 2*y+8)

6.5

10

Вывод на экран:

x = 2; y = 5
sr = Avg(x, y+3)
print( Avg(12,7) ) print( sr + Avg(x,12) )

5

9.5

12

Слайд 179

Как вызывать функцию?

Использование в условных операторах:

a = int(input())
b = int(input())
if Avg(a,b)

Как вызывать функцию? Использование в условных операторах: a = int(input()) b =
> 5:
print("Да!")
else:
print("Нет!");

Слайд 180

Как вызывать функцию?

Использование в циклах:

a = int(input())
b = int(input())
while Avg(a,b)

Как вызывать функцию? Использование в циклах: a = int(input()) b = int(input())
> 0:
print("Нет!")
a,b = map(int, input().split())
print("Угадал!");

ввод двух чисел в одной строчке

Слайд 181

В других языках программирования

Паскаль:

С:

float Avg(int a, int b)
{
return (a+b)/2.0;
}

function Avg(a, b:

В других языках программирования Паскаль: С: float Avg(int a, int b) {
integer): real;
begin
Avg:=(a+b)/2
end.

Avg

Слайд 182

Максимум из двух (трёх) чисел

Задача. Составить функцию, которая определяет наибольшее из двух

Максимум из двух (трёх) чисел Задача. Составить функцию, которая определяет наибольшее из
целых чисел.

def Max(a, b):
if a > b then
return a
else:
return b

цел

цел

def Max3(a, b, c):
return Max( Max(a,b), c )

Слайд 183

Сумма цифр числа

Задача. Составить функцию, которая вычисляет сумму значений цифр натурального числа.

Сумма цифр числа Задача. Составить функцию, которая вычисляет сумму значений цифр натурального

def sumDigits( N ):
sum = 0 # накапливаем сумму с 0
while N!=0:
d = N % 10 # выделим последнюю цифру
sum += d # добавим к сумме
N = N // 10 # удалим последнюю цифру
return sum

Слайд 184

Задачи

«A»: Напишите функцию, которая вычисляет среднее арифметическое пяти целых чисел.
Пример:
Введите 5

Задачи «A»: Напишите функцию, которая вычисляет среднее арифметическое пяти целых чисел. Пример:
чисел: 1 2 3 4 6
Среднее: 3.2
«B»: Напишите функцию, которая находит количество цифр в десятичной записи числа.
Пример:
Введите число: 751
Количество цифр: 3

Слайд 185

Задачи

«С»: Напишите функцию, которая находит количество единиц в двоичной записи числа.
Пример:
Введите

Задачи «С»: Напишите функцию, которая находит количество единиц в двоичной записи числа.
число: 75
Количество единиц: 4

Слайд 186

Логические функции

Логическая функция — это функция, возвращающая логическое значения (да или нет).

можно

Логические функции Логическая функция — это функция, возвращающая логическое значения (да или
ли применять операцию?
успешно ли выполнена операция?
обладают ли данные каким-то свойством?

Слайд 187

Логические функции

def Even( N ):
if N % 2 == 0:
return

Логические функции def Even( N ): if N % 2 == 0:
True
else:
return False

Задача. Составить функцию, которая возвращает «True», если она получила чётное число и «False», если нечётное.

def Even( N ):
return (N % 2 == 0)

Слайд 188

Рекурсивные функции

Рекурсивная функция — это функция, которая вызывает сама себя.

Задача. Составить рекурсивную

Рекурсивные функции Рекурсивная функция — это функция, которая вызывает сама себя. Задача.
функцию, которая вычисляет сумму цифр числа.

Сумму цифр числа N нужно выразить через сумму цифр другого (меньшего) числа.

Сумма цифр числа N равна значению последней цифры плюс сумма цифр числа, полученного отбрасыванием последней цифры.

sumDig(12345) = 5 + sumDig(1234)

Слайд 189

Рекурсивная функция

Вход: натуральное число N.
Шаг 1: d = N % 10
Шаг 2:

Рекурсивная функция Вход: натуральное число N. Шаг 1: d = N %
M = N // 10
Шаг 3: s = сумма цифр числа M
Шаг 4: sum = s + d
Результат: sum.

Сумма цифр числа N

последняя цифра

число без последней цифры

Слайд 190

Сумма цифр числа (рекурсия)

def sumDigRec( N ):
if N == 0: return

Сумма цифр числа (рекурсия) def sumDigRec( N ): if N == 0:
0
else:
d = N % 10
sum = sumDigRec(N // 10)
return sum + d

if N == 0: return 0

Слайд 191

Задачи

«A»: Напишите логическую функцию, которая возвращает значение «истина», если десятичная запись числа

Задачи «A»: Напишите логическую функцию, которая возвращает значение «истина», если десятичная запись
заканчивается на цифру 0 или 1.
Пример:
Введите число: 1230
Ответ: Да
«B»: Напишите логическую функцию, которая возвращает значение «истина», если переданное ей число помещается в 8-битную ячейку памяти.
Пример:
Введите число: 751
Ответ: Нет

Слайд 192

Задачи

«C»: Напишите логическую функцию, которая возвращает значение «истина», если переданное ей число

Задачи «C»: Напишите логическую функцию, которая возвращает значение «истина», если переданное ей
простое (делится только на само себя и на единицу).
Пример:
Введите число: 17
Число простое!
Пример:
Введите число: 18
Число составное!

Слайд 193

Конец фильма

ПОЛЯКОВ Константин Юрьевич
д.т.н., учитель информатики
ГБОУ СОШ № 163, г. Санкт-Петербург
kpolyakov@mail.ru
ЕРЕМИН

Конец фильма ПОЛЯКОВ Константин Юрьевич д.т.н., учитель информатики ГБОУ СОШ № 163,
Евгений Александрович
к.ф.-м.н., доцент кафедры мультимедийной дидактики и ИТО ПГГПУ, г. Пермь
eremin@pspu.ac.ru