Паскаль не имеет средств ввода-вывода элементов массива сразу, поэтому ввод и вывод значений производится поэлементно. Значения элементам массива можно присвоить с помощью оператора присваивания, как показано в примере инициализации, однако чаще всего они вводятся с экрана с помощью оператора Read или Readln с использованием оператора организации цикла for:
Ввод элементов одномерного массива А:
for I:=l to 4 do
Readln(A[I]) ;
Аналогично значения двумерного массива вводятся с помощью вложенного оператора for:
Ввод элементов двумерного массива В:
for I := I to 10 do
for J := 1 to 15 do
Readln (B[I,J]) ;
В связи с тем, что использовался оператор Readln, каждое значение будет вводиться с новой строки. Можно ввести и значения отдельных элементов, а не всего массива. Так, операторами:
Read(A[3]);
Read(B[6,9]);
вводится значение третьего элемента вектора А и значение элемента, расположенного в шестой строке девятого столбца матрицы В. Оба значения набираются на одной строке экрана, начиная с текущей позиции расположения курсора.
Вывод значений элементов массива выполняется аналогичным образом, но используются операторы Write или Writeln:
Вывод элементов одномерного массива А:
for I := I to 4 do
Writeln (A[I]);
Вывод элементов двумерного массива В:
for I := I to 10 do
for J := 1 to 15 do
Writein (B[I,J]);
Копированием массивов называется присваивание значений всех элементов одного массива всем соответствующим элементам другого массива. Копирование можно выполнить одним оператором присваивания, например А:=D; или с помощью оператора for:
for I := 1 to 4 do
A[I] := D[I];
В обоих случаях значение элементов массива D не изменяется, а значения элементов массива А становятся равными значениям соответствующих элементов массива D. Очевидно, что оба массива должны быть идентичны по структуре.
Иногда требуется осуществить поиск в массиве каких-либо элементов, удовлетворяющих некоторым известным условиям. Пусть, например, надо выяснить, сколько элементов массива А имеют нулевое значение.
К := 0;
for I := 1 to 4 do
if A[I] = 0 then К := К + 1;
После выполнения цикла переменная К будет содержать количество элементов массива А с нулевым значением.
Перестановка значений элементов массива осуществляется с помощью дополнительной переменной того же типа, что и базовый тип массива.
Например, так запишется фрагмент программы, обменивающий значения первого и пятого элементов массива А:
Vs:= A[5]; {Vs - вспомогательная переменная}
А[5]:= А[1];
А[1]:= Vs;
Пример программы ввода-вывода одномерного массива
program priimer1;
uses crt;
var
mas:array [1..10] of integer; {Описание одномерного массива с именем mas, состоящего из 10 элементов типа integer}
n,i:integer; {n-количество элементов массива, i-счетчик в цикле for}
BEGIN
clrscr;
writeln('Введите количество элементов массива не больше 10: ');
readln(n);
for i:=1 to n do {ввод элементов массива}
begin
writeln('Введите ',i,' элемент массива');
readln(mas[i]);
end; {конец ввода}
writeln('Введенный массив: ');
for i:=1 to n do {вывод элементов массива}
begin
write(' ',mas[i],' ');
end; {конец вывода}
readkey;
END.
Пример программы ввода-вывода двумерного массива
program primer2;
uses crt;
var
i,j,n,m:integer;
massiv:array[1..10,1..10] of integer; {описан двумерный массив с именем massiv}
BEGiN
clrscr;
write('Введите количество строк массива (не больше 10): ');
read(n); {n-количество строк}
write('Введите количество столбцов массива (не больше 10):');
read(m); {m-количество столбцов}
for i:=1 to n do {ввод элементов двумерного массива}
begin
for j:=1 to m do
read(massiv[i,j]);
end; {конец ввода}
writeln('Введенный массив: ');
for i:=1 to n do {вывод элементов двумерного массива}
begin
for j:=1 to m do
write(massiv[i,j]:5);
end; {конец вывода}
readkey;
END.
Пример программы нахождения в одномерном массиве элемента, заданного пользователем и подсчета количества его вхождений в данный массив
Пусть требуется составить программу, которая формирует одномерный массив вводом с клавиатуры, находит в массиве элементы, заданные пользователем, подсчитывает их количество и выводит номер первого найденного элемента.
В разделе описания констант укажем значение константы Count=10. В программе значение этой константы определяет количество элементов массива. Употребление константы в описании размеров массива предпочтительнее, так как в случае изменения размеров массива не нужно будет вносить изменения во весь текст программы, а достаточно только один раз указать в разделе описания констант новое значение константы Count. Тогда раздел описания констант и переменных в программе будет таким: Сonst Count=10;
В связи с этим описание массива зададим так: М : array [1..Count] of Byte;
Введем переменные целого типа: N - значение искомого элемента; А - номер первого элемента массива, значение которого равно N; В - количество таких элементов в массиве; I - переменная, выполняющая функции параметра цикла и одновременно служащая указателем номера очередного элемента массива.
В связи с тем, что ни один подходящий элемент еще не найден, присвоим переменным A и В значение 0. Затем выведем на экран приглашение на ввод значения искомого элемента считаем это значение с клавиатуры. На Паскале это запишется следующим образом:
Write('Введите значение элемента массива для поиска : ');
Readln(N) ;
Поиск элемента массива, значение которого равно введенному числу N, выполняется в циклическом сравнении значений всех элементов от первого до последнего со значением числа N, поэтому запишем его в виде цикла с параметром.
Оператор if M[I] = N then …выполняет сравнение значения очередного элемента массива с заданным значением N. Если условие М[I] = N выполняется, то счетчик числа найденных элементов В увеличивается на единицу. Так как требуется найти номер первого элемента, т. е. при первом выполнении условия М[I] = N запомнить номер данного элемента, то можно записать: if В = 0 then А := I.
Тогда блок поиска нужного элемента можно записать так:
for I := 1 to Count do
if M[I] = N then
begin
if В =0 then A := I;
В:= В+1;
end;
В заключительной части программа должна вывести на экран сообщение о том, что в массиве нет искомых элементов, или сообщение о количестве элементов массива, имеющих значение, равное N, и напечатать номер первого такого элемента. Это можно записать следующим образом:
if B=0 then
riteln('Нет таких элементов в массиве')
else
begin
Writeln('Количество элементов массива, имеющих значение ',N,' - ', B) ,
Writeln('Первый элемент, совпадающий с заданным ' , А) ;
end ;
В целом текст программы может быть таким:
program Find_Elem; {Поиск элемента в массиве}
Сonst
Count =10;
Var
М : array [1..Count] of byte;
N, A, B, I : Byte;
Begin {Основная программа}
for I:=1 to Count do {ввод элементов массива}
begin
writeln('Введите ',i,' элемент массива');
readln(M[I]);
end; {конец ввода}
writeln('Введенный массив: ');
for I:=1 to Count do {вывод элементов массива}
begin
write(' ',M[I],' ');
end; {конец вывода}
Writeln;
A := 0; {Нет элемента с таким значением}
В := 0; {Пока не найдено ни одного элемента}
Write('Введите значение элемента массива для поиска: ');
Readln(N) ;
for I := 1 to Count do {Поиск элемента, значение которого =N}
if M[I] == N then
begin
if В = 0 then A := I;{Запомнить номер первого элемента, равного N}
В := В + 1; {Увеличить число найденных элементов на 1}
end;
if B=0 then
Writeln('Нет таких элементов в массиве')
else
begin
Writeln('Количество элементов массива, имеющих значение',N,'-',B),
Writeln('Первый элемент, совпадающий с заданным - ', А) ;
end;
end.
Пример программы нахождения в одномерном массиве максимального элемента
Пусть требуется составить программу, которая формирует одномерный массив случайных чисел, выполняет поиск максимального элемента массива, а затем выводит на экран его значение и порядковый номер в массиве.
В разделе описания запишем размер массива Count=20, опишем массив целых чисел М следующим образом: М : array [I..Count] of byte . Используем целые переменные для хранения значений максимального элемента массива - Мах, его индекса - Numer_Max.
Перед началом поиска максимального элемента допустим, что его первый элемент и является максимальным элементом, а его индекс указывает позицию максимального элемента в массиве.
Это запишется так:
Мах:= М[1]; {Считать 1-й,элемент максимальным}
Numer_Max:=1; {Запомнить номер максимального элемента}
Повторяющийся просмотр массива с поиском максимального элемента, начиная со второго, выполняется оператором повтора с параметром, который одновременно указывает индекс очередного элемента. Сравнение очередного элемента массива с максимальным осуществляется оператором: If M[I] > Max then…
Если очередной элемент массива больше, чем максимальный, то следует считать его значение максимальным и запомнить его индекс.
Данный фрагмент программы запишется таким образом:
for I := 2 to Count do {Проверить все элементы, начиная со второго)
begin
if M[I] > Max then {Если очередной (I-й) элемент массива больше чем Мах}
begin
Max := M[I]; {то считать максимальным 1-й элемент}
Numer_Max:=I; {и запомнить его порядковый номер}
end;
end;
В заключительной части программы запишем вывод результата поиска максимального элемента массива:
Writeln('Максимальный элемент — ', Мах);
Writeln('Он расположен на ', Numer_Max, ' месте');
Полный текст программы получится таким:
program Max_Elem; {Поиск максимального элемента массива}
Const
Count =20;
Var
M : array [I..Count] of byte;
Max, I, Numer_Max : byte;
Begin {Основная программа}
for I:=1 to Count do {ввод элементов массива}
begin
writeln('Введите ',i,' элемент массива');
readln(M[I]);
end; {конец ввода}
writeln('Введенный массив: ');
for I:=1 to Count do {вывод элементов массива}
begin
write(' ',M[I],' ');
end; {конец вывода}
Writeln;
Max := M[1] ; {Считать 1-й элемент максимальным}
Numer_Max:=1; {Запомнить номер максимального элемента}
for I := 2 to Count do {Проверить все элементы, начиная со второго}
begin
if M[I] > Max then {Если очередной (I-й) элемент массива больше чем Мах}
begin
Max := M[I]; {то считать максимальным 1-й элемент}
Numer_Max:=I; {и запомнить его порядковый номер}
end;
end;
Writeln('Максимальный элемент — ', Max);
Writeln('Он расположен на ', Numer_Max, ' месте');