Массивы. Изучение способов описания и особенностей работы одномерных и двумерных массивов (Лабораторная работа № 5)

Страницы работы

Фрагмент текста работы

Двумерный массив или прямоугольная матрица B из n строк и m столбцов в общем виде выглядит следующим образом:

b11 b12 b1m

b21 b22 b2m

bn1 bn2 bnm

            На языке Delphi имена элементов массива записываются также с двумя номерами (индексами):

b[1,1],b[1,2],…,b[1,m],b[2,1],b[2,2],…,b[2,m],…,b[n,1],b[n,2],…,b[n,m].

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

Рассмотрим задачи обработки матриц и алгоритмы их решения.

3.1. Вычисление суммы элементов главной диагонали квадратной матрицы.

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

При обработке массивов в разделе описания переменных программы появляются имена индексов элементов: для одномерных массивов – одной, для двумерного – двух целочисленных переменных.

При вычислении суммы элементов диагонали следует обратить внимание на имена суммируемых элементов: оба индекса имеют одинаковое значение, т.е. в общем виде имя элемента диагонали будет b[i,i]. Это означает, что можно рассматривать диагональ как одномерный массив и использовать один цикл для вычислений.

Программа имеет следующий вид:

program Sum_Diagonal;

{$APPTYPE CONSOLE}

uses

SysUtils;

const

N=3;

var

b:array[1..n,1..n] of real;

I,j:interger;

S:real;

begin

writeln(‘введите значения элементов матрицы по строкам’);

writeln(‘в конце каждой строки нажимайте Enter’);

for i:=1 to n do

begin

for j:=1 to n do read(b[i,j]);

writeln;

end;

S:=0;

for i:=1 to n do

S:=S+b[i,i];

write(‘сумма элементов диагонали матрицы s=’,s);

readln;

end.

3.2.Нахождение наибольших элементов каждой строки матрицы.

Каждую строку матрицы можно рассматривать как одномерный массив и использовать идею нахождения наибольшего значения в программе maxim из предыдущего раздела. Найденные значения будем помещать в одномерный массив a.

program Max_In_Rows;

{$APPTYPE CONSOLE}

uses

SysUtils;

const

n=3;

var

b:array[1..n,1..n] of real;

I,j:interger;

a:array [1..n] of real;

begin

writeln(‘введите значения элементов матрицы по строкам’);

writeln(‘в конце каждой строки нажимайте Enter’);

for i:=1 to n do

begin

for j:=1 to n do read(b[i,j]);

writeln;

end;

for i:=1 to n do

begin

a[i]:=b[i,1];

for j:=2 to n do

if a[i]<b[i,j] then a[i]:=b[i,j];

end;

writeln (‘Наибольшие значения строк матрицы S’);

writeln (‘Номер строки      Наибольшее значение’);

for i:=1 to n do

writeln (i:6,’ ’:20,a[i]);

readln;

end.

3.3. Нахождение сумм элементов столбцов матрицы.

При обработке матриц можно осуществлять операции как над строками, так и над столбцами. При нахождении суммы элементов столбцов можно использовать алгоритм из программы summa предыдущего раздела. Для лучшего понимания работы программы введем переменную S для вычисления суммы, а затем для каждого столбца запишем полученный результат в массив a, т.е. присвоим его переменной a[j], где j – текущий номер столбца матрицы.

Ниже приводится возможный вариант программы.

program Sum_By_Columns;

{$APPTYPE CONSOLE}

uses

SysUtils;

const

n=3;

var

b:array[1..n,1..n] of real;

I,j:interger;

S:=real;

a:array [1..n] of real;

begin

writeln(‘введите значения элементов матрицы по строкам’);

writeln(‘в конце каждой строки нажимайте Enter’);

for i:=1 to n do

begin

for j:=1 to n do read(b[i,j]);

writeln;

end;

for j:=1 to n do

begin

S:=0;

for i:=1 to n do S:=S+b[i,j];

a[,j]:=S;

end;

write(‘сумма элементов столбцов матрицы: ’);

for i:=1 to n do

write(a[i]);

readln;

end.

3.4. Перестановка строк матрицы.

В прямоугольной матрице b из n строк и m столбцов требуется поменять местами две строки. При решении этой задачи можно использовать алгоритм обмена значениями двух переменных из программы сортировки. Для этого достаточно организовать цикл по переменной столбца и, используя промежуточную (буферную) переменную, менять местами каждую пару элементов, стоящих в одном столбце. При заданных номерах строк K и L решение выглядит так:

program P;

{$APPTYPE CONSOLE}

uses

SysUtils;

const

n=3;m=4;

var

b:array [1..n,1..m] of real;

c:real;

K,L,i,j:interger;

begin

write(‘Введите номера меняемых местами строк матрицы’);

readln(K,L);

writeln(‘введите значения элементов матрицы по строкам’);

writeln(‘в конце каждой строки нажимайте Enter’);

for i:=1 to n do

begin

for j:=1 to n do read(b[i,j]);

writeln;

end;

for j:=1 to m do

begin

c:=b[K,j];

b[K,j}:=b[L,j};

b[L,j}:=c;

end;

writeln;

writeln(‘матрица с переставленными строками:’);

for i:=1 to n do

begin

for j:=1 to m do

write(b[i,j]);

                         wtiteln

end;

readln;

end.

Пример

Задача 1.

Рассчитать сумму отрицательных элементов массива А(n), если известно, что
n = 5, A = (1.5, -4.6, 10, -1.7, -4.9).

Задача 2.

Найти разность R между максимальным и минимальным элементами массива

Порядок выполнения работы

1.  С помощью Проводника Windows на рабочем логическом диске создайте папку (например, Ivanov-5) для размещения файлов проекта.

2.  Создайте проект «Console Application» консольного приложения Delphi.

3.  Сохраните файлы проекта в папку Ivanov-5 под именем Ivanov

Похожие материалы

Информация о работе

Тип:
Методические указания и пособия
Размер файла:
335 Kb
Скачали:
0