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.
CodePudding user response:
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];
}
}
CodePudding user response:
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");
}
}