Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

AlgStr / Библиотека / Разные источники / СД - двумерный массив (метод ук-ия) Ростов на Дону

.pdf
Скачиваний:
40
Добавлен:
23.03.2015
Размер:
378.88 Кб
Скачать

ФЕДЕРАЛЬНОЕ АГЕНСТВО ПО ОБРАЗОВАНИЮ

Федеральное государственное образовательное учреждение высшего профессионального образования

«ЮЖНЫЙ ФЕДЕРАЛЬНЫЙ УНИВЕРСИТЕТ»

Е.С. НЕВСКАЯ, А.А. ЧЕКУЛАЕВА

Лабораторный практикум

«Структуры данных двумерный массив (матрица)»

МЕТОДИЧЕСКИЕ УКАЗАНИЯ

для студентов 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