3

I'm trying to create a program in C that copies numbers from one 2d array to another, but specifically. (see image)

Code:

int main(){
    int numbers[6][8] = {
        {1,1,1,1,1,1,1,1},//0
        {2,2,2,2,2,2,2,2},//1
        {3,3,3,3,3,3,3,3},//2
        {4,4,4,4,4,4,4,4},//3
        {5,5,5,5,5,5,5,5},//4
        {6,6,6,6,6,6,6,6} //5
    };
    int output[2*8][3]; 
    
    for(int i = 0; i < 3; i++){
        for(int j = 0; j < 2*8; j++){
            output[j][i] = numbers[i][j];         
        }
    }  

    for(int j = 0; j < 2*8; j++){
        for(int i = 0; i < 3; i++){
            printf("%d ", output[j][i]);
        }
        printf("\n");
    }

 }

My output:

1 2 3
1 2 3
1 2 3
1 2 3
1 2 3
1 2 3
1 2 3
1 2 3

2 3 4
2 3 4
2 3 4
2 3 4
2 3 4
2 3 4
2 3 4
2 3 4

But it's bad.

The output should look like this:

1 2 3
1 2 3
1 2 3
1 2 3
1 2 3
1 2 3
1 2 3
1 2 3

4 5 6
4 5 6
4 5 6
4 5 6
4 5 6
4 5 6
4 5 6
4 5 6

Problem is that in my output in second part I have number from rows 1, 2 and 3 (from numbers array). But it was supposed to be the 3, 4 and 5 row.

1
  • 1
    Please don't post images of text, paste it into the question. Commented Nov 21, 2021 at 13:58

2 Answers 2

2

You have to get your indexes right :-)

for (int i = 0; i < 3; i++) {
    for (int j = 0; j < 16; j++) {
        output[j][i] = numbers[j / 8 * 3 + i][j % 8];
    }
}
Sign up to request clarification or add additional context in comments.

Comments

0

In base of your code, i split in two cases, and the second part i put +2 like this: output[j][i] = numbers[i+2][j];

#include <iostream>
using namespace std;

int main(){
    int numbers[6][8] = {
        {1,1,1,1,1,1,1,1},//0
        {2,2,2,2,2,2,2,2},//1
        {3,3,3,3,3,3,3,3},//2
        {4,4,4,4,4,4,4,4},//3
        {5,5,5,5,5,5,5,5},//4
        {6,6,6,6,6,6,6,6} //5
    };
    int output[2*8][3]; 
    
    for(int i = 0; i < 3; i++){
          for(int j = 0; j < 8; j++){
            output[j][i] = numbers[i][j];         
          }
    }  
    
    for(int i = 0; i < 3; i++){
          for(int j = 8; j < 16; j++){
            output[j][i] = numbers[i+2][j];         
          }
    }  
   
    for(int j = 0; j < 2*8; j++){
        for(int i = 0; i < 3; i++){
            printf("%d ", output[j][i]);
        }
        printf("\n");
    }
 }

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.