Лекции.Орг


Поиск:




Категории:

Астрономия
Биология
География
Другие языки
Интернет
Информатика
История
Культура
Литература
Логика
Математика
Медицина
Механика
Охрана труда
Педагогика
Политика
Право
Психология
Религия
Риторика
Социология
Спорт
Строительство
Технология
Транспорт
Физика
Философия
Финансы
Химия
Экология
Экономика
Электроника

 

 

 

 


If (ik<is) or (jk<js) then




Пример 1.

В прямоугольной матрице поменять местами строки, содержащие максимальный и минимальный ее элементы.

 

По условию задачи не требуется определять положение максимального и минимального элементов в строке. Поэтому в программе используются лишь переменные и , отмечающие номера строк, содержащих эти элементы. Если , обмен строк не производится (нет смысла менять строку саму с собой).

 

Program Task201;

Const Mmax = 20; Nmax = 15;

Type Matrix = array [1..Mmax,1..Nmax] of real;

Var i,j,m,n,imax,imin: byte;

Amax,Amin,R: real;

A: Matrix;

Begin

В в о д m, n, A

Amax:=a[1,1]; imax:=1;

Amin:=a[1,1]; imin:=1;

For i:=1 to m do { Поиск в матрице }

For j:=1 to n do { максимального и }

If a[i,j]>Amax then { минимального }

Begin { элементов }

Amax:=a[i,j]; imax:=i;

End

Else

Ifa[i,j]<Amin then

Begin

Amin:=a[i,j]; imin:=i;

End;

If imax<>imin then

For j:=1 to n do { Обмен строк матрицы }

Begin

R:=a[imin,j]; a[imin,j]:=a[imax,j]; a[imax,j]:=R

End;

Печать A

End.

Пример 2.

Найти максимальный элемент среди элементов квадратной матрицы, расположенных выше главной диагонали, и минимальный элемент среди тех элементов, которые расположены ниже главной диагонали, после чего найденные элементы обменять местами.

 

Выпишем в явном виде элементы, расположенные выше главной диагонали (верхний треугольник квадратной матрицы):

a[1,2] a[1,3] a[1,4]... a[1,n-1] a[1,n]

a[2,3] a[2,4]... a[2,n-1] a[2,n]

a[3,4]... a[3,n-1] a[3,n]

...............................

a[n-2,n-1] a[n-2,n]

a[n-1,n]

Для общего элемента номер строки изменяется от 1 до n-1, т.е. i = 1.. (n-1); номер столбца - от i+1 до n, т.е. j = (i+1).. n.

Аналогично для элементов нижнего треугольника:

a[2,1]

a[3,1] a[3,2]

a[4,1] a[4,2] a[4,3]

.......................

a[n,1] a[n,2] a[n,3]... a[n,n-2] a[n,n-1]

Здесь i = 2.. n, j = 1.. (i-1).

 

Program Task202;

Const Nmax = 20;

Type Matrix = array [1..Nmax,1..Nmax] of real;

Var i,j,n,imax,imin,jmax,jmin: byte;

Amax,Amin: real;

A: Matrix;

Begin

В в о д n, A

Amax:=a[1,2]; imax:=1; jmax:=2;

For i:=1 to n-1 do { Поиск максимального }

For j:=i+1 to n do { элемента выше }

If a[i,j]>Amax then { главной диагонали }

Begin

Amax:=a[i,j]; imax:=i; jmax:=j

End;

Amin:=a[2,1]; imin:=2; jmin:=1;

For i:=2 to n do { Поиск минимального }

For j:=1 to i-1 do { элемента ниже }

If a[i,j]<Amin then { главной диагонали }

Begin

Amin:=a[i,j]; imin:=i; jmin:=j

End;

a[imin,jmin]:=Amax; a[imax,jmax]:=Amin;

Печать A

End.

Пример 3.

Среди диагоналей квадратной матрицы, параллельных главной и расположенных выше нее (включая главную диагональ), найти такую, сумма модулей элементов которой максимальная.

 

Индексы элементов, входящих в рассматриваемые диагонали:

1,1 2,2 3,3 4,4... n-2,n-2 n-1,n-1 n,n

1,2 2,3 3,4 4,5... n-2,n-1 n-1,n

1,3 2,4 3,5 4,6... n-2,n

.......................................

1,n-1 2,n

1,n

 

Будем считать номер диагонали k равным номеру столбца ее начального элемента: . Тогда индексы элементов, входящих в k-ую диагональ, равны j = k.. n; i = j - k +1.

 

Program Task203;

Const Nmax = 20;

Type Matrix = array [1..Nmax,1..Nmax] of real;

SumType = array [1..Nmax] of real;

Var i,j,k,kmax,n: byte;

SumMax: real;

A: Matrix;

S: SumType;

Begin

В в о д n, A

For k:=1 to n do { Формирование массива S, }

Begin { содержащего суммы }

S[k]:=0; { элементов диагоналей }

For j:=k to n do

Begin

i:=j-k+1; S[k]:=S[k]+abs(a[i,j]);

End;

