Файл: 62. Массивы 63. Алгоритмы обработки массивов.pptx

ВУЗ: Не указан

Категория: Не указан

Дисциплина: Не указана

Добавлен: 09.12.2023

Просмотров: 407

Скачиваний: 2

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.

СОДЕРЖАНИЕ

§ 62. Массивы

§ 63. Алгоритмы обработки массивов

§ 64. Сортировка

§ 65. Двоичный поиск

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

§ 67. Матрицы

§ 68. Работа с файлами

§ 62. Массивы

Что такое массив?

Что такое массив?

Массивы в Python: списки

Генераторы списков

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

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

Перебор элементов

Подсчёт нужных элементов

Перебор элементов

Перебор элементов

Задачи

Задачи

§ 63. Алгоритмы обработки массивов

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

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

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

Задачи

Задачи

Задачи

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

Задачи

Задачи

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

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

Циклический сдвиг элементов

Срезы в Python

Срезы в Python – отрицательные индексы

Срезы в Python – шаг

Задачи

Задачи

Отбор нужных элементов

Отбор нужных элементов

Задачи

Задачи

Особенности работы со списками

Копирование списков

§ 64. Сортировка

Что такое сортировка?

Метод пузырька (сортировка обменами)

Метод пузырька

Метод пузырька

Метод пузырька

Метод пузырька

Задачи

Задачи

Задачи

Быстрая сортировка (QuickSort)

Быстрая сортировка

Быстрая сортировка

Быстрая сортировка

Быстрая сортировка

Быстрая сортировка

Быстрая сортировка

Быстрая сортировка

Быстрая сортировка

Сортировка в Python

Сортировка в Python – на месте

Задачи

Задачи

Задачи

§ 65. Двоичный поиск

Двоичный поиск

Двоичный поиск

Двоичный поиск

Двоичный поиск

Задачи

Задачи

Задачи

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

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

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

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

Задачи

Задачи

Задачи

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

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

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

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

Стандартные функции

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

Пример обработки строк

Пример обработки строк

Пример обработки строк

Задачи

Задачи

Задачи

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

Задачи

Задачи

Задачи

Строки в процедурах и функциях

Задачи

Задачи

Задачи

Рекурсивный перебор

Рекурсивный перебор

Рекурсивный перебор

Задачи

Задачи

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

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

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

Вывод матриц

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

Задачи

Задачи

Задачи

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

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

Выделение строк и столбцов

Задачи

Задачи

§ 68. Работа с файлами

Как работать с файлами?

Принцип сэндвича

Ввод данных

Вывод данных в файл

Задачи

Обработка массивов

Обработка массивов

Обработка массивов

Задачи

Обработка строк

Чтение данных из файла

Обработка строк

Обработка строк

Задачи

Задачи

Конец фильма

Источники иллюстраций

s все вхождения слова-образца wOld на слово-замену wNew.

пока слово wOld есть в строке s

удалить слово wOld из строки

вставить на это место слово wNew

Что плохо?

?

wOld: "12"

wNew: "A12B"

зацикливание



s

res

б)

wNew

s

res

в)

s

res

г)

wOld

res

s

а)

wNew



рабочая строка s

результат res

"12.12.12"

""

".12.12"

"A12B"

".12"

"A12B.A12B"

""

"A12B.A12B.A12B"

s = "12.12.12"

s = replaceAll ( s, "12", "A12B" )

print( s )



def replaceAll ( s, wOld, wNew ):

lenOld = len(wOld)

res = ""

while len(s) > 0:

p = s.find ( wOld )

if p < 0:

res = res + s

return

if p > 0: res = res + s[:p]

res = res + wNew

if p+lenOld >= len(s):

s = ""

else:

s = s[p+lenOld:]

return res

добавить слово-замену

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

взять «хвост»

взять начало перед образцом

искать образец

если не нашли



s = "12.12.12"

s = s.replace( "12", "A12B" )

print ( s )

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

Задачи




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

Пример:

Введите строку: Однажды в студёную зимнюю пору...

Первое слово: Однажды

Задачи




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

Пример:

Введите имя файла: qq

Введите новое расширение: tmp

Результат: qq.tmp

Пример:

Введите имя файла: qq.exe

Введите новое расширение: tmp

Результат: qq.tmp

Пример:

Введите имя файла: qq.work.xml

Введите новое расширение: tmp

Результат: qq.work.tmp

Задачи




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

Пример:

Введите строку:

В MMXIII году в школе CXXIII состоялся очередной выпуск XI классов.

Результат:

В 2013 году в школе 123 состоялся очередной выпуск 11 классов.

Рекурсивный перебор




Задача. В алфавите языка племени «тумба-юмба» четыре буквы: «Ы», «Ш», «Ч» и «О». Нужно вывести на экран все слова, состоящие из L букв, которые можно построить из букв этого алфавита.

Ы

?

?

?

перебор L-1 символов

Ш

?

?

?

Ч

?

