0

質問は次のとおりです。一方が他方のサブ行列である場合、2つの行列をチェックします。

私がここで直面しているfor問題は、コードで「//problem」とコメントされているループです。プログラムを初めて実行するとき、上記のforループは正常に機能しません。

#include <stdio.h>
#define N 10

int
main ()
{

  char matrix1[N][N], matrix2[N][N];
  int i, j, row1, col1, row2, col2, k, l, m, n, check = 0;

  //First Matrix
  printf ("Enter the data\n");
  printf ("Enter the size of rows\n");
  scanf ("%d", &row1);   
  printf ("Enter the size of columns\n");
  scanf ("%d", &col1);   
  printf ("Now enter the values please\n");

  //Putting Values In First Matrix
  for (i = 0; i < row1; i++)
    {
      for (j = 0; j < col1; j++)
        {
          printf ("Please enter the %dth row and %dth column\n", i + 1,
                  j + 1);
          scanf ("%s", &matrix1[i][j]);
        }
    }

  //Second Matrix
  printf ("Enter the data\n");
  printf ("Enter the size of rows\n");
  scanf ("%d", &row2);   
  printf ("Enter the size of columns\n");
  scanf ("%d", &col2);   
  printf ("Now enter the values please\n");

  //Putting Values In Second Matrix
  for (i = 0; i < row2; i++)
    {
      for (j = 0; j < col2; j++)
        {
          printf ("Please enter the %dth row and %dth column\n", i + 1,
                  j + 1);
          scanf ("%s", &matrix2[i][j]);
        }
    }

  //Checking Both Matrices
  for (i = 0; i < row1; i++)
    {
      for (j = 0; j < col1; j++)
        {
          if (matrix1[i][j] == matrix2[0][0])
            {
              k = i;
              l = j;
              for (m = 0; m < row2; m++)
                {
                  for (n = 0; n < col2; n++)
                    {           //problem
                      if (matrix1[k][l] == matrix2[m][n])
                        {
                          check++;
                          printf ("Checked\n");
                        }
                      l++;
                    }
                  l = j; 
                  k++;   
                }
            }
        }
      printf ("hello\n");
    }
  if (check == row2 * col2)
    {
      printf ("It exists\n");
    }
  else
    {
      printf ("It doesn't exist\n");
    }
}

出力は次のとおりです。

 Checked
 hello
 Checked
 Checked
 Checked
 Checked
 hello
 hello
 It doesn't exist
4

1 に答える 1

4

checkサブマトリックスの検索を開始する前に、ゼロにリセットする必要があります。また、あなたがそれを見つけたら壊す(またはそれが見つかったかどうかを示すフラグを持っている)。

出力から(2x2マトリックスを見つけようとしていると仮定して)、Checked連続して印刷された回数が検出されましたが、その値は1回目の印刷でも5カウントになり、プログラムが印刷されます"It does not exist"

好き:

int is_found = 0;
... //some code
//Checking Both Matrices
for (i = 0; i < row1; i++)
{
  for (j = 0; j < col1; j++)
    {
      check = 0;   //reset check
      if (matrix1[i][j] == matrix2[0][0])
        {
      ... //your code to check matrix.
      ...
      }//if end
      if(check == row2*col2) 
      {
          is_found = 1;
      }
      ...
   } //for j end
   if(is_found)
      break;
   ...

 ...
 if(is_found)
    printf("It exists\n");
于 2012-08-16T08:03:47.917 に答える