旋转"数组阵列" (矩阵)

时间:2015-12-18 13:25:42

标签: arrays matrix rotation pascal

所以,我是初学者。我试图制作一个程序,它确定用户放入的两个矩阵是否具有从第一个矩阵到第二个矩阵的相应变换(旋转)。 输出将是这样的(请记住括号" [...]"用于显示用户的输入),

Please input the value of N : [3]
Matrix A
[1] [2] [3]
[4] [5] [6]
[7] [8] [9]
Matrix B
[7] [4] [1]
[8] [5] [2]
[9] [6] [3]
Matrix B is 90 degree rotated Matrix A
------------------------------------------
Please input the value of N : [3]
Matrix A
[1] [2] [3]
[4] [5] [6]
[7] [8] [9]
Matrix B
[9] [8] [7]
[6] [5] [4]
[3] [2] [1]
Matrix B is 180 degree rotated Matrix A

假设矩阵向右旋转。如果矩阵B与矩阵A相同,则输出将是0度旋转矩阵。

这是我在Pascal的尝试:

Program Matrix_Rotation;

Var

   TabA,TabB : Array [1..9] of Array [1..9] of integer;
   i,j,n,checker1,checker2,checker3,checker4 : integer;

Begin

      Write('Please input the value of N : '); Readln(n);
      If ((n > 0) and (n < 10)) then
      Begin
            Writeln('Matrix A');
            For i := 1 to n do
            Begin
                  For j := 1 to n do
                  Begin
                        Read(TabA[i][j]);
                  End;
                  Writeln;
            End;
            Writeln('Matrix B');
            For i := 1 to n do
            Begin
                  For j := 1 to n do
                  Begin
                        Read(TabB[i][j]);
                  End;
                  Writeln;
            End;
            checker1 := 0;
            checker2 := 0;
            checker3 := 0;
            checker4 := 0;
            For i := 1 to n do
            Begin
                  For j := 1 to n do
                  Begin
                        If TabA[i][j] = TabB[j][n+1-i] then
                        Begin
                              checker1 := checker1 + 1;
                        End else if TabA[i][j] = TabB[n+1-i][n+1-j] then
                        Begin
                              checker2 := checker2 + 1;
                        End else if TabA[i][j] = TabB[n+1-j][i] then
                        Begin
                              checker3 := checker3 + 1;
                        End else if TabA[i][j] = TabB[i][j] then
                        Begin
                              checker4 := checker4 + 1;
                        End else
                        Begin
                              checker1 := checker1;
                              checker2 := checker2;
                              checker3 := checker3;
                              checker4 := checker4;
                        End;
                  End;
            End;
            If checker1 = (n * n) then
            Begin
                  Writeln('Matrix B is 90 degree rotated matrix A');
            End else if checker2 = (n * n) then
            Begin
                  Writeln('Matrix B is 180 degree rotated matrix A');
            End else if checker3 = (n * n) then
            Begin
                  Writeln('Matrix B is 270 degree rotated matrix A');
            End else if checker4 = (n * n) then
            Begin
                  Writeln('Matrix B is 0 degree rotated matrix A');
            End else
            Begin
                  Writeln('Matrix B doesn't correspond with matrix A');
            End;
      End else
      Begin
            Writeln('The value of N must be between 1 and 9');
      End;

End.

我尝试输入4作为N的值,我的矩阵A和矩阵B是这样的:

Matrix A
1 2 3 4
1 2 3 4
1 2 3 4
1 2 3 4
Matrix B
4 3 2 1
4 3 2 1
4 3 2 1
4 3 2 1

我没有得到想要的输出,这是&#34;矩阵B是180旋转矩阵A&#34;。相反,我收到了消息,&#34;矩阵A与矩阵B&#34;不对应。 270旋转矩阵A的情况相同。 我认为这是由不独特的矩阵元素引起的。但如果这是真的,我应该如何更改代码,以便它可以在具有几个相似矩阵元素的矩阵上工作?我坚持这个。请使代码尽可能简单

0 个答案:

没有答案