§ 22. Алгоритмы обработки массивов
Ключевые слова:
сумма элементов массива максимальный элемент подсчёт элементов![](data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAHMAAACZCAYAAAAcnAUCAAAACXBIWXMAAA7EAAAOxQGMMD9aAAACR0lEQVR4nO3Y7WqrQBRA0V7o+79yL4EIIaTpxI9Et2v/TlRcnFHn+0uZvj99AVovmKFghoIZCmYomKFghoIZCmYomKFghoIZCmYomKFghoIZCmYomKFghoIZCmYomKFghoIZCmYomKFghoIZCmYomKFghoIZCmYomKFghoIZCmYomKFghoIZCmYomKFghoIZCmYomKFghoIZCmYomKFghoIZCmYomKFghoIZCmYomKFghoIZCmYomKFghoIZCmYomKFghoIZ6h2YP4O/+7fpVZygrTBHAX/7D9gZrYk5B3DkWGAHWwtzTchHxwY60FLMLREfnQfqk5Zgvgvy/pxAf2ku5icgb88N9EFzMD8JOQX0Qa9i7gFyCuhdr2DuCXIK6E2F7Tyg10Yx9ziVumsE8wiQpvOrsczq2l+YR5jKqdNPp8kMBTMUzFDPMI/0vJw69XPTZIaCGQpmKJihYIaCGQpmKJihnmFePr6PtnFw2g2DSyYzFMxQf2Eecak9baXJPPXz8lIJ8/SNYB5hqT39VF4ancwjgJ6+wjJrKq+9grnH6QR506uTuSdQkHfNWWb3AAryQXOfmZ8EBflLS16APgEK8klL32anm7s1KsSB1vo02XJKQQ625nfm7U1fCgtwRlttGsyBBbiwd+wAQXpThe08XYMZCmYomKFghoIZCmYomKFghoIZCmYomKFghoIZCmYomKFghoIZCmYomKFghoIZCmYomKFghoIZCmYomKFghoIZCmYomKFghoIZCmYomKFghoIZ6j+plipmlOWnDwAAAABJRU5ErkJggg==) ![](data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAHMAAACZCAYAAAAcnAUCAAAACXBIWXMAAA7EAAAOxQGMMD9aAAACR0lEQVR4nO3Y7WqrQBRA0V7o+79yL4EIIaTpxI9Et2v/TlRcnFHn+0uZvj99AVovmKFghoIZCmYomKFghoIZCmYomKFghoIZCmYomKFghoIZCmYomKFghoIZCmYomKFghoIZCmYomKFghoIZCmYomKFghoIZCmYomKFghoIZCmYomKFghoIZCmYomKFghoIZCmYomKFghoIZCmYomKFghoIZCmYomKFghoIZCmYomKFghoIZCmYomKFghoIZCmYomKFghoIZ6h2YP4O/+7fpVZygrTBHAX/7D9gZrYk5B3DkWGAHWwtzTchHxwY60FLMLREfnQfqk5Zgvgvy/pxAf2ku5icgb88N9EFzMD8JOQX0Qa9i7gFyCuhdr2DuCXIK6E2F7Tyg10Yx9ziVumsE8wiQpvOrsczq2l+YR5jKqdNPp8kMBTMUzFDPMI/0vJw69XPTZIaCGQpmKJihYIaCGQpmKJihnmFePr6PtnFw2g2DSyYzFMxQf2Eecak9baXJPPXz8lIJ8/SNYB5hqT39VF4ancwjgJ6+wjJrKq+9grnH6QR506uTuSdQkHfNWWb3AAryQXOfmZ8EBflLS16APgEK8klL32anm7s1KsSB1vo02XJKQQ625nfm7U1fCgtwRlttGsyBBbiwd+wAQXpThe08XYMZCmYomKFghoIZCmYomKFghoIZCmYomKFghoIZCmYomKFghoIZCmYomKFghoIZCmYomKFghoIZCmYomKFghoIZCmYomKFghoIZCmYomKFghoIZ6j+plipmlOWnDwAAAABJRU5ErkJggg==)
Сумма элементов массива
Представьте себе, что в массиве записаны зарплаты со-трудников фирмы, и требуется найти общую сумму, которая бу-дет им выплачена. Для этого нужно сложить все числа, которые находятся в массиве.
Для того чтобы накапливать сумму, нужно ввести пере-менную, назовём её summa.
Какое начальное значение нужно записать в переменную summa?
В программе есть переменные summa и x. Запишите оператор, с помощью которого можно добавить значение x к значению summa.
Для решения задачи нужно выполнить перебор элементов массива в цикле. На каждом шаге цикла к значению summa до-бавляется значение очередного элемента массива.
Будем считать, что массив уже заполнен. Тогда сумму его элементов можно найти так:
summa = 0
for i in range(N):
summa += A[i] print(summa)
Покажем, как работает этот алгоритм для массива A:
0 1 2 3 4
5 2 8 3 1
A
Рис. 3.9.
89 http://kpolyakov.spb.ru![](data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAgGBgcGBQgHBwcJCQgKDBQNDAsLDBkSEw8UHRofHh0aHBwgJC4nICIsIxwcKDcpLDAxNDQ0Hyc5PTgyPC4zNDL/2wBDAQkJCQwLDBgNDRgyIRwhMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjL/wAARCAA2ADYDASIAAhEBAxEB/8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAAAgEDAwIEAwUFBAQAAAF9AQIDAAQRBRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkKFhcYGRolJicoKSo0NTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uHi4+Tl5ufo6erx8vP09fb3+Pn6/8QAHwEAAwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoL/8QAtREAAgECBAQDBAcFBAQAAQJ3AAECAxEEBSExBhJBUQdhcRMiMoEIFEKRobHBCSMzUvAVYnLRChYkNOEl8RcYGRomJygpKjU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6goOEhYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3uLm6wsPExcbHyMnK0tPU1dbX2Nna4uPk5ebn6Onq8vP09fb3+Pn6/9oADAMBAAIRAxEAPwD2bXPEFpoUCSXAZnkyEjQZJx1/DkVhf8LHsv8AnxuPzX/Gs/4kf8flj/1zb+YriOpr3MFl9GpRU57s+VzLN8RRxMqdPZHo/wDwsey/58bj81/xo/4WRZf8+Nx+a/415xxToopJ5liiQvI5wFXnP4V1PLMMldpnCs7xrdk9fQ9E/wCFj2P/AD43H5r/AI0q/EexP3rK5x6jaf61iWGnpZ3MWmW9lbX+pOQ1y0wDxwL6ex9/w5qv4n0SztZJLnTJVeGOQR3ESnPkueR+B6ex49hyRw+ElU5LPXZ3O+eMzCNL2nMnbfT+vmem2N7BqNnHd27BopBlT/nvRWJ4F58LQ56eY/8AM0V5FeKp1JQXRn0eFqe2oxqSWrSMD4k/8ftj/wBc2/mK4eu4+JP/AB+2H/XNv5iuJjjeaRIo0Z3Y4VVGSSegAr6bL3bDRbPh83TeNml/WgsUUk8yxRIzu5CqqjJJPQCut0/TZrCcafp4WTWJV/fz9VtUPYH+9/kUunaXNp062Nmqya1KuZJeClmh9/7xH8+OvOiWFkkmiaJIBNgtf6g5/wBX65Pr14zx+ZHNicT7R8sdv619PzOzBYNUlz1N/wCtF59+w12WxR9D0Nx5wG6+v2P+r9ST69e/H1yRzWq6lbrbf2VpY/0NTukmYfNcP6n0GaNV1aEW40vSwUsUOXc/enbuzH09B9PYDF71thcN9uf9ev6Loc+Nxt706e39aL9X1PV/Af8AyK8X/XR/50UeA/8AkV4v+uj/AM6K8DFfx5+rPrsB/utP0Rz/AMSf+Pyx/wCubfzFZ3hx7SwsZb+dzFNNL9miuNobyCVJLAHr2H+TWj8SP+P2w/65t/MVk2Wv2Nv4fXS59M+1AuXctJsGc8EEAkHGB2r2KUZSwcYxTeup83iZQhmM5zdrd/RHTyQmwQ6TpTlDInnXmpSH7qnPOe5POOePzI5LVtWgMH9maUpjsFOXfPzTt/eY9cen/wCoCPU/EM+oWcNjHEtvZRAAQo5bOOmSeSB2H/1sZHIrbC4Rx96p/Xr/AFocuNzBT9yjt3/Rf1qJRRRXonjnrHgP/kV4v+uj/wA6KTwLx4Whz/z0f+dFfIYr+PP1Z+jYD/dqfoi/regWmvW6Jc7lZDlJExuXP1HQ8Zrnz8ObL/n9uPyX/Ciiijia1ONoysRicHQqz5pxTY7/AIVvZf8AP9cfkv8AhR/wriy/5/rj8l/wooq/r2I/nM/7Lwn/AD7Qf8K3sv8An+uPyX/ChfhxYBgWvbllHb5Rn9KKKf13EfzMP7Mwn/PtHV2VnDp9pHbW6bY0GFFFFFcUm27s9OEYqKSR/9k=)
05.04.2019 Информатика, 8 класс К.Ю. Поляков, Е.А. Еремин
Выполним трассировку («ручную прокрутку») программы. За-пишем в таблице выполняемые команды (операторы) и измене-ние всех переменных (сам массив A при этом не меняется):
1 2 3 4 5 6 7 8 9
10 11
Фоном выделены команды, которые выполняются автома-тически в цикле по переменной: в строке 2 переменной i при-сваивается начальное значение, а в строках 4, 6, 8 и 10 после очередного выполнения цикла значение этой переменной уве-личивается на единицу.
Поскольку массив A не изменяется, сложить все его элемен-ты удобно с помощью такого цикла:
summa = 0 for x in A:
summa += x print( summa )
Заметим, что при этом не нужно хранить размер массива в пе-ременной.
В языке Python есть встроенная функция sum, которая сразу
считает сумму элементов массива, так что задача решается в одну строку:
print( sum(A) )
Для массива на Рис. 3.9 выполните ручную прокрутку программы и определите, какое значение будет выведено:
90 http://kpolyakov.spb.ru
Оператор
|
i
|
summa
|
summa = 0
|
|
0
|
i = 0
|
0
|
|
summa += A[0]
|
|
5
|
i += 1
|
1
|
|
summa += A[1]
|
|
7
|
i += 1
|
2
|
|
summa += A[2]
|
|
15
|
i += 1
|
3
|
|
summa += A[3]
|
|
18
|
i += 1
|
4
|
|
summa += A[4]
|
|
19
|
05.04.2019 Информатика, 8 класс К.Ю. Поляков, Е.А. Еремин
summa = 0 for x in A:
if x % 2 == 0:
summa += x print( summa )
Измените условие отбора в программе из предыдущего задания, так чтобы при обработке массива на Рис. 3.9 в переменной summa получилось число 13.
Напишите фрагмент программы, с помощью которых можно найти в переменной p
а) произведение всех элементов массива;
б) произведение положительных элементов массива. Подумайте, какое должно быть начальное значение переменной p и как она должна изменяться на каждом шаге цикла.
Достарыңызбен бөлісу: |