
Программирование в среде Turbo Pascal / Pascal / 6_2
.htmlTurbo Pascal | Глава 6 a:link {TEXT-DECORATION: none} a:visited {TEXT-DECORATION: none} a:active {TEXT-DECORATION: none} a:hover {COLOR: #007EFF;} A.menu:link { Color:#FFFFFF; } A.menu:visited { Color:#EEEEEE; } A.menu:hover { Color:#CCDDFF; } .glow { FILTER: DropShadow(Color=#000000, OffX=1, OffY=1, Positive=1)FILTER: Glow(Strength=1, Color=#454545); } .logot { color:#FFFFFF; }
В в е д е н и е / О г л а в л е н и е / О т а в т о р а
М е н ю
1. Интегрированная среда разработки программ Turbo Pascal 7.0 2. Лексические основы языка Pascal 3. Программирование алгоритмов линейной структуры 4. Алгоритмы и программы ветвящейся структуры 5. Алгоритмы и программы циклической структуры 6. Регулярные типы данных. Массивы 6.1 Понятие регулярного типа
6.2 Работа с массивами
6.2.1 Инициализация элементов массива
6.2.2 Нахождение суммы и произведения массива 6.3 Алгоритмы сортировки массивов
6.3.1 Постановка задачи сортировки и методы её решения
6.3.2 Алгоритмы и программы сортировки
6.3.2.1 Алгоритм сортировки обменами ("пузырьковая" сортировка)
6.3.2.2 Алгоритм сортировки вставками
6.3.2.3 Алгоритм сортировки выбором элемента
6.3.2.4 Алгоритм быстрой сортировки (метод Хоора)
6.3.2.5 Алгоритм пирамиды (метод Уильямса-Флойда) 7. Подпрограммы в Turbo Pascal
Работа с массивами
Поскольку все элементы массива имеют одинаковый тип, то для обработки элементов используют циклические алгоритмы. Наиболее часто применяется цикл с параметром. При этом параметр цикла используется в качестве индекса элемента массива. Порядок вложенности циклов зависит от порядка массива, так для одномерного массива используется один цикл, для двумерного - два, вложенные один в другой и т. д.
Инициализация элементов массива
Поскольку каждый элемент массива имеет свой порядковый номер, то к каждому элементу можно обращаться непосредственно, указывая имя массива и в квадратных скобках порядковый номер элемента.
Для ввода или вывода массива в список ввода или вывода помещается переменная с индексом, а операторы ввода или вывода выполняются в цикле, изменяя при каждой итерации значение индекса.
Инициализация массивов (присвоение начальных значений всем компонентам массивов) осуществляется двумя способами. Первый способ - с использованием типизированных констант, например:
type Mass= Array[1..10] of Real;
const
K: Mass= ( 0, 2.1, 4, 5.65, 6.1, 6.7, 7.2, 8, 8.7, 9.3 );
При инициализации двумерных массивов значения компонент каждого из входящих в него одномерных массивов записывается в скобках:
type Mass3x2= Array[1..3,1..2] of Integer;
const
L: Mass3x2= ( (1, 2)
(3, 4)
(5, 6) );
Второй способ инициализации - использование разновидности процедуры FillChar:
FillChar( var V; NBytes: Word; B: {Byte|Char} );
Эта процедура заполняет участок памяти однобайтовым значением. Например, для обнуления массива A[1..10] of Real можно записать:
FillChar(A, 40, 0); или FillChar(A, SizeOf(A), 0);
Пример 6.1 Ввод элементов одномерного массива с клавиатуры
A:array [1..10] of Integer.
For i:=1 to 10 do
begin
Write('Введите A[', i,']');
Read(A[i])
end;
Если необходимо инициализировать массив случайными значениями, то используют генератор случайных чисел.
Randomize;
For i:=1 to 10 do
A[i]:=Random(100);
Процедура Randomize инициализирует встроенный генератор случайных чисел. Функция Random(100) возвращает при каждой итерации случайное число в диапазоне от 0 до значения заданного аргументом (100-1).
Пример 6.2 Ввод элементов двумерного массива
B:array [1..20,1..20] of Real.
For i:=1 to 20 do
For i:=1 to 20 do
begin
Write('Введите B[', i,']');
Read(B[i])
end;
Аналогично показанному выше, можно использовать генератор случайных чисел.
Нахождение суммы и произведения массива
Необходимо найти сумму элементов одномерного массива состоящего из 20 элементов действительного типа.
Пример 6.3. Составим алгоритм и программу нахождения суммы элементов одномерного массива.
Для решения данной задачи необходимо инициализировать нулевым значением переменную, используемую для хранения суммы. Последовательно вводить с клавиатуры значения элементов массива и добавлять их к этой переменной. Для решения задачи будем использовать один цикл с параметром. Ниже приведена блок-схема алгоритма и программа решения задачи.
Program Example_6_1;
var
A:array [1..20] of Real;
S: Real;
I:Integer;
Begin
S:=0;
For I:=1 to 20 do
begin
Write('Введите A[', I,']');
Read(A[I]);
S:=S+A[I]
end;
WriteLn ('Результат суммирования... ',S)
End.
Найти сумму отрицательных элементов одномерного массива состоящего из 100 элементов целого типа, порядковый номер которых кратен трём.
Пример 6.4. Составим алгоритм и программу нахождения суммы элементов одномерного массива.
Для ввода элементов массива используем генератор случайных чисел. В теле цикла введём логический блок решения для определения заданного условия при обработке элементов массива.
Ниже приведена блок-схема алгоритма и программа решения задачи.
Program Example_6_2;
var
A:array [1..100] of Integer;
S,I:Integer;
Begin
Randomize;
S:=0;
For I:=1 to 100 do
begin
A[I]:=Random(100) - Random(50);
f (I mod 3=0) and (A[I]<0) then S:=S+A[I]
end;
WriteLn ('Результат суммирования... ',S)
End.
Нахождение произведения элементов сводится к инициализации единицей переменной, предназначенной для хранения произведения. В теле цикла перебирают элементы массива, сравнивая, в случае необходимости с заданным условием и умножают эту переменную на выбранный элемент массива.
Найти произведение положительных элементов одномерного массива состоящего из 100 элементов целого типа.
Пример 6.5. Составим алгоритм и программу нахождения произведения элементов одномерного массива.
Инициализируем переменную, предназначенную для хранения произведения. Для ввода элементов массива используем генератор случайных чисел. В теле цикла введём логический блок решения для определения заданного условия при обработке элементов массива.
Ниже приведена блок-схема алгоритма и программа решения задачи.
Program Example_6_3;
Var
A:array [1..100] of Integer;
S,I:Integer;
Begin
Randomize;
P:=1;
For I:=1 to 100 do
begin
A[I]:=Random(100) - Random(50);
If A[I]>0 then P:=P*A[I]
end;
WriteLn ('Результат произведения... ',P)
End. Дан двумерный массив, состоящий из элементов целого типа. Размерность массива 20X20. Найти сумму элементов главной и произведение элементов побочной диагоналей.
Пример 6.6. Для определения элемента, лежащего на главной диагонали, вспомним, что у него номер строки равен номеру столбца. Элемент лежащий на побочной диагонали, может быть определён по равенству - I+J= N+1, где I, J - соответственно индексы строки и столбца, а N - порядок матрицы.
Program Example_6_4;
Var
A:array [1..20,1..20] of Integer;
S,P,I,J:Integer;
Begin
Randomize;
P:=1; S:=0;
For I:=1 to 20 do
For J:=1 to 20 do
begin
A[I, J]:=Random(100) - Random(50);
If I=J then S:=S+A[I, J];
If I+J=20 then P:=P*A[I, J];
end;
WriteLn ('Результат произведения... ',P);
WriteLn ('Результат суммы... ',S)
End.
Учебно-познавательный сайт по программированию в среде Turbo Pascal
Мирошниченко Марина, Краснодар, 2003