- •Лабораторная работа № 1
- •5.1 Линейная программа
- •Далее создадим файл:
- •Задания1
- •Лабораторная работа № 2
- •7. Варианты задания
- •Лабораторная работа № 3
- •5.2 Оператор if
- •Лабораторная работа № 4
- •Лабораторная работа № 5
- •Задание 2. Циклический вычислительный процесс конечные суммы и произведения
- •Лабораторная работа № 6
- •Лабораторная работа № 7
- •5.1 Одномерный массив
- •5.3 Индексация с помощью указателей
- •Лабораторная работа № 8
- •Лабораторная работа № 9
- •Лабораторная работа № 11
- •Задача 2. Параметры функции
- •Лабораторная работа № 12
- •Лабораторная работа № 13
- •5. Содержание отчета
- •Лабораторная работа № 14
- •5. Содержание отчета
- •Решение уравнения методом деления отрезка пополам (бисекций)
- •Лабораторная работа № 15
- •6.2.1 Метод средних прямоугольников
- •6.2.1 Метод трапеций
- •Лабораторная работа № 10
- •Лабораторная работа № 16
- •5. Содержание отчета
- •Директива #include
- •7. Методические указания
- •8. Варианты заданий.
- •Лабораторная работа № 17
- •Лабораторная работа № 18
- •Лабораторная работа № 19
- •5. Содержание отчета
- •6.1.1 Доступ к элементам структуры
- •6.1.2 Присваивание структур
- •Лабораторная работа № 20
- •Например, формула
- •Задание на программирование
Лабораторная работа № 13
Тема: «Обработка матриц с использованием указателей»
Цель работы
Получение навыков в написании программ с использованием указателей.
1.2 Получение навыков программирования некоторых операций над матрицами с использованием указателей.
Техническое обеспечение
Персональная ЭВМ IBM PC/286 и более поздних моделей.
Клавиатура.
Дисплей.
Печатающее устройство.
Программное обеспечение
Операционная система Windows
Система программирования Visual C++ версия 6.0 или Borland C++ версия 3.1 и более поздние версии.
Постановка задачи
Выполнить операции над матрицами согласно указанного варианта.
5. Содержание отчета
5.1. Тема и цель работы.
5.2. Схема алгоритма решения задачи.
5.3. Текст программы.
5.4. Результаты выполнения программы.
Общие сведения
Многомерный массив в языке С – это массив массивов, т. е. Массив, элементами которого являются массивы. Например, двухмерный массив есть массив, элементы которого одномерные массивы
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);
}
Некоторые операции над матрицами
Ввод матрицыобычно задается по строкам с помощью двух циклов. При использовании указателей это будет выглядеть следующим образом:
/* Ввод матрицы по строкам */
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. Например, для матрицыАразмером 34 это:
Нетрудно заметить, что транспонирование матрицы реализуется с помощью соотношения .
Произведением двух квадратных матриц А и В является третья матрица С, элементы которой вычисляются по формуле:
.
Таким образом, элемент сij матрицы С = АВ есть сумма произведений элементов i-й строки матрицы А на соответствующие элементы i-го столбца матрицы В.
Методические указания
7.1 Ввод и вывод массива, а также операции над матрицами оформить в виде функций, не возвращающих значение.
7.2 При вводе, выводе и обработке матриц использовать указатели на массивы
Варианты заданий
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. Дана матрицы А и В размера mn. Получить матрицуАТ+ВТ, гдеАТиВТ– транспонированные матрицы.
10. Дана квадратная матрица Апорядкаm. Получить матрицы 0.5(A+AT) и 0.5(А–АТ), гдеАТ– транспонированная матрица.