Лабораторная работа №7 двухмерные массивы (матрицы) - davaiknam.ru o_O
Главная
Поиск по ключевым словам:
страница 1
Похожие работы
Название работы Кол-во страниц Размер
Лабораторная работа 3 Классы, содержащие массивы встроенных типов... 1 61.77kb.
Контрольная работа по математике 1 65.88kb.
Одномерные массивы в Паскале 1 196.17kb.
Приведение матрицы к диагональному виду. Каноническое разложение... 1 38.52kb.
Ранг матрицы. Ранг системы векторов 1 38.79kb.
Лабораторная работа №3 по теме: Представление алгоритмов в виде граф-схем... 1 40.87kb.
Лабораторная работа №1 Изучение возможностей сетевого анализатора. 5 429.73kb.
План занятий по высшей математике 1 14.66kb.
План занятий по высшей математике 1 11.99kb.
Лабораторная работа №1 Построение детерминированного синтаксического... 1 278.71kb.
Лабораторная работа №1 Установка и настройка сетевой карты. 1 58.29kb.
Декабрь 2012 – 2013 уч г 1 138.12kb.
Направления изучения представлений о справедливости 1 202.17kb.

Лабораторная работа №7 двухмерные массивы (матрицы) - страница №1/1

Лабораторная работа № 7

ДВУХМЕРНЫЕ МАССИВЫ (МАТРИЦЫ)
Кроме приведенного ранее описания многомерный массив можно описать как одномерный, элементами которого являются массивы. Так, например, матрица d из лабораторной работы № 6 может быть описана в виде

type matr=array[1.3] of array[1..2] of real;

var d,h:matr;

В этом случае ссылка на элемент матрицы, лежащий на пересечении i-ой строки и j-го столбца, выглядит следующим образом

d[i] [j] .

При такой записи описания допускается оператор присваивания

h[2]:=d[1];

в соответствии с которым вся первая строка матрицы d засылается во вторую строку матрицы h. Независимо от вида описания, если два массива (вектор или матрица) имеют один и тот же тип, то возможна передача значений всего массива оператором

h:=d;

Вывод двухмерного массива в компонент StringGrid:



for i:=1 to n do

for j:=1 to m do

StringGrid2.cells[j-1,i-1]:=IntToStr(a[i,j]);

7.1. Преобразование матрицы в вектор

Требуется переслать элементы матрицы a размером n * m в вектор b длиной n * m с сохранением порядка следования элементов. Очевидно, что порядковый номер k элемента в векторе, соответствующий индексам i и j элемента в матрице, вычисляется по формуле

k = m ( i-1 ) + j .

Программа записывается следующим образом:

const n=3; m=4;

type matr=array[1..n,1..m] of real;

vec=array[1..n*m] of real;

const a:matr=(( 0, -2, 1, 3),

( 4, 5, 7, -1),

( 0, 6, 2, 0 ));

var i, j, k : integer; b:vec;

begin for i:=1 to n do

for j:=1 to m do

begin k:=m*(i-1)+j; b[k]:=a[i, j]

end; for k:=1 to n*m do Memo1.Lines.Add(FormatFloat(‘0.0’,b[k]))

end;
Аналогично записывается программа преобразования вектора в матрицу.

const n=3; m=4;

type matr=array[1..n,1..m] of real;

vec=array[1..n*m] of real;

const b:vec=( 0, -2, 1, 3, 4, 5, 7, -1, 0, 6, 2, 0 );

var i, j, k:integer; a:matr;

begin for i:=1 to n do

for j:=1 to m do

begin k:=m*(i-1)+j; a[i,j]:=b[k]

end;

//вывод матрицы


End;
7.2. Транспонирование матрицы

Необходимо переставить строки матрицы на место столбцов, а столбцы на место строк, т. е. вычислить b i, j = a j, i .

program prtrans;

const n=3; m=4;

type matr1=array[1..n,1..m] of real;

matr2=array[1..m,1..n] of real;

const a:matr1=(( 0, -2, 1, 3 ),

( 4, 5, 7, -1 ),

( 0, 6, 2, 0 ));

var i, j : integer; b:matr2;

begin for i:=1 to m do

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

//вывод матрицы

End;
7.3. Суммирование диагональных элементов матрицы

При суммировании необходимо учитывать, что у элементов, расположенных на главной диагонали индексы одинаковые, а у элементов побочной диагонали сумма индексов на единицу больше порядка матрицы.

const n:=3;

a:array[1..n,1..n] of real=(( 2, 9, 4 ),

( 7, 5, 3 ),

( 6, 1, 8 ));

var i, j : integer; sgd, spd: real;

begin sgd:=0; spd:=0;

for i:=1 to n do

begin sgd:=sgd+a[i,i]; spd:=spd+a[i,n-i+1]

end; Memo1.Lines.Add(‘sgd=‘+FloatToStr(sgd)+’ ‘+

‘spd=‘+FloatToStr(spd))

End;


7.4. Суммирование элементов строк

Необходимо вычислить сумму элементов каждой строки матрицы a размером n * m. Результат получим в виде вектора ss. Поскольку на поиск в массиве элемента с заданным индексом затрачивается время, для повышения эффективности при вычислении суммы каждой строки используется простая переменная s, что исключает многократное обращение к элементам вектора ss.

const n=3; m=4;

a:array[1..n,1..m] of real=(( 0, -2, 1, 3 ),

( 4, 5, 7, -1 ),

( 0, 6, 2, 0 ));

var i, j :integer; s:real;

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

begin for i:=1 to n do

begin s:=0;

for j:=1 to m do s:=s+a[i, j];

