Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
mlr_progr_1sem.doc
Скачиваний:
7
Добавлен:
03.11.2018
Размер:
1.72 Mб
Скачать

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

Цель: усовершенствовать навыки программирования на примере решения задач матричной алгебры.

Задачи:

1) Повторить теоретические сведения о создании и использовании статических массивов в языке Си++.

2) Разработать программу решающую одну из задач матричной алгебры.

Основные теоретические сведения.

Основные теоретические сведения о массивах были изложены в лабораторной работе №3. Данная лабораторная работа (№4) является логическим продолжением предыдущей и призвана закрепить навыки работы со статическими массивами на примере решения конкретных задач матричной алгебры.

Напомним основные моменты работы со статическими массивами.

1) Как и переменные, массивы необходимо объявлять. Запись double dArray[13][12] означает объявление двумерного массива dArray типа double размером 13×12 элементов, т.е. 13 строк и 12 столбцов.

2) Размер статических массивов определяется заранее и его нельзя менять. Если в задаче необходимо использовать массив переменного размера, то можно объявить массив заведомо большего размера и использовать в ходе решения только необходимую его часть. Например, в задаче требуется определить матрицу порядка n. Можно принять, что n <= 20 и объявить двумерный массив размером 20×20. Этого хватит для решения задачи для любого n <= 20.

3) Индексация в массивах начинается с нуля. Это означает, что для массива dArray индексы изменяются от 0 до 12 по строкам и от 0 до 11 по столбцам.

4) При работе с массивами широко используются циклы for. Следующий участок кода показывает пример обнуления двумерного массива dArray:

int i, j;

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

{

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

{

dArray[i][j] = 0;

}

}

5) Для инициализации больших массивов целесообразно использовать генератор случайных чисел.

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

srand((unsigned)time(NULL));

int i, j;

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

{

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

{

dArray[i][j] = ( 300. * rand() / RAND_MAX ) - 100;

}

}

6) В ряде случаев условие задач может быть неполным и для решения целесообразно принимать дополнительные ограничения, например, задать диапазоны изменения входных данных и т.п.

Теперь вы обладаете достаточными знаниями для самостоятельного решения следующих задач.

Транспонирование матриц

Транспонированной называется матрица (АТ), в которой столбцы исходной матрицы (А) заменяются строками с соответствующими номерами.

Если А = (аij), то АТ = (аji).

Из определения следует, что если исходная матрица А имеет размер m × n, то транспонированная матрица АТ имеет размер n × m.

АЛГОРИТМ 3

Алгоритм операции транспонирования.

Исходные данные:

А[m×n] — исходная матрица.

Выходные данные:

M[n×m] — транспонированная матрица.

Вспомогательные переменные:

i, j — переменные для организации циклов.

Шаг 1. [Цикл по i]. Выполнить шаг 2 при i = 0,…,n – 1 и после этого завершить алгоритм.

Шаг 2. [Цикл по j]. Выполнить шаг 3 при j = 0,…,m – 1.

Шаг 3. [Установить М[i,j]]. М[i,j] = А[j,i]. (Формируем элементы транспонированной матрицы)

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]