Работа с матрицами

Содержание

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

2. Темы для предварительной проработки

3. Задания для выполнения

3.1. Разработка алгоритма решения

3.2. Определение переменных программы

3.3. Разработка текста программы

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

3.5. Отладка программы

3.6. Результаты работы программы

3.7. Выводы

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

Целью лабораторной работы является получение практических навыков в работе с матрицами в языке C.

2. Темы для предварительной проработки

  • Операторы цикла языка C. Вложенные циклы.
  • Условный оператор языка C.
  • Матрицы.

3. Задания для выполнения

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

Если по условию задания матрицу следует заполнить случайными числами, рекомендуем выбирать эти числа из диапазона 0 – 99.

1

Заполнить матрицу случайными числами. Развернуть матрицу на 90o по часовой стрелке.

3.1. Разработка алгоритма решения.

Если ми обозначим размерность матрицы как r, номер строки как i, а номер столбца как j, и (имея в виду, что реализация алгоритма будет выполнена на языке С). Нам необходимо заполнить матрицу случайными числами и развернуть матрицу на 90o по часовой стрелке Изначально произведем заполнение исходной матрицы случайными числами. Затем произведем развернуть матрицу на 90o по часовой стрелке и выведем полученную матрицу. Схема последнего алгоритма показана на рисунке.

Блок-схема: знак завершения: Начало

Блок-схема: данные: Matr1[i][j]

Изначально мы определяем индексы i и j. Затем заполняем матрицу случайными числами Matr1[i][j]=random(100) и вычисляем исходную матрицу необходимую для дальнейшей работы. После того как мы получили исходную матрицу, производим ёе отображение симметрично главной диагонали Matr2[j][i]=Matr1[i][j]. И уже производим вывод полученной матрицы.

3.2. Определение переменных программы

Для реализации алгоритма нам будут нужны такие переменные.

Матрица представляется в памяти как 2-мерний массив (должен быть размещен в статической памяти):

int Matr1[r][r]; и int Matr2[r][r];

Переменные для представления текущих номеров строки (i) и столбца (j), т.е. индексы: short i, j;

Всем скалярным переменным назначаем тип short, т.к. их значения никак не могут выходить из диапазона -128 - 128.

3.3. Разработка текста программы

Текст программы начинаемо с включения файла stdio.h и определения макроконстанты r - размера матрицы (хотя по условию задания можно было бы использовать просто константу 9 в тексте программы, определение размера через макроконстанту более соответствует стилю программирования на языке C).

Массив-матрицу Matr объявляем до открытия тела главной функции, что обеспечивает его размещение в статической памяти.

Открываем тело главной функции и объявляем переменные в соответствии с п.5.2. Присваиваем переменным iиj начальные значения (это можно было сделать и при их объявлении). Открываем цикл перебора строк с изменением i от 0 до 9 и цикл перебора столбцов с изменением jот 0 до 9. Внутренний цикл состоит из одного условного оператора, так что нет необходимости брать его тело в операторные скобки. Тело внешнего цикла берется в скобки.

Производим вычисление исходной матрицы после заполнения её случайными числами:

Matr1[i][j++]=random(100);

Затем идет вывод исходной матрицы на печать:

Matr1[i][j]

Далее производим вычисления при отображении исходной матрицы симметрично относительно главной диагонали:

Matr2[j][i]=Matr1[i][j];

И выводим полученную матрицу на печать:

Matr2[i][j]

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

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

/*****************************************************/

/* Лабораторная работа №9 */

/* Работа с матрицами */

/* Вариант №1. */

/*****************************************************/

#include <stdio.h>

#include <stdlib.h>

#define r 9

int Matr1[r][r]; /* матрица1 */

int Matr2[r][r]; /* матрица2 */

int main(void)

{

short i, j; /* индексы */

/* заполнение матрицы случайными числами */

randomize(); /* инициализация rand */

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

for (j=0; j<9; Matr1[i][j++]=random(100));

/* распечатка исходной матрицы */

printf("Исходная матрица:\n");

for (i=0; i<9; i++, printf("\n"))

for (j=0; j<9; printf("%3d ", Matr1[i][j++]));

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

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

Matr2[j][8-i]=Matr1[i][j];

/* распечатка полученной матрицы */

printf("Полученная матрица:\n");

for (i=0; i<9; i++, printf("\n"))

for (j=0; j<9; printf("%3d ", Matr2[i][j++]));

return 0;

}

3.5. Отладка программы

Форма вывода результатов программы столь наглядна, что по результатам можно убедиться в правильном функционировании программы или - при неправильном функционировании - можно делать выводы о том, у реализации какой именно ветви алгоритма сделана ошибка. При наличии ошибок можно в отладке программы также использовать средства пошаговой отладки, при чем следует контролировать текущие индексы граничные номера и текущее значение модификатора. Наиболее вероятные ошибки - неправильное определение граничных номеров или неправильное определение момента перехода в нижнюю часть матрицы.


Страница: