ЛАБОРАТОРНАЯ РАБОТА № 6 Разработка алгоритмов и программирование задач формирования и обработки двумерных массивов

  • docx
  • 17.11.2021
Публикация на сайте для учителей

Публикация педагогических разработок

Бесплатное участие. Свидетельство автора сразу.
Мгновенные 10 документов в портфолио.

Иконка файла материала Л2-001768.docx

ЛАБОРАТОРНАЯ                      РАБОТА № 6

Разработка алгоритмов и программирование задач формирования и обработки двумерных массивов

 

Цель: освоить методы разработки алгоритмов и программирование задач по формированию и обработке двумерных массивов.

 

Краткие теоретические сведения

Массивы, положение элементов в которых описывается двумя индексами, называются двумерными. Двумерный массив можно представить в качестве таблицы, в каждой ячейке которой содержится определенное значение. Для того чтобы получить доступ к тому или иному элементу двумерного массива, нужно указать номер строки i и номер столбца j. Часто двумерные массивы называются матрицами.

Например, представление чисел последовательно в несколько строк является матрицей:


æ 2.3

ç


- 2.7


7.4


0.2 ö

÷


Х = ç- 0.4


3.2


- 4.8


- 0.12÷


èøç 12.7


- 1.4



÷

Данная матрица Х имеет размер 3 на 4, т.е. она состоит из 3 строк и 4 столбцов.

Количество элементов или размер массива вычисляется как произведение количества строк n=3 на количество столбцов m=4, то есть размер массива составляет 3 • 4 = 12 элементов.

Каждый элемент имеет свой номер, он состоит из двух чисел - номера строки, в которой находится элемент, и номера столбца. Например, Х13 – это элемент, стоящий в первой строке и в третьем столбце.

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

Если во внешнем цикле изменяется параметр i, а во вложенном параметр j, то ввод элементов двумерного массива выполняется по строкам, а если i и j поменять местами, то ввод будет выполняться по столбцам.

 

1

Ввод N, М

 

2

i =1, N                    

3

j =1, М

4

Ввод Хij

 

 

 

Для осуществления ввода элементов двумерного массива Х вначале необходимо ввести количество строк N и количество столбцов М (блок 1). Во внешнем цикле осуществляется перебор параметра i от 1 до N (блок 2), а во вложенном цикле осуществляется перебор параметра j от 1 до М (блок 3). Ввод значения элемента массива Хij выполняется в блоке 4.

Аналогично структуре ввода элементов двумерного массива по строкам или столбцам осуществляется их вывод.

 

83


1

i =1, N                    

2

j =1, М

 

3

Вывод Хij

 

 

 

 

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

Двумерные массивы на языке программирования Pascal описать можно в разделе переменных VAR или в разделе типов TYPE.

1   вариант

Var имя массива: array [тип индекса] of тип элементов массива;

Например,

Var Х: array [1..3,1..4] of integer;

//Х     –    двумерный          массив       размером         3    на     4,     который        состоит        из элементов целого типа.

2   вариант

Type имя типа = array [тип индекса] of тип элементов массива; Var имя массива: имя типа;

Например,

Type mas2= array [1..3,1..4] of real; Var Х: mas2;

Для обращения к элементу двухмерного массива необходимо указать имя массива и в квадратных скобках через запятую значения двух индексов (первый указывает номер строки, а второй – номер столбца), на пересечении которых стоит элемент (например, х[i,2]:=6).

Формирование двумерного массива можно осуществить несколькими способами:

1)   ввод значений элементов двумерного массива с клавиатуры

Write („Введите n, m‟);                 Readln (n, m); Writeln ('Введите элементы матрицы Х'); For i:=1 to n do

For j:=1 to m do

begin       Write („Х[', i , ',' , j ,']=');                  Read (X[i, j]);            end;

 

84


Когда осуществляется ввод очередного элемента, то оператор read считывает его и помещает в ячейку с текущими индексами i и j. Когда параметр i равен единице, значение параметра j будет изменяться m раз, и, значит, заполняется первая строка таблицы. Когда параметр i равен двум, значение параметра j снова будет изменяться m раз и заполняется вторая строка таблицы. Аналогично заполняются остальные строки таблицы. Вложенный цикл в общей сложности совершит n m итераций, внешний только n.

 

2)            задание    значений     элементов     двумерного     массива     с использованием генератора случайных чисел

Const n = 5; m=4;

Var X: array [1..n, 1..m] of integer; i, j : integer;

begin

randomize;

for i:=1 to n          do

for j:=1 to m           do

X[i, j] := random(45)-22;

end;

3)       считывание значений      элементов двумерного массива  из текстового файла

Assign (F,C:\tp\bin\my.txt’); Reset (F);

Readln (F, n, m);                            {чтение из файла размерности матрицы} For i:=1 to n do begin

For j:=1 to m           do

Read (F, X[i, j]);                         {считывание элементов строки} Readln (F);

end; Close(F);

 

В программе должна быть объявлена переменная типа TEXT, которая будет указывать на текстовый файл, файл нужно открыть и указывать на него в каждом операторе ввода (или вывода). Для данного примера файл my.txt в папке C:\tp\bin должен иметь такой вид: в первой строке указывается количество строк и столбцов матрицы, затем элементы матрицы по строкам.

 

85


Например,

4

6

 

12

 

14

23

45

32

22

32

 

43

13

25

32

23

53

 

43

14

25

32

22

41

 

24

32

11

52

34

 

4)           задание    значений     элементов    двумерного    массива    по заданному правилу

Например, необходимо заполнить массив Х(6, 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

Массив заполняется по принципу «змейки». Правило заполнения: если номер строки – нечетное число, то элемент массива вычисляется по формуле: Х[i,j]=(i - 1)*m + j, иначе Х[i,j]= i * m j +1.

Write („Введите n, m‟); Readln (n, m); For i:=1 to n do

For j:=1 to m do

if i mod 2 = 1 then Х[i,j]=(i-1)*m+j else Х[i,j]=i*m-j+1;

 

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

For i:=1 to n do begin For j:=1 to m do

Write (X[i, j]: 6 : 2, „ „); {вывод элементов i-й строки} Writeln ; {перевод курсора на новую строку} end;

 

При решении задач с двумерными массивами можно выделить несколько видов задач.

 

 

86


Пример 1. Для массива А(n,m) определить процент нулевых элементов.

Решение.

Введем обозначения: n, m количество строк и столбцов в массиве; А - имя массива; i, j – индексы массива; А(i,j) - элемент массива А; k - количество нулевых элементов в массиве А; р - процент нулевых элементов.

Исходные данные: n, m, массив А. Результат вычислений: р.

 

Схема алгоритма решения задачи имеет вид:


 

Пояснения к решению задачи.

Формула         для      расчета        процента         нулевых         элементов          имеет       вид:


p =    k n × m


×100% ,  где k - количество нулевых элементов в массиве А.


 

87


Текст программы решения задачи имеет вид: program pr1;

type mas=array[1..10,1..10] of integer; var a:mas;

i,j,n,m,k: integer;                p: real; begin

writeln(„Ввод n,m‟); readln (n,m); writeln („Ввести массив A‟);

for     i:=1       to     n     do

for      j:=1      to     m     do read (a[i,j]);


 

 

 

 

end.


k:=0;

for      i:=1       to     n     do

for      j:=1       to     m     do

if     a[i,j] =0        then      k:=k+1;

p := k*100/(n*m);                    writeln ('p=', p:6:2);


 

Пример 2. Для массива Т(n,m) определить количество и произведение положительных элементов, которые расположены ниже главной диагонали.

Решение.

Введем обозначения: n, m количество строк и столбцов в массиве; Т - имя массива; i, j – индексы массива; Т(i,j) - элемент массива Т; k - количество элементов; р – произведение элементов.

Исходные данные: n, m, массив Т. Результат вычислений: k, р.

 

Текст программы решения задачи имеет вид: program      pr2;

type mas=array[1..10,1..10] of real; var t:mas;

i, j, n, m, k: integer;                  p: real; begin

writeln („Ввод n,m‟); readln (n,m); writeln („Ввод элементов массива T‟); for    i:=1      to         n          do

for      j:=1      to     m     do     read (t[i,j]); k:=0; p:=1;

 

88


 

 

 

 

 

 

end.


for      i:=1       to     n     do

for      j:=1       to     m     do if          t[i,j] > 0 then if i > j then

begin   k:=k+1; p:=p * t[i,j]                     end; writeln ('p=', p:6:2, '                                    k=', k:2);


 

Схема алгоритма решения задачи имеет вид:

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

89


Пояснения к решению задачи.

Матрицу, у которой одинаковое количество строк и столбцов, называют квадратной. У квадратной матрицы появляются

«диагонали» - главная, идущая из левого верхнего угла в правый нижний и побочная. На главной диагонали лежат элементы, у которых номер строки и столбца равны между собой (Т[1,1], Т[2,2] и т.д.). Диагональ делит матрицу на две части. У элементов, лежащих ниже главной диагонали, номер столбца меньше номера строки (например, Т[2,1], Т[5,2]).

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

-   если номер строки элемента совпадает с номером столбца (i=j), значит, элемент находится на главной диагонали матрицы;

-    если номер строки превышает номер столбца (i>j), то элемент находится ниже главной диагонали матрицы;

-     если   номер столбца больше номера строки (i<j), то элемент находится выше главной диагонали матрицы;

-    элемент находится на побочной диагонали, если его индексы удовлетворяют неравенству (i+j-1)=N;

-   неравенство (i+j-1) <N характерно для элемента, находящегося выше побочной диагонали;

-   неравенство (i+j-1) >N характерно для элемента, находящегося ниже побочной диагонали.


Пример 3. Для массива Х(n,m) определить минимальный по модулю элемент и его индексы.

Решение.

Введем обозначения: n, m количество строк и столбцов в массиве; Х - имя массива; i, j – индексы массива; Х(i,j) - элемент массива Х; min - минимальное значение в массиве Х, ni, nj - индексы минимального значения.

 

90


Исходные данные: n, m, массив Х. Результат вычислений: min, ni, nj.

Схема алгоритма решения задачи имеет вид:

 

1

начало

2

Ввод N, М

 

3

i =1, N                                         

4

j =1, М

5

Ввод Хij

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Пояснения к решению задачи.

Для поиска минимального по модулю элемента в массиве используется стандартный алгоритм, состоящий из следующих шагов:

1.               выбирают в качестве минимального значения элемент, расположенный на пересечении первой строки и первого столбца

 

 

 

91


(min =│Х11│), запоминают его номер строки и номер столбца (ni = 1, nj=1);

2.          сравнивают значение переменной min со вторым элементом массива. Если оказывается, что │Х12 меньше чем min, т.е. если выполняется условие │Х12│<min, тогда в качестве min берут значение │Х12 и запоминают его индексы. В противном случае, значение переменной min оставляют без изменения.

3.    Циклически повторяют действия п.2 для третьего, четвертого и т.д. элементов. По завершению цикла переменная min будет содержать минимальный по модулю элемент массива, ni - номер строки, nj - номер столбца минимального по модулю элемента.

Аналогично осуществляется поиск максимального элемента.

 

Текст программы решения задачи имеет вид:

Program         pr3;

type mas=array[1..10,1..10] of real; var Х:mas;

i, j, n, m, ni, nj: integer;                 min: real; begin

writeln („Ввод n,m‟); readln (n,m); writeln („Ввод элементов массива X‟); for    i:=1      to         n          do

for      j:=1      to     m     do     read (X[i,j]); min:=abs(X[1,1]); ni:=1; nj:=1;

for     i:=1       to     n     do

for      j:=1      to     m     do

if     abs(X[i,j])<min then

begin       min:=abs(X[i,j]); ni:=i; nj:=j; end; writeln („Минимальный по модулю элемент равен ‟, min:6:2); writeln („Индексы ‟, '                                                      ni=', ni:2, '           nj=', nj:2);

end.

 

Пример 4. Из массива А(n,m) сформировать массив B(m), каждый элемент которого равен количеству отрицательных элементов соответствующего столбца массива А.

Решение.

Введем обозначения: n, m количество строк и столбцов в массиве; А, В - имя массива; i, j – индексы массива; А(i,j) - элемент массива А; В(j) - элемент массива В; k - количество отрицательных элементов.

 

92


Исходные данные: n, m, массив А. Результат вычислений: массив В.

Схема алгоритма решения задачи имеет вид:


Текст программы решения задачи имеет вид: Program     pr4;

type mas1=array[1..10,1..10] of integer; mas2=array[1..10] of integer;

var a:mas1; b:mas2;                 i,j,n,m,k: integer; begin

writeln („Ввод n,m‟); readln (n,m); writeln („Ввод элементов массива A ‟); for   i:=1      to         n          do

 

 

93


for     j:=1       to     m     do        read (а[i,j]); writeln(„Вывод элементов массива В ‟); for j:=1      to          m          do

begin

k:=0;

for   i:=1 b[j]:=k;

 

to   n   do     if   а[i,j] <0 then    k:=k+1; writeln(' B[ ', j, ' ]= ',b[j]:3);

end;

 

 

end.

 

 

 

Задание

 

1.   Изучить лекционный материал и методические рекомендации для выполнения задания.

2.   Разработать алгоритм решения задачи.

3.   Составить программу на алгоритмическом языке Pascal.

4.            Выполнить      отладку     и     тестирование     программы     на компьютере.

5.            Подготовить      отчет     о     выполнении     задания.    Пример оформления отчета представлен в приложении 2.

6.   Подготовить ответы на контрольные вопросы.

 

Варианты заданий

 

 

п/п

Вид задания

 

 

 

1

а) Для массива K(N,M) определить произведение отрицательных элементов главной диагонали и сумму положительных элементов побочной диагонали.

