Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

Ввод массива из текстового файла или с клавиатуры

МАССИВЫ

Массив - упорядоченная по значениям индексов последовательность конечного числа элементов одного типа. Доступ к отдельному элементу массива в программе осуществляется с помощью переменной с индексом (индексами), которая обозначается именем массива с указанием после него в квадратных скобках значения индекса (или значений индексов через запятую). В общем случае вместо значения каждого индекса может быть выражение для его вычисления.

Например, доступ к элементу x массива X=[x ] осуществляется 3 путем переменной X[3], а доступ к элементу y , находящемуся в строке i и столбце j массива Y=[y ], - через Y[I,J].

Если массив состоит из переменных с одним индексом, то он называется одномерным, с двумя индексами - двухмерным, с n индексами

- n мерным, а при n>2 - многомерным. Одномерные массивы обычно используются для представления векторов, а двухмерные - для работы с матрицами.

Описание типа массива и переменных этого типа имеет вид

TYPE <имя типа>=ARRAY[<тип индекса или типы индексов через запятую в случае двух или более индексов>] OF <тип элементов массива>;

VAR <имя массива или имена массивов через запятую>:<имя типа>; В качестве типа индекса может быть тип диапазон с любым

возможным базовым типом, кроме LONGINT, перечисляемый тип, логический, символьный, BYTE и SHORTINT. Тип элементов массива может быть любой.

Переменные типа массива могут быть описаны без использования раздела TYPE, тогда описание имеет вид

VAR <имя массива или имена массивов через запятую>:ARRAY[<тип индекса или типы индексов через запятую>]OF <тип элементов массива>;

Пример описаний и использования переменных с индексами.

Const N1=4; N2=6;

Type CLASS =(K1,K2,K3,K4); VEC1=array[1..5] of integer;

Var V1:VEC1; V2:array[byte]of word;

MR:array[1..N1,1..N2] of real;

BC:array[boolean] of char;

CS:array[CLASS] of shortint;

Begin

V1[5]:=-700; V2[15]:=365; MR[3,1]:=3.7;

BC[false]:='A'; CS[K1]:=-100;

...

Так как тип элементов массива может быть любым, то он может быть, в частности, и другим массивом, например

Type MAS2=array[1..5]of array[-2..2]OF array[char]of integer;

Такую запись можно заменить более компактной.

Type MAS2=array[1..5,-2..2,char]of integer;

Размерность массива теоретически может быть любой, но она ограничена тем, что об ем оперативной памяти, занимаемой каждым массивом (а также данным другого структурированного типа) не может быть больше 65520 байт (максимального размера сегмента данных или стека) и, кроме того, общий об ем памяти, занимаемой всеми глобальными переменными программы не может превышать 64 K байт (64 килобайт, равных 65536 байт). Поэтому для конкретной переменной или типизированной константы следует выбирать среди допустимых для нее типов тот, при котором она занимает наименьший об ем памяти.

Элементы массива располагаются в памяти компьютера последовательно друг за другом. Элементы с меньшими значениями индексов хранятся в более низких адресах памяти. Многомерные массивы располагаются таким образом, что самый правый индекс массива возрастает самым первым. Например, для массива с описанием

VAR Z:ARRAY[1..2,1..2] OF REAL;

в памяти последовательно друг за другом будут расположены элементы

Z[1,1],Z[1,2],Z[2,1],Z[2,2].

Для работы с массивом как с единым целым используется имя массива без указания индекса в квадратных скобках. Это применяется только для присваивания элементам одного массива значений соответствующих (с теми же индексами) элементов другого массива того же типа с помощью одного оператора присваивания. При этом существенно, чтобы оба массива были одного и того же типа, об явленного даже в одном описании. Иначе такой оператор присваивания недопустим. Например,

TYPE VECT=ARRAY[1..5] OF INTEGER;

VAR D,E:VECT; F:VECT; G,H:ARRAY[1..5] OF INTEGER;

BEGIN

D:=E; F:=E; G:=H;

G:=E;

В отличие от операторов D:=E; и F:=E; и G:=H; оператор G:=E; недопустим.

Над массивами в целом (за исключением одномерных массивов символов array[<тип индекса>] of char) не определены операции отношения. Например, для массивов D и E нельзя записать

IF D=E then u:=1 else u:=0;

Сравнить два массива можно поэлементно, например

