problem with sorting arrays

If somebody could help me with this logic: here what I'm trying to do I have 2 Arrays:
matrice1[21][9]
0 0 0 0 1 0 0 1 1
0 0 1 0 1 0 0 1 1
0 1 0 0 1 0 0 1 1
0 1 1 0 1 0 0 1 1
1 1 0 0 1 0 0 1 1
1 1 1 0 1 0 0 1 1
0 0 0 0 0 0 1 0 1
0 0 1 0 0 0 1 0 1
1 1 0 0 0 0 1 0 1
1 1 1 0 0 0 1 0 1
1 1 1 0 0 0 1 1 1
1 1 1 1 1 1 1 0 1
0 0 1 0 0 0 1 1 1
0 0 0 0 0 0 1 1 1
0 1 0 0 0 0 1 0 0
0 1 1 0 0 0 1 0 0
0 1 0 0 0 0 1 1 0
0 1 1 0 0 0 1 1 0
1 1 0 0 0 0 1 1 0
0 0 0 1 1 1 1 0 0
0 1 1 1 1 1 1 0 0

tab_temp[24][8]
0 0 0 0 1 0 0 1
0 0 0 0 0 0 1 0
0 0 0 0 0 0 1 1
0 0 0 1 1 1 1 0
0 0 1 0 1 0 0 1
0 0 1 0 0 0 1 0
0 0 1 0 0 0 1 1
0 0 1 1 1 1 1 0
0 1 0 0 1 0 0 1
0 1 0 0 0 0 1 0
0 1 0 0 0 0 1 1
0 1 0 1 1 1 1 0
0 1 1 0 1 0 0 1
0 1 1 0 0 0 1 0
0 1 1 0 0 0 1 1
0 1 1 1 1 1 1 0
1 1 0 0 1 0 0 1
1 1 0 0 0 0 1 0
1 1 0 0 0 0 1 1
1 1 0 1 1 1 1 0
1 1 1 0 1 0 0 1
1 1 1 0 0 0 1 0
1 1 1 0 0 0 1 1
1 1 1 1 1 1 1 0

I need to check line by line if line from tab_temp exist in matrice1 and depending on 9'th element from matrice1[i][8] , I need to get 1 or 2 or 3 .the result I need to get is another 2d array:
tab[6][4]
1 1 1 2
1 1 1 3
1 2 2 3
1 2 2 2
1 1 2 3
1 1 1 1
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
  int w1=0,q1=0,m1=0;
     for(int i=0;i<21;i++){ int f=0;
                          for(int l=0;l<24;l++){
                                                m1=0;
                                                for(int j=0;j<8;j++){
                                                if(matrice1[i][j] == tab_temp[l][j]) m1++;
      		                                                     }
                                                if(m1 == 8){ f=1;}
                                                if(f == 1){
                                                           if(w1 == 4){ w1=0; q1++; }
                                                           if(matrice1[i][8] == 1) tab[q1][w1]=1;
                                                           if(matrice1[i][8] == 0) tab[q1][w1]=2;
                                                           else tab[q1][w1]=3;
                                                           w1++;
                                                           }
                                               }

                                   }

the result i get now is :

3 3 3 3
3 3 3 3
3 3 3 3
3 3 3 3
3 3 3 3
3 3 3 3
I need to check line by line if line from tab_temp exist in matrice1 and depending on 9'th element from matrice1[i][8] , I need to get 1 or 2 or 3 .the result I need to get is another 2d array:


I didn't understand clearly . Can you please explain in some other way?

and the matrices matrice1[][] and tab_temp[][] are of different sizes. why? coz they can't be compared unless they are equal.
Last edited on
as a result I need get the tab[][], each element consist of 1 if line from tab_temp from 1 to 8 element is the same as matrice1 from 1 to 8 elemnt and if 9'th elemt is 1.If lines are the same but 9'th elemnt is 0 than elemnt in tab[][] should be 2 and if does not exist lines from tab_temp in matrice 1 than element should be 3 in tab[][].
Hope it was better explained.
thanx for the explaination, now i can look forward to the solution. i'll post back a little later. :)

Last edited on
why does tab_temp has 3 extra rows?
why does tab_temp has 3 extra rows?

it was the result of previous calculation..
For each row in tab_temp
    Result=3
    Find first matching row from matrice1
    If match was found, use matching_row[8] for determining Result
    Store Result in tab[ tab_temp_row_index/4 ][ tab_temp_row_index%4 ]


Use std::equal to compare two rows.
http://www.cplusplus.com/reference/algorithm/equal/
I have found the correct answer that's how I did:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
 int w1=0,q1=0,m1=0,r=0;
             for(int i=0;i<24;i++){ int f=0;
                                    for(int l=0;l<21;l++){
                                                          m1=0;
                                                          for(int j=0;j<8;j++){
                                                                                if(matrice1[l][j] == tab_temp[i][j]) m1++;

                                                                               }
                                                          if(m1 == 8){ f=1; r=matrice1[l][8];}
                                                        }
                                  if(w1 == 4){ w1=0; q1++; }
                                  if(f == 1){
                                              if(r == 1) tab[q1][w1]=1;
                                              else tab[q1][w1]=2;

                                            }
                                  else tab[q1][w1]=3;

                                  w1++;

                               }