End;

SumMax:=S[1]; kmax:=1;

For k:=2 to n do { Определение максимального }

If S[k]>SumMax then { значения в массиве S }

Begin

SumMax:=S[k]; kmax:=k

End;

П е ч а т ь SumMax, kmax

End.

Примечание. Нетрудно заметить, что для диагоналей, параллельных главной, соблюдается следующая закономерность между индексами их элементов: j - i = k - 1, где k - номер диагонали.

Используя эту закономерность, программу можно организовать следующим образом:

- обнулить элементы массива S;

- перебирая все элементы матрицы, расположенные выше главной диагонали и на главной диагонали (по циклу i = 1.. n, j = i.. n), модуль очередного элемента добавлять к сумме ;

- определить порядковый номер максимального элемента в одномерном массиве S.

 

Пример 4.

Побочной диагональю квадратной матрицы называют диагональ, соединяющую левый нижний угол матрицы с ее верхним правым углом. Среди диагоналей, параллельных побочной и расположенных ниже нее, найти такую, среднее арифметическое значение элементов которой максимальное.

 

Индексы элементов, входящих в рассматриваемые диагонали:

n,2 n-1,3 n-2,4... 4,n-2 3,n-1 2,n

n,3 n-1,4 n-2,5... 4,n-1 3,n

n,4 n-1,5 n-2,6... 4,n

.......................................

n,n-1 n-1,n

n,n

 

Будем считать номер диагонали k равным номеру столбца ее начального элемента: . Тогда индексы элементов, входящих в k-ую диагональ, равны i = n.. k; j = n - i+k. Количество элементов в диагонали равно n-k+1.

 

Program Task204;

Const Nmax = 20;

Type Matrix = array [1..Nmax,1..Nmax] of real;

Ar = array [2..Nmax] of real;

Var i,j,k,kmax,n: byte;

ArMax: real;

A: Matrix;

Sar: Ar;

Begin

В в о д n,A

For k:=2 to n do { Формирование массива Sar, }

Begin { содержащего средние }

Sar[k]:=0; { арифметические значения }

For i:=n downto k do { элементов диагоналей }

Begin

j:=n-i+k; Sar[k]:=Sar[k]+a[i,j];

End;

Sar[k]:=Sar[k]/(n-k+1);

End;

ArMax:=Sar[2]; kmax:=2;

For k:=3 to n do { Определение }

If Sar[k]>ArMax then { максимального }

Begin { значения в массиве Sar }

ArMax:=Sar[k]; kmax:=k

End;

П е ч а т ь ArMax, kmax

End.

 

Примечание. Для диагоналей, параллельных побочной, соблюдается следующая закономерность между индексами их элементов: i + j = n + k, где k - номер диагонали. Используя эту закономерность, программу можно организовать аналогично рекомендациям, отраженным в примечании к задаче 3.

 

Пример 5.

Расположить элементы прямоугольной матрицы в обратном порядке.

 

В программе Task205 сначала переставляются в обратном порядке строки матрицы, а затем - ее столбцы.

 

Program Task205;

Const Mmax = 20; Nmax = 15;

Type Matrix = array [1..Mmax,1..Nmax] of real;

Var i,j,k,m,n: byte;

R: real;

A: Matrix;

Begin

В в о д m, n, A

i:=1; k:=m; { Перестановка строк матрицы }

While i<k do { в обратном порядке }

Begin

For j:=1 to n do

Begin

R:=a[i,j]; a[i,j]:=a[k,j]; a[k,j]:=R;

End;

Inc(i); Dec(k);

End;

j:=1; k:=n; { Перестановка столбцов матрицы }

While j<k do { в обратном порядке }

Begin

For i:=1 to m do

Begin

R:=a[i,j]; a[i,j]:=a[i,k]; a[i,k]:=R;

End;

Inc(j); Dec(k);

End;

Печать A

End.

Пример 6.

Найти максимальное из чисел, встречающихся в целочисленной прямоугольной матрице более одного раза.

 

Функция RepElem в программе Task206 определяет, является ли элемент с индексами i и j повторяющимся в матрице A. Если RepElem(i, j) = true и Cond = true (повторяющийся элемент встретился впервые), то переменные запоминают индексы, а переменная - значение этого элемента. При Cond = false изменение значений переменных , , производится, если новый повторяющийся элемент превышает значение .

 

Program Task206;

Const Mmax = 30; Nmax = 50;

Type Matrix = array [1..Mmax,1..Nmax] of integer;

Var m,n, { размер матрицы }

imax,jmax, { позиция макс.элемента }

i,j,is,js: byte;

Amax: integer; { значение макс.элемента }

Cond: boolean;

A: Matrix; { исходная матрица }

{ -------------------------------------------- }

Function RepElem(ik,jk:byte):boolean;

{ RepElem=true, если элемент a[ik,jk] повторяющийся }

Var i,j,is,js: byte;

R: integer;

Begin

R:=a[ik,jk]; RepElem:=false;

For i:=1 to m do

For j:=1 to n do

If (R=a[i,j]) and (i<>ik) and (j<>jk) then

