Примеры обработки массивов.
Рассмотрим примеры обработки отдельных элементов массива. ( слайд 14,15)
1). Найти сумму элементов массива. ( слайд 16)
S:= 0;
for i:=1 to 5 do
S:= S + a[i];
writeln(‘S=’, S);
2). Сложение двух векторов A и B. ( слайд 17)
for i:=1 to 5 do
d[i]:= a[i] + b[i];
writeln(‘ массив D = A + B‘);
for i:=1 to 5 do
writeln(d[i]);
3). Определить количество четных элементов в массиве A и распечатать их.
( слайд 18)
k:= 0; { счетчик }
for i:=1 to 5 do
if a[i] mod 2 = 0 then
begin
k:= k + 1;
y[k]:= a[i]
end;
{распечатка массива четных чисел}
If k = 0 Then
writeln(‘четных нет’)
Else
for i:= 1 to k do
write( y[i]:5 );
writeln;
4). Определить количество положительных элементов в массиве A. ( слайд 19)
k:= 0; { счетчик }
for i:=1 to 5 do
if a[i] > 0 then
begin
k:= k + 1;
y[k]:= a[i]
end;
If k = 0 Then
writeln(‘ нет ’)
Else
for i:= 1 to k do
writeln( y[i] );
Аналогично определяется количество нечетных, отрицательных, нулевых и т.д. элементов.
5). Если элемент массива принадлежит интервалу [n, m], то обнулить его.
( слайд 20)
for j:= 1 to 5 do
if (a[j] >= n) AND (a[j]<=m) then a[j]:=0;
6). Если элемент массива не принадлежит интервалу [n, m], то увеличить на единицу все его элементы.
for j:= 1 to 5 do
if (a[j]< n) OR (a[j]>m) then a[j]:=a[j]+1;
7). Найти максимальный и минимальный элементы массива и поменять их местами. ( слайд 21)
{ найдем max и его индекс }
max:= a[1]; n:=1; { n – индекс max}
for i:= 2 to 5 do
if max < a[i] then
begin
max:=a[i]; n:=i;
end;
{ найдем min и его индекс }
min:= a[1]; m:=1; { m – индекс min}
for i:= 2 to 5 do
if min > a[i] then
begin
min:=a[i]; m:=i;
end;
{ поменяем местами max и min }
buf:= a[n];
a[n]:=a[m];
a[m]:=buf;
8). Найти сумму элементов массива, начиная с первого отрицательного.
1-й вариант:
for i:= 1 downto 5 do
if a[i]< 0 then n:=i ; {n–номер отр. эл-та}
S:=0;
for i:= n to 5 do
S:=S = a[i];
2-й вариант:
for i:= 1 to 5 do
if a[i]< 0 then
begin
n:=i ;
goto 1 { или BREAK}
end;
1: S:=0;
for i:= n to 5 do
S:=S = a[i];
9). Определить, содержит ли массив число, равное Z, если да, то в каких позициях.
Program poisk;
Const Z=-20; n=30;
Var a: array[1..n] of integer;
i, k : byte;
Begin
for i:= 1 to n do
read(a[i]); {ввод элементов массива}
k:=0; { счетчик }
for i:= 1 to n do
begin
if a[i] = Z then
begin
k:=k + 1;
write(‘обнаружено ’, k, ‘-е число Z=’, Z);
writeln(‘ в позиции ’, i );
end;
end;
if k < > 0 then
writeln(‘Z= ‘, Z, ‘ встречается ‘, k, ‘ раз’)
else
writeln(‘числа ’,Z, ‘ нет в массиве A‘);
End.
1.1. Найти сумму элементов массива, начиная с первого отрицательного.
( слайд 2, 3)
1-й вариант:
for i:= 5 downto 1 do
if a[i]< 0 then n:=i ; {n–номер отр. эл-та}
S:=0;
for i:= n to 5 do
S:=S + a[i];
2-й вариант:
for i:= 1 to 5 do
if a[i]< 0 then
begin
n:=i ;
goto 1 { или BREAK}
end;
1: S:=0;
for i:= n to 5 do
S:=S + a[i];
1.2 Определить, содержит ли массив число, равное Z, если да, то в каких позициях.
(слайды 4, 5)
Program poisk;
Const Z=-20; n=30;
Var a: array[1..n] of integer;
i, k : integer;
Begin
for i:= 1 to n do
read(a[i]); {ввод элементов массива}
k:=0; { счетчик }
for i:= 1 to n do
begin
if a[i] = Z then
begin
k:=k + 1;
write(‘обнаружено ’, k, ‘-е число Z=’, Z);
writeln(‘ в позиции ’, i );
end;
end;
if k < > 0 then
writeln(‘Z= ‘, Z, ‘ встречается ‘, k, ‘ раз’)
else
writeln(‘числа ’,Z, ‘ нет в массиве A‘);
End.
1.3 Переставить попарно внутри массива первый и последний элементы, второй и предпоследний и т.д. ( А I-й с N+1-ым) (слайды 6, 7)
Const n=6;
VAR A,B : array[1..N] of integer;
I,k,r: integer;
BEGIN k:=round(N/2);
FOR i:= 1 to k do
begin r := A[i];
A[i] := A[n-i+1] ;
A[n-I+1]:=r;
end;
End.
2. Ввод – вывод двумерных массивов. ( слайд 8)
Значения элементов двумерного массива (матрицы) можно ввести в программу следующими способами:
1). типизированной константой;
2). ввод с клавиатуры;
3). ввод из файла;
Значения отдельных элементов массива можно задать оператором присваивания.
Вывод элементов массива и результатов вычислений можно осуществить :
1). на экран;
2). в файл.
Рассмотрим примеры