?

?

0

?

?

?

задача для слов длины К сведена к задаче для слов длины L-1!

Рекурсивный перебор




перебор L символов

w[0]="Ы"

# перебор последних L-1 символов

w[0]="Ш"

# перебор последних L-1 символов

w[0]="Ч"

# перебор последних L-1 символов

w[0]="О"

# перебор последних L-1 символов

Рекурсивный перебор




# основная программа

TumbaWords ( "ЫШЧО", "", 3 );

def TumbaWords ( A, w, L ):

if len(w) == L:

print ( w )

return

for c in A:

TumbaWords ( A, w + c, L )

нужная длина слова

слово полной длины

по всем символам алфавита

алфавит

слово

Задачи




«A»: В алфавите языке племени «тумба-юмба» четыре буквы: «Ы», «Ш», «Ч» и «О». Нужно вывести на экран все возможные слова, состоящие из K букв, в которых вторая буква «Ы». Подсчитайте количество таких слов.



«B»: В алфавите языке племени «тумба-юмба» четыре буквы: «Ы», «Ш», «Ч» и «О». Нужно вывести на экран все возможные слова, состоящие из K букв, в которых есть по крайней мере две одинаковые буквы, стоящие рядом. Подсчитайте количество таких слов. Программа не должна строить другие слова, не соответствующие условию.

Задачи




«C»: В алфавите языке племени «тумба-юмба» четыре буквы: «Ы», «Ш», «Ч» и «О». Нужно вывести на экран все возможные слова, состоящие из K букв, в которых есть по крайней мере две одинаковые буквы, не обязательно стоящие рядом. Программа не должна строить другие слова, не соответствующие условию.

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




пар

парк

Пар

?

?

Сравнение по кодам символов:

A

B

...

Y

Z

CP-1251

65

66

...

89

90

UNCODE

65

66

...

89

90

a

b

...

y

z

CP-1251

97

98

...

121

122

UNCODE

97

98

...

121

122

0

1

...

8

9

CP-1251

48

49

...

56

57

UNCODE

48

49

...

56

57

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




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

[-1, 0, 1],

[0, 1, -1]]

Матрица – это список списков!

!

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

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

или так:

Нумерация элементов с нуля!

!

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




N = 3

M = 2

row = [0]*M

A = [row]*N

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

0

1

2

0

0

row

A

A[0][0] = 1

1

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

A = []

for i in range(N):

A.append ( [0]*M )

0

1

2

0

0

A

A[0][0] = 1

0

0

0

0

1

Вывод матриц




print ( A )

[[1, 2, 3], [4, 5, 6], [7, 8, 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

Зачем форматный вывод?

?

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




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

import random

for i in range(N):

for j in range(M):

A[i][j] = random.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 )

Задачи




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

Пример:

Матрица А:

12 14 67 45

32 87 45 63

69 45 14 11

40 12 35 15

Максимальный элемент A[2,2]=87

Минимальный элемент A[3,4]=11

Задачи




«B»: Яркости пикселей рисунка закодированы числами от 0 до 255 в виде матрицы. Преобразовать рисунок в черно-белый по следующему алгоритму:
  • вычислить среднюю яркость пикселей по всему рисунку
  • все пиксели, яркость которых меньше средней, сделать черными (записать код 0), а остальные – белыми (код 255)

  • Пример:

    Матрица А:

    12 14 67 45

    32 87 45 63

    69 45 14 11

    40 12 35 15

    Средняя яркость 37.88

    Результат:

    0 0 255 255

    0 255 255 255

    255 255 0 0

    255 0 0 0

Задачи




«С»: Заполните матрицу, содержащую N строк и M столбцов, натуральными числами по спирали и змейкой, как на рисунках:

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




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

for i in range(N):

# работаем с  A[i][i]

Побочная диагональ:

for i in range(N):

# работаем с  A[i][N-1-i]

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

for i in range(N):

for j in range( i+1 ):

# работаем с  A[i][j]

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




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

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

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

for i in range(N):

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

0

1

2

3

4

Выделение строк и столбцов




1-я строка:

R = A[1][:]

2-й столбец:

C = []

for row in A:

C.append(row[2])

R = A[i]

или так:

C = [ row[2] for row in A ]

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

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

Задачи




«A»: Напишите программу, которая заполняет квадратную матрицу случайными числами в интервале [10,99], а затем записывает нули во все элементы выше главной диагонали. Алгоритм не должен изменяться при изменении размеров матрицы.

Пример:

Матрица А:

12 14 67 45

32 87 45 63

69 45 14 30

40 12 35 65

Результат:

12 0 0 0

32 87 0 0

69 45 14 0

40 12 35 65

Задачи




«B»: Пиксели рисунка закодированы числами (обозначающими цвет) в виде матрицы, содержащей N строк и M столбцов. Выполните отражение рисунка сверху вниз:

1

2

3

4

5

6

7

8

9

7

8

9

4

5

6

1

2

3