ss[i]:=s; Memo1.Lines.Add(‘ss(’+IntToStr(i)+’)=’+FormatFloat(‘0.0’,ss[i])

end

end;


Перестановка i-ой и j-ой строк выполняется с использованием вспомогательной переменной u. В примере номера переставляемых строк вводятся с клавиатуры.

const n=3; m=4;

a:array[1..n,1..m] of real=(( 0, -2, 1, 3 ),

( 4, 5, 7, -1 ),

( 0, 6, 2, 0 ));

var i, j, k:integer; u:real;

begin i:=StrToInt(Edit1.Text); j:=StrToInt(Edit2.Text);

for k:=1 to m do

begin u:=a[i,k]; a[i,k]:=a[j,k]; a[j,k]:=u

end;


//вывод матрицы

End;
7.6. Перестановка столбцов матрицы

Номера переставляемых столбцов n1 и n2.
const n=5; m=7;

procedure TForm1.FormCreate(Sender: TObject);

var i,j:integer;

begin


Randomize;

with StringGrid1 do

begin

RowCount:=n;



ColCount:=m;

for i:=0 to RowCount-1 do

for j:=0 to ColCount-1 do cells[j,i]:=IntToStr(-5+random(10));

end;


with StringGrid2 do

begin


ColCount:=m;

RowCount:=n

end;

end;
procedure TForm1.Button1Click(Sender: TObject);



var a:array[1..n,1..m]of integer;

n1,n2,y:integer;i,j:integer;

begin

n1:=StrToInt(Edit1.Text);



n2:=StrToInt(Edit2.Text);

if (n1<1) or (n1>m) or (n2<1) or (n2>m) then

begin

ShowMessage('Ошибка! Проверьте номера столбцов!'+



#13#10+'Диапазон номеров от 1 до '+IntToStr(m)+'!');

exit


end;

for i:=1 to n do

for j:=1 to m do

a[i,j]:=StrToInt(StringGrid1.cells[j-1,i-1]);

//перестановка

for i:=1 to n do

begin

y:=a[i,n1];



a[i,n1]:=a[i,n2];

a[i,n2]:=y

end;

//вывод


for i:=1 to n do

for j:=1 to m do

StringGrid2.cells[j-1,i-1]:=IntToStr(a[i,j]);end;

7.7. Удаление строки из матрицы

Требуется удалить строку с заданным номером k. Все строки, начиная с (k+1)-ой перемещаются вверх. Номер удаляемой строки в примере вводится с клавиатуры.


const nn=3; m=4;

a:array[1..nn,1..m] of real=(( 0, -2, 1, 3 ),

( 4, 5, 7, -1 ),

( 0, 6, 2, 0 ));

var i, j, k, n:integer;

begin read( k ); n:=nn-1;

for i:=k to n do

for j:=1 to m do a[i,j]:=a[i+1,j];

//вывод матрицы
End;
7.8. Упорядочение матрицы по суммам строк

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

const n=3; m=4;

a:array[1..n,1..m] of real=(( 0, -2, 1, 3 ),

( 4, 5, 7, -1 ),

( 0, 6, 2, 0 ));

var i, j, k:integer; s:real;

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

begin for i:=1 to n do

begin s:=0;

for j:=1 to m do s:=s+a[i, j];

ss[i]:=s


end

for i:=1 to n-1 do

for j:=1 to n- i do

if ss[j] < ss[j+1] then

begin s:=ss[j]; ss[j]:=ss[j+1]; ss[j+1]:=s;

for k:=1 to m do

begin s:=a[j,k]; a[j,k]:=a[j+1,k]; a[j+1,k]:=s

end


end;

//вывод упорядоченной матрицы

end.

Рабочее задание

Дана квадратная матрица размером n * n. Составить программу и рассчитать суммы и произведения элементов матрицы.

Написать отчет, содержащий

- задание,

- принятые обозначения,

- программу,

- результаты.

Варианты заданий к лабораторной работе № 7

Требуется определить:



  1. Сумму отрицательных элементов главной диагонали. Произведение элементов второй строки с четными индексами.

  2. Сумму положительных элементов побочной диагонали. Сумму элементов второй строки.

  3. Произведение отрицательных элементов матрицы. Сумму положительных элементов главной диагонали.

  4. Произведение положительных элементов побочной диагонали. Сумму элементов второй строки с четными индексами.

  5. Произведение элементов главной диагонали с четными индексами. Сумму отрицательных элементов всей матрицы.

  6. Сумму элементов побочной диагонали. Произведение отрицательных элементов матрицы.

  7. Сумму положительных элементов третьей строки. Произведение элементов побочной диагонали.

  8. Произведение положительных элементов первой строки. Сумму элементов главной диагонали с нечетными индексами.

  9. Сумму положительных элементов матрицы. Произведение элементов побочной диагонали.

  10. Сумму положительных элементов второй строки. Произведение элементов матрицы с четными индексами.

  11. Произведение положительных элементов матрицы Сумму элементов третьей строки с нечетными индексами.

  12. Произведение отрицательных элементов главной диагонали. Сумму абсолютных значений элементов матрицы.

  13. Сумму положительных элементов первой строки. Сумму абсолютных значений элементов побочной диагонали.

  14. Произведение абсолютных значений элементов матрицы. Произведение отрицательных элементов третьей строки.

  15. Произведение положительных элементов второй строки. Сумму элементов матрицы с четными индексами.

  16. Сумму отрицательных элементов третьей строки. Произведение элементов матрицы с нечетными индексами.





Наводить порядок надо тогда, когда еще нет смуты. Лао-цзы
ещё >>