Форум программистов, компьютерный форум CyberForum.ru

Для данной целочисленной матрицы A (aij) размером m*m найти матрицу B - C++

Восстановить пароль Регистрация
 
Eternal123
0 / 0 / 0
Регистрация: 07.11.2012
Сообщений: 50
06.06.2013, 13:58     Для данной целочисленной матрицы A (aij) размером m*m найти матрицу B #1
Будем называть соседями элемента с индексами i,j некоторой матрицы такие элементы, соответствующие индексы которых отличаются от i,j не более чем на единицу. Для данной целочисленной матрицы A (aij) размером m*m найти матрицу B, состоящую из нулей и единиц, элемент которой bij равен единице, когда:
среди соседей aij есть не менее двух элементов, совпадающих с aij


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
//---------------------------------------------------------------------------
 
#pragma hdrstop
 
//---------------------------------------------------------------------------
 
#pragma argsused
#include <iostream.h>
#include <cmath>
#include <conio.h>
 
 
int main()
{ const int m=4;
  int A[m][m];
  int B[m][m];
  int i,j,k,i1,i2,j1,j2,n1,n2;
   for (i=1;i<=m;i++)
  { for (j=1;j<=m;j++)
        {A[i][j]= abs(random(10));
 
         cout<<A[i][j]<<' ';
         }
         cout<<endl;
      }
  cout<<endl;
 
      for (i=1;i<=m;i++)
        { for (j=1;j<=m;j++)
        {k=0;
         i1=i-1;
         i2=i+1;
         j1=j-1;
         j2=j+1;
         if (i1==0 ) i1=1;
         if (i2==m+1 ) i2=m;
         if (j1==0 ) j1=1;
         if (j2==m+1 ) j2=m;
    
         for (n1=i1;n1<=i2;n1++)
                {for (n2=j1;n2<=j2;n2++)
                 {if (A[i][j]==A[n1][n2]){k++;
               
                 }
                 }
 
            }
             if (k<3) B[i][j]=0;
                 else B[i][j]=1;
 
        cout<<B[i][j]<<' ';
 
         }
         cout<<endl;
      }
        getch ();
        return 0;
}
вот код...но он работает как то криво, не совсем верно выводит матрицу В...
а еще нужно оформить с использованием функции....
помоги плз
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
06.06.2013, 13:58     Для данной целочисленной матрицы A (aij) размером m*m найти матрицу B
Посмотрите здесь:

Для матрицы а(n, n) найти обратную матрицу C++
Из заданной матрицы A размером получить матрицу В размером по правилу: первый столбец состоит из положительных элементов, второй – из отрицате C++
C++ Из заданной матрицы A размером N*M получить матрицу В размером K*3 по правилу: первый столбец состоит из полож
C++ Получить матрицу, путем вычеркивания с данной матрицы, Н-ой строки и М-го столбика
C++ C++ Задача на екзамене Для целочисленной квадратной матрицы найти количество элементов кратных k, и самый большой из них
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Seemann92
5 / 5 / 0
Регистрация: 12.04.2013
Сообщений: 45
06.06.2013, 14:08     Для данной целочисленной матрицы A (aij) размером m*m найти матрицу B #2
А почему здесь:
C++
1
2
3
4
5
6
7
for (i=1;i<=m;i++){
  for (j=1;j<=m;j++){
    A[i][j]= abs(random(10));
    cout<<A[i][j]<<' ';
  }
  cout<<endl;
}
оба цикла начинают свою работу с единицы? У массивов адресация с 0 идёт.
Eternal123
0 / 0 / 0
Регистрация: 07.11.2012
Сообщений: 50
06.06.2013, 14:15  [ТС]     Для данной целочисленной матрицы A (aij) размером m*m найти матрицу B #3
Seemann92, особо ничего не изменилось от этого)
Seemann92
5 / 5 / 0
Регистрация: 12.04.2013
Сообщений: 45
06.06.2013, 15:13     Для данной целочисленной матрицы A (aij) размером m*m найти матрицу B #4
Цитата Сообщение от Eternal123 Посмотреть сообщение
Seemann92, особо ничего не изменилось от этого)
Возможно. Просто попутное замечание.

Добавлено через 46 минут
Вышло не очень красиво, но работает, а это уже результат. =)

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
#include <vcl.h>
#pragma hdrstop
#include <iostream.h>
#include <cmath>
#include <conio.h>
 
//---------------------------------------------------------------------------
 
#pragma argsused
 
int proverka(int, int);
 
const int m=4;
int A[m][m]={{1,2,3,4},{2,3,2,5},{6,3,1,9},{3,6,1,2}};
 
int main(int argc, char* argv[])
{
int B[m][m];
  randomize();
  for (int i=0; i<m; i++){
    for (int j=0; j<m; j++){
      A[i][j]=random(10);
      cout<<A[i][j]<<' ';
    }
    cout<<endl;
  }
  cout<<endl;
 
  for (int i=0; i<m; i++){
    for (int j=0; j<m; j++){
      if (proverka(i,j)>=2)
        B[i][j]=1;
      else
        B[i][j]=0;
      cout<<B[i][j]<<' ';
    }
    cout<<endl;
  }
        getch ();
        return 0;
}
//---------------------------------------------------------------------------
 
int proverka(int _i, int _j){
int k=0;
  if ((A[_i][_j]==A[_i][_j+1])&&(_j+1<m-1))
    k++;
  if ((A[_i][_j]==A[_i+1][_j+1])&&(_i+1<m)&&(_j+1<m))
    k++;
  if ((A[_i][_j]==A[_i+1][_j])&&(_i+1<m))
    k++;
  if ((A[_i][_j]==A[_i+1][_j-1])&&(_i+1<m)&&(_j-1>=0))
    k++;
  if ((A[_i][_j]==A[_i][_j-1])&&(_j-1>=0))
    k++;
  if ((A[_i][_j]==A[_i-1][_j-1])&&(_i-1>=0)&&(_j-1>=0))
    k++;
  if ((A[_i][_j]==A[_i-1][_j])&&(_i-1>=0))
    k++;
  if ((A[_i][_j]==A[_i-1][_j+1])&&(_i-1>=0)&&(_j+1<m))
    k++;
  return k;
}
Добавлено через 7 минут
Затупил впопыхах. В 46 строке вместо
C++
1
(_j+1<m-1)
должно быть
C++
1
(_j+1<m)
Yandex
Объявления
06.06.2013, 15:13     Для данной целочисленной матрицы A (aij) размером m*m найти матрицу B
Ответ Создать тему
Опции темы

Текущее время: 12:24. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru