Если несколько массивов имеют одинаковый тип индексов и одинаковый базовый тип, то можно при описании объединить массивы в один список. Например
Var
a, b, c: mas;
Такой записью мы объявили три массива вещественных чисел a, b, c, каждый из которых содержит по 50 элементов:
A[1], А[2], ... A[50],_
В[1], В[2], ... В[50],
С[1], С[2], ... С[50].
Представим себе массив в виде набора ячеек памяти, размер которых зависит от значений, содержащихся в массиве. Общий размер памяти, отводимой компьютером для хранения переменной такого типа данных можно определить следующим образом:
Общий объем = количество ячеек памяти * объем одной ячейки
Например, если возьмем переменную
Var
M : digit;
то объем памяти, выделенный под хранение переменной m будет равен 10 байтам и выглядеть это будет приблизительно так:
Индекс элемента | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |
m | 2 | * | 4 | = | в | о | с | е | м | ь |
m[4] – элемент массива m, находящийся в ячейке с индексом 4 и равный символу ‘в’
Примечание. Не путайте понятия "индекс" и "тип индекса". Тип индекса используется только в разделе описания массива, а индекс указывается в разделе операторов для обозначения конкретных элементов массива. В качестве индекса может быть выражение, частным случаем которого является константа или переменная.
Над элементами массива можно производить те же операции, которые допустимы для данных его базового типа.
Способы задания одномерных массивов
Для ввода и вывода числовых значений массива используются циклы.
Рассмотрим процедуры, которые бы формировали одномерный массив двумя способами
1) случайным образом,
2) вводом элементов с клавиатуры
Предположим, что мы будем работать с массивом целых чисел. Пусть нам достаточно иметь максимальное количество элементов равное 50. Процедура принимает параметр по ссылке массив Massiv заданного типа и целую переменную n, отвечающую за количество заполняемых ячеек массива. Также нам нужна будет локальная переменная i, которая будет выполнять функции параметра цикла и использоваться для указания номера, определяющего местоположение элемента в массиве.
1. Формирование одномерного массива случайным образом. Зададим значение каждого элемента результатом случайной функции Random(10). Заполнение массива зададим циклическим оператором for, в теле которого выполняется вычисление случайного числа функцией Random(10), после чего это значение присваивается очередному i-му элементу массива.
Procedure InsertMas1(Var massiv:mas; n:integer);
Var
i: integer;
Begin
Randomize;
for i:=1 to n do
massiv[i] := Random(10);
End;
2. Формирование одномерного массива вводом элементов с клавиатуры.
Procedure InsertMas2(Var massiv:mas; n:integer);
Var
i: integer;
Begin
for i:=1 to n do
begin
write('Введите ',i,'-ый элемент массива ');
readln(massiv[i]);
end;
End;
Вывод массива на экран осуществляется следующим образом:
Procedure PrintMas(massiv:mas; n:integer);
Var
i: integer;
Begin
for i:=1 to n
Write(Massiv[i]:5);
End;
Задание. Составьте программу-шаблон, в которой содержались бы два возможных варианта ввода элементов массива, оформленных в виде процедур, и одна процедура вывода полученного массива на экран. Результат работы покажите учителю для оценки.
Теперь проверьте себя, попробовав ответить на вопросы:
1. Что понимается под массивом?
2. Как обозначить в программе элементы массива?
3. Какие операции разрешены над элементами массива?
4. Как организовать в программе ввод и вывод элементов массива?
5. Приведите примеры, где можно использовать массивы.
6. Какие из приведенных описаний одномерных массивов являются правильными и почему?
a) Var a: Array[1..20] of Integer;
b) Type Myarrray: Array[1..20]
Var b: Myarrray;
c) Var sd:Array[1..n] of Integer;
d) Var dd:Array[1] of integer;
7. Сколько элементов в каждом из следующих массивов
a) Var mb: Array[2..20] of Integer;
b) Type myarray1[2..20] of Integer;
myarray2[-5..5] of Integer;
Var aa: myarray1;
bb: myarray2;
Дополнительное задание. (на усмотрение учителя)
1. Организуйте ввод в массив и выдайте на экран следующие последовательности:
а) 1, 3, 5, 7, ..., 131
б) список учеников вашего класса
2. Организуйте ввод чисел в массив с клавиатуры, а вывод элементов массива в столбик. Ввод и вывод организуйте в процедурах.
3. Дан произвольный массив N элементов. Организуйте вывод элементов массива на экран начиная с последнего элемента.
Занятие 2. Доступ к элементам массива
Рассмотрите предложенные ниже фрагменты программ для решения некоторых типичных задач.
Изменение значения некоторых элементов
Задача. Заменить отрицательные элементы на противоположные по знаку.
Для этого опишем процедуру. Ей будем передавать один параметр – массив, который будет результатом ее выполнения, так как некоторые элементы могут быть заменены.
Procedure Zamena (Var m : MyArray; n:integer);
Var
i : integer;
Begin
for i := 1 to n do
if m[i] < 0
then
m[i] := -1*m[i];
End;
Нахождение номеров элементов с заданным свойством
Задача. Найти и вывести на экран номера четных элементов.
Для решения задачи необходимо просмотреть весь массив, и если просматриваемый элемент является четным, то выводить его номер. Опишем процедуру, которой передается данный массив и выводятся нужные номера.
Procedure PoiskChet(m : MyArray; n:integer);
Var
i : integer;
Begin
for i := 1 to n do
if m[i] mod 2 =0
then
Write(i:5);
End;
Нахождение количества элементов с заданным свойством
Задача. Найти количество положительных и отрицательных элементов в данном массиве.
Опишем процедуру, которой будем отправлять три параметра – массив и два счетчика, один для элементов, больших нуля, а второй – для отрицательных элементов.
Procedure OtrPol(m : MyArray; ; n:integer; Var k1,k2 : Integer);
Var
i : integer;
Begin
k1 :=0;
k2 :=0;
for i := 1 to n do
if m[i] > 0
then
Inc(k1)
else
if m[i] < 0
then
Inc(k2);
End;
Есть ли в данном массиве элементы с данным свойством?
Для решения таких задач удобнее использовать циклы с условиями и составлять функции, результат которых имеет логический тип.
Задача. Есть ли отрицательный элемент в массиве?
Начинаем с первого элемента (i=1). пока не просмотрен последний элемент (i<=n) и не найден отрицательный (m[i]>=0), будем переходить к следующему (Inc(i)). Таким образом, мы закончим просмотр массива в одном из двух случаев: первый – просмотрели все элементы и не нашли отрицательный, тогда i>n, второй – нашли нужный, при этом i<=n. Опишем функцию, значение которой истина (True), если такой элемент есть, и ложь (False), если его нет.
Function Control (m : MyArray; n:integer) : Boolean;
Var
i : integer;
Begin
i := 1;
while (i<=n) and (m[i]>0) do
Inc(i);
Control := (i<=n);
End;
Задание. Выберите с учителем задачи для самостоятельного решения.
1. Дан одномерный массив. Найдите разность наибольшего и наименьшего чисел в этом массиве.
2. Даны два одномерных массива А и В. Подсчитайте количество тех i, для которых:
а) А[i] < B[i]
б) A[i] = B[i];
в) A[i] > B[i]
3. Составьте программу определения количества элементов массива, больших среднего арифметического всех его элементов.
4. Дан одномерный массив. Подсчитайте, сколько раз встречается в этой таблице максимальное по величине число.
5. Дан одномерный целочисленный массив. Составьте программу определения значения наибольшего элемента этого массива.
6. Дан одномерный целочисленный массив. Составьте программу определения индекса(-ов) минимального элемента массива.
7. Составьте программу, проверяющую упорядочены ли элементы одномерного массива по возрастанию.
8. Дан одномерный массив чисел. Определите сумму его элементов.
9. Дан одномерный массив чисел. Измените знаки всех его элементов на противоположные.
10. Дан одномерный массив чисел. Подсчитайте, сколько раз в нем встречается число 1.
11. Дан одномерный массив чисел. Подсчитать в нем количество элементов равных нулю, отрицательных элементов и положительных элементов.
12. В массиве А (m, n) найдите количество всех чисел, по модулю меньших заданного Т.
Занятие 3. Удаление элементов из одномерного массива.
Задача. Удалить из массива максимальный элемент, если все элементы разные.
Для того, чтобы решить задачу нужно:
· найти номер максимального элемента k;
· сдвинуть все элементы, начиная с k-го, на один элемент влево;
· последнему элементу присвоить значение 0;
· уменьшить количество элементов массива на единицу.
Рассмотрим задачу на конкретном примере. Пусть дан одномерный массив из целых чисел, состоящий из 10 элементов:
6, 3, 4, 7, 11, 2, 13, 8, 1, 5.
Номер максимального элемента равен 7 (k=7), то есть, начиная с 7-го элемента, будем сдвигать элементы на один влево: 7-му присвоим значение 8-го, 8-му присвоим значение 9-го, 9-му присвоим значение 10-го, на этом сдвиг заканчивается. Таким образом, сдвиг начинается с k-го элемента и идет по (n-1)-й (где n – количество элементов в массиве). После этого последнему элементу присвоим значение, равное 0, и тогда массив будет следующим:
6, 3, 4, 7, 11, 2, 8, 1, 5, 0.
Примечание. При удалении элемента размерность массива не изменяется.
Составим программу, удаляющую максимальный элемент из одномерного массива. В программе опустим уже знакомые Вам процедуры заполнения массива и вывода элементов массива на экран. Чтобы последний элемент не выводился, модифицируйте соответствующую процедуру таким образом, чтобы ей передавать не только массив, но и количество элементов, которые надо вывести, начиная с первого.
|
Из за большого объема этот материал размещен на нескольких страницах:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 |


