Формирование и вывод элементов двумерного массива
Используя оператор вывода writeln (' Матрица D') на экран выводится надпись «Матрица D». Формирование элементов двумерного массива осуществляем в цикле посредством генератора случайных чисел. Для этого воспользуемся формулой random (b-a+1)+a. Тогда каждый элемент массива будет представлять собой целое число из интервала [a, b]. Одновременно с формированием элементов производим их вывод в виде матрицы. Более удобным в таких случаях будет использование оператора цикла со счетчиком for.
Запись write (d[i,j]:4) означает, что для вывода каждого элемента матрицы на экране отводится 4 позиции. Оператор writeln без параметров переводит курсор на другую строку. Фрагмент программы представлен ниже:
for i:=1 to m do
Begin
for j:=1 to m do begin
d[i,j]:=random (b-a+1)+a;
write (d[i,j]:4); end;
writeln;
end;
Преобразование двумерного массива в одномерный
Для преобразования двумерного массива в одномерный инициализируем переменную k для индексирования элементов одномерного массива X. В цикле осуществляем перезапись очередного элемента двумерного массива в k-ю ячейку памяти, отведенную под элементы одномерного массива. Фрагмент программы представлен ниже:
|
|
k:=0;
for i:=1 to m do
for j:=1 to m do begin
k:=k+1;
x[k]:=d[i,j]; end;
Вычисление суммы элементов одномерного массива
Вторая четверть начинается с i- ой позиции, равной n div 4+1 и заканчивается на позиции i:= n div 2. Используя оператор цикла с предусловием while, выбираем каждые третьи элементы заданной части массива и суммируем в переменной s. По завершении цикла выводим результат. Соответствующий фрагмент программы представлен следующим образом:
s:=0;
i:=n div 4+3;
while i<= n div 2 do begin
s:=s+x[i];
i:=i+3; end;
writeln ('Сумма каждых третьих элементов второй четверти массива = ',s);
Поиск наибольшего элемента массива
Для нахождения наибольшего элемента среди четных по значению, необходимо ввести переменную mах, которой в зависимости от выполнения условия a mod 2=0 присваиваем значение max:=a или max:=a+1. При просмотре массива (в операторе цикла for) сравниваем очередной элемент х[i] c наибольшим. Если элемент х[i] удовлетворяет условиям (x[i] mod 2=0) и (x[i]>max) (условный оператор if), то он становится наибольшим. По выходу из цикла выводим найденное значение с помощью оператора writeln.
Фрагмент программы представлен ниже:
max:=a;
for i:=1 to n do begin
if (x[i] mod 2=0) and (x[i]>max) then
max:=x[i];
end;
writeln ('Наибольший среди четных элементов массива = ', max);
Сортировка заданной части одномерного массива.
В последнем пункте задачи требуется упорядочить четные по номеру ненулевые элементы первой половины одномерного массива по убыванию модулей обратных значений. Для реализации данной подзадачи воспользуемся методом линейной сортировки по убыванию (сортировка отбором). Суть метода в следующем: последовательно просматривая весь массив, находим наибольшее число и меняем его с первым элементом. Затем просматриваются элементы массива, начиная со второго, снова находится наибольший, который меняется местами со вторым и т.д., пока не будет отсортирован весь массив.
|
|
Фрагмент программы представлен ниже:
for i:=1 to n div 2-1 do begin
for j:=i+1 to n div 2 do
If (j mod 2=0) and (i mod 2=0) and (x[i]<>0) and (x[j]<>0) and (abs (1/x[j])> abs (1/x[i]))
Then begin
buf:=x[j];
x[j]:=x[i];
x[i]:=buf;
end;
end;
Листинг программы
program kr;
uses crt;
const n=36;m=6;
a=-10;b=10;
var d:array [1..m,1..m] of integer;
x:array [1..n] of integer;
i,k,j,l:byte;
buf,max,s:integer;
begin
clrscr;
randomize;
writeln (' Матрица D');
writeln;
for i:=1 to m do begin
for j:=1 to m do begin
d[i,j]:=random (b-a+1)+a;
write (d[i,j]:4); end;
writeln;
end;
writeln;
writeln ('Нажмите ENTER для продолжения');
readkey;
clrscr;
writeln (' Массив X');
k:=0;
for i:=1 to m do
for j:=1 to m do begin
k:=k+1; x[k]:=d[i,j]; end;
writeln;
i:=1;
while i<= n div 2 do begin
write (x[i]:3,' ');
i:=i+1;
end;
writeln;
i:=n div 2+1;
while i<= n do begin
write (x[i]:3,' ');
i:=i+1;
end;
writeln; writeln;
writeln ('Нажмите ENTER для продолжения');
readkey;
s:=0; writeln;
write ('II четверть массива: ');
for i:=n div 4+1 to n div 2 do write(x[i]:3,' '); writeln;
i:=(n div 4+3);
while i<= n div 2 do begin
s:=s+x[i]; i:=i+3; end;
writeln ('Сумма каждых третьих элементов второй четверти массива = ',s);
writeln;
writeln ('Нажмите ENTER для продолжения');
readkey;
if a mod 2=0 then max:=a else max:=a+1;
writeln;
writeln('Четные элементы массива');
for i:=1 to n do begin
if x[i] mod 2=0 then write(x[i],' ');
if (x[i] mod 2=0) and (x[i]>max) then
max:=x[i];
end;
writeln;
writeln ('Наибольший среди четных элементов массива = ', max);
writeln;
writeln ('Нажмите ENTER для продолжения');writeln;
readkey;
writeln ('I половина массива до сортировки: ');
for i:=1 to n div 2 do write (x[i],' ');
writeln; writeln;
for i:=1 to n div 2-1 do begin
for j:=i+1 to n div 2 do
if (j mod 2=0) and (i mod 2=0) and (x[i]<>0) and (x[j]<>0) and(abs(1/x[j])>abs(1/x[i]))
then begin
buf:=x[j];
x[j]:=x[i];
x[i]:=buf;
end;
end;
writeln ('I половина массива после сортировки:');
for i:=1 to n div 2 do write (x[i],' ');
readkey;
end.