Сделай Сам Свою Работу на 5

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





Отчет по лабораторной работе №1

«Определитель квадратной матрицы»

По дисциплине «Технология разработки ПО»

 

Выполнил:

Грибанов А.В.

группа 03-319

Проверил:

Гагарин А.П.

 

г. Москва, 2013

Задание.

Написать расчетную программу, которая вычисляет детерминант квадратной матрицы.

Основные алгоритмические решения.

Для матрицы первого порядка детерминантом является сам единственный элемент этой матрицы.

Для матрицы 2х2 детерминант определяется как

Для матрицы NxN определитель задаётся рекурсивно:

, где — дополнительный минор к элементу . Эта формула называется разложением по строке.

Руководство к пользованию.

Данная программа реализована в ОС Windows. Язык написания программы – C(Си). Для открытия программы можно использовать любой компилятор языка Си.

После запуска программы появиться консольное окно, в котором нужно вводить данные.

В самом начале работы программы мы задаем размерность матрицы. Далее мы вводим сами элементы матрицы в массив через пробел и переносом на другую строку, т.е. если у нас матрица размерностью N, то мы вводим n элементов через пробел и переходим на другую строку, всего строк должно быть также n.



После ввода матрицы мы выводим на экран конечный вид матрицы, записанной до этого в двумерный массив.

Если размерность матрицы = 1, то детерминант равен единственному значению в матрице, если размерность = 2, то мы перемножаем элементы матрицы по диагонали и вычитаем из одного другое. Если размерность = 3 и более, то мы раскладываем матрицу построчно и вычисляем детерминант.

Особенности реализации

Данная программа состоит из двух частей: первая часть – это пользовательский интерфейс, где вводится размерность и сама матрица, а вторая часть – это алгоритм вычисления детерминанта.

Подробное описание:

1 часть. Сперва пользователь вводит размерность матрицы, которая будет храниться в переменной “razm”, далее вводит саму матрицу, которая будет храниться в масииве “Arr”. (Особые случаи: 1 - алгоритм считывает все элементы матрицы последовательно, поэтому, если ошибиться со вводом строки, ее длины, то ничего страшного не произойдет, программа просто считает следующий элемент, 2 – если ввести ращмерность матрицы = 0, то программа выдаст ошибку). Далее сохраненная матрица выводиться на экран. После этого запускается 2 часть программы.



2 часть. Программа считывает размерность матрицы, и создает двумерный массив “Arr” с заданной размерностью “size” строк. Далее массив заполняется введенными пользователем элементами матрицы, после чего идет проверка размерности матрицы. Если размерность = 1, то определитель считать не надо, он будет равен единственному значению, который есть в матрице, если размерность=2, то расчитывается по формуле det=Arr[0][0]*Arr[1][1]-Arr[0][1]*Arr[1][0], если размерность более 2 на 2, то программа вызывает подпрограмму, которая в дальнейшем будет работать рекурсивно(вызывать саму себя). Программа вычисляет детерминант по формуле det+=pow((double)-1, (i+j))*determ(matr, size-1)*Arr[i][size-1] и выводит на экран определитель.

 

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

#define _CRT_SECURE_NO_WARNINGS

 

 

#include "stdafx.h"

#include "stdio.h"

#include "conio.h"

#include <iostream>

#include <cmath>

 

 

double determ(int** Arr, int size);

using namespace std;

int main()

{

int razm;

printf("Vvedite razmernost' matricy: ");

scanf_s("%d",&razm);

printf("Vvedite elementi matricy \n");

 

int size=razm; //подача размерности

int**Arr; //объявление массива

Arr=new int*[size]; //создание массива с заданной размерностью

for(int i=0;i<size;++i)

Arr[i]=new int[size];

for(int i=0;i<size;++i)

for(int j=0;j<size;++j)

std::cin>>Arr[i][j]; //заполнение массива

 

printf("\n Nasha matrica imeet vid \n \n");

for(int i=0;i<size;++i)

{

for(int j=0;j<size;++j)

std::cout<<Arr[i][j]<<' ';

std::cout<<std::endl; //вывод матрицы на экран



}

 

printf("\n Opredilitel' raven \n");

std::cout<< determ(Arr, size) <<'\n';

for(int i=0;i<size;++i)

delete[] Arr[i];

delete[] Arr;

 

_getch();

}

 

double determ(int** Arr, int size)

{

int i,j;

double det=0;

int** matr;

if(size==1)

{

det=Arr[0][0]; //определитель для размерности 1на1

}

else if(size==2)

{

det=Arr[0][0]*Arr[1][1]-Arr[0][1]*Arr[1][0]; //для размерности 2на2

}

else // иначе, для размерности более чем 2на2

{

matr=new int*[size-1];

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

{

for(j=0;j<size-1;++j)

{

if(j<i)

matr[j]=Arr[j]; //выше главной диагонали

else

matr[j]=Arr[j+1]; // ниже главное диагонали

}

det+=pow((double)-1, (i+j))*determ(matr, size-1)*Arr[i][size-1]; // вычисление детерминанта

}

delete[] matr;

}

return det;

}

 


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

 








Не нашли, что искали? Воспользуйтесь поиском по сайту:



©2015 - 2024 stydopedia.ru Все материалы защищены законодательством РФ.