ФЕДЕРАЛЬНОЕ АГЕНСТВО ПО ОБРАЗОВАНИЮ Федеральное государственное образовательное учреждение высшего профессионального обр...
12 downloads
421 Views
370KB Size
Report
This content was uploaded by our users and we assume good faith they have the permission to share this book. If you own the copyright to this book and it is wrongfully on our website, we offer a simple DMCA procedure to remove your content from our site. Start by pressing the button below!
Report copyright / DMCA form
ФЕДЕРАЛЬНОЕ АГЕНСТВО ПО ОБРАЗОВАНИЮ Федеральное государственное образовательное учреждение высшего профессионального образования «ЮЖНЫЙ ФЕДЕРАЛЬНЫЙ УНИВЕРСИТЕТ»
Е.С. НЕВСКАЯ, А.А. ЧЕКУЛАЕВА
Лабораторный практикум «Структуры данных − двумерный массив (матрица)» МЕТОДИЧЕСКИЕ УКАЗАНИЯ для студентов 1 и 2 курсов (дневного и вечернего отделений) Факультет математики, механики и компьютерных наук
Ростов-на-Дону 2007 3
Методические указания разработаны старшим преподавателем Е.С.Невской и старшим преподавателем А.А. Чекулаевой кафедры прикладной математики и программирования.
Методические указания предназначены для поддержки основного курса, связного с методами программирования. Методические указания представлены в виде лабораторного практикума. Предлагаемые упражнения и задачи помогут понять структуру данных – двумерный массив. Методические указания содержат список упражнений и задач для индивидуальной работы студентов. Методические указания необходимы студентам вечернего и дневного отделений факультета математики, механики и компьютерных наук.
Печатается по решению кафедры прикладной математики и программирования факультета математики, механики и компьютерных наук ЮФУ протокол № 10 от 4 июля 2007 года.
ОГЛАВЛЕНИЕ ВВЕДЕНИЕ............................................................................................................................................................................6
4
1. ДВУМЕРНЫЕ МАССИВЫ – МАТРИЦЫ, ................................................................................................................7 КЛАССИФИКАЦИЯ ОПЕРАЦИЙ...................................................................................................................................7 1.1 ОПЕРАЦИИ ВВОДА-ВЫВОДА ..........................................................................................................................................7 1.2 ПОИСК ЭЛЕМЕНТА В МАТРИЦЕ ......................................................................................................................................8 1.3 ОБРАБОТКА МАТРИЦЫ.................................................................................................................................................10 1.5 ПОСТРОЕНИЕ МАТРИЦЫ ..............................................................................................................................................15 1.6 ОПЕРАЦИИ, ИЗМЕНЯЮЩИЕ СОСТОЯНИЕ МАТРИЦЫ ....................................................................................................17 2. УПРАЖНЕНИЯ ..............................................................................................................................................................21 2.1 ПОИСК В МАТРИЦЕ ......................................................................................................................................................21 2.2 ПОСТРОЕНИЕ ВЕКТОРА ПО МАТРИЦЕ ..........................................................................................................................22 2.3 ПРЕОБРАЗОВАНИЕ МАТРИЦЫ ......................................................................................................................................23 2.4 ПОСТРОЕНИЕ МАТРИЦЫ ..............................................................................................................................................25 3. ИНДИВИДУАЛЬНЫЕ ЗАДАНИЯ..............................................................................................................................27 ЗАДАНИЕ 3.1 ИСПОЛЬЗОВАНИЕ СОРТИРОВКИ...................................................................................................................27 ЗАДАНИЕ 3.2 ОБРАБОТКА МАТРИЦЫ.................................................................................................................................29 ЛИТЕРАТУРА ....................................................................................................................................................................38
5
ВВЕДЕНИЕ Методические указания предназначены для студентов, изучающих программирование с использованием алгоритмического языка Pascal. Здесь рассматривается часто использующаяся структура данных − массив, а именно, двумерный массив (матрица). Методические указания представляют собой лабораторный практикум и являются дополненным и переработанным вариантом изданных ранее методических указаний [6]. Здесь определяются типичные для матрицы операции, а именно, поиск, редактирование, включающее операции добавить, вставить, удалить. Каждая операция сопровождается рядом упражнений, которые позволяют глубже понять приведенный алгоритм операции. Методические указания содержат список упражнений по следующим темам: поиск элемента в матрице; построение вектора по матрице; преобразование матрицы; построение матрицы. Эти упражнения должен выполнить каждый студент. Кроме того, методические указания содержат список задач, которые являются индивидуальными заданиями для студентов по темам: использование сортировки и обработка матрицы. Предполагается, что для выполнения индивидуальных заданий необходимо использовать введенные операции, а также вводить новые операции, соответствующие задаче, и определять их с помощью процедур и функций алгоритмического языка Pascal. Алгоритм решения задачи следует формулировать в терминах введенных операций.
6
1. ДВУМЕРНЫЕ МАССИВЫ – МАТРИЦЫ, КЛАССИФИКАЦИЯ ОПЕРАЦИЙ 1.1 Операции ввода-вывода Будем обозначать в матрице a[1..n,1..m] переменной n количество строк и переменной m количество столбцов. Опишем процедуру Input ввода матрицы a[1..n,1..m] с клавиатуры:
const n_max=10; m_max=10; type T_el = integer; vect = array[1..m_max] of T_el; matr = array[1..n_max] of vect; procedure Input(var n,m:integer; var a:matr); var i,j:integer; begin writeln(‘Задайте кол − во строк, не превышающее ’,n_max); read(n); writeln(‘Задайте кол − во столбцов, не превышающее ’,m_max); read(m); writeln(‘Задайте элементы’); for i:=1 to n do for j:=1 to m do read(a[i,j]) end; Для того чтобы на экране элементы представлялись в матричной форме, необходимо управлять вводом, а именно, набирать элементы очередной строки, разделяя их символом пробел, и нажимать клавишу Enter.
7
Опишем процедуру Output вывода матрицы a[1..n,1..m]:
procedure Output(n,m:integer; const a:matr); var i,j:integer; begin writeln; for i:=1 to n do begin for j:=1 to m do write(a[i],’ writeln end end;
‘);
Здесь выдачей на экран элементов в матричной форме управляет программа, а именно, элементы очередной строки выдаются последовательно через пробел; при выводе элементов вещественного типа используют указание формата вывода:
write(a[i]:5:2,’ ‘); переходом к очередной строке управляет внешний оператор цикла, в котором предусмотрен переход к следующей строке
экрана с помощью оператора
writeln. Упражнение 1. Составьте программу, включив в неё описание и вызов процедур Input и Output. Проверьте работу программы. Замените в процедуре Input передачу параметров на передачу по значению. Выполните программу и прокомментируйте результаты. 1.2 Поиск элемента в матрице Задача 1. Найти элемент x в матрице a[1..n,1..m].
8
Постановка задачи Входные данные: n, m ∈ N (множеству натуральных чисел);
a[1..n,1..m] ∈ Z (множеству целых чисел); x ∈ Z (значение, которое требуется найти в массиве). Выходные данные: если x содержится в массиве, то есть x = a[i,j], то i− номер cтроки, j − номер столбца; если x отсутствует в массиве, то i =
n+1. Метод решения Определим, что нужно найти, используя формальный язык:
(∃ i,j:1 ≤ i ≤ n and 1 ≤ j ≤ m :a[i,j]= x) or (∀ i,j:1 ≤ i ≤ n and 1 ≤ j ≤ m :a[i,j]≠ x)and (i=n+1). Если i=n+1, то это значит, что x not is in a. Из определения следует, что при построении алгоритма нужно использовать вложенные циклы: внешний цикл по строкам ( переменная i ) и внутренний по столбцам (переменная j). Для выхода из циклов при выполнении условия a[I,j]=x будем использовать логическую переменную flag со значением true. Описание алгоритма
i := 1; flag:=false; while (i <= n) and not flag do begin j :=1; while (j <= m) and not flag if a[i,j]=x then flag:=true else j:= j+1 end;
do
Упражнение 2. Опишите поиск заданного элемента в массиве в виде процедуры и выполните ее для исходных данных, проверяя, что отыскиваемый элемент содержится в массиве, и что элемент отсутствует. 9
Упражнение 3. Проверьте, что алгоритм приведенной ниже процедуры Poisk_matr решает задачу 1. Внутренний цикл по переменной j представлен неявно.
procedure Poisk_matr( const a:matr; n,m:integer; x: T_el; var i,j:integer); begin i := 1; j := 1; while (i <= n) and (x <> a[i,j]) do begin if j <= m then j := j+1; if j > m then begin i:= i+1; j :=1 end end; if i = n+1 then j:=0 end; Упражнение 4. Докажите, что алгоритм процедуры Poisk_matr эффективней алгоритма, приведенного в задаче 1. 1.3 Обработка матрицы Остановимся на некоторых, часто использующихся задачах. Задача 2. Найти максимальный элемент в матрице. Постановка задачи Входные данные: n, m− количество строк, столбцов матрицы;
n, m ∈ N (множеству натуральных чисел); a[1..n,1..m] ∈ Z (множеству целых чисел); Выходные данные: k,l- индексы максимального элемента ( элемент
a[k,l]
является максимальным).
Промежуточные данные:
i,j– индексы для просмотра элементов матрицы. 10
Метод решения 1) пусть максимальным будет первый элемент матрицы : k:=1;l:=1; 2) анализируем остальные элементы, если a[i,j]>a[k,l], то k:=i;l:=j. Опишем алгоритм в виде процедуры Max_Matr.
procedure Max_matr( var a:matr; n,m:integer; var k,l:integer); var i,j:integer; begin k:=1;l:=1; for i:=1 to n do for j:=1 to m do if a[i,j]>a[k,l] then begin k:=i;l:=j end end; Упражнение 5. Проверьте работу программы в случае, когда матрица содержит несколько максимальных элементов. Как понимать полученный ответ? Упражнение 6. Какие изменения нужно внести в программу для нахождения позиции последнего максимального элемента матрицы? Задача 3. Проверить, является ли матрица a[1..n,1..m] положительно определенной. Постановка задачи Входные данные: n, m ∈ N (множеству натуральных чисел);
a[1..n,1..m] ∈ R (множеству вещественных чисел). Выходные данные: логическое значение ( true, если все элементы положительны, если существует по крайней мере один элемент отрицательный).
11
Метод решения Определим, что нужно найти, используя формальный язык:
(∀ i,j:1 ≤ i ≤ n and 1 ≤ j ≤ m :a[i,j]>0) or (∃ i,j:1 ≤ i ≤ n and 1 ≤ j ≤ m :a[i,j]≤0). Построение алгоритма аналогично тому, как это делалось в задаче 2. Опишем алгоритм в виде функции Def_Plus.
function Def_Plus(const a:matr; n,m:integer):Boolean; var i, j :integer; flag :Booleanl begin i:=1; flag:=true; while (i <= n) and flag do begin j:=1; while (j <= m) and flag do begin flag := a[i,j]>0; j:=j+1 end; i:=i+1 end; Def_Plus:=flag end; Замечание: если flag сохранит значение true после проверки всех элементов матрицы, то это значит, что все элементы положительны и имя функции получит значение true; если хотя бы для одного из элементов не выполняется условие a[I,j]>0, то flag и имя функции получат значение false, что и требовалось получить. Упражнение 7. Опишите в виде процедуры или функции решение следующей задачи: найти позицию первого положительного элемента матрицы. Вы-
12
полните задачу для случая, когда матрица содержит положительный элемент и когда положительный элемент в матрице отсутствует. Упражнение 8. Опишите в виде процедуры алгоритм решения задачи 3, используя неявный цикл, как это представлено в процедуре Poisk_matr. Задача 4. Определить след вещественной матрицы a[1..n,1.. n] (сумму элементов главной диагонали). Постановка задачи Входные данные: n∈ N (множеству натуральных чисел);
a[1..n,1..n] ∈ R (множеству вещественных чисел). Выходные данные: s∈ R (множеству вещественных чисел). Метод решения. Элементы, находящиеся на главной диагонали, имеют одинаковые индексы и обозначаются как a[i,i]. Выпишем рекуррентные соотношения для вычисления суммы:
s0=0; si=si-1+ai,i , i=1, 2, …, n Опишем алгоритм в виде функции Summa_D.
function Summa_D (const a:matr;n,m:inteqer):T_el; var i,j:integer; s:T_el; begin s:=0; for i:=1 to n do s:=s+a[i,i]; Summa_D:=s end; 13
Упражнение 9. Определить сумму элементов побочной диагонали вещественной матрицы А[1..n,1.. n]. Задача 5. Построить массив, каждый элемент которого равен сумме элементов каждой строки вещественной матрицы a[1..n,1..m]. Постановка задачи Входные данные: n, m ∈ N (множеству натуральных чисел);
a[1..n,1..m] ∈ R . Выходные данные: s[1..n] ∈ R (множеству вещественных чисел). Метод решения Математическая формулировка задачи:
(∀ i:1 ≤ i ≤ n : s[i]=∑a[i,j] при j=1, 2, …, m) Опишем алгоритм в виде процедуры Sum_Str.
procedure Sum_Str( const a:matr;n,m:inteqer; var s:vect); var i,j:integer; sum : real; begin for i:=1 to n do begin sum:=0; for j:=1 to m do sum:= sum+a[i,j]; s[i]:=sum end end;
Упражнение 10. Построить массив, каждый элемент которого равен сумме элементов каждого столбца вещественной матрицы a[1..n,1..m]. 14
1.4 Построение матрицы Задача 6. Построить таблицу Пифагора (таблицу умножения) для заданного количества строк (таблица должна быть квадратной). Постановка задачи. Входные данные: n∈ N (множеству натуральных чисел); Выходные данные: a[1..n,1..n] ∈ Z. Метод решения Полученная матрица должна быть симметричной, то есть
a[i,j]=a[j,i]. Вычисление a[i,j] выполняется по формуле
∀ i, j:1 ≤ i ≤ n ,j: i ≤ j≤ n: a[i,j]=i*j Опишем алгоритм в виде процедуры
procedure Tab_Umn( n:integer; var a:matr); var i,j:integer; begin for i:=2 to n do for j:=i to n do begin a[i,j]:=i*j; a[j,i]:=i*j end end; Замечание: для того чтобы увидеть таблицу умножения на экране или в текстовом файле, значение n не должно превышать 19. Упражнение 11. Напишите и выполните программу для проверки результатов вызова процедуры Tab_Umn. 15
Задача 7. Дан вектор x {x1, x2 . . ., xm}. Построить матрицу (определитель Вандермондо) по правилу: i ─ тая строка содержит вектор
{xi1, xi2, . . ., xim}. Постановка задачи Входные данные: m,n ∈ N (множеству натуральных чисел);
x {x1, x2, . . ., xm} ∈ R.
Выходные данные: a[1..n,1..m] ∈ R. Метод решения
Первая строка имеет значения вектора x, то есть a[1]:=x. Эта операция синтаксически определена в алгоритмическом языке Pascal. Далее необходимо получить
∀i,j:2 ≤ i ≤ n and 1 ≤ j ≤ m : a[i,j]= a[i-1,j]*x[j] Опишем алгоритм в виде процедуры Matr_Vand.
Procedure Matr_Vand(const x:vect; n,m: integer; var a:matr); var i,j:integer; begin a[1]:=x; for i:=2 to n do for j:=1 to m do a[i,j]= a[i-1,j]*x[j] end; Упражнение 12. Напишите и выполните программу для проверки результатов вызова процедуры Matr_Vand .
16
1.5 Операции, изменяющие состояние матрицы К операциям, изменяющим состояние матрицы, относятся следующие: изменить (элемент или элементы), вставить (строку или столбец), добавить (строку или столбец), удалить (строку или столбец). Рассмотрим задачи, когда операции проводятся со строками. В этом случае матрица определяется как вектор векторов и алгоритмы операций значительно упрощаются. Операция изменить Задача 8. Каждую строку матрицы разделить на произведение отличных от нуля элементов этой же строки. Постановка задачи Входные данные: n,m ∈ N (множеству натуральных чисел);
a[1..n,1.. m] ∈ R; Выходные данные: a[1..n,1..m] ∈ R. Метод решения Определим, что нужно найти, используя математический язык:
(∀ i,j:1 ≤ i ≤ n and 1 ≤ j ≤ m : if a[i,j]≠0 then a[i,j]:=a[i,j]/ Pi), где Pi определяется так:
∀ j: 1 ≤ j ≤ m : Pi = П a[i,j] при a[i,j]≠0 Опишем алгоритм решения задачи в виде процедуры Izm_Matr.
procedure Izm_Matr(n,m:int;var a:matr); var i,j:int; p:T_el; begin for i:=1 to n do begin p:=1; for j:=1 to m do 17
end end;
if abs(a[i,j])>eps then p:=p*a[i,j]; for j:=1 to m do a[i,j]:=a[i,j]/p
Замечание. Обратите внимание на проверку: равно ли нулю вещественное значение. Для сравнения с нулем элемента матрицы нельзя пользоваться отношением a[i,j]=0. Его необходимо заменить отношением
Abs(a[i,j])<eps. Операция добавить Задача 9. Добавить вектор x к матрице a[1..n,1..m]. При выполнении операции добавить осуществляется изменение количества строк матрицы и n+1−ая строка получает значение вектора x. Описание алгоритма
n:=n+1; a[n]:=x; Операция вставить Задача 10 . Вставить в матрицу на k─тую позицию заданную строку. Постановка задачи Входные данные: n,m ∈ N (множеству натуральных чисел);
k ─ номер строки; a[1..n,1.. m] ∈ R; x {x1, x2, . . ., xm} ∈ R. Выходные данные: a[1..n+1,1..m] ∈ R. Метод решения Метод вставки вектора в матрицу аналогичен методу вставки элемента (элементом в нашем случае является строка) в одномерный массив ([1]): 1) сдвинуть все строки вниз, начиная с n до k; 2) a[k]:=x; 18
Учтем, что количество строк в матрице изменится. Опишем алгоритм в виде процедуры Insert.
procedure Insert(var n:integer; const x:vect;k:integer; var a:matr); var b:vect; i:integer; begin for i:=n downto k do a[i+1]:=a[i]; a[k]:=x; n:=n+1 end; Операция удалить Задача 11. Удалить строки матрицы, содержащие нулевой элемент. Постановка задачи Входные данные: n,m ∈ N (множеству натуральных чисел);
a[1..n,1.. m] ∈ Z; Выходные данные: a[1..n,1..m] ∈ Z . Метод решения Предположим, что есть логическая функция
Not_Null_El, устанавли-
вающая отсутствие нулевого элемента в одномерном массиве. Заголовок этой функции имеет вид:
function Not_Null_El(const b:vect;k:integer):Boolean; Эта функция устанавливает, что в одномерном массиве нет нулевых элементов, то есть
(∀ i:1 ≤ i ≤ n:a[i]≠0);
19
Тогда удаление строк, содержащих нулевые элементы (один или больше) можно свести к удалению элемента в одномерном массиве. Опишем алгоритм в виде процедуры Delet_0.
procedure Delet_0(var n:integer;m:integer; var a:matr); var i,k:integer; begin k:=0; for i:=1 to n do if Not_Null_El(a[i],m) then begin k:=k+1; a[k]:=a[i] end; n:=k end; Упражнение 13. Опишите функцию Not_Null_El и проверьте работу процедуры Delet_0.
20
2. УПРАЖНЕНИЯ 2.1 Поиск в матрице 1. Дана матрица. Найти максимальный элемент в каждой строке матрицы и в каждом столбце матрицы. 2. Дана матрица. Найти минимальный элемент в каждой строке матрицы и в каждом столбце матрицы. 3. Дана матрица. Найти минимальный элемент среди элементов главной диагонали матрицы и среди элементов побочной диагонали матрицы. 6. Дана матрица. Найти максимальный элемент среди элементов, расположенных ниже главной диагонали. 8. Дана матрица. Найти минимальный элемент среди элементов, расположенных выше главной диагонали. 10. Дана матрица. Найти максимальный элемент среди элементов, расположенных ниже побочной диагонали. 11. Дана матрица. Найти максимальный элемент среди элементов, расположенных выше побочной диагонали. 12. Определить в матрице количество повторений минимального элемента. 13. Проверить, содержит ли матрица строку, совпадающую с заданным вектором поэлементно (размер вектора совпадает с количеством элементов в строках матрицы). 14. Найти в матрице столбец с наибольшей суммой элементов. 15. Проверить, содержит ли матрица строку, в которой ее минимальный и максимальный элементы расположены рядом. 16. Проверить, есть ли в матрице строка, состоящая из одних нулей. 17. В матрице найти строку с наибольшим количеством нулевых элементов. 18. Проверить, равны ли две заданные матрицы. 21
19. Проверить, содержит ли матрица хотя бы одну строку, имеющую все одинаковые элементы. 20. Проверить, содержит ли матрица две одинаковые между собой строки. 21. Проверить, содержит ли матрица все одинаковые строки. 22. Найти в матрице элемент (и его координаты), который является наибольшим в строке и наименьшим в столбце. 23. Найти сумму элементов матрицы, расположенных по её периметру. 2.2 Построение вектора по матрице 1. По матрице построить вектор, каждый элемент которого равен среднему арифметическому ненулевых элементов соответствующей строки. 2. По матрице построить вектор, каждый элемент которого равен количеству положительных элементов в соответствующей строке. 3. По матрице построить вектор, каждый элемент которого равен true или false в зависимости от того, упорядочена ли соответствующая строка по не убыванию или нет. .
4. По матрице построить вектор, каждый элемент которого равен 0 или 1 в
зависимости от того, состоит ли соответствующая строка только из нулевых элементов или в строке есть элементы отличные от нуля. 5. По матрице построить вектор, каждый элемент которого равен НОД всех элементов соответствующей строки. 6. В каждой строке матрицы определить количество повторений её минимального элемента. 22
7. Построить вектор, равный произведению матрицы на заданный вектор. 8. Напечатать элементы матрицы, выполняя её обход по часовой стрелке по спирали. 9. Дана матрица символов. Удалить из каждой строки все начальные и конечные пробелы, поместить все полученные строки в один одномерный массив, отделяя полученные строки символом ‘*’. Сформированный одномерный массив до каждого символа ‘*’ распечатать построчно.
2.3 Преобразование матрицы 1. Дана матрица. Разделить каждую строку матрицы на сумму положительных элементов в этой же строке. 2. Дана матрица. Разделить каждую строку матрицы на максимальный элемент в этой же строке. 3. Дана матрица. Разделить каждую строку матрицы на первый ненулевой элемент в этой же строке. 4. Добавить в матрицу столбец, каждый элемент которого является суммой элементов соответствующей строки. 5. Поменять в матрице первый столбец со столбцом с наибольшей суммой элементов. 6. Вставить в матрицу нулевой столбец после столбца с наибольшей суммой элементов. 7. В матрице заменить нулевую строку на строку, содержащую единицы. 8. Поменять в матрице строку с наибольшим количеством нулевых элементов со строкой с наименьшим количеством нулевых элементов. 23
9. Вставить в матрицу заданный вектор после строки с наименьшим количеством нулевых элементов (размер вектора совпадает с количеством элементов в строках матрицы). 10. В заданной матрице циклически передвинуть строки на одну позицию вверх. 11. В заданной матрице циклически передвинуть строки на одну позицию вниз. 12. В заданной матрице циклически передвинуть столбцы на одну позицию вправо. 13. В заданной матрице циклически передвинуть столбцы на одну позицию влево. 14. В заданной матрице циклически передвинуть строки на к позиций вверх. 15. В целочисленной матрице заменить каждое число на число с обратным порядком следования цифр. 16. Каждый элемент матрицы возвести в степень, равную сумме номеров строки и столбца элемента. 17. В матрице каждый элемент (кроме граничных) заменить суммой непосредственно примыкающих к нему элементов по вертикали, горизонтали и диагоналям. 18. В каждом столбце квадратной матрицы содержится строго по одному нулевому элементу. Перестановкой строк добиться расположения всех нулей по главной диагонали матрицы. 19. Матрица состоит из нулей и единиц. Найти в ней самую длинную цепочку подряд стоящих нулей по горизонтали, вертикали или диагонали. 20. Удалить из матрицы столбец с наибольшей суммой элементов. 21. Удалить из матрицы строку с наибольшим количеством нулевых элементов. 24
22. Удалить из матрицы строку и столбец, на пересечении которых стоит заданный элемент. 24. Описать процедуру удаления из матрицы строки с заданным номером и функцию проверки, содержит ли матрица B i-ю строку матрицы A. Из матрицы С удалить те строки, которые имеются в матрице А, но отсутствуют в матрице B. 25. Транспонировать матрицу. 2.4 Построение матрицы 1. Построить матрицу вида ⎛1 ⎜ ⎜2 .⎜ . ⎜ ⎜n ⎝
1
...
2 .
... ...
n
...
1⎞ ⎟ 2⎟ .⎟ ⎟ n ⎟⎠
2. Построить матрицу вида ⎛1 ⎜ ⎜0 .⎜ 0 ⎜ ⎜ . ⎜0 ⎝
2
3
...
1
2
...
0
1
...
. 0
. 0
... ...
⎞ ⎟ n −1 ⎟ n − 2 ... ⎟ ⎟ 2 ⎟ ⎟ 1 ⎠ n
3. Построить матрицу вида ⎛1 ⎜ ⎜1 ⎜. ⎜ ⎜1 ⎝
2
...
2
... ... ...
2 . 2n
n ⎞ ⎟ n2 ⎟ . ⎟ ⎟ n n ⎟⎠
4. Построить матрицу вида 1 ⎛ ⎜ n +1 ⎜ ⎜ . ⎜ ⎜ ( n − 1) n + 1 ⎝
2 n+2
... ...
. ( n − 1) n + 2
... ...
n ⎞ ⎟ 2n ⎟ . ⎟ ⎟ n n ⎟⎠
5. Построить матрицу вида
25
⎛1 ⎜ ⎜2 ⎜. ⎜ ⎜n ⎝
n +1 n+2
... ...
. 2n
... ...
( n − 1) n + 1 ⎞ ⎟ ( n − 1) n + 2 ⎟ ⎟ . ⎟ ⎟ nn ⎠
6. Матрицу A[1..n,1..m] заполнить следующим образом. Элементам по периметру матрицы присвоить значение 1, по периметру оставшейся подматрицы – значение 2 и так далее до заполнения всей матрицы. 7. Найти матрицу, полученную в результате произведения двух заданных матриц. 8. Матрицу из 2*n строк и 2*n столбцов разбить на четыре квадратных матрицы из n строк и n столбцов каждая 9. В матрицу С добавить те строки, которые имеются в матрице А, но отсутствуют в матрице B.
26
3. ИНДИВИДУАЛЬНЫЕ ЗА ДАНИЯ
Задание 3.1 Использование сортировки. 1. Отсортировать каждую строку матрицы в порядке убывания её элементов. 2. Упорядочить строки матрицы по неубыванию значений первых элементов строк. 3. Упорядочить строки матрицы по невозрастанию сумм элементов строк. 4. Упорядочить строки матрицы по неубыванию значений наименьших элементов строк. 5. Упорядочить строки матрицы по невозрастанию значений наибольших элементов строк. 6. Упорядочить столбцы матрицы по неубыванию значений последних элементов в столбцах. 7. Упорядочить столбцы матрицы по невозрастанию произведений элементов в столбцах. 8. Упорядочить строки матрицы по неубыванию разностей максимального и минимального значений элементов строк. 9. Упорядочить строки матрицы по невозрастанию
из сумм положитель-
ных элементов строк. 10. Упорядочить строки матрицы по невозрастанию количеств положительных элементов в строках. 11. Упорядочить строки матрицы по неубыванию сумм отрицательных элементов в строках. 12. Упорядочить строки матрицы по невозрастанию количеств отрицательных значений в строках. 27
13. Упорядочить строки матрицы по неубыванию номеров первых максимальных элементов в строках. 14. Упорядочить строки матрицы по неубыванию номеров последних максимальных элементов в строках. 15. Упорядочить строки матрицы по невозрастанию количеств отличных от нуля элементов в строках. 16. Упорядочить строки матрицы по неубыванию количеств положительных элементов в строках. 17. Упорядочить строки матрицы по невозрастанию произведений элементов больших единицы в строках. 18. Упорядочить строки матрицы по неубыванию сумм элементов меньших единицы в строках. 19. Упорядочить строки матрицы по невозрастанию максимальных длин последовательностей элементов в каждой строке, состоящих из неотрицательных элементов. 20. Упорядочить строки матрицы по неубыванию средних арифметических элементов в строках. 21. Упорядочить строки матрицы по невозрастанию значений элементов второго столбца. 22. Упорядочить строки матрицы по неубыванию значений первых ненулевых элементов в строках. 23. Упорядочить строки матрицы по невозрастанию номеров первых нулевых элементов в строках. 24. Упорядочить строки матрицы по неубыванию номеров последних нулевых элементов в строках. 25. Упорядочить строки матрицы по неубыванию значений элементов среднего столбца матрицы (считать, что количество столбцов матрицы нечётное). 28
26. Упорядочить строки целочисленной матрицы по последней цифре элементов первого столбца. 27. Упорядочить строки целочисленной матрицы по старшей (левой) цифре элементов последнего столбца. 28 Упорядочить строки целочисленной матрицы по убыванию суммы цифр элементов второго столбца. 29. Переставить строки матрицы, упорядочив их по возрастанию количества единиц. Напечатать строки, не содержащие единиц, с наименьшим количеством единиц, с наибольшим количеством единиц. Задание 3.2 Обработка матрицы 1. Дана матрица. а) В каждой строке матрицы найти количество элементов, меньших заданного значения. б) Подсчитать количество ненулевых строк. в) Вычислить сумму элементов матрицы, выделенных чёрным цветом (матрица квадратная).
2. Дана матрица. а) В каждой строке матрицы найти сумму элементов, находящихся в диапазоне между двумя заданными числами. б) Проверить, есть ли в матрице строка из положительных чисел. в) Вычислить сумму элементов матрицы, выделенных чёрным цветом (матрица квадратная).
3. Дана матрица. 29
а) В каждой строке матрицы найти произведение элементов, расположенных после максимального элемента в этой строке. б) Проверить, симметричны ли все строки относительно среднего элемента. в) Вычислить сумму элементов матрицы, выделенных чёрным цветом (матрица квадратная).
4. Дана матрица. а) В каждой строке матрицы найти сумму модулей элементов, расположенных после первого отрицательного элемента в этой строке. б) Проверить, равны ли строки первая и последняя, вторая и предпоследняя и т. д.. в) Вычислить сумму элементов матрицы, выделенных чёрным цветом (матрица квадратная).
5. Дана матрица. а) В каждой столбце матрицы найти количество элементов, находящихся в диапазоне между двумя заданными числами. б) Найти среднее арифметическое в каждой ненулевой строке. в) Найдите первый положительный элемент среди элементов матрицы, выделенных чёрным цветом (матрица квадратная).
6. Дана матрица. 30
а) В каждом столбце матрицы найти сумму элементов, расположенных после первого отрицательного элемента в столбце. б) Поменять местами i и j строки. в) Найдите первый отрицательный элемент среди элементов матрицы, выделенных чёрным цветом (матрица квадратная).
7. Дана матрица. а) В каждой строке матрицы найти сумму элементов, расположенных после минимального элемента в строке. б) Заменить i строку на копию j строки.. в) Вычислить сумму отрицательных элементов матрицы среди элементов, выделенных чёрным цветом (матрица квадратная).
8. Дана матрица. а) В каждой строке матрицы расположить сначала все отрицательные элементы, затем все положительные, а потом – нулевые. б) Заменить все нулевые строки на заданный вектор. в) Вычислить сумму отрицательных элементов матрицы среди элементов, выделенных чёрным цветом.
9. Дана матрица. 31
а) В каждом столбце матрицы найти произведение элементов, расположенных после максимального по модулю элемента.. б) Замените отрицательные элементы их квадратами и упорядочьте каждую строку по возрастанию. в) Найдите максимальный элемент среди элементов матрицы, выделенных чёрным цветом (матрица квадратная).
10. Дана матрица. а) Найти наибольшие элементы в столбцах матрицы с чётными номерами. б) Напечатать строки (и их номера), в которых элементы, расположенные между минимальным и максимальным значениями в строке образуют возрастающую последовательность. в) Найдите минимальный элемент среди элементов матрицы, выделенных чёрным цветом (матрица квадратная).
11. Дана матрица. а) Найти наименьшие элементы в столбцах матрицы с нечётными номерами. б) Проверить, состоит ли матрица только из элементов больших -к и меньших к (к>0). в) Найдите номер минимального элемента среди элементов матрицы, выделенных чёрным цветом (матрица квадратная).
12. Дана матрица. а) В каждой строке поместите нулевые элементы в конец строки. 32
б) Проверить, равны ли поэлементно i-ая строка и .i-ый столбец квадратной матрицы. в) Найдите максимальный элемент среди элементов матрицы, выделенных чёрным цветом (матрица квадратная).
13. Дана матрица. а) Каждую строку разделить на максимальный элемент в строке, в изменённой матрице каждый столбец разделить на максимальный элемент в столбце. б) Измените порядок следования элементов главной диагонали на обратный. в) Найдите минимальный элемент среди положительных элементов матрицы, выделенных чёрным цветом (матрица квадратная).
14. Дана матрица. а) Найти строку матрицы с максимальным произведением отличных от нуля элементов. б) Проверить, является ли заданный вектор из n элементов решением заданной системы n линейных уравнений c n неизвестными. в) Найдите номер максимального элемента среди элементов матрицы, выделенных чёрным цветом (матрица квадратная).
15. Дана матрица. а) Найти решение системы линейных уравнений треугольного вида. б) Проверить, совпадают ли главная и побочная диагональ поэлементно. 33
в) Найдите минимальный элемент среди элементов матрицы, выделенных чёрным цветом (матрица квадратная).
16. Дана матрица. а) В каждой строке матрицы найти максимальный элемент. Найти строку, которая содержит наименьший максимальный элемент. б) Найти сумму модулей элементов в каждой строке, расположенных после первого отрицательного элемента в строке. в) Найдите первый отрицательный элемент среди элементов матрицы, выделенных чёрным цветом (матрица квадратная).
17. Дана матрица. а) Каждую строку целочисленной матрицы разделить на число с максимальной суммой цифр в этой строке. б) Проверить, содержат ли первый и последний столбцы матрицы одинаковые элементы. в) Среди элементов матрицы, выделенных чёрным цветом, найти максимальный элемент и вычислить сумму элементов, выделенных чёрным цветом (матрица квадратная). 18. Дана матрица. а) Каждую строку целочисленной матрицы разделить на сумму цифр элемента, стоящего в этой же строке на побочной диагонали. б) Проверить, содержат ли строки знакочередующиеся элементы. в) Найдите первый нулевой элемент среди элементов матрицы, выделенных чёрным цветом (матрица квадратная). 34
19. Дана матрица. а) Разделить каждую строку целочисленной матрицы на произведение тех положительных элементов в этой строке, которые не содержат цифры ноль. б) Проверить, является ли главная диагональ симметричной относительно своего среднего элемента. в) Найдите первый положительный элемент среди элементов матрицы, выделенных чёрным цветом (матрица квадратная).
20. Дана матрица. а) В каждой строке целочисленной матрицы найдите разность между суммой цифр максимального и минимального элементов (все элементы матрицы положительные). б) Проверить, является ли матрица симметричной относительно побочной диагонали. в) Найдите первый положительный элемент среди элементов матрицы, выделенных чёрным цветом (матрица квадратная).
22. Дана матрица. а) Разделить значения элементов каждой строки матрицы на первый ненулевой элемент в строке. 35
б) Проверить, содержит ли каждая строка все различные элементы. в) Найдите первый положительный элемент среди элементов матрицы, выделенных чёрным цветом (матрица квадратная).
23. Дана матрица. а) В каждой строке разместить вначале нулевые элементы, затем все остальные. б) Проверить строки с нечётными номерами на возрастание, с чётными номерами – на убывание. в) Найдите первый отрицательный элемент среди элементов матрицы, выделенных чёрным цветом (матрица квадратная).
24. Дана матрица. а) В каждом столбце целочисленной матрицы найти произведение элементов, сумма цифр которых – чётное число. б) Проверить, все ли строки матрицы упорядочены по убыванию. в) Переслать в одномерный массив элементы матрицы, выделенные чёрным цветом (номера строк изменяются от i1 до i2, номера колонок – от j1 до j2).
36
25. Дана матрица. а) В каждой строке переставить в обратном порядке элементы, расположенные между минимальным и максимальным элементами, б) .Проверить, содержит ли матрица строку из чётных элементов. в) Проверить, содержит ли главная диагональ матрицы все единицы, а элементы, расположенные ниже главной диагонали – нули. 26. Дана матрица. а) Изменить порядок следования элементов в каждой строке на обратный и порядок следования строк матрицы на обратный. б) Проверить, равны ли поэлементно вторая строка и второй столбец. в) Найти максимальные элементы в верхнем треугольнике матрицы (относительно главной диагонали) и в нижнем треугольнике.
27. Дана матрица. а) В каждой строке максимальный элемент и последний элемент поменять местами. Если строка содержит несколько элементов со значением максимального элемента, то все эти элементы поместить в конец строки. б) Из каждой строки удалить первый отрицательный элемент (считать, что имеется хотя бы один отрицательный элемент в каждой строке). В результате количество столбцов матрицы уменьшится на единицу. в) выполнить печать всех элементов матрицы, выполняя обход по направлению побочной диагонали.
37
ЛИТЕРАТУРА 1..Минакова
Н.И.
Методы
программирования.
Учебное
/ Н.И.Минакова, Е.С. Невская, Г.А. Угольницкий, А.А. Чекулаева,
пособие М.И.
Чердынцева. – М.: Вузовская книга, 2000. –280 с. –ISBN 5-89522-038-X. 2. Невская Е.С., Чекулаева А.А., Чердынцева М.И. Искусство программирования. – М.: Вузовская книга, 2002. – 240 с. – ISBN 5-9502-0003-9. 3. Фаронов В.В. Турбо Паскаль 7.0. Начальный курс. – М.: «Нолидж», 1997. – 616 с. ISBN 5-89251-012-3. 4. Епанешников А.М., Епанешников В.А. Программирование в среде Turbo Pascal 7.0 – М: «Диалог – МИФИ», 1996 – 288 с. – ISBN 5-86404-029-0. 5. Невская Е.С., Чекулаева А.А. Методические указания «Структура данных − массив» Часть 1.УПЛ РГУ , 2006 – 43 с. 6. Невская Е.С., Чекулаева А.А. Методические указания «Структура данных − массив» Часть 2.УПЛ РГУ , 2006 – 47с.
38