Практика 5 задание 4

PHOTO EMBED

Tue Nov 05 2024 23:34:39 GMT+0000 (Coordinated Universal Time)

Saved by @Yakostoch #c++

#include <iostream>
#include <windows.h>
using namespace std;

void print_array_using_pointers(int r, int c, int* ptr)
{
	int i, j;
	for (i = 0; i < r; i++)
	{
		cout << "[";
		for (j = 0; j < c; j++)
		{
			cout << " " << *ptr;
			ptr = ptr + 1;
		}
		cout << " ]" << endl;
	}
	return;
}

double determinant(int m, int* p)
{
	double ans = 0, inner_sol, inner_determinant;
	int a, b, c, d;

	if ((m == 1) || (m == 2))
	{
		if (m == 1)
			ans = *p;
		else
		{
			a = *p;
			b = *(p + 1);
			c = *(p + 2);
			d = *(p + 3);
			ans = (a * d) - (b * c);
		}
	}
	else
	{
		int i, j, k, l, n, sign, basic, element;
		n = 0;
		sign = +1;
		int* q;
		q = new int[(m - 1) * (m - 1)];

		for (i = 0; i < m; i++)
		{
			l = 0;
			n = 0;
			basic = *(p + i);

			for (j = 0; j < m; j++)
			{
				for (k = 0; k < m; k++)
				{
					element = *(p + l);
					cout << element << " ";
					if ((j == 0) || (i == k));
					else
					{
						*(q + n) = element;
						n = n + 1;
					}
					l = l + 1;
				}
			}
			cout << endl << basic << " x " << endl;
			print_array_using_pointers((m - 1), (m - 1), q);

			inner_determinant = determinant(m - 1, q);
			inner_sol = sign * basic * inner_determinant;

			cout << "Знак:" << sign << "x Базис: " << basic << "x Определитель" << inner_determinant << " = " << inner_sol << endl;
			ans = ans + inner_sol;
			sign = sign * -1;
		}
		delete[] q;
	}
	return ans;
}

void initialize_array(int r, int c, int* ptr)
{
	int i, j, k;
	cout << "Вводите числа в матрицу" << endl;
	cout << "После каждого числа нажимайте Enter" << endl;

	for (i = 0; i < r; i++)
	{
		for (j = 0; j < c; j++)
		{
			cin >> k;
			*(ptr + i * c + j) = k;

		}
	}
}

int main()
{
	SetConsoleCP(1251);
	SetConsoleOutputCP(1251);


	int r, * p;
	cout << "Количество рядов: ";
	cin >> r;

	p = new int[r * r];

	initialize_array(r, r, p);
	print_array_using_pointers(r, r, p);
	double ans = determinant(r, p);

	cout << "Определитель: " << ans << endl;
	delete[] p;

	return 0;

}
content_copyCOPY