Similar presentations:
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. Создание массива, используя модуль numpyimport 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.
Часть 18
9
10
11
12
11
13
14
15
16
19
20.
Часть 2i<=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.
3334.
Пример 9. Даны два массива a и b. Переписать из нихэлементы в массив с по следующему правилу: из массива a
квадраты элементов, находящихся в массиве на местах с
четными номерами, из массива b элементы, которые не
больше, чем последний элемент массива a.
Начало
1
Ввод n,
массива a
2
Вывод массива a
3
Ввод m,
массива b
4
Вывод массива b
34
35.
3536.
3637.
# Часть 1c=[ ]
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 = 0for 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 = =1print ( 'максимальный элемент – первый)
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