
#include <stdio.h>
#include <iostream>
#include <time.h>
int** new_mass(const int n) 
{
	int** mass = new int *[n];
	if (!mass) 
	{
		printf("Error in new.\n");
		return NULL;
	}
	for (int i = 0; i<n; i++) 
	{
		mass[i] = new int[n];
		if (!mass[i])
		{
			printf("Error in new.\n");
			return NULL;
		}
	}
	return mass;
}
int** del_mass(const int n, int** mass) 
{
	for (int i = 0; i<n; i++)
		delete[] mass[i];
	delete[] mass;
	return NULL;
}
int** read_mass(int *pn) 
{
	char s[80];
	printf("Enter filename for read: ");
	gets_s(s);
	FILE *f = fopen(s, "r");
	if (!f) 
	{
		printf("Error in open.\n");
		return NULL;
	}
	if (fscanf(f, "%i", pn) != 1) 
	{
		printf("Error in read.\n");
		fclose(f);
		return NULL;
	}
	int** mass = new_mass(*pn);
	if (!mass)
	{
		fclose(f);
		return NULL;
	}
	for (int i = 0; i < *pn; i++)
	{
		for (int j = 0; j < *pn; j++) 
		{
			if (fscanf(f, "%i", &mass[i][j]) != 1)
			{
				printf("Error in read.\n");
				mass = del_mass(*pn, mass);
				fclose(f);
				return NULL;
			}
		}
	}
	fclose(f);
	return mass;
}
int vvod(int **mass, int *n, int *t)
{
	int** mass = new_mass(*n);
	for (int i = 0; i < *n; i++)
		for (int j = 0; j < *n; j++)
		{
			printf("\nВведите элемент %i: ", i);
			scanf("%i", &mass[i]);
			while (mass[i] < n)
			{
				printf("Повторите ввод: ");
				scanf("%i", &mass[i]);
			}
			t = mass[i];
		}
	return *t;
}
int print_mass(const int n, int** mass)
{
	for (int i = 0; i < n; i++)
	{
		for (int j = 0; j < n; j++)
		{
			printf("%7i ", mass[i][j]);
		}
		printf("\n");
	}
	printf("\n");
	return 0;
}
int plus_mass(const int n, int** A, int** B)
{
	int** mass;
	mass = new_mass(n);
	if (!mass) { return 1; }
	for (int i = 0; i < n; i++)
		for (int j = 0; j < n; j++)
			mass[i][j] = A[i][j];
	print_mass(n, mass);
	mass = del_mass(n, mass);
	return 0;
}
int mult_mass(const int n, int** A, int** B) 
{
	int** mass;
	mass = new_mass(n);
	if (!mass) { return 1; }
	for (int i = 0; i < n; i++)
		for (int j = 0; j < n; j++) 
		{
			mass[i][j] = 0;
			for (int k = 0; k < n; k++)
			{
				mass[i][j] += A[i][k] * B[k][j];
			}
		}
	print_mass(n, mass);
	mass = del_mass(n, mass);
	return 0;
}


int main() 
{
	setlocale(LC_ALL, "Russian");
	int n;
	int** A;
	char ch;
	char s[81];
	do {
		A = read_mass(&n);
		if (A) 
		
			print_mass(n, A);
			mult_mass(n, A, A);
			A = del_mass(n, A);
		}

		printf("Repeat (y/n)? ");
		gets_s(s);
		ch = s[0];


		while ((ch != 'y') && (ch != 'n')) {
			printf("Press \"y\" for repeat or \"n\" for exit: ");
			gets_s(s);
			ch = s[0];
		}
	} while (ch == 'y');

	return 0;
}