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

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

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

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

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

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

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

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

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

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

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