for i:=1 to 5 do if D[I]=E[I] then u:=1

else begin

u:=0; break

end;

Для осуществления действий над элементами массива используются переменные с индексами, которые могут применяться как простые переменные. Например, они могут находиться в выражениях в качестве операндов, использоваться в операторах (например, FOR, WHILE, REPEAT, READ, READLN, WRITE, WRITELN); им можно присваивать любые значения, соответствующие их типу.

Ввод значений элементов массива может осуществляться различными способами:

1) с клавиатуры или из файла с помощью READ и READLN;

2) с использованием типизированной константы-массива;

3) с помощью генератора псевдослучайных чисел, если элементы массива являются случайными числами.

 

ТИПОВЫЕ ЗАДАЧИ НА МАССИВЫ

Имеются следующие типовые задачи на массивы:

1) поиск максимального или минимального элемента в массиве;

2) нахождение суммы или произведения элементов массива;

3) упорядочение массива по возрастанию или убыванию его элементов;

4) поиск в массиве заданного элемента;

 

МАССИВЫ

Массив - упорядоченная по значениям индексов последовательность конечного числа элементов одного типа. Доступ к отдельному элементу массива в программе осуществляется с помощью переменной с индексом (индексами), которая обозначается именем массива с указанием после него в квадратных скобках значения индекса (или значений индексов через запятую). В общем случае вместо значения каждого индекса может быть выражение для его вычисления.

Например, доступ к элементу x массива X=[x ] осуществляется 3 путем переменной X[3], а доступ к элементу y , находящемуся в строке i и столбце j массива Y=[y ], - через Y[I,J].

Если массив состоит из переменных с одним индексом, то он называется одномерным, с двумя индексами - двухмерным, с n индексами

- n мерным, а при n>2 - многомерным. Одномерные массивы обычно используются для представления векторов, а двухмерные - для работы с матрицами.

Описание типа массива и переменных этого типа имеет вид

TYPE <имя типа>=ARRAY[<тип индекса или типы индексов через запятую в случае двух или более индексов>] OF <тип элементов массива>;

VAR <имя массива или имена массивов через запятую>:<имя типа>; В качестве типа индекса может быть тип диапазон с любым

возможным базовым типом, кроме LONGINT, перечисляемый тип, логический, символьный, BYTE и SHORTINT. Тип элементов массива может быть любой.

Переменные типа массива могут быть описаны без использования раздела TYPE, тогда описание имеет вид

VAR <имя массива или имена массивов через запятую>:ARRAY[<тип индекса или типы индексов через запятую>]OF <тип элементов массива>;

Пример описаний и использования переменных с индексами.

Const N1=4; N2=6;

Type CLASS =(K1,K2,K3,K4); VEC1=array[1..5] of integer;

Var V1:VEC1; V2:array[byte]of word;

MR:array[1..N1,1..N2] of real;

BC:array[boolean] of char;

CS:array[CLASS] of shortint;

Begin

V1[5]:=-700; V2[15]:=365; MR[3,1]:=3.7;

BC[false]:='A'; CS[K1]:=-100;

...

Так как тип элементов массива может быть любым, то он может быть, в частности, и другим массивом, например

Type MAS2=array[1..5]of array[-2..2]OF array[char]of integer;

Такую запись можно заменить более компактной.

Type MAS2=array[1..5,-2..2,char]of integer;

Размерность массива теоретически может быть любой, но она ограничена тем, что об ем оперативной памяти, занимаемой каждым массивом (а также данным другого структурированного типа) не может быть больше 65520 байт (максимального размера сегмента данных или стека) и, кроме того, общий об ем памяти, занимаемой всеми глобальными переменными программы не может превышать 64 K байт (64 килобайт, равных 65536 байт). Поэтому для конкретной переменной или типизированной константы следует выбирать среди допустимых для нее типов тот, при котором она занимает наименьший об ем памяти.

Элементы массива располагаются в памяти компьютера последовательно друг за другом. Элементы с меньшими значениями индексов хранятся в более низких адресах памяти. Многомерные массивы располагаются таким образом, что самый правый индекс массива возрастает самым первым. Например, для массива с описанием

VAR Z:ARRAY[1..2,1..2] OF REAL;

в памяти последовательно друг за другом будут расположены элементы

