Укрупненной схемы алгоритма на языке Pascal

Формирование и вывод элементов двумерного массива

 

Используя оператор вывода 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.




Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: