AlgStr / Библиотека / Разные источники / СД - двумерный массив (метод ук-ия) Ростов на Дону
.pdfФЕДЕРАЛЬНОЕ АГЕНСТВО ПО ОБРАЗОВАНИЮ
Федеральное государственное образовательное учреждение высшего профессионального образования
«ЮЖНЫЙ ФЕДЕРАЛЬНЫЙ УНИВЕРСИТЕТ»
Е.С. НЕВСКАЯ, А.А. ЧЕКУЛАЕВА
Лабораторный практикум
«Структуры данных − двумерный массив (матрица)»
МЕТОДИЧЕСКИЕ УКАЗАНИЯ
для студентов 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; |
do |
|
while (j <= m) and not flag |
||
if a[i,j]=x then flag:=true |
|
|
else j:= j+1 |
|
|
end; |
|
|
Упражнение 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 |
j <= m |
then j := j+1; |
||
|
if |
|||
|
if |
j > m |
then |
|
end; |
begin i:= i+1; j :=1 end |
|||
n+1 then j:=0 |
||||
if |
i = |
|||
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