б) Из массива C (5,4) сформировать массив М (5), каждый элемент которого равен сумме абсолютных значений элементов соответствующей строки массива С. Упорядочить

значения массива М по возрастанию.

 

 

 

2

а)    Для   массива    А(N,M)    определить    максимальный    по модулю элемент и обнулить все элементы строки и столбца, на пересечении которых расположено найденное значение. б) Из массива Т (5,4) сформировать массив Х (4), каждый элемент    которого   равен    произведению    положительных

значений элементов соответствующего столбца массива Т. Упорядочить значения массива Х по убыванию.

 

94


 

 

 

3

а) Для массива В(N,M) определить среднее арифметическое положительных элементов, которые находятся выше главной диагонали.

б) Из массива Х (5,4) сформировать массив Н (5), каждый элемент которого равен произведению отрицательных элементов соответствующей строки массива Х.

Упорядочить значения массива Н по возрастанию.

 

 

 

4

а) Для массива D(N,M) определить сумму всех элементов,

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

б) Из массива А (4,5) сформировать массив В (5), каждый элемент которого равен среднему арифметическому значению соответствующего столбца массива А.

Упорядочить значения массива В по убыванию.

 

 

 

5

а)      Для      массива       K(N,M)       определить      отношение

минимального     элемента      к     максимальному     элементу. Вывести их индексы.

б) Из массива D (6,5) сформировать массив А (5), каждый элемент    которого   равен    произведению    положительных

элементов       соответствующего       столбца       массива       D. Упорядочить значения массива А по возрастанию.

 

 

6

а) Для массива L(N,M) определить разницу между средним

