Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лабораторные по программированию.doc
Скачиваний:
37
Добавлен:
29.02.2016
Размер:
1.78 Mб
Скачать

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

Тема: «Обработка матриц с использованием указателей»

  1. Цель работы

    1. Получение навыков в написании программ с использованием указателей.

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

  1. Техническое обеспечение

    1. Персональная ЭВМ IBM PC/286 и более поздних моделей.

    2. Клавиатура.

    3. Дисплей.

    4. Печатающее устройство.

  2. Программное обеспечение

    1. Операционная система Windows

    2. Система программирования Visual C++ версия 6.0 или Borland C++ версия 3.1 и более поздние версии.

  1. Постановка задачи

Выполнить операции над матрицами согласно указанного варианта.

5. Содержание отчета

5.1. Тема и цель работы.

5.2. Схема алгоритма решения задачи.

5.3. Текст программы.

5.4. Результаты выполнения программы.

  1. Общие сведения

Многомерный массив в языке С – это массив массивов, т. е. Массив, элементами которого являются массивы. Например, двухмерный массив есть массив, элементы которого одномерные массивы

constintn=5,m=6;

intarr[n][m];

Массив arrсостоит изnэлементов. Каждый элемент – одномерный массив размерностьюm. В памяти массивarrрасположен следующим образом:

. . .

Первый

массив

из mэлем-тов

Второй

массив

из mэлем-тов

. . .

n- й

массив

из mэлем-тов

. . .

Рассмотрим, как осуществлять доступ к элементам многомерного массива через указатель. Сделаем это на примере массива arr.

Объявим указатель и свяжем его с массивом arr

int*ptr;

ptr= &arr[0][0];

Необходимо получить доступ к элементу arr[i][j], или кj-му элементуi-й строки массиваarr. Последовательно это вычисляется так:

адрес первого массива arr -ptr

адрес j-го элементаi-й строки,ptr+i*m+j

т. е. элемента arr[i][j]

T.е. к элементу с индексамиarr[i][j] можно обратиться *(ptr+i*m+j) илиptr[i*m+j].

Пример.

/* Сложение двух матриц */

voidadd_matr(float*matr1,float*matr2,intn,intm)

{

int i,j;

for (i = 0; i < n; i++)

for (j = 0; j < m; j++)

*(matr1+i*m+j)=*(matr1+i*m+j) +*(matr2+i*m+j);// или matr1[i*m+j]=matr1[i*m+j] + matr2[i*m+j];

out_matr(matr1, m, n);

}

    1. Некоторые операции над матрицами

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

/* Ввод матрицы по строкам */

voidinput_matr(float*matr,intn,intm)

{

int i, j;

for (i = 0; i < n; i++)

{

cout<<“\nвведите элементы “<<i+ 1<<”-й строки: “ ;

for(j = 0; j < m; j++)

cin>>matr[ i*m + j];

}

}

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

/* Вывод матрицы по строкам *.

void out_matr(float *matr, int n, int m)

{

int i, j;

for (i = 0; i < n; i++)

{

for (j = 0; j < m; j++)

cout<<(matr[i*m + j]<<” “;

cout<<endl;

}

cout<<endl;

}

Операции с константами сводятся к сложению или вычитанию элементов матрицы aijс константой, напримерх, или умножениюaij*хили делению aij/хна константу.

Транспонированной матрицей называется матрица, у которой столбцы и строки меняются местами, т. е. из матрицы размераmnполучатся матрица размеромnm. Например, для матрицыАразмером 34 это:

Нетрудно заметить, что транспонирование матрицы реализуется с помощью соотношения .

Произведением двух квадратных матриц А и В является третья матрица С, элементы которой вычисляются по формуле:

.

Таким образом, элемент сij матрицы С = АВ есть сумма произведений элементов i-й строки матрицы А на соответствующие элементы i-го столбца матрицы В.

  1. Методические указания

7.1 Ввод и вывод массива, а также операции над матрицами оформить в виде функций, не возвращающих значение.

7.2 При вводе, выводе и обработке матриц использовать указатели на массивы

  1. Варианты заданий

1. Даны квадратные матрицы А и В порядка n. Получить матрицу С = АВВА.

2. Дана квадратная матрица А порядка n. Получить матрицу АВ+B, где элементы матрицы В вычисляются по формуле:

3. Даны квадратные матрицы АиВпорядкаn. Получить матрицу С =АТВТA, гдеАТиВТ– транспонированные матрицы.

4. Даны квадратные матрицы АиВпорядкаn. Получить произведениеАВТ

5. Даны квадратные матрицы АиВпорядкаn. Получить матрицуА2+В2.

6. Даны квадратные матрицы А,ВиСпорядкаn. Получить матрицу (А+В)С.

7. Дана квадратная матрица Апорядкаn. Получить матрицуАТВТ, гдеАТиВТ– транспонированные матрицы, а элементы матрицыВвычисляются по формуле:

8. Даны квадратные матрицы А и В порядка n. Получить матрицу А(ВЕ) + С, где Е – единичная матрица порядка n, а элементы матрицы С вычисляются по формуле:

i, j = 1, 2, …, n.

9. Дана матрицы А и В размера mn. Получить матрицуАТ+ВТ, гдеАТиВТ– транспонированные матрицы.

10. Дана квадратная матрица Апорядкаm. Получить матрицы 0.5(A+AT) и 0.5(ААТ), гдеАТ– транспонированная матрица.