Методы описания, заполнения массивов и операции над его элементами

работа с нетипизированным двоичным файлом:
аналогично двум предыдущим примерам заполним файл произвольными значениями, а затем извлечём их в ячейки массива:

заполнение:
var a: file; i,k: integer;
begin
assign(a,'file.bin');   {установка связи файловой переменной типа integer с двоичным нетипизированным файлом (содержит элементы типа integer (но может содержать и значения других типов данных, поэтому нетипизированный), т.е. тип данных определяется в зависимости от значения)}
rewrite(a,1);  {открываем файл посредством файловой переменной для записи; 1 - размер единицы инф. для обмена данными}
for i:=-4 to 5 do   {записывать будем абсолютные значения от -4 до -1 и квадраты значений от 0 до 5}  
begin
if i<0 then k:=abs(i)
else k:=sqr(i);
blockwrite(a,k,sizeof(k));  {команда определения величины записываемой инф. в данном случае переменной k}
end;
close(a);   {обязательно закрываем этот файл после работы с ним}
end.

импорт из файла:
var a: file; i: byte; mas: array[1..10] of integer;
begin
assign(a,'file.bin');
reset(a,1);   {открываем файл для чтения}
for i:=1 to n do   {считываем очередное значение в ячейку массива и выводим его на экран}
begin
blockread(a,mas[i],sizeof(mas[i]));
write(mas[i],'   ');
end;
close(a);
end.


Итак, перейдём к многомерным массивам:
Начнём с того, что такое многомерный массив - это упорядоченная совокупность однотипных данных, характеризуемая более чем одним параметром (индексирование массива по нескольким параметрам).
Пример: предположим точка на координатной плоскости отличается от остальных точек, своими координатами по оси x и y (углубляться в более подробное описание координатных плоскостей мы не будем, ибо это является одной из задач математики) и значением (предположим в роли значения в данном случае будет выступать расстояние от начала координат до заданной точки; оно определяется по ф-ле: L=sqrt(sqr(x2-x1)+sqr(y2-y1))):
mas[x,y]=sqrt(sqr(x)+sqr(y));

( в данном примере мы опустили значение "0", т.к. sqrt(sqr(x-0)+sqr(y-0))= sqrt(sqr(x)+sqr(y)); нуль используется потому, что расстояние находится от начала координат, а параметры начала координат = 0;0). С точки зрения математики
в программировании данный пример не очень корректен, т.к. координата точки - это тоже, в свою очередь определённое значение и оно может быть любым (т.е. и вещественным в том числе, а индекс массива - это обязательно целое число);

Но мы всё же немного опередили события, и мне хотелось бы начать с описания многомерных массивов:

1) раздел описаний (var - сокращ. от англ. variables - изменчивый, меняющийся, переменный):
var a: array[1..10,0..5,7..15] of integer;

Если не понятно, то будем разбираться. Мы задали многомерный (в данном сл. трёхмерный) массив (двух, трёх , четырёх и т.д. -мерные массивы - это описание размерности массива; в последствии именно это определение будет применяться при работе с массивами, поэтому не упустите этот момент), диапазон индексов которого: 1..10, 0..5, 7..15 (например: товары, поступающие в магазин имеют последовательный идентификационный код из трёх цифр (три индекса, т.к. массив трёхмерный), а цена товара - это значение элемента массива: 1 - й товар, а т.е. mas[1,0,7] = 35; 2-й - mas[2,0,7] = 64; ...последний - mas[10,5,15] = 35);

2) описание одномерного массива в разделе var, имеющего тип одномерный массив:
type a = array[1..10] of integer;
var mas: array[1..10] of a;

Данный фрагмент является описанием одномерного массива, имеющего тип одномерный массив и в итоге, можно сказать, что каждая ячейка одномерного массива является одномерным массивом, а в общем данную конструкцию можно назвать двумерным массивом и при обращении к элементу массива мы будем указывать два индекса: mas[i,j]:=…;

3) описание двумерного массива в разделе const (константы):
const mas: array[1..3,1..5] of  integer=((3,-2,1,4,3),(-5,-9,0,3,7),(-1,2,1,-4,0));

Здесь суть в том, что каждая из трёх так называемых позиций содержит ещё пять (три строки, два столбца, если в виде таблицы).
При выводе такого массива на экран мы получим (с использованием двух циклов и операторов write/writeln):

3 -2 1 4 3
-5 -9 0 3 7
-1 2 1 -4 0

вот исходный код :
const mas: array[1..3,1..5] of  integer=((3,-2,1,4,3),(-5,-9,0,3,7),(-1,2,1,-4,0)); 
var i,j: byte;
begin
writeln('исходный массив: ');
for i:=1 to 3 do   {перебор строк с 1-й по 3-ю}
begin
for j:=1 to 5 do   {перебор столбцов с 1-ого по 5-й}
write(mas[i,j]:4);   {вывод элемента строки и столбца определённых индексов  ":4" - оформление форматного вывода на экран, т.е. с заданным отступом}
writeln;   {очевидно, что если мы хотим получить форму в виде таблицы, необходимо делать построчный переход вниз}
end;
end.

Единственное отличие состоит в том, что заполнение элементов проводится, с учётом полной индексации, т.е. с учётом размерности массива: если массив двухмерный, то mas[i,j]:=...; если трёхмерный, то mas[i,j,k]:=... и т.д. (ну и само собой используется соответствующее кол-во циклов по всем параметрам размерности)
Теги:
массив, элемент
Добавлено: 21 Сентября 2013 01:46:05 Добавил: Андрей Ковальчук Нравится 0
Добавить
Комментарии:
Нету комментариев для вывода...