A = list( range(N) )
Для заполнения массива квадратами этих чисел можно ис-пользовать такой генератор:
A = [ i*i for i in range(N) ]
В конце записи генератора можно добавить условие отбора. В этом случае в массив включаются лишь те из элементов, пе-ребираемых в цикле, которые удовлетворяют этому условию. Например следующий генератор составляет массив из всех чи-сел в диапазоне от 0 до 99, которые делятся на 7:
A = [i for i in range(100)
if i % 7 == 0]
Обратите внимание, что длина этого массива будет меньше 100, и цикл
for i in range(100):
print( A[i] )
приведёт к ошибке – выходу за границы массива.
Вывод массива
Массив – это набор элементов, поэтому во многих языках программирования нельзя вывести массив одной командой. Однако в языке Python такая возможность есть
print( A )
В этом случае весь массив выводится в квадратных скобках, его элементы разделяются запятыми:
A = [1, 2, 3, 4, 5]
print( A ) # [1, 2, 3, 4, 5]
Можно вывести элементы массива на экран по одному, ис-пользуя цикл:
for i in range(len(A)):
print( A[i], end=" " )
81 http://kpolyakov.spb.ru
05.04.2019 Информатика, 8 класс К.Ю. Поляков, Е.А. Еремин
Параметр end определяет, что после вывода каждого элемента
добавляется пробел, а не символ перехода на новую строку.
Удобно записывать такой цикл несколько иначе:
for x in A:
print( x, end=" " )
Здесь не используются переменная-индекс i и функция len, а
просто перебираются все элементы массива. На каждой итера-ции цикла в переменную x заносится значение очередного эле-мента массива (в порядке возрастания индексов). Такой цикл перебора очень удобен, если не нужно изменять значения эле-ментов массива.
В языке Python существует ещё один замечательный способ вывода всех элементов массива через пробел (без скобок):
print( *A )
Знак * перед именем массива означает, что нужно преобразо-вать массив в набор отдельных значений, то есть для массива
A = [1, 2, 3, 4, 5]
эта команда сработает так же, как и
print( 1, 2, 3, 4, 5 )
Ввод массива с клавиатуры
Иногда небольшие массивы вводятся с клавиатуры. В про-стейшем случае мы просто строим цикл, который выполняет оператор ввода отдельно для каждого элемента массива:
for i in range(N):
A[i] = int( input() )
Напомним, что если какую-то из введённых строк не удастся преобразовать в целое число, программа завершится с ошибкой.
Вместо цикла можно использовать генератор, который сразу создаёт массив и заполняет его введёнными числами:
A = [ int(input()) for i in range(N) ]
Здесь при каждом повторении цикла строка, введённая пользо-
вателем, преобразуется в целое число с помощью функции int,
и это число добавляется к массиву.
82 http://kpolyakov.spb.ru
05.04.2019 Информатика, 8 класс К.Ю. Поляков, Е.А. Еремин
При этом пользователь вводит данные «вслепую», то есть программа не подсказывает ему, значение какого элемента вво-дится в данный момент.
Значительно удобнее, если перед вводом появляется сооб-щение с подсказкой:
for i in range(N):
print( "A[{}]=".format(i), end="" ) A[i] = int( input() )
В этом примере перед вводом очередного элемента массива на экран выводится подсказка. Например, при вводе элемента с индексом 3 будет выведено «A[3]=» и курсор (приглашение к вводу) будет мигать справа от знака =.
Заполнение массива случайными числами
Иногда нужно заполнить массив случайными числами (на-пример, определить случайные координаты клеток с призами или препятствиями в игре).
Для работы со случайными (точнее, псевдослучайными)
числами нужно подключить (импортировать) функцию randint из модуля random.
from random import randint
Эта функция генерирует случайное целое число в заданном диапазоне.
Если массив уже создан, для его заполнения случайными числами применим цикл по переменной:
for i in range(N):
A[i] = randint( 20, 100 )
То же самое можно сделать с помощью генератора:
A = [ randint(20,100) for i in range(N)]
Генератор создаёт массив из N элементов и заполняет его слу-чайными целыми числами на отрезке [20; 100].
Запишите фрагмент программы, который заполняет массив из 100 элементов случайными числами
а) на отрезке [100;150]; б) на отрезке [–10;10].
83 http://kpolyakov.spb.ru
05.04.2019 Информатика, 8 класс К.Ю. Поляков, Е.А. Еремин
Массивы в других языках программирования
Заполнение массива первыми N натуральными числами на языках Паскаль и C++ выглядит так:
const N = 10; const int N = 10; var A: array[1..N] of int A[N], i;
integer; for( i = 0; i < N; i++ ) for i:=1 to N do A[i] = i + 1;
A[i] := i;
Массивы (как и переменные) в этих языках нужно объяв-лять, сразу выделяя для них место в памяти. Объявление пе-ременных в Паскале начинается со слова var – это сокращение от английского слова variable.
Размер массива часто вводится через константу (постоян-ную величину) с помощью служебного слова const.
Найдите в дополнительных источниках перевод слов variable, integer, array на русский язык.
В языке Паскаль нумерацию элементов массива можно начать с любого значения, например с 0 или с 1. Чаще всего ис-пользуют привычную для человека нумерацию с единицы.
Почему в программе на языке Паскаль в элемент с A[i] записывается значение i, а в C++ – значение i+1?
Измените программы на языках Паскаль и C++ так, чтобы массив заполнялся теми же числами в обратном порядке.
Выводы:
Массив – это группа переменных одного типа, расположен-ных в памяти друг за другом и имеющих общее имя. Массивы используют для того, чтобы было удобно работать с большим количеством данных.
84 http://kpolyakov.spb.ru
05.04.2019 Информатика, 8 класс К.Ю. Поляков, Е.А. Еремин
Индекс элемента массива – это значение, которое указывает на конкретный элемент массива.
При обращении к элементу массива индекс указывают в квадратных скобках. Это может быть число, имя переменной целого типа или арифметическое выражение, результат ко-торого – целое число.
Для перебора элементов массива удобно использовать цикл по переменной, которая изменяется от минимального до мак-симального значения индекса.
Интеллект-карта
тип имя
размер
A[5]
A[i]
A[2*i-1]
заполнение ввод
индекс
вывод обработка
Рис. 3.8.
Практическая работа №20. Заполнение массивов
Практическая работа №21. Перебор элементов массивов
Вопросы и задания
1. Как вы думаете, почему элементы массива размещают в па-мяти рядом?
2. Объясните разницу между терминами «индекс элемента мас-сива» и «значение элемента массива».
3. Некоторые языки программирования разрешают обращаться к элементам за пределами массива (при этом программа не
85 http://kpolyakov.spb.ru
тип значение
массив
элемент массива
обращение к элементу
перебор элементов
05.04.2019 Информатика, 8 класс К.Ю. Поляков, Е.А. Еремин
завершается аварийно). Обсудите достоинства и недостатки такого решения.
4. Массив из 22 элементов требуется заполнить случайными числами на отрезке [10; 30]. Будут ли в массиве одинаковые элементы? Почему?
Задачи
1. Заполните все элементы массива значением X, введённым с клавиатуры.
2. Заполните массив натуральными числами, начиная со зна-чения X, введённого с клавиатуры.
3. Заполните массив натуральными числами в обратном по-рядке, начиная со значения X, введённого с клавиатуры. По-следний элемент должен быть равен X, предпоследний – X–1 и т.д.
4. Заполните массив степенями числа 2 (от 21 до 2N).
5. *Заполните массив степенями числа 2, начиная с конца, так чтобы последний элемент массива был равен 1, а каждый предыдущий был в 2 раза больше следующего.
6. *С клавиатуры вводится целое число X. Заполните массив, состоящий из нечётного числа элементов, целыми числами, так чтобы средний элемент массива был равен X, слева от не-го элементы стояли по возрастанию, а справа – по убыванию. Соседние элементы отличаются на единицу. Например, при X = 3 массив из 5 элементов заполняется так: 1 2 3 2 1.
7. Заполните массив случайными числами на отрезке [20; 100]. Запустите программу несколько раз, объясните полученные результаты.
8. С клавиатуры вводятся целые значения X и Y (X < Y). Запол-ните массив случайными числами на отрезке [X; Y].
9. Массив введён следующим образом:
A = [1, 2, 3, 4, 5]
При каких значениях x программа завершится аварийно?
86 http://kpolyakov.spb.ru
05.04.2019 Информатика, 8 класс К.Ю. Поляков, Е.А. Еремин
print( A[x+3] ) for i in range(3):
а)
б)
в)
г)
д)
е)
A[i+x] = A[i]
for i in range(x-2):
A[i] = 2*(x-i) for i in range(4):
A[i+1] = A[i] + x
for i in range(x+1,x+6):
A[i] = x*x
for i in range(5):
A[i+2] = x + i
10. Чему будут равны элементы массива
A = [1, 2, 3, 4, 5]
после выполнения цикла? Здесь N = 5 – длина массива.
for i in range(N):
а)
б)
в)
г)
д)
е)
A[i] = A[i]*A[i] for i in range(N-1):
A[i] = A[i+1]
for i in range(N-1):
A[i+1] = A[i]
for i in range(N-1,0,-1):
A[i] = A[i-1]
for i in range(1,N):
A[i] = A[i-1] + 1 for i in range(1,N):
A[i] = A[i-1]*2
11. *Дан фрагмент программы:
j = 1
for i in range(N):
if A[i] == A[j]:
j = i
При каком условии после выполнения этого фрагмента по-лучится j = 0? j = 3? j = N – 1?
12. Введите с клавиатуры значения элементов массива, уве-личьте каждый элемент в 2 раза и выведите полученный массив на экран.
87 http://kpolyakov.spb.ru
05.04.2019 Информатика, 8 класс К.Ю. Поляков, Е.А. Еремин
13. Введите с клавиатуры значения элементов массива и уве-личьте на 5 значения всех элементов массива, кроме перво-го и последнего.
14. В массиве чётное число элементов. Введите с клавиатуры значения элементов массива и выполните две операции:
а) увеличьте на единицу значения всех элементов в первой
половине массива;
б) увеличьте в 2 раза значения всех элементов во второй
половине массива.
15. *Введите с клавиатуры значения элементов массива и най-дите их среднее арифметическое.
88 http://kpolyakov.spb.ru
05.04.2019 Информатика, 8 класс К.Ю. Поляков, Е.А. Еремин
Достарыңызбен бөлісу: |