Begin

RepElem:=true; Exit

End;

End { RepElem };

{ -------------------------------------------- }

Begin

imax:=0; jmax:=0; Amax:=0; Cond:=true;

For i:=1 to m do

For j:=1 to n do

Begin

If RepElem(i,j) then

IfCond then

Begin

imax:=i; jmax:=j;

Amax:=a[i,j]; Сond:=false

End

Else

Ifa[i,j]>Amax then

Begin

imax:=i; jmax:=j; Amax:=a[i,j];

End

End;

Writeln('imax = ',imax,' jmax = ',jmax,' Amax = ',Amax);

End.

Пример 7.

Элементам целочисленной квадратной матрицы присвоить значения натурального ряда чисел в порядке прохождения правосторонней спирали, начиная с заданного углового элемента.

Например, для матрицы 6-го порядка с начальным элементом (1,6) имеем:

16 17 18 19 20 1

15 30 31 32 21 2

14 29 36 33 22 3

13 28 35 34 23 4

12 27 26 25 24 5

11 10 9 8 7 6

 

Program Task207;

{ Нумерация углов матрицы: 1 - левый верхний; 2 - правый }

{ верхний; 3 - правый нижний; 4 - левый нижний }

Const Nmax = 30;

Type Matrix = array [1..Nmax,1..Nmax] of word;

Var n, { размер матрицы А }

i,j,

k, { условный номер угла матрицы }

is, { индекс нач.эл-та формируемой части строки }

ik, { то же для конечного элемента строки }

js, { индекс нач.эл-та формируемой части столбца }

jk: byte; { то же для конечного элемента столбца }

Number: word; { заполняемое значение }

Cond: boolean;

A: Matrix;

{ ---------------------------------------------- }

Procedure ToRight;

{ Движение вправо по строке }

Var j: byte;

Begin

For j:=js to jk do

Begin

a[is,j]:=Number; Inc(Number);

End;

End { ToRight };

{ ---------------------------------------------- }

Procedure ToDown;

{ Движение вниз по столбцу }

Var i: byte;

Begin

For i:=is to ik do

Begin

a[i,jk]:=Number; Inc(Number);

End;

End { ToDown };

{ ---------------------------------------------- }

Procedure ToLeft;

{ Движение влево по строке }

Var j: byte;

Begin

For j:=jk downto js do

Begin

a[ik,j]:=Number; Inc(Number);

End;

End { ToLeft };

{ ---------------------------------------------- }

Procedure ToUp;

{ Движение вверх по столбцу }

Var i: byte;

Begin

For i:=ik downto is do

Begin

a[i,js]:=Number; Inc(Number);

End;

End { ToUp };

{ ---------------------------------------------- }

Begin

Ввод размера матрицы n и номера начального угла k

Number:=1; Cond:=true;

is:=1; js:=1; ik:=n; jk:=n;

While Cond do

Begin

Case k of

1: Begin

ToRight; Inc(is);

End;

2: Begin

ToDown; Dec(jk);

End;

3: Begin

ToLeft; Dec(ik);

End;

4: Begin

ToUp; Inc(js);

End;

end;

Inc(k);

If k>4 then k:=1;

If (ik<is) or (jk<js) then

Cond:=false;

End;

End.

Пример 8.

Элементы целочисленной прямоугольной матрицы A строго упорядочены по возрастанию:

a[1,1] < a[1,2] < a[1,3] <... < a[1,n] < a[2,1] <...

... < a[2,n] < a[3,1] <... < a[m,n]

Найти элемент, равный заданному числу , и отпечатать его индексы. Число действий в решении должно быть порядка , а не .

 

Последнее ограничение означает, что последовательный перебор всех элементов матрицы не допускается.

 

Вариант 1.

Если или , то матрица не содержит элемента, равного значению . В противном случае будем сравнивать переменную с первым элементом каждой строки матрицы. Если , = 2.. , то элемент, равный , может находиться в строке -1. Тогда производится последовательный просмотр элементов ( -1)-ой строки. Если условие ни разу не было выполнено, то просматриваются элементы m-ой строки.

Общее количество сравнений в варианте 1 не превышает .

 

Program Task208a;

Label 10;

Const Mmax = 30; Nmax = 50;

Type Matrix = array [1..Mmax,1..Nmax] of integer;

Var m,n, { размер матрицы }

is,js, { позиция эл-та, равного b }

i,j: byte;

b: integer;

Cond: boolean;

A: Matrix; { исходная матрица }

Begin

В в о д m, n, A, b

is:=0; js:=0;





Поделиться с друзьями:


Дата добавления: 2016-09-06; Мы поможем в написании ваших работ!; просмотров: 259 | Нарушение авторских прав


Поиск на сайте:

Лучшие изречения:

Так просто быть добрым - нужно только представить себя на месте другого человека прежде, чем начать его судить. © Марлен Дитрих
==> читать все изречения...

2510 - | 2261 -


© 2015-2025 lektsii.org - Контакты - Последнее добавление

Ген: 0.01 с.