Обработка массивов включает в себя, как правило, следующие компоненты: ввод массива (с клавиатуры или с помощью датчика случайных чисел), вывод полученного массива на экран и собственно его обработка. Все эти компоненты рекомендуется оформлять в виде отдельных процедур. При этом надо учитывать следующий фактор: если процедуре (или функции) будет передаваться массив, то надо объявить в ней этот массив как параметр с атрибутом VAR даже в том случае, если значение массива внутри процедуры не изменяется. Это нужно для того, чтобы не тратить времени и памяти на размещение внутри процедуры копии массива. Заметим, что параметр обязательно должен относиться к типу, имеющему имя.
П р. и м е р. Сумма элементов таблицы над верхней диагональю.
program SUMMA;
const M = 10; {число строк таблицы}
N = 10; {число столбцов таблицы}
type LINE = array [1..n] of integer;
TAB = array [1..m] of LINE;
var s, i, j:integer; MAS: TAB;
procedure VVODMASSIV (var MAS: TAB);
begin
¦ for i := 1 to M do
¦ for j := 1 to N do
¦ readln (MAS [i][j]);
end;
procedure VIVODMASSIV (var MAS:TAB);
begin
¦ for i := 1 to M do
¦ begin
¦ ¦ for j := 1 to N do
¦ ¦ write (MAS [i][j]:4,' '); writeln;
¦ end;
end;
procedure OBRABOTKA (MAS: TAB; var SUM: integer);
begin
¦ SUM := 0;
¦ for i := 1 to M do
¦ for j := 1 to N do
¦ if j > i then SUM := SUM + MAS [i][j];
end;
begin
| VVODMASSIV (MAS);
| writeln ('исходный массив'); VIVODMASSIV (MAS);
| OBRABOTKA (MAS, s); writeln;
| writeln ('сумма элементов = ',s);
end.
Контрольные вопросы
1. Какие элементы входят в объявление массива?
2. Каким типом величин индексируются элементы массива?
3. Какой тип получит переменная при следующем объявлении:
TYPE MyType = ARRAY [1..10] OF REAL;
VAR A: MyType?
4. Какой оператор чаще всего используется при работе с массивами и почему?
5. Чем отличается индексация двумерных массивов от одномерных?
6. Какие процедуры рекомендуется использовать при обработке массивов?