Разработка программного проекта для заполнения квадратной матрицы порядка n, числами, заданными функцией F(n)

Содержание

Слайд 2

Постановка задачи Разработать проект, который заполняет квадратную матрицу порядка n числами,

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

Разработать проект, который заполняет квадратную матрицу порядка n числами, заданными

функцией F(n), записывая их в нее «по спирали» a) по часовой стрелке, б) против часовой стрелки.
Под функцией F будем понимать функцию, в качестве параметра которой передается текущий заполняемый порядковый номер элемента матрицы. В функции происходят определенные вычисления и возвращаемое из неё число записывается в матрицу.
После заполнения матрицы, её необходимо вывести на экран.
Слайд 3

Математическое описание задачи Для проверки правильности работы разработанных алгоритмов проверим заполненные

Математическое описание задачи

Для проверки правильности работы разработанных алгоритмов проверим заполненные матрицы

порядка 5 с заданными вручную (тестовая функция при этом будет иметь вид f(n)=n).
При обходе по часовой стрелке требуется сравнить полученную матрицу с матрицей:
double t1[5][5] = {{1,2,3,4,5},
{16,17,18,19,6},
{15,24,25,20,7},
{14,23,22,21,8},
{13,12,11,10,9}};
При обходе против часовой стрелки требуется сравнить полученную матрицу с матрицей:
double t2[5][5] = {{1,16,15,14,13},
{2,17,24,23,12},
{3,18,25,22,11},
{4,19,20,21,10},
{5,6,7,8,9} };
Слайд 4

Приёмы алгоритмизации задачи Для заполнения квадратной матрицы порядка n значениями функции

Приёмы алгоритмизации задачи

Для заполнения квадратной матрицы порядка n значениями функции F

по спирали по часовой стрелке воспользуемся следующим алгоритмом:
повторяем по числу витков – k (текущий номер витка), число которых равно (n+1)/2
заполняем верхнюю часть витка, индексы для каждого витка следующие: по y – значение постоянное и равно k (нумерация начинается с 0), по x – значения меняются в интервале [k;n-k)
заполняем правую часть витка, индексы для каждого витка следующие: по x – значение постоянное и равно n-1-k, по y – значения меняются в интервале [k+1;n-k)
заполняем нижнюю часть витка, индексы для каждого витка следующие: по y – значение постоянное и равно n-1-k, по x – значения меняются в интервале [n-2-k; k]
заполняем левую часть витка, индексы для каждого витка следующие: по x – значение постоянное и равно k, по y – значения меняются в интервале [n-2-k; k)
Слайд 5

Приёмы алгоритмизации задачи Для заполнения квадратной матрицы порядка n значениями функции

Приёмы алгоритмизации задачи

Для заполнения квадратной матрицы порядка n значениями функции F

по спирали против часовой стрелки воспользуемся следующим алгоритмом:
повторяем по числу витков – k (текущий номер витка), число которых равно (n+1)/2
заполняем левую часть витка, индексы для каждого витка следующие: по x – значение постоянное и равно k (нумерация начинается с 0), по y – значения меняются в интервале [k;n-k)
заполняем нижнюю часть витка, индексы для каждого витка следующие: по y – значение постоянное и равно n-1-k, по x – значения меняются в интервале [k+1;n-k)
заполняем правую часть витка, индексы для каждого витка следующие: по x – значение постоянное и равно n-1-k, по y – значения меняются в интервале [n-2-k; k]
заполняем верхнюю часть витка, индексы для каждого витка следующие: по y – значение постоянное и равно k, по x – значения меняются в интервале [n-2-k; k)
Как видно из описанных выше алгоритмов их можно объединить в один. Введя параметр – направление заполнения матрицы и в зависимости от него меняя индексы x и y.
Слайд 6

Список разрабатываемых функций void get_pos(int &coord_y,int &coord_x, int x, int y,

Список разрабатываемых функций

void get_pos(int &coord_y,int &coord_x, int x, int y, DIR

dir) – в зависимости от направления заполнения матрицы, по разному выполняет присваивание параметрам coord_y и coord_x, переданные значения x и y.
void fill_mas_clockwise(int **mas,func f,int n, DIR dir) – заполняет двумерный массив порядка n числами, полученными из функции f, спиралью по направлению dir.
void print(int **mas,int n) – вывод на экран матрицы порядка n. С помощью функции потокового вывода [3].
int F(int n) – функция расчета элемента матрицы, в зависимости от порядкого номера элемента n.
int test_func (int n) – функция расчета элемента матрицы, в зависимости от порядкого номера элемента n (для функции test).
int test() – функция проводит тесты корректности алгоритмов, если тестирование успешно, то возвращается 1, иначе 0.
Слайд 7

Блок-схема главной программы Ход соответствующей программы Выводы: 1. Код главной программы

Блок-схема главной программы

Ход соответствующей программы

Выводы: 1. Код главной программы имеет линейную

структуру, значит, разработанный проект удовлетворяет требованиям структурного подхода. 2. Программа выводит на экран 2 матрицы порядка n, заполненных по спирали на основании функции F. Первая матрица – обход по часовой стрелке, вторая – против.

int main()
int n;
cout<<"Введите порядок матрицы: ";
cin>>n;
for(int i=0; i mas[i]=new int[n];
fill_mas_clockwise(mas,&F,n,CLOCK);
print(mas,n);
fill_mas_clockwise(mas,&F,n,ANTICLOCK;
print(mas,n);
for(int i=0; i delete[] mas[i];
delete[] mas;
system("pause");
return 0;
}

Слайд 8

Результаты тестирования программы Как видно программа запустилась без сообщений об ошибках.

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

Как видно программа запустилась без сообщений об ошибках. Это

означает, что функция test() завершилась успешно. То есть сгенерированная спиральные матрицы порядка 1 и 5 оказалась равными заданным вручную матрицам.
Также видно, что для введенного порядка 3 результат также верен.

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

Слайд 9

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

Заключение

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

n числами, заданными функцией F(n), записывая их в нее «по спирали» a) по часовой стрелке, б) против часовой стрелки.
Перед началом процесса программирования, на этапе алгоритмизации были словесно описаны шаги алгоритма, которые в дальнейшем были представлены в виде блок-схем.
После этого был осуществлен процесс программирования, т.е. запись алгоритма решаемой задачи на конкретном языке программирования, в данной работе язык программирования был С++.
В конечном итоге, была произведена отладка и тестирование написанной программы на основе контрольных примеров.
Все поставленные задачи были выполнены, соответственно цель работы была достигнута.