Одномерные
массивы.
Массив – это совокупность данных, состоящая из элементов одного типа, каждый
из которых снабжен индексом (номером). По индексу возможен доступ к отдельным
элементам массива – для этого достаточно указать имя массива и номер (индекс)
нужного элемента.
Рассмотрим два вида
массивов: линейный (одномерный) и прямоугольный (двумерный).
1.
Линейный массив.
Элементы этого
массива при записи располагаются в строку или столбец (в линию) и определяются
одним индексом.
Например:
10 12 11 13 23
42 22
Это линейный
массив, элементы которого целые числа; число элементов – 7. Каждый элемент
имеет номер (индекс). Например, элемент 10 имеет индекс 1, а элемент 13 имеет
индекс 4. Такой нумерацией они представляют собой единый, упорядоченный объект
– массив.
Для работы с
массивом в Турбо Паскале, его необходимо описать в разделе описания программы.
Для нашего
примера это выполняется так:
Var a:array[1..7] of integer;
Где а – это
имя массива;
Зарезервированные
слова array и of имеют смысл массив и из;
[1..7] – диапазон индексов массива (в данном случае от 1 до 7);
integer – тип элементов массива (в данном случае – целые числа).
Каждый элемент
массива можно обозначить, например A[2]. Здесь А – имя массива, 2 – индекс элемента массива (его
порядковый номер).
Процесс
решение задач в Паскале с использованием массивов, обычно, состоит из трех
этапов:
1. Ввод значений элементов массива;
2. Обработка элементов массива (поиск, математическая обработка, замена,
вставка, упорядочение и т. п.);
3. Вывод массива.
Разберем, как они
реализуются в Турбо Паскале.
Ø
Ввод значений элементов линейного массива можно
осуществить с помощью цикла for. Например для массива a[1..5] организовать ввод
значений элементов можно так:
For I:=1 to 5 do
Read(a[I]);
Иногда удобно, для
заполнения массива случайными числами, использовать генератор случайных чисел Random. Например:
For I:=1 to 5 do
A[I]:=random(100);
Здесь значение 100
указывает, что эта процедура выдает произвольные целые числа от 0 до 100.
Ø
Вывод массива также осуществляется с помощью цикла for. Например, для массива выше, вывод можно
организовать так:
For I:=1 to 5 do
Writeln(a[i]);
Рассмотрим следующую задачу:
Организовать ввод значений элементов массива а[1..7]
из примера выше (10 12 11 13 23 42 22) и вывести их на экран.
Program masiv;
Var a:array[1..7] of
integer;
I:integer;
Begin
For I:=1 to 7 do
Read(a[I]);
Вывод элементов массива на экран
|
|
For I:=1 to 7 do
Writeln(a[i]);
End.
Ø
Обработка элементов массива.
После ввода значений
элементов массива, они хранятся в памяти ЭВМ. Теперь с ними можно выполнять
различные действия (обработка).
Разберем некоторые
задачи обработки линейных массивов.
Задача1: Составить программу определения суммы всех элементов массива а[1..6],
значения которых произвольные целые числа, вводимые с клавиатуры.
Program summa;
Var a:array[1..6] of
integer;I,s:integer;
Begin
For I:=1 to 6 do
Read(a[I]);
S:=0;
For i:=1 to
6 do
обработка элементов массива
S:=s+a[i];
Writeln(‘Сумма=’,s); и вывод
результата на экран
End.
Программу можно сократить, совместив в
одном цикле ввод и обработку элементов массива:
Program summa;
Var
a:array[1..6] of integer;I,s:integer;
Begin
S:=0;
For I:=1 to 6 do
Begin
Read(a[I]);
S:=s+a[i];
End;
Writeln(‘Сумма=’,s);
End.
Задача2: Дан одномерный массив a[1..6],
значения которого произвольные целые числа, вводимые с клавиатуры. Составьте
программу определения числа положительных элементов массива.
Var a:array[1..6] of
integer;
x,n:integer;
Begin
For x:=1 to 6 do
Begin
Read(a[x]);
If a[x]>0 then
n:=n+1;
End;
Wreteln(‘число
положительных элементов=’,n);
End.
Задача3: Дан одномерный массив a[1..5],
значения которого произвольные целые числа, вводимые с клавиатуры. Составьте
программу определения максимального элемента таблицы.
Program maks1;
Var a:array[1..5] of
integer;
x,m:integer;
Begin
For x:=1 to 5 do
Read(a[x]);
m:=a[1];
For x:=2 to 5 do
If a[x]>m then
m:=a[x];
Writeln(‘максимум=’,m);
End.
Задачи:
1. Дан одномерный массив a[1..7], значения
которого произвольные целые числа, вводимые с клавиатуры. Составьте программу
определения суммы всех положительных элементов массива.
2. Дан одномерный массив a[1..8], значения
которого произвольные целые числа, вводимые с клавиатуры. Найти среднее
арифметическое элементов массива, больших 10.
3. Масса каждого из 25 человек хранится в массиве. Людей, имеющих массу
более 100 кг, будем условно называть полными (известно, что есть по меньшей
мере один такой человек). Определить среднюю массу полных людей и среднюю массу
остальных людей.
4. Рост 22 учеников класса представлен в виде массива. Рост мальчиков
условно задан отрицательными числами. Определить средний рост мальчиков и
средний рост девочек.
5. В массиве хранятся сведения об оценках 25 учеников по химии. Определить
количество неуспевающих по химии учеников.
6. В массиве записаны оценки ученика по 10 предметам. Определить общее
количество четверок и пятерок.
7. Дан одномерный массив a[1..8], значения
которого произвольные целые числа, вводимые с клавиатуры. Вывести на экран
сначала неотрицательные элементы массива, потом отрицательные.
8. Дан одномерный массив a[1..6], значения
которого произвольные целые числа, вводимые с клавиатуры. Вывести на экран
сначала четные элементы массива, потом нечетные.
Упорядочение элементов линейного массива.
Задача: Дан
одномерный массив a[1..5], значения которого
произвольные целые числа, вводимые с клавиатуры. Составьте программу
упорядочения элементов массива в порядке возрастания.
Метод перебора:
Program sort1;
Var a:array[1..5] of
integer;
x,y,k,m:integer;
Begin
For
x:=1 to 5 do
Read(a[x]);
For y:=1 to
4 do
Begin
m:=a[y]; k:=y;
For
x:=y+1 to 5 do
Упорядочение элементов массива
|
|
If a[x]<m then
Begin
m:=a[x]; k:=x;
end;
a[k]:=a[y];
a[y]:=m;
Вывод на экран упорядоченного массива
|
|
end;
for x:=1 to
5 do
write(a[x]:4);
end.
Процесс работы фрагмента этой программы: упорядочения элементов массива
(выше выделено цветом) для массива А[1..5]: 12 10 4 7 11, проследим с
помощью таблицы:
А[1]
|
А[2]
|
А[3]
|
А[4]
|
А[5]
|
y
|
m
|
k
|
х
|
Проверка
условия
|
12
|
10
|
4
|
7
|
11
|
1
|
12
|
1
|
2
|
10<12 (да)
|
|
|
|
|
|
|
10
|
2
|
|
|
|
|
|
|
|
|
|
|
3
|
4<10 (да)
|
|
|
|
|
|
|
4
|
3
|
|
|
|
|
|
|
|
|
|
|
|
7<4 (нет)
|
|
|
|
|
|
|
|
|
4
|
11<4 (нет)
|
4
|
|
12
|
|
|
|
|
|
|
|
|
|
|
|
|
2
|
10
|
2
|
3
|
12<10 (нет)
|
|
|
|
|
|
|
|
|
4
|
7<10 (да)
|
|
|
|
|
|
|
7
|
4
|
5
|
11<7 (нет)
|
|
7
|
|
10
|
|
|
|
|
|
|
|
|
|
|
|
3
|
12
|
3
|
4
|
10<12 (да)
|
|
|
|
|
|
|
10
|
4
|
5
|
11<10 (нет)
|
|
|
10
|
12
|
|
|
|
|
|
|
|
|
|
|
|
4
|
12
|
4
|
5
|
11<12 (да)
|
|
|
|
|
|
|
11
|
5
|
|
|
|
|
|
11
|
12
|
|
|
|
|
|
4
|
7
|
10
|
11
|
12
|
результат
|
Метод пузырька:
Program sort2;
Var a:array[1..5] of
integer;
x,y,s:integer;
Begin
For
x:=1 to 5 do
Read(a[x]);
S:=0;
For y:=1 to
4 do
For x:=y+1
to 5 do
Упорядочение элементов массива
|
|
If a[x]<a[y] then
Begin
S:=a[y];
A[y]:=a[x];
A[x]:=s;
End;
Вывод на экран упорядоченного массива
|
|
for x:=1 to 5 do
write(a[x]:4);
end.
Процесс работы фрагмента этой программы: упорядочения элементов массива
(выше выделено цветом) для массива А[1..5]: 16 3 6 10 9, проследим с
помощью таблицы:
А[1]
|
А[2]
|
А[3]
|
А[4]
|
А[5]
|
y
|
х
|
s
|
Проверка
условия
|
16
|
3
|
6
|
10
|
9
|
1
|
2
|
0
|
3<16 (да)
|
3
|
16
|
|
|
|
|
|
16
|
|
|
|
|
|
|
|
3
|
|
6<3 (нет)
|
|
|
|
|
|
|
4
|
|
10<3 (нет)
|
|
|
|
|
|
|
5
|
|
9<3 (нет)
|
|
|
|
|
|
2
|
3
|
|
6<16 (да)
|
|
6
|
16
|
|
|
|
|
16
|
|
|
|
|
|
|
|
4
|
|
10<6 (нет)
|
|
|
|
|
|
|
5
|
|
9<6 (нет)
|
|
|
|
|
|
3
|
4
|
|
10<16 (да)
|
|
|
10
|
16
|
|
|
|
16
|
|
|
|
|
|
|
|
5
|
|
9<10 (да)
|
|
|
9
|
|
10
|
|
|
10
|
|
|
|
|
|
|
4
|
5
|
|
10<16 (да)
|
|
|
|
10
|
16
|
|
|
16
|
|
3
|
6
|
9
|
10
|
16
|
результат
|
Задание:
Составьте программу упорядочения элементов
массива A[1..4] в порядке убывания. Заполните
таблицу выполнения этой программы с элементами: 23 4 21 5.
Оставьте свой комментарий
Авторизуйтесь, чтобы задавать вопросы.