Estoy tratando de crear un programa en C que copie números de una matriz 2d a otra, pero específicamente. (ver imagen)
Código:
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"); } }Mi salida:
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
Pero es malo.
La salida debería verse así:
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
El problema es que en mi salida en la segunda parte tengo el número de las filas 1, 2 y 3 (de la matriz de números). Pero se suponía que eran las filas 3, 4 y 5.
Tienes que tener tus índices correctos :-)
for (int i = 0; i < 3; i++) { for (int j = 0; j < 16; j++) { output[j][i] = numbers[j / 8 * 3 + i][j % 8]; } }En base a su código, lo divido en dos casos, y la segunda parte pongo +2 así: 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"); } }