Good. Could you test this?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
const int mat_rows = 21;
const int tab_rows = 24;
const int tab_cols = 8;
for ( int i=0; i < tab_rows; ++i )
  {
    int l = 0;
    for ( ; l < mat_rows; ++l)
      {
        if ( std::equal( matrice1[l], matrice1[l]+tab_cols, tab_temp[i] ) ) break;
      }
    int result = 3;
    if ( l < mat_rows )
      {
        result = ( 1 == matrice1[l][tab_cols] ) ? 1 : 2;
      }
    tab[ 0 ][ i ] = result;
  }
Last edited on
the result i get is :

1 1 1 2
2 3 1 2
1 1 1 1
0 0 0 0
0 0 0 0
0 0 0 0

should be:

1 1 1 2
1 1 1 3
1 2 2 3
1 2 2 2
1 1 2 3
1 1 1 1
Strange.
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
#include <iostream>
#include <iomanip>
#include <algorithm>

int main()
{
  int matrice1[][9] =
  { 0, 0, 0, 0, 1, 0, 0, 1, 1,
    0, 0, 1, 0, 1, 0, 0, 1, 1,
    0, 1, 0, 0, 1, 0, 0, 1, 1,
    0, 1, 1, 0, 1, 0, 0, 1, 1,
    1, 1, 0, 0, 1, 0, 0, 1, 1,
    1, 1, 1, 0, 1, 0, 0, 1, 1,
    0, 0, 0, 0, 0, 0, 1, 0, 1,
    0, 0, 1, 0, 0, 0, 1, 0, 1,
    1, 1, 0, 0, 0, 0, 1, 0, 1,
    1, 1, 1, 0, 0, 0, 1, 0, 1,
    1, 1, 1, 0, 0, 0, 1, 1, 1,
    1, 1, 1, 1, 1, 1, 1, 0, 1,
    0, 0, 1, 0, 0, 0, 1, 1, 1,
    0, 0, 0, 0, 0, 0, 1, 1, 1,
    0, 1, 0, 0, 0, 0, 1, 0, 0,
    0, 1, 1, 0, 0, 0, 1, 0, 0,
    0, 1, 0, 0, 0, 0, 1, 1, 0,
    0, 1, 1, 0, 0, 0, 1, 1, 0,
    1, 1, 0, 0, 0, 0, 1, 1, 0,
    0, 0, 0, 1, 1, 1, 1, 0, 0,
    0, 1, 1, 1, 1, 1, 1, 0, 0, };

  int tab_temp[][8] =
    { 0, 0, 0, 0, 1, 0, 0, 1,
      0, 0, 0, 0, 0, 0, 1, 0,
      0, 0, 0, 0, 0, 0, 1, 1,
      0, 0, 0, 1, 1, 1, 1, 0,
      0, 0, 1, 0, 1, 0, 0, 1,
      0, 0, 1, 0, 0, 0, 1, 0,
      0, 0, 1, 0, 0, 0, 1, 1,
      0, 0, 1, 1, 1, 1, 1, 0,
      0, 1, 0, 0, 1, 0, 0, 1,
      0, 1, 0, 0, 0, 0, 1, 0,
      0, 1, 0, 0, 0, 0, 1, 1,
      0, 1, 0, 1, 1, 1, 1, 0,
      0, 1, 1, 0, 1, 0, 0, 1,
      0, 1, 1, 0, 0, 0, 1, 0,
      0, 1, 1, 0, 0, 0, 1, 1,
      0, 1, 1, 1, 1, 1, 1, 0,
      1, 1, 0, 0, 1, 0, 0, 1,
      1, 1, 0, 0, 0, 0, 1, 0,
      1, 1, 0, 0, 0, 0, 1, 1,
      1, 1, 0, 1, 1, 1, 1, 0,
      1, 1, 1, 0, 1, 0, 0, 1,
      1, 1, 1, 0, 0, 0, 1, 0,
      1, 1, 1, 0, 0, 0, 1, 1,
      1, 1, 1, 1, 1, 1, 1, 0, };
  int tab[6][4] = {0};

  const int mat_rows = 21;
  const int tab_rows = 24;
  const int tab_cols = 8;
  for ( int i=0; i < tab_rows; ++i )
    {
      int l = 0;
      for ( ; l < mat_rows; ++l)
        {
          if ( std::equal( matrice1[l], matrice1[l]+tab_cols, tab_temp[i] ) ) break;
        }
      int result = 3;
      if ( l < mat_rows )
        {
          result = ( 1 == matrice1[l][tab_cols] ) ? 1 : 2;
        }
      tab[ 0 ][ i ] = result;
    }

  for ( int row = 0; row < 6; ++row )
    {
      for ( int col = 0; col < 4; ++col )
        {
          std::cout << std::setw(2) << tab[ row ][ col ];
        }
      std::cout << '\n';
    }
  return 0;
}

$ ./matmat
 1 1 1 2
 1 1 1 3
 1 2 2 3
 1 2 2 2
 1 1 2 3
 1 1 1 1
$
Topic archived. No new replies allowed.