арифметическим и средним геометрическим значением положительных элементов.

б) Для массива А (4,6) определить максимальный элемент в каждой строке и поменять его местами с элементом главной диагонали.

 

 

7

а) Для   массива   T(N,M определить   сумму   элементов,

расположенных ниже главной диагонали, сумму элементов - выше главной диагонали и произведение элементов, расположенных на главной диагонали.

б) Для массива А (4,3) определить строку с наибольшей суммой ее элементов.

 

 

8

а) Для массива L(N,M) определить процент положительных,

отрицательных и нулевых элементов.

б) Из массива М (4,5) сформировать массив В (5), каждый элемент которого равен максимальному элементу соответствующего столбца массива М. Упорядочить

значения массива В по убыванию.

 

95


 

9

а) Для массива W(N,M) определить минимальный элемент среди положительных элементов и вывести его индексы.

б)   Для   массива    Р   (5,4)   определить    номер    столбца    с наибольшим произведением его элементов.

 

 

10

а) Для массива W(N,M) определить минимальный элемент в

столбце k и вывести его индексы (значение k - задать).

б) Из массива А (5,4) сформировать массив В (5), каждый элемент которого равен количеству ненулевых элементов соответствующей строки массива А. Упорядочить значения

массива В по возрастанию.

 

 

 

11

а) Для массива T(N,M) определить количество ненулевых

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

б) ) Для массива К (5,4) определить строку с наибольшей

суммой ее элементов и столбец с наименьшей суммой ее элементов.

 

 

12

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

б)   В   массиве   К   (4,5)   заменить   каждый   элемент   второй

строки         произведением         отрицательных         элементов соответствующего столбца.

 

 

 

13

а) Для массива W(N,M) определить максимальный элемент

главной   диагонали   и   вывести    все   элементы    строки,    в которой расположено найденное значение.

б) Из массива К (5,4) сформировать массив D (5), каждый элемент     которого     равен     среднему     арифметическому

значению элементов    соответствующей строки массива К. Упорядочить значения массива D по возрастанию.

 

 

 

14

а) Для массива   X(N,M) определить   отношение   суммы

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

б) Из массива К (5,4) сформировать массив В (5), каждый элемент которого равен минимальному элементу

соответствующей строки массива К. Упорядочить значения массива В по убыванию.

 

 

96


 

 

15

а) Для массива K(N,M) определить количество и сумму отрицательных элементов, которые удовлетворяют условию Kij Î[a,b].

б) Для массива Т (5,4) заменить последний элемент каждой строки суммой элементов этой же строки.

 

 

16

а) Для массива W(N,M) определить сумму и произведение

элементов, расположенных на периметре массива.

б) В массиве К (3,5) заменить последний элемент каждого столбца    суммой    положительных    элементов     этого    же

столбца.

 

 

 

17

а) Для массива   K(N,M)   элементы, расположенные ниже

главной     диагонали     уменьшить      вдвое,     а     элементы, расположенные выше главной диагонали увеличить вдвое. б) Из массива М (3,5) сформировать массив В(5), каждый элемент       которого      равен      максимальному       элементу

соответствующего     столбца     массива     М.     Упорядочить значения массива В по убыванию.

 

 

18

а) Для массива Z(N,M) определить сумму положительных и произведение отрицательных элементов k-го столбца (значение k – задать).

б) Для массива Т (5,4) определить в каждой строке минимальный элемент и записать его на место первого

элемента строки.

 

 

 

19

а) Для массива S(N,M) определить максимальный элемент

среди элементов, расположенных выше главной диагонали и минимальный элемент среди элементов, расположенных ниже главной диагонали.

б) Из массива М (6,6) сформировать массив Т(6), каждый элемент которого равен сумме положительных элементов соответствующего столбца массива М без элемента главной

диагонали. Упорядочить значения массива Т по возрастанию.

 

 

 

20

а) Для массива T(N,M) определить номер строки, в которой

