1.18M
Category: programmingprogramming

Lektsia_Python_massivy_1_0aa578a039685ce0c5920da19aee20d3

1.

Тема 10. Обработка одномерных массивов
1. Общие сведения о массивах
Одномерный
массив

это
упорядоченная
последовательность величин одного типа, имеющих одно
имя, но различающихся индексами.
Индекс – это выражение целого типа, определяющее
положение отдельной величины в последовательности.
В Python индексы элементов массива начинаются с нуля.
Каждая
массива.
отдельная
величина
называется
элементом
1

2.

Свойства элементов массива:
все элементы массива имеют один тип
индексы элементов – это последовательные целые числа от 0
до n-1, где n – количество элементов в массиве
номера элементов – это последовательные целые числа от 1
до n
2

3.

Обращение к элементу массива:
<имя массива> [<индекс>]
x[3] – элемент массива x с индексом 3, ЧЕТВЕРТЫЙ
элемент массива
x[i+2] – элемент массива x с индексом i+2
(i при этом должно иметь значение).
Массив х
1 – 3 4.7
8
6.5
0
Индекс элемента
0
1
2
3
4
5 6
Порядковый номер
элемента
1
2
3
4
5
6
4
7
3

4.

4. Ввод массива
Ввод n
ГСА
n – число элементов в
массиве
i – индекс элемента в
массиве
xi – элемент массива с
индексом i
i=0
Нет
i <= n-1
Да
Ввод xi
i=i+1
4

5.

На языке Python имеется специальная встроенная
структура данных array (массив), предназначенная для
работы с числовыми массивами. Но самый простой способ
создания массива в Python – использование структуры
данных cписок (list).
Массив отличается от списка тем, что его элементы
должны быть одного типа, а в списке могут быть разных
типов.
5

6.

Реализация в Python
Способ 1. Создание массива, как списка.
n=int(input('Количество элементов массива='))
x=[] # Создание пустого списка (массива)
print ('\nВведите элементы массива\n')
for i in range(n):
print ('Введите элемент ', i+1, end=' ')
x.append(float(input(''))) # ввод элемента xi и добавление его в
список
6

7.

Способ 2. Создание массива, используя модуль numpy
import numpy as np
n=int(input('Количество элементов массива='))
x=np.zeros((n)) - создание маccива из нулей размером n
print ('\nВведите элементы массива\n')
for i in range(n):
print ('Введите элемент ', i+1, end=' ')
x[i]=float(input(''))
7

8.

5. Вывод массива
ГСА
8

9.

Реализация в Python:
Способ 1
(вывод по элементам)
print ('\nИсходный массив \n')
for i in range(n):
print (x[i],end=' ')
print('\n')
Способ 2 (вывод списком)
#print ('Исходный массив \n', x)
9

10.

6. Типовые алгоритмы обработки одномерных массивов
6.1 Вычисление суммы и произведения элементов,
находящихся на разных местах в массиве
Вычисление суммы и произведения всех элементов:
S=0
S = S + x[i] для i = 0 .. n-1 (i – индекс элемента)
или
S = S + x[i-1] для i = 1 .. n (i – номер элемента)
P=1
P = P * x[i] для i = 0 .. n-1
или
P = P * x[i-1] для i = 1 .. n
10

11.

Начало
Общая схема алгоритма
1
Ввод n, массива x
2
Вывод массива x
iнач – минимальное
значение номера
элемента массива
iкон – максимальное
значение номера
элемента массива
3
S=0 P=1
4
i = iнач
5
i ≤ iкон
Да
6
S=S+x
+x
i i-1
7
i – шаг изменения
номера (разница
между соседними
номерами)
P=P*xixi-1
8
i=i+∆i
9
Вывод S, Р
10
11
Конец

12.

Пример 1.
Вычислить
сумму квадратов элементов,
находящихся в массиве на
местах
с
номерами,
кратными трем.
нет
S=0
i=3
while i <= n :
S = S + x[i-1]**2
i = i+3
< вывод S >
да
Xi-12
12

13.

Пример 2.
Вычислить
произведение элементов,
находящихся в массиве на
местах с четвертого по
девятое включительно.
4
8
if n < 9 :
< вывод сообщения >
else :
P=1
for i in range (4,10):
P = P * x[i-1]
< вывод Р >
Да
Мало
элементов
3
Нет
n<9
5
P=1
6
i=4
4
Нет
7
i ≤ 9
Да
8
Р = Р * xxi
i-1
9
i=i+1
10
Вывод P
13

