Партнерка на США и Канаду по недвижимости, выплаты в крипто

  • 30% recurring commission
  • Выплаты в USDT
  • Вывод каждую неделю
  • Комиссия до 5 лет за каждого referral

Двумерные массивы.

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

Например, данные о планетах Солнечной системы представлены следующей таблицей:

Планета

Расст. до Солнца

Относ. обьем

Относ. масса

Меркурий

57.9

0.06

0.05

Венера

108.2

0.92

0.81

Земля

149.6

1.00

1.00

Марс

227.9

0.15

0.11

Юпитер

978.3

1345.00

318.40

Сатурн

1429.3

767.00

95.20

Их можно занести в память компьютера, используя понятие двумерного массива. Положение элемента в массиве определяется двумя индексами. Они показывают номер строки и номер столбца. Индексы разделяются запятой. Например: A[7, 6], D[56, 47].

При описании массива задается требуемый объем памяти под двумерный массив, указываются имя массива и в квадратных скобках диапазоны изменения индексов. Описание производится одним из следующих способов:

Способ 1.

Const

n = 2; m = 3;
Type omyarray = Array[1..m] Of real;
dmyarray = Array[1..n] Of omyarray;
Var v : omyarray;
a : dmyarray;

В данном случае переменная v объявлена как одномерный массив из трёх элементов вещественного типа. Переменная а описана как двумерный массив из двух строк, каждую из которых включено по три элемента.

Способ 2.

Описание массива А можно сократить, исключив определение типа omyarray в определении типа dmyarray:

НЕ нашли? Не то? Что вы ищете?

Const

n = 2; m = 3;
Type dmyarray = Array[1..n, 1..m] Of <тип
элементов>;
Var a : dmyarray.

Способ 3.

Ещё более краткое описание массива А можно получить, указывая имя массива и диапазоны изменения индексов для каждой размерности массива:

Const n = 2; m = 3;
Type dmyarray = Array[1..n, 1..m] Of <тип
элементов >;

Var a : dmyarray.

При выполнении инженерных и математических расчетов часто используются переменные более чем с двумя индексами. При решении задач на ЭВМ такие переменные представляются как компоненты соответственно трех-, четырехмерных массивов и т. д.

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

Заполнение двумерного массива.

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

Program Vvod1;

Var I, J : Integer;

A : Array [1..20, 1..20] Of Integer;

Begin

FOR I := 1 TO 3 DO

FOR J := 1 TO 4 DO

Readln(A[I, J])

End.

Program Vvod2;

Var I, J : Integer;

A : Array [1..20, 1..20] Of Integer;

Begin

FOR I := 1 TO 3 DO

FOR J := 1 TO 5 DO

A[I, J] := -25 + Random(56)

End.

Program Vvod3;

Var I, J : Integer;

A : Array [1..20, 1..20] Of Integer;

Begin

FOR I := 1 TO 3 DO

FOR J := 1 TO 2 DO A[I, J] := 456 + I

End.

элементы массива примут значения A[1, 1] = 457; A[1, 2] = 457; A[2, 1] = 458; A[2, 2] = 458; A[3, 1] = 459; A[3, 2] = 459.

Вывод двумерного массива на экран.

Program Vivod;

Var I, J : Integer;

A : Array [1..20, 1..20] Of Integer;

Begin

For i:=1 To n Do

Begin {вывод i-ой строки массива}

For j:=1 To n Do Write(x[i, j]:5);

Writeln; {переход на начало следующей строки}

End;

End.

Задача 1. Заполнить матрицу порядка n по следующему образцу:

n-2 n-1 n

n-3 n-2 n-1

n-4 n-3 n-2

n-1 n-2 n-3

n n-1 n-2

Program Massiv2;

Var I, J, K, N : Integer;

A : Array [1..10, 1..10] Of Integer;

Begin

Write('Введите порядок матрицы: '); ReadLn(N);

For I := 1 To N Do

For J := I To N Do

Begin

A[I, J] := J - I + 1; A[J, I] := A[I, J];

End;

For I := 1 To N Do

Begin

WriteLn;

For J := 1 To N Do Write(A[I, J]:4);

End

End.

Рассмотрим как эффективно обрабатывать различные части квадратных матриц.

Проведем в таблице «главную диагональ» - линию соединяющую левый верхний и правый нижний угол матрицы. Пометим все элементы цифрами 0,1,2 в зависимости от расположения элемента относительно главной диагонали:

0

1

1

1

1

2

0

1

1

1

2

2

0

1

1

2

2

2

0

1

2

2

2

2

0

Элементы, стоящие на главной диагонали матрицы, обозначены цифрой 0.

У произвольного элемента матрицы a[i,j] i – номер строки, а j – номер столбца.

·  Если номер строки элемента совпадает с номером столбца( i=j ), то элемент лежит на главной диагонали (на рисунке они обозначены цифрой 0). Для обработки всех элементов главной диагонали достаточно одного цикла:

For i:=1 to n do

  …a[i,i]…

·  Если номер строки превышает номер столбца ( i>j ), то элемент находится ниже главной диагонали (на рисунке они обозначены цифрой 2). Эти элементы описываются так:

  For i:=2 to n do

  For j:=1 to i-1 do

  …a[i,j]…