расположен наибольший по абсолютной величине элемент и заменить все элементы этой строки нулевым значением.

б) Из массива К (5,4) сформировать массив Н (5), каждый элемент которого равен среднему геометрическому положительных элементов соответствующей строки массива

К. Упорядочить значения массива Н по убыванию.

 

97


 

 

 

21

а) Для массива Z(N,M) определить среднее арифметическое значение элементов и количество элементов, которые меньше среднего арифметического значения.

б) Из массива К (6,5) сформировать массив Н (6), каждый элемент которого равен произведению первого и последнего элемента соответствующей строки массива К. Упорядочить

значения массива Н по возрастанию.

 

 

 

22

а) Для массива T(N,M) определить максимальный элемент

главной диагонали и минимальный элемент побочной диагонали.

б) Из массива C (5,6) сформировать массив В (5), каждый элемент которого равен количеству элементов принадлежащих отрезку [a12] соответствующей строки

массива С. Упорядочить значения массива В по убыванию.

 

 

23

а) Для массива T(N,M) определить отношение количества

положительных элементов к количеству отрицательных элементов. Если отрицательных элементов в массиве нет, то напечатать соответствующее сообщение.

б) Для массива Х (4,5) определить номер столбца с наименьшим произведением его элементов.

 

 

24

а) Для массива X(N,M) определить минимальный элемент и заменить его суммой отрицательных элементов.

б) Из массива Т (4,5) сформировать массив В (5), каждый элемент       которого      равен      максимальному       элементу

соответствующего      столбца     массива      Т.     Упорядочить значения массива В по убыванию.

 

 

 

25

а) Для массива T(N,M) определить произведение и сумму положительных элементов, расположенных на главной и побочной диагоналях.

б) Из массива А (3,5) сформировать массив В (5), каждый элемент которого равен сумме отрицательных элементов соответствующего столбца массива А. Упорядочить

значения массива В по убыванию.

 

 

26

а) Для массива Z(N,M) определить разницу между суммой и

произведением положительных элементов.

б) Из массива М (5,4) сформировать массив В (4), каждый элемент которого равен минимальному элементу соответствующего столбца массива М. Упорядочить

значения массива В по возрастанию.

 

98


 

 

 

27

а) Для массива W(N,M) определить минимальные элементы среди элементов, расположенных выше и ниже главной диагонали. Наибольшим из них заменить элементы главной диагонали.

б) Из массива К (5,4) сформировать массив D (5), каждый элемент которого равен разнице между суммой отрицательных и суммой положительных элементов

соответствующей строки массива К. Упорядочить значения массива D по возрастанию.

 

 

28

а) Для массива C(N,M) определить сумму и количество

элементов, принадлежащих отрезку [a, b].

б) Из массива К (5,4) сформировать массив D (5), каждый элемент которого равен минимальному по модулю элементу соответствующей строки массива К. Упорядочить

значения массива D по возрастанию.

 

 

 

29

а) Для массива Х(N,M) определить сумму элементов. Если

сумма имеет отрицательное значение, то все элементы заменить нулевым значением, если сумма имеет положительное значение, то все элементы заменить значением суммы.

б) Из массива Х (4,6) сформировать массив D (6), каждый элемент которого равен произведению первых двух

элементов соответствующего столбца массива Х. Упорядочить значения массива D по убыванию.

 

 

 

30

а) Для массива A(N,M) определить минимальный элемент

среди элементов, расположенных выше главной диагонали и вывести его индексы.

б) Из массива К (4,5) сформировать массив А (4), каждый элемент которого равен среднему геометрическому положительных элементов соответствующей строки массива

К. Упорядочить значения массива А по возрастанию.

 

Контрольные вопросы

1.   Что такое массив?

2.   Что такое индекс массива?

3.   Что такое размерность массива?

4.   Как различить одномерные и двумерные массивы?

5.   Как осуществляется ввод/вывод элементов матрицы?


 

Скачано с www.znanio.ru