Z[1,1],Z[1,2],Z[2,1],Z[2,2].

Для работы с массивом как с единым целым используется имя массива без указания индекса в квадратных скобках. Это применяется только для присваивания элементам одного массива значений соответствующих (с теми же индексами) элементов другого массива того же типа с помощью одного оператора присваивания. При этом существенно, чтобы оба массива были одного и того же типа, об явленного даже в одном описании. Иначе такой оператор присваивания недопустим. Например,

TYPE VECT=ARRAY[1..5] OF INTEGER;

VAR D,E:VECT; F:VECT; G,H:ARRAY[1..5] OF INTEGER;

BEGIN

D:=E; F:=E; G:=H;

G:=E;

В отличие от операторов D:=E; и F:=E; и G:=H; оператор G:=E; недопустим.

Над массивами в целом (за исключением одномерных массивов символов array[<тип индекса>] of char) не определены операции отношения. Например, для массивов D и E нельзя записать

IF D=E then u:=1 else u:=0;

Сравнить два массива можно поэлементно, например

for i:=1 to 5 do if D[I]=E[I] then u:=1

else begin

u:=0; break

end;

Для осуществления действий над элементами массива используются переменные с индексами, которые могут применяться как простые переменные. Например, они могут находиться в выражениях в качестве операндов, использоваться в операторах (например, FOR, WHILE, REPEAT, READ, READLN, WRITE, WRITELN); им можно присваивать любые значения, соответствующие их типу.

Ввод значений элементов массива может осуществляться различными способами:

1) с клавиатуры или из файла с помощью READ и READLN;

2) с использованием типизированной константы-массива;

3) с помощью генератора псевдослучайных чисел, если элементы массива являются случайными числами.

 

ВВОД МАССИВА ИЗ ТЕКСТОВОГО ФАЙЛА ИЛИ С КЛАВИАТУРЫ

Ввод значений элементов массива с помощью оператора READ осуществляется поэлементно. Нельзя ввести массив целиком. Например, для любого массива W недопустим оператор READ(W) или READLN(W).

Рассмотрим пример ввода массивов. Пусть в программе имеются описания

VAR X:array[1..5] OF INTEGER;

Y:array[1..3,1..2] OF REAL;

INP:TEXT; I,J:byte;

Вначале после BEGIN надо открыть входной текстовый файл, для чего используются операторы:

assign(INP,'H:\03-101\a7.in'); reset(INP);

Тогда ввод значений элементов одномерного и двухмерного массивов из входного файла H:\03-101\a7.in можно выполнить с помощью операторов ввода READ, READLN и цикла FOR:

FOR I:=1 TO 5 DO READ(inp,X[I]);

FOR I:=1 TO 3 DO

FOR J:=1 TO 2 DO READ(inp,Y[I,J]);

Для ввода двухмерного массива используется вложенный цикл, причем внешний цикл по номеру строки I матрицы, а внутренний - по номеру столбца J.

После последнего оператора READ надо закрыть входной файл, используя оператор

CLOSE(INP);

Входной файл в этом случае может иметь вид:

1 3 -300 7 2

-1.1 -2.5

3.3 -4.1

5.1 6.3

Между числами должен быть разделитель (пробел или).

В случае массива символов символы должны вводиться без разделителей между ними. Кроме того, в программе надо добавлять каждый раз READLN для перехода на следующую строку ввода.

Рассмотрим пример ввода одномерного и двухмерного массивов символов из входного файла H:\03-101\a7.in.

VAR X1:array[1..5] OF char;

Y1:array[1..3,1..2] OF CHAR;

INP:TEXT; I,J:byte; BEGIN

assign(INP,'H:\03-101\a7.in'); reset(INP);

FOR I:=1 TO 5 DO READ(inp,X1[I]); READLN;

FOR I:=1 TO 3 DO begin

FOR J:=1 TO 2 DO READ(inp,Y1[I,J]);

READLN(INP) end;

close(inp); END.

Входной файл в этом случае может иметь вид: a35mn

qw

er

ty

ИЗ При вводе массива с клавиатуры не нужны три оператора открытия

и закрытия входного файла, INP с запятой в операторах READ и

описание INP.

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

READ(Y[1,1]);

 



Поделиться:


Последнее изменение этой страницы: 2016-09-20; просмотров: 417; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 18.191.44.145 (0.007 с.)