·  Если номер столбца больше номера строки ( i<j ), то элемент находится выше главной диагонали (на рисунке они обозначены цифрой 1)

Для их обработки можно написать цикл:

For i:=1 to n-1 do

(это цикл по всем строкам)

For j:=i+1 to n do

(цикл по столбцам: от диагонали до n)

a[i, j]…

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

Program Obmen;

Var N, I, J, Max, Ind, Vsp : Integer;A : Array [1..15, 1..15] Of Integer;

Begin

WRITE('Введите количество элементов в массиве: '); READLN(N);

FOR I := 1 TO N DO

FOR J := 1 TO N DO

Begin

WRITE('A[', I, ',', J, '] '); READLN(A[I, J])

End;

FOR I := 1 TO N DO

Begin

Max := A[I, 1]; Ind := 1;

FOR J := 2 TO N DO

IF A[I, J] > Max THEN

Begin

Max := A[I, J]; Ind := J

End;

Vsp := A[I, I]; A[I, I] := A[I, Ind]; A[I, Ind] := Vsp

End;

FOR I := 1 TO N DO

Begin

WriteLn;

FOR J := 1 TO N Do Write(A[I, J] : 3);

End; WriteLn

End.

Контрольные вопросы и задания

1.  Можно ли выполнять обход двумерного массива, организовав внешний цикл по столбцам, а внутренний — по строкам?

2.  Целесообразно ли использовать ли вложенные циклы, если совершается обход только главной диагонали квадратной матрицы? одной строки матрицы? одного столбца матрицы?

3.  Сформировать квадратную матрицу по следующему образцу:

4.  Сформировать квадратную матрицу по следующему образцу:

5.  Сформировать квадратную матрицу по следующему образцу:

6.  Сформировать квадратную матрицу по следующему образцу:

7.  Сформировать квадратную матрицу по следующему образцу:

8.  Сформировать квадратную матрицу по следующему образцу:

9.  Сформировать квадратную матрицу по следующему образцу:

10.  Сформировать квадратную матрицу по следующему образцу:

11.  Сформировать квадратную матрицу по следующему образцу:

12.  Сформировать квадратную матрицу по следующему образцу:

13.  Сформировать квадратную матрицу по следующему образцу

(n — чётное):

14.  Заполнить массив А размером n ´ m следующим образом, например, n = 6 и m = 8, то есть заполняется в виде змейки:

1

2

3

4

5

6

7

8

16

15

14

13

12

11

10

9

17

18

19

20

21

22

23

24

32

31

30

29

28

27

26

25

33

34

35

36

37

38

39

40

48

47

46

45

44

43

42

41

15.  Заполните массив по следующим правилам:

1

0

2

0

3

0

4

0

7

0

6

0

5

0

8

0

9

0

10

0

11

0

14

0

13

0

12

16.   

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

17.   

1

2

3

4

5

6

2

3

4

5

6

1

3

4

5

6

1

2

4

5

6

1

2

3

5

6

1

2

3

4

6

1

2

3

4

5

18.  Дан двумерный массив. Найти сумму и количество элементов в каждом столбце:

·  кратных k1 или k2;

·  попадающих в интервал от А до В.

19.  Дан двумерный массив. Найти:

·  сумму элементов в строках с k1 по k2;

·  номера всех максимальных элементов.

20.  Дан двумерный массив. Определить:

·  есть ли в данном массиве отрицательный элемент;

·  есть ли два одинаковых элемента;

·  есть ли данное число А среди элементов массива;

·  есть ли в заштрихованной области элемент, равный А (массив имеет размерность ).

21.  Дан двумерный массив. Определить, есть ли в данном массиве строка (столбец):

·  состоящая только из положительных элементов;

·  состоящая только из положительных или нулевых элементов;

·  состоящая только из элементов, больших числа А;

·  состоящая только из элементов, принадлежащих промежутку от А до В.

22.  Дана матрица A(N, M). Получите одномерный массив X(M), равный P-той строке матрицы, и вектор Y(N), равный Q-му столбцу матрицы.

23.  Дана матрица A(N, M). Сформируйте одномерный массив X(M), где значение Xj равно сумме положительных элементов j–го столбца матрицы A.

24.  Дана целочисленная матрица A(N, M). Вычислите сумму и произведение тех её элементов, которые при делении на два дают нечётное число.

25.  В заданной матрице A(N, M) поменяйте местами столбцы P и Q.

26.  Дана матрица A(N, M). Поменяйте местами её наибольший и наименьший элементы (первые по порядку, если их несколько). Порядок просмотра элементов матрицы слева направо и сверху вниз.

27.  Дана матрица A(N, M). Найти её наибольший элемент (первый по порядку, если их несколько) и номера строки и столбца, на пересечении которых он находится.

28.  В каждой строке заданной матрицы A(N, M) вычислите сумму, количество и среднее арифметическое положительных элементов.

29.  Для заданной целочисленной матрицы A(N, M) определите, является ли сумма её элементов чётным числом, и выведите на экран соответствующий текст.

30.  Дана матрица A(N, M). Найдите количество элементов этой матрицы, больших среднего арифметического всех её элементов.

31.  Дана целочисленная матрица A(N, M). Вычислите количество строк матрицы, содержащих хотя бы одно нулевое значение или выведите сообщение об отсутствии таких строк.