14.

6.2. Вычисление суммы,
произведения и
количества элементов,
удовлетворяющих
заданному условию и
находящихся на разных
местах в массиве
Общая схема алгоритма:
14

15.

Пример 3.
Вычислить
количество
элементов,
больших
заданного числа
a и находящихся
в массиве на
местах с четными
номерами.
15

16.

Фрагмент программы
k=0
i=2
k=0
while i <= n:
if x[i-1] > a:
k=k+1
for i in range (2,n+1,2):
if x[i-1] > a:
k=k+1
i=i+2
if k == 0:
print ('Нет элементов на местах с четными
номерами и > a')
else:
print ('Количество элементов на местах с четными
номерами и > a =' ,k)
16

17.

Пример
3.
Вычислить
среднее
арифметическое
положительных элементов массива, находящихся в массиве на
местах с нечетными номерами и произведение элементов,
расположенных вне интервала [a,b).
Графическая схема алгоритма
Таблица используемых переменных
17

18.

Имя
Имя
Тип
перемен переменной
переменно
ной в
в
й
задаче программе
Комментарий
-
n
int
число элементов массива
-
x
list
исходный массив
a
b
a
b
float
float
границы интервала
-
Sr
float
-
P
float
-
i
int
-
S
float
-
K
int
-
m
int
Исходные
данные
среднее арифметическое
положительных элементов на
нечетных местах
Результат
произведение элементов вне
интервала
номер элемента в массиве
сумма положительных
элементов на нечетных местах Вспомогательн
количество положительных
ые переменные
элементов на нечетных местах (промежуточны
й результат)
переключатель для
определения наличия
18
элементов вне интервала

19.

Часть 1
8
9
10
11
12
11
13
14
15
16
19

20.

Часть 2
i<=n
20

21.

Текст программы:
< ввод n, x >
< ввод a, b>
< вывод x>
< вывод a, b>
S=0
K= 0
i=1
while i <= n:
if x[i-1] > 0:
S = S + x[i-1]
K=K+1
i=i+2
21

22.

if K ==0 :
print ('\nНет положительных элементов на местах с
нечетными номерами')
else:
Sr = S/K
print (' \nСреднее арифметическое положительных
элементов на местах с нечетными номерами= %.2f' %Sr)
22

23.

// вторая часть
P=1
m=0
for i in range (1,n+1):
if (x [i-1] < a) or (x [i-1] >= b):
P = P * x [i-1]
m=1
if m == 0:
print ('нет элементов вне интервала')
else:
print ('Произведение элементов вне интервала = %.2f ' %P)
23

24.

Тесты:
Для первой части
1. -1 0 -2 -2 0 4 на местах с нечетными номерами нет положительных
элементов
2. 2 2 4 -6 3
на местах с нечетными номерами все элементы
положительные, среднее арифметическое = (2+4+3)/3= 3
3. 1 2 -1 3 7 5-5 на местах с нечетными номерами часть
элементов положительная, среднее арифметическое = (1+7)/2=4
Для второй части интервал [a, b):
1. [-4, 5)
нет элементов вне интервала
2. [5, 10)
все элементы расположены вне интервала
произведение = 2*2*4*-6*3*0=0
1. [-4,5)
часть элементов расположена вне интервала
произведение = 7*5*-5= -175
24

25.

6.3. Перестановка местами и замена элементов массива
Для перестановки местами двух элементов массива необходима
дополнительная переменная. Т.к. в языке Pathon типизация
динамическая, для этой переменной установится такой же тип,
как и у элементов массива.
Пример 4. Поменять местами второй и четвертый элементы
массива.
p = x[1]
x[1] = x[3]
x[3] = p
25

26.

Пример 5. Поменять местами первый и последний элементы
массива.
p = x[0]
x[0] = x[n-1]
x[n-1] = p
n – количество элементов массива
Пример 6. Заменить положительные элементы массива на
последний элемент массива.
for i in range(n-1):
if x[i] > 0 :
x[i] = x[n-1]
с индексами
for i in range(1, n):
if x[i-1] > 0 :
x[i-1] = x[n-1]
с номерами
26

27.

Пример 7. Поменять местами предпоследний элемент
массива с элементом с заданным номером k.
if (k < 1) or (k > n):
print (' Номер введен неверно ')
elif k = n-1:
print('Обмен не нужен, т.к. …..')
else:
p = x[n-2]
x[n-2] = x[k-1]
x[k-1] = p
<вывод массива x>
заменить предпоследний элемент на элемент с заданным
номером k
x[n-2]= x[k-1]
27

28.

6.4. Поиск минимальных и
максимальных элементов
массива и определение их
номеров
max – максимальный
элемент массива
n_max – номер
максимального
элемента
i_max – индекс
максимального
элемента
i – номер элемента,
который сравнивается с
максимальным
28

29.

Замечания к алгоритму:
1. При поиске минимального элемента
блок 7 должен иметь вид:
Xi-1
2. Для того, чтобы найти номер
последнего из равных максимальных
элементов, блок 7 должен иметь вид:
Тесты:
1. максимальный элемент находится на первом месте в массиве
2. максимальный элемент находится на последнем месте в
массиве
3. максимальный элемент находится в середине массива
4. зависит от конкретных условий задачи
29

30.

Пример 9. Найти минимальный из элементов массива с
номерами, кратными трем, и поменять его местами со
следующим элементом массива.
min = x[2]
i_min = 2
n_min = 3
i=6
while i <= n :
if x[i-1] < min:
min = x[i-1]
i_min =i-1
n_min = i
i=i+3
30

31.

if n_min = =n:
print('минимальный элемент - последний')
else:
p = x[i_min]
x[i_min] = x[i_min+1]
x[i_min+1] = p
<вывод массива х>
Можно поменять без дополнительной переменной
x[i_min] =x [i_min+1]
x[i_min + 1] = min
31

32.

6.5. Формирование новых массивов
Постановка задачи: из исходного массива перенести в
новый массив элементы, удовлетворяющие некоторому
условию, не меняя их взаимного расположения.
Тесты:
1. новый массив не сформирован, т.к. в исходном массиве
нет элементов, удовлетворяющих заданному условию
2. новый массив сформирован из всех элементов исходного
массива, т.к. они все удовлетворяют условию
3. новый массив сформирован из части элементов исходного
массива, удовлетворяющих заданному условию
32

33.

33

34.

Пример 9. Даны два массива a и b. Переписать из них
элементы в массив с по следующему правилу: из массива a
квадраты элементов, находящихся в массиве на местах с
четными номерами, из массива b элементы, которые не
больше, чем последний элемент массива a.
Начало
1
Ввод n,
массива a
2
Вывод массива a
3
Ввод m,
массива b
4
Вывод массива b
34

35.

35

36.

36

37.

# Часть 1
c=[ ]
k=0
i=2
while i <= n :
k=k+1
c.append(a[i-1] **2)
i=i+2
# Часть 2
for i in range(1,m+1):
if b[i-1] <= a[n-1]:
k = k +1
c.append(b[i-1])
# или
k=len(c)
37

38.

if k == 0 :
print ('новый массив не сформирован')
else:
print ('\n Cформированный массив \n')
for i in range(k):
print (c[i],end=' ')
print('\n')
38

39.

Пример 10. Если в массиве больше трех нулей, то
сформировать новый массив из положительных элементов
исходного массива, находящихся в исходном массиве перед
максимальным элементом. Если задание выполнить невозможно,
вывести предупреждающее сообщение.
Тесты:
1. в массиве не больше трех нулей
2. в массиве больше трех нулей
• максимальный элемент расположен на первом месте в
массиве
• перед максимальным
элементов
элементом
нет
положительных
• есть положительные
элементом
элементы
перед
максимальным
• все
элементы
положительные
перед
максимальным
элементом
39

40.

kol = 0
for i in range(1,n+1):
if x[i-1] == 0:
kol = kol +1
if kol <= 3:
print( 'в массиве не больше трех нулей')
else:
max = x[0]
n_max = 1
for i in range(2,n+1):
if x[i-1] > max:
max = x[i-1]
n_max = i
40

41.

if n_max = =1
print ( 'максимальный элемент – первый)
else:
y=[ ]
k=0
for i in range(1, n_max):
if x[i-1] > 0:
k=k+1
y.append(x[i-1])
k=len(y)
if k = =0:
print( 'нет положительных элементов перед максимальным'
else:
<вывод массива y>
41
English     Русский Rules