logo
lab_rab5_6

1.1.10 Работа с массивами

Считывание (ввод) одномерного массива известной длины из файла

Var x: array [1..20] of real;

i: integer;

f: text;

Begin

Assign(f, ‘NameFile.dat’);

Reset(f);

for i:=1 to 20 do

Read(f, x[i]);

Close(f);

End.

Считывание одномерного массива неизвестной длины из файла, определение размера массива

Var x: array [1..100] of real;

i,N: integer;

f: text;

Begin

Assign(f, ‘NameFile.dat’);

Reset(f);

i:=0;

While not Eof(f) do

begin

i:=i+1;

Read(f, x[i]);

end;

N:=i­1;

Close(f);

End.

Запись (вывод) одномерного массива в файл

Var x: array [1..20] of real;

i,N: integer;

f2: text;

Begin

Assign(f2, ‘NameFile.rez’);

ReWrite(f2);

for i:=1 to 20 do

Write(f2, x[i]:10:3);

Close(f2);

End.

При выводе массива числа записываются подряд, поэтому необходимо всегда делать форматный вывод (см. п.1.1.7).

Вычисление наибольшего элемента одномерного массива

Var x: array [1..100] of real;

max: real;

i,N, Nmax: integer;

Begin

max:=x[1];

for i:=2 to N do

if (x[i]>max) then

begin

max:=x[i];

Nmax:=i;

end;

End.

В результате работы программы вычисляется значение max, равное наибольшему элементу массива и Nmax – номер наибольшего элемента. Необходимо учесть, что эта программа не печатает значения. Для печати необходимо использовать оператор Write.

Для нахождения минимального (наименьшего) элемента программа аналогичная, только для удобства вводятся переменные min, Nmin и в условном операторе if изменяется условие: if (x[i]<min) then

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

j:=0;

n2:=0;

for i:=1 to n do

if (Условие) then

begin

j:=j+1;

b[j]:=a[i];

end;

n2:=j;

В результате получаем массив b, содержащий элементы исходного массива, удовлетворяющие «Условию» и число n2 – количество элементов полученного массива. Условие определяется в зависимости от поставленной задачи. Некоторые примеры условий представлены в таблице 1.8.

Таблица 1.8 Определение «Условия»

Условие задания

«Условие» в программе

Тип элементов массива

Найти положительные элементы

a[i] > 0

Для целых и действительных типов

Найти отрицательные элементы

a[i] < 0

Найти неположительные элементы

a[i] ≤ 0

Найти неотрицательные элементы

a[i] ≤ 0

Найти четные элементы

a[i] mod 2 = 0

или

not odd(a[i])

Только для целых типов

Найти нечетные элементы

a[i] mod 2 <> 0

или

odd(a[i])

Найти все элементы, делящиеся на n

a[i] mod п = 0

Найти все элементы, не делящиеся на n

a[i] mod п <> 0

Нахождение первого положительного элемента массива

Var

a: mass;

i, Num, firstPol: integer;

Begin

Num:=0;

firstPol:=0;

for i:=1 to n do

if a[i] > 0 then

begin

firstPol:= a[i];

Num:=i;

Break;

end;

if firstPol = 0 then

WriteLn(‘Net poloz. elementov’);

End.

Для нахождения первого отрицательного элемента, первого четного элемента и т.д. необходимо только изменить условие.

Нахождение последнего положительного элемента массива

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

for i:=n downto 1 do

и т.д.

Сортировка одномерного массива по возрастанию

for i:=1 to N–1 do

for j:=i+1 to N do

if a[i]>a[j] then

begin

t:=a[i];

a[i]:=a[j];

a[j]:=t;

end;

В результате работы программы заданный массив пересортировывается в порядке возрастания. При этом начальный массив не сохраняется.

Для сортировки по убыванию необходимо изменить условие в операторе if.