26.03.2012, 22:10. Просмотров 408. Ответов 7
Вроде доделал программу, которая проверяет матрицу на латинский и магический квадрат:
C++ |
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
| #include <iostream.h>
#include <conio.h>
#include <math.h>
using namespace std;
int **mass = 0;
int n,i,j;
//Вводимо матрицю
int **Matrix(int n)
{int **matr = new int *[n];
for (int i = 0; i < n; ++i)
matr[i] = new int [n];
for(int i = 0; i < n; i++)
{for(int j = 0; j < n; j++)
{cout << "\n Vvedit` element ryadka " <<i+1 <<" stovbcya " <<j+1 <<" : ";
cin >> matr[i][j];}}
return matr;}
//перегляд матриці
void output(int n)
{for(int i = 0; i < n; i++)
{for(int j = 0; j < n; j++)
{cout << mass[i][j] << "\t";}
cout << endl;}}
//перевірка на латинський квадрат
void lat (void)
{
int lat=0;
int summa=n*(n+1)/2;
for(int i = 0; i < n; i++)
{for(int j = 0; j < n; j++)
{if (mass[i][j]>n||mass[i][j]<1)
lat=1;} }
//сума рядків
for(int i = 0; i<n; ++i){
int sumr = 0;
for(int j = 0; j<n; ++j){
sumr += mass[i][j];}
if (summa!=sumr) lat=1;}
//сума стовбчиків
for(int j = 0; j<n; ++j){
int sums = 0;
for(int i = 0; i<n; ++i){
sums += mass[i][j];}
if (summa!=sums) lat=1;}
if (lat==1)
cout<<"Kvadrat ne latunskiy";
else cout<<"Kvadrat latunskiy";
}
//перевірка на магічний квадрат
void mag (void)
{
int lat=0;
int summa=(n*(pow(n,2)+1))/2;
for(int i = 0; i < n; i++)
{for(int j = 0; j < n; j++)
{if (mass[i][j]<1)
lat=1;} }
//сума рядків
for(int i = 0; i<n; ++i){
int sumr = 0;
for(int j = 0; j<n; ++j){
sumr += mass[i][j];
} if (summa!=sumr) lat=1;}
//сума стовбчиків
for(int j = 0; j<n; ++j){
int sums = 0;
for(int i = 0; i<n; ++i){
sums += mass[i][j];
}
if (summa!=sums) lat=1;}
//сума головної діагоналі
int gdio=0;
for(i=0;i<n;i++)
gdio+= mass[i][i];
if (summa!=gdio) lat=1;
//сума побічної діагоналі
int ddio=0;
for(i=0;i<n;i++)
ddio+= mass[i][n-i-1];
if (summa!=ddio) lat=1;
//перевірка
if (lat==1)
cout<<"Kvadrat ne magichniy";
else cout<<"Kvadrat magichniy";
}
//головна программа
void main()
{int r;
{mass = Matrix(n);
while (1)
{clrscr();
cout<<"Vvedit` matrucy 1\nPereglyad matruci 2\nLat 3\nMag 4\nVuxid 4\n\nVvedit` regum \n";
cin>>r;
switch (r)
{case 1:{
{for (int i = 0; i <n; i++)
delete [] mass[i];
delete [] mass;}
cout << "\n Vvedit` rozmirnist` : ";
cin >> n;
Matrix(n);break;}
case 2:{ output(n);break;}
case 3:{ lat();break;}
case 4:{ mag();break;}
case 5:exit(1);}
getch();
}}} |
|
Только работает с матрицами, размерность которых меньше 4*4, если ввожу матрицу 4*4, то появляется ошибка, в чем проблема ?