Var ИмяМассива: array[НижняяГраница.. ВерхняяГраница] of Тип Элементов;
Например:
Const n=100;
var a: array[1..n] of real; { 100 элементов — вещественные числа }
b: array[0..50] of char; { 51 элемент — символы }
с: array[-3..4] of boolean; { 8 элементов — логические значения }
x,y: array[1..20] of integer; { два массива x и у содержат по 20 элементов — целые числа }
Описание массива требуется компилятору для выделения памяти под его элементы.
Массив также можно описать как типизированную константу в разделе описания констант. Список значений элементов массива при этом заключается в круглые скобки.
Например:
const x: array[1..5] of integer=(l,3,5,7,9);
В этом примере не просто выделяется память под массив, а происходит заполнение ячеек заданными значениями по строкам.
При описании массивов также широко используется предварительное описание типа в разделе описания типов данных. Такая возможность может потребоваться, например, при использовании имени массива в качестве параметра процедуры или функции.
При выполнении программы вовсе не обязательно заполнять все ячейки данными (в этом случае значение ячейки будет равно нулю), т. е. реальное количество элементов в массиве может быть меньше, чем указано при описании, но ни в коем случае не должно быть больше.
СПОСОБЫ ЗАПОЛНЕНИЯ МАССИВА
Значения элементов массива можно задать следующими способами:
при вводе данных с клавиатуры:
for i:=1 to n do read (a[i]);
с помощью датчика случайных чисел.
Заполним массив числами в диапазоне от -3 до 7.
randomize;
for i:=1 to n do a[i]:=random(11)-3;
присваиванием заданных значений;
Заполним массив четными числами
for i:=1 to n do a[i]:=i*2;
или
for i:=1 to n do begin
readln (x);
if x mod 2=0 then a[i]:=x
считывая значения элементов из файла: for i:=1 to n do read (f,a[i]);
Вывод элементов массива осуществляется в цикле: for i:=1 to n do write (a[i],’ ‘)
ЗАПОЛНЕНИЕ МАССИВА С КЛАВИАТУРЫ
var a: array [1..100] of real;
i,n: integer;
begin
cls;
for i:=1 to 5 do
begin
read ( a[i] );
end; end.
ЗАПОЛНЕНИЕ МАССИВА СЛУЧАЙНЫМИ ЧИСЛАМИ
var a: array [1..100] of real;
i,n: integer;
begin
cls;
for i:=1 to 10 do
begin
a[i]:=random(101);
writeln(a[i]);
end; end.
ЗАПОЛНЕНИЕ МАССИВА С ПОМОЩЬЮ ФОРМУЛЫ
var a: array [1..100] of real;
i,n: integer;
begin
cls;
for i:=1 to 10 do
begin
a[i]:=i*3;
writeln(a[i]);
end; end.
ПРАКТИЧЕСКАЯ РАБОТА
Дан массив из 15 элементов. Рассмотреть различные способы вывода:
write (x(i), ‘ ‘);
writeln (x[i]);
write (‘x(‘,i,’)=’, x[i],’ ‘)
writeln('a[i]=',a[i])
random (100)
random (500)
random (10) -5
random (70) -35
Вывести на экран массив из 20 элементов, заполнив его случайными значениями, лежащими в диапазоне от -10 до 10.
var a: array [1..20] of real;
i,n: integer;
begin
cls;
for i:=1 to 20 do
begin
a[i]:=random(20)-10;
writeln(a[i]);
end;
end.
Массив предназначен для хранения ростов 12 человек. С помощью датчика случайных чисел заполнить массив целыми значениями, лежащими в диапазоне от 163 до 190 включительно
var a: array [1..12] of real;
i,n: integer;
begin
cls;
for i:=1 to 12 do
begin
a[i]:=random(190-163+1)+163;
writeln(a[i]);
end;
end.
ОПЕРАЦИИ НАД МАССИВАМИ
Для работы с массивом как с единым целым надо использовать имя массива (без [ ]).
Для доступа к элементу массива необходимо указывать его имя и порядковый номер. Для обращения к элементу массива надо указать имя массива и порядковый номер элемента: Х[1], у[5], е[25], А[8].
Если указано только имя массива, то речь идет обо всем массиве (А, С и F). Обычно для обработки массива нужно организовать цикл и уже в нем работать с элементами.
В Паскале определена также операция присваивания для массивов, идентичных по структуре, то есть с одинаковыми типами индексов и компонентов. Например, если массивы С и D описаны как
var c,d: array [0..30] of real;
то можно записать оператор c:=d;
Такая операция сразу всем элементам массива С присвоит значения элементов массива D, соответствующих им по номерам.
Описание массива.
Заполнение массива.
Нахождение суммы (или произведения) элементов.
Нахождение максимального (минимального) элемента;
Нахождение номеров элементов, обладающих заданным свойством.
Нахождение количества элементов, обладающих заданным свойством.
Замена элементов массива
Удаление элементов из одномерного массива.
Вставка элементов.
Изменение значений некоторых элементов.
Создание массивов.
Дан массив из 15 элементов. Вычислить сумму положительных элементов массива.
var b:array [1..15] of real;
s:real; i:integer;
begin
for i:=1 to 15 do
read (b[i]);
s:=0;
for i:=1 to 15 do
begin
if b[i]>0 then
s:=s+b[i];
end;
writeln(s);
end.
сумму четных элементов массива;
сумму положительных элементов;
сумму элементов кратных Р;
сумму элементов, оканчивающихся на К;
сумму элементов с нечетными номерами.
В одномерном массиве В, состоящем из N произвольных элементов. Найти количество отрицательных элементов.
var b:array [1..100] of real;
k, i:integer;
begin
for i:=1 to 15 do
read (b[i]);
k:=0;
for i:=1 to 15 do
begin
if b[i]>0 then
k:=k+1;
end;
writeln(k);
end.
количество элементов кратных В;
количество четных элементов;
количество элементов больших В.
Подсчитать количество четных элементов и вывести их всех на экран
var i,x,y:integer;
s:array [1..10] of integer;
begin
for i:=1 to 10 do
read(s[i]);
for i:=1 to 10 do
if s[i] mod 2=0 then
begin
writeln (s[i]);
y:=y+1;
end;
writeln ('количество четных чисел = ',y)
end.
Составить программу нахождения количества элементов целочисленного массива с нечетными индексами, запись которых оканчивается на 5. const n=30; var a: array [1..n] of integer; k,i: integer; begin cls; k:=0; for i:=1 to n do begin read (a[i]); if (a[i] mod 10=5) and (i mod 2=1) then k:=k+1; end; writeln(k); end.
Найти произведение элементов имеющих нечетный индекс.
Const n=10;
Var a:array[1..n] of integer;
i, p: integer;
begin
randomize;
p:=1;
for i:=1 to n do begin
a[i]:=random(11)-3; //заполняем массив а случайными числами
write (a[i],’ ‘); //выводим заполненный массив
end;
for i:=1 to n do
if i mod 2=1 then
p:=p*a[i] //находим произведение элементов массива а имеющих нечетный индекс
writeln (s);
end.
Дан массив целых чисел.
Найти количество тех элементов, значения которых положительны и не превосходят заданного натурального числа А
Var X: Array[1..20] Of Integer;
i, n, k, A: Integer;
Begin
Write (‘n=’); Readln (n);
For i:=1 To n Do Readln (X[i]); {ввод массива}
Write (‘A=’); Readln (A); k:= 0;
For i:=1 To n Do {обработка массива}
If (X[i] >0) and (X[i] <= A) Then k:=k + 1;
Writeln (‘k=’, k);
End.
Найти номера четных элементов, стоящих на нечетных местах
Var X: Array[1..20] Of Integer;
i, n: Integer;
Begin
Write (‘n=’); Readln (n);
For i:=1 To n Do Readln (X[i]); {ввод массива}
For i:=1 To n Do {обработка массива}
If (X[i] mod 2 = 0) and (i mod 2<>0) Then
Write (i)
End.
Найти номер последнего отрицательного элемента массива
Const n=10;
Var A: Array[1..n] Of Integer;
i, m: Integer;
Begin
For i:=1 To n Do Readln (A[i]); {ввод массива}
m := 0; i:=n;
While (i >= 1) and (A[i] >=0) Do i:=i-1; m:=i;
Writeln (‘m=’, m);
End.
Поиск максимального (минимального) элемента массива
var a: array [1..20] of integer;
max, min,i,n: integer;
begin
cls;
for i:=1 to 20 do
begin
a[i]:=random(50)-10;
writeln (a[i]);
max:= a[1]; min:= a[1];
end;
for i:=1 to 20 do
begin
if a[i]>max then max:= a[i];
if a[i]<min then min:= a[i];
end;
writeln ('max=', max); writeln ('min=', min);
end.
Вывести индексы max, min
const n = 7; var a: array[1..n] of real; n_max, i: integer; begin
for i:=1 to n do read (a[i]); n_max:=i; for i:=2 to n do if a [ i ] >a [ n_max] then n_max:= i;
writeln ( n_max); end.
ЗАДАЧА. Поиск максимального (минимального) элемента, удовлетворяющего какому-либо условию.
Например: найти первый максимальный четный элемент.
В этом случае задача решается за три прогона:
1 прогон - инициализация массива;
2 прогон – поиск первого элемента массива, удовлетворяющего данному условию;
3 прогон – берем найденный элемент за основу…
Поиск максимального (минимального) элемента произвольного массива
Максимальный элемент массива
max: = a [ 1 ];
for i:=2 to n do
if a [ i ] > max then
max:=a [ i ];
write ('max=',max) ;
Номер максимального элемента массива
n_max:=1;
for i:=2 to n do
if a [ i ] > a[n_max] then
n_max:= i;
write ('max=',a [ n_max ]) ;
Минимальный элемент массива
min : = a [ 1 ];
for i:=2 to n do
if a [ i ] < min then
min:=a [ i ];
write ('min =',min) ;
Поиск максимального (минимального) элемента массива, про значения элементов которого известно, что они принадлежат определенному диапазону [a; b].
Максимальный элемент массива
max: = a;
for i:=1 to n do
if a [ i ] > max then
max:=a [ i ];
write ('max=',max) ;
Минимальный элемент массива
min : = b;
for i:=1 to n do
if a [ i ] < min then
min:=a [ i ];
write ('min =',min) ;
Поиск номера максимального элемента произвольного массива
n_max:=1;
for i:=2 to n do
if a [ i ] >a [ n_max] then
n_max:= i ;
write ('n_max =',n_max) ;
Обнулить элементы массива, расположенные между его минимальным и максимальным элементами (не включая минимальный и максимальный элементы). var a: array [1..10] of integer; min,max:integer; // номера макс и мин элемента j,jj:integer; // № эл между которых обнулить эл-ты i:integer; // счетчик в цикле begin // формирование исходного массива
for i:=1 to 10 do begin readln(A[i]); end; // присвоение начальных значений
min:=1; max:=1; // нахождение номеров макс и мин эл-ов for i:=1 to n do
begin if a[min]>a[i] then min:=i; if a[max] >a[i] then max:=i; end
// определяем номера первого и последнего элемента if min>max then
begin
j:=max; jj:=min;
end else
begin
jj:=max; j:=min;
end;
// организуем цикл для обнуления элементов
for i:=j+1 to jj-1 do begin a[i]:=0; end;
// вывод результата for i:=1 to 10 do Write(A[i],' '); end.
УДАЛЕНИЕ ЭЛЕМЕНТОВ ИЗ МАССИВА
Дан массив A(N). Удалить элемент, расположенный на месте k.
Сдвинуть весь «хвост» массива, начиная с элемента с номером k+1, на одну позицию влево, т.е. выполняя операцию: ai=ai+1, где i = k, k+1, …, N-1
Полученный массив будет содержать N-1 элемент.
Var a:array [1..100] of integer;
n, k, i:byte;
Begin
Randomize;
Readln(n); // количество элементов
Readln(k); //№ удаляемого элемента
{формирование массива случайным образом}
For i:=1 to n do begin
a[i]:=random(101)-50;//
write(a[i])
end; writeln;
{удаление заданного элемента}
For i:=k to n-1 do
a[i]:=a[i+1];
{вывод итогового массива}
For i:=1 to n-1 do
write(a[i]:4);
end.
УДАЛЕНИЕ ЭЛЕМЕНТОВ ИЗ МАССИВА Задан одномерный массив размера 10. Необходимо удалить его третий элемент.
Сколько элементов в массиве? (10.)
Сколько элементов станет в массиве после удаления третьего элемента? (9.)
Что должно произойти с элементами с первого по второй? (Они не должны измениться.)
Какой элемент должен быть помещен на третье место? (На третье место должен быть помещен четвертый элемент исходного массива.)
На четвертое? На пятое? (На четвертое место — пятый. На пятое — шестой.)
Какую закономерность вы можете указать? (На текущее место в массиве должен быть помещен элемент, следующий за текущим, из исходного массива.)
Элементы с какими индексами останутся неизменными, а с какими — будут изменены? (Неизменными останутся элементы, с индексами 1 и 2, а остальные элементы должны измениться.)
Начиная с какого индекса элементы должны перемещаться? (Начиная с четвертого.)
Необходимо перемещать элементы вправо или влево? (Перемещаться элементы должны влево.)
10. Какой элемент должен быть перемещен на место элемента A[i]? (A[i] :=A[i+1].)
for i:=3 to 9 do A[i]:=A[i+1].
В одномерном массиве удалить максимальный элемент.
const n=10;
var A: array[1..n] of integer;
max, i, k: integer;
begin
cls;
randomize;
for i:=1 to n do
A[i]:= -20+random(60);
for i:=1 to n do
write(A[i]:4);
writeln;
max:=A[1];
for i:=1 to n do
if A[i]>=max then
begin
max:=A[i] ;
k:=i;
end;
for i:=k to 9 do
A[i]:=A[i+1];
for i:=1 to n-1 do
write(A[i]:4);
writeln;
end.
Удалить из массива все элементы, стоящие перед максимальным элементом.
const n=10; var A: array[1..n] of integer; max, i, k: integer; begin randomize; for i:=1 to n do A[i]:=-20+random(60); max:=A[1]; for i:=1 to n do if A[i]>=max then begin max:=A[i]; k:=i; end; for i:=1 to n-k+1 do A[i]:=A[i+k-1]; for i:=1 to n-k+1 do write(A[i]:4); writeln; end.
ВСТАВКА ЭЛЕМЕНТОВ В МАССИВ
Дан массив A(N). Включить на k место в этом массиве элемент, равный m.
Перед включением заданного элемента в массив, необходимо раздвинуть этот массив, т.е. передвинуть «хвост» массива вправо на одну позицию, т.е. выполняя операцию: ai+1=ai, где i = N, N-1, …, k.
Перемещение элементов массива начинаем с конца, в противном случае весь хвост массива заполнится k-ым элементом.
Размер массива увеличится до N+1 элемента.
Var a:array [1..100] of integer;
n,k,i:byte; m:integer;
Begin
Randomize;
Readln(n); // количество элементов
Readln(k); //№ включаемого элемента
Readln(m); //значение включаемого эл-та
{формируем массив}
For i:=1 to n do begin
a[i]:=random(101)-50;
write(a[i]:4)
end; writeln;
{раздвигаем эл-ты массива}
For i:=n downto k do
a[i+1]:=a[i];
{заносим новый эл-т на k-ую позицию}
a[k]:=m;
{выводим получившийся массив}
For i:=1 to n+1 do
write(a[i]:4);
end.
ВСТАВКА ЭЛЕМЕНТОВ В МАССИВ Задан одномерный массив размера 10. Необходимо вставить число 5 после третьего элемента.
Сколько элементов в массиве? (10.)
Сколько элементов станет в массиве в результате вставки числа 5 после третьего элемента? (11.)
Какой индекс будет у вставленного элемента? (4.)
Что должно произойти с элементами с первого по третий? (Эти элементы не должны измениться.)
Какой элемент должен быть помещен на пятое место? (На пятое место должен переместиться четвертый элемент.)
На шестое? На седьмое? (На шестое — пятый. На седьмое — шестой.)
Какую закономерность вы можете указать? (Элементы сдвигаются вправо.)
Элементы с какими индексами останутся неизменными, а с какими будут изменены? (Неизменными останутся элементы с индексами 1—3, на четвертое место помещается число 5, а изменяются все остальные.)
Начиная с какого индекса элементы должны перемещаться? (Перемещаться должны элементы с четвертого.)
Необходимо перемещать элементы вправо или влево? (Вправо.)
Если на четвертое место поместить пятерку, что произойдет с тем элементом, который находился до этого на четвертом месте? (Его значение потеряется.)
Перемещение лучше начать с четвертого или с последнего элемента? (С последнего.)
Какой элемент должен быть перемещен на место элемента A[i]? (A[i] :=A[i — 1].)
for i:=11 downto 5 do A[i]:=A[i-1]; A[4]:=5.
В одномерном массиве вставить после минимального элемента число 10.
const n=10; var A: array[l..n+1] of integer; min, i, k: integer; begin randomize; for i:=1to n do A[i]:=-20+random(60); for i:=1 to n do write(A[i]:4); writeln; min:=A[1]; for i:=1 to n do if A[i]<=min then begin min:=A[i]; k:=i; end; for i:=n+1 downto k+2 do A[i]:=A[i-1]; A[k+1]:=10; for i:=l to n+1 do write(A[i]:4); writeln; end.
В одномерном массиве вставить число 100 перед первым отрицательным элементом. const n=10; var A: array[1..n+1] of integer; i, k: integer; begin randomize; for i:=1 to n do A[i]:=-20+random(60); for i:=1to n do if A[i]<0 then begin k:=i; i:=n; end; for i:=n+1downto k+1 do A[i]:=A[i-1]; A[k]:=100; for i:=1 to n+1 do write(A[i]:4); writeln; end.
ПЕРЕМЕЩЕНИЕ ЭЛЕМЕНТОВ В МАССИВЕ Задан одномерный массив размера 10. Осуществить перемещение элементов массива следующим образом: последний элемент записать на место первого, при этом сдвинув первый, второй, ..., предпоследний элементы на одну позицию вправо.
Сколько элементов в массиве? (10.)
Изменится ли количество элементов в массиве после перемещения? (Нет.)
Какой элемент должен оказаться на месте первого? На месте второго? На месте третьего? (Десятый. Первый. Второй.)
Можно ли последний элемент сразу поместить на место первого? Что станет в этом случае с первым элементом? (Нет. Его значение будет потеряно.)
Можно ли сначала переместить поочередно все элементы вправо, начиная с первого, а затем последний элемент поместить на место первого? Что станет в этом случае с последним элементом? (Нет. Его значение будет утеряно.)
Можно ли этого избежать, заведя дополнительную переменную? (Да. В дополнительную переменную можно поместить значение последнего элемента. Затем переместить элементы с девятого до первого вправо. Далее на первое место поместить значение десятого элемента из дополнительной переменной.)
t:=A[10]; for i:=10 downto 2 do A[i]:=A[i-1]; A[l]:=t.
Дан массив размера N. Поменять порядок его элементов на обратный.
var a: array [1..10] of integer; t:integer; // для обмена значениями двух переменных N:integer; i:integer; // счетчик в цикле begin
ввод данных readln(N);
формирование исходного массива for i:=1 to n do
begin
readln(A[i]);
end;
for i:=1 to n div 2 do begin
обмен значениями элементов t:=a[i]; a[i]:=a[n-i+1]; a[n-i+1]:=t; end;
вывод результата for i:=1 to n do
Write(A[i],' '); end.
Дан массив размера N. Поменять местами его минимальный и максимальный элементы.
var a: array [1..10] of integer; t:integer; // для временного хранения значения min,max:integer; // номера макс. и мин. элементов N:integer; i:integer; // счетчик в цикле begin
ввод данных readln(N);
формирование исходного массива for i:=1 to n do
readln(A[i]);
начальное значение переменных min:=1; max:=1; for i:=1 to n do begin // определение номеров искомых элементов if a[i] < a[min] then min:=i; if a[i] > a[max] then max:=i; end;
обмен значениями элементов t:=a[min]; a[min]:=a[max]; a[max]:=t;
вывод результата
for i:=1 to n do Write(A[i],' '); end.
Поменять местами элементы массива следующим образом
1-ый со 2-ым 3-ий с 4-ым 5-ый с 6-ым 7-ой с 8-ым
СОРТИРОВКА ЭЛЕМЕНТОВ МАССИВА
Сортировка – это процесс упорядочивания элементов.
Числовой массив упорядочивается
- по убыванию;
- по возрастанию.
СОРТИРОВКА МАССИВА
Сортировка массива методом пузырька.
Эту сортировку так называют потому, что при обработке массива более "лёгкие" элементы перемещаются вверх.
program pyz;
const n = 20;
var V:array[1..n] of integer;
i,j,tmp:integer;
begin
Randomize;
for i:=1 to n do
V[i]:= Random(100);
Writeln('Исходный массив: ');
for i:=1 to n do Write(V[i],' ');
for i:=1 to n do
for j:=i+1 to n do
if V[i] >= V[j] then
begin
tmp:= V[i];
V[i]:= V[j];
V[j]:= tmp;
end;
Writeln;
Writeln('Упорядоченный по неубыванию массив: ');
for i:=1 to n do Write(V[i],' ');
Readln;
End.
СОРТИРОВКА МАССИВА
Сортировка массива методом пузырька.
По убыванию элементов:
program pyz;
const n = 20;
var V:array[1..n] of integer;
i,j,tmp:integer;
begin
Randomize;
for i:=1 to n do
V[i]:= Random(100);
Writeln('Исходный массив: ');
for i:=1 to n do Write(V[i],' ');
for i:=1 to n-1 do
for j:=i+1 to n do
if V[i] < V[j] then begin
tmp:= V[i];
V[i]:= V[j];
V[j]:= tmp;
end;
Writeln;
Writeln('Упорядоченный по убыванию массив: ');
for i:=1 to n do Write(V[i],' ');
Readln;
End.
СОРТИРОВКА МАССИВА
Сортировка методом нахождения минимального элемента
Ещё один вариант сортировки, более быстрый, чем метод пузырька.
При каждом просмотре массива находим минимальный элемент и меняем местами его с первым на первом проходе, со вторым - на втором и т.д.
Не забудьте только, что первый элемент массива должен иметь индекс 0.
Const N=20
var Arr : array[0;N] of Integer;
………
procedure SortMin;
var
i, j : Integer;
Min, Pos, Temp : Integer;
begin
for i := 0 to n - 1 do begin
Min := Arr [i];
Pos := i;
for j := i + 1 to n do
if Arr [j] < Min then begin
Min := Arr [j];
Pos := j;
end;
Temp := Arr [i];
Arr [i] := Arr [Pos];
Arr [Pos] := Temp;
end;
end;
СОРТИРОВКА МАССИВА
Сортировка массива вставками
Более быстрый и оптимальный метод сортировки - сортировка вставками.
Суть её в том, что на n-ном шаге мы имеем упорядоченную часть массива из n элементов, и следующий элемент встаёт на подходящее ему место.
Имейте в виду - первый индекс массива - 0.
(var Arr : array[0;N] of Integer; n : Integer)
procedure SortInsert;
var
i, j, Temp : Integer;
begin
for i := 1 to n do begin
Temp := Arr [i];
j := i - 1;
while Temp < Arr [j] do begin
Arr [j + 1] := Arr [j];
Dec (j);
if j < 0 then
Break;
end;
Arr [j + 1] := Temp;
end;
end;
