2016-02-24 2 views
1

У меня есть двухмерная арра и два массива 1d.Проблемы с инициализацией определенных строк и столбцов в массиве 2d

Мне нужно взять элементы из 1-го массива 1d и сохранить их в первых 5 строках и столбцах массива 2d.

Затем мне нужно взять элементы из второго массива 1d и сохранить их в остальных строках и столбцах массива 2d.

Проблема в том, что элементы не идут правильно, см. Вывод внизу, чтобы понять, что я имею в виду!

#include <iostream> 
#include <iomanip> 
using namespace std; 

const int ROWS = 10; 
const int COLUMNS = 4; 

void CopyArrays(int Array1[], int a1_Size, int Array2[], int a2_Size, int Array3[][COLUMNS]); 

/* Array1[] refers to array1 a1_Size refers to the size of the first array, 
    Array2 refers to array2 and a2_Size refers to the size of array2, 
    And Array3[][COLUMNS] refers to the 2d array */ 


void DisplayArray3(int Array3[][COLUMNS]); 

int main() 
{ 
    int array1[20] = {1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20}; 

    int array2[20] = {2,4,6,8,10,12,14,16,18,20,22,24,26,28,30,32,34,36,38,40}; 

    int Array3[ROWS][COLUMNS]; 

    CopyArrays(array1, 20, array2, 20, Array3); 

    DisplayArray3(Array3);  

    return 0; 
} 

void CopyArrays(int Array1[], int a1_Size, int Array2[], int a2_Size, int Array3[][COLUMNS]) 
{ 
    for (int i = 0; i < a1_Size; i++) 
    { 
     for (int j = 0; j < ROWS; j++) 
     { 
      for (int k = i; k < COLUMNS; k++) 
      { 
      Array3[j][k] = Array1[i]; 
      } 
     } 
    } 

} 


void DisplayArray3(int Array3[][COLUMNS]) 
{ 
     for(int i = 0; i < ROWS; i++) 
     { 
      for(int j = 0; j < COLUMNS; j++) 
      {  
       cout << setw(10) << Array3[i][j]; 
      } 
     cout << "\n" ; 
     } 
} 

// Выходные данные:

 1   2   3   4 
    1   2   3   4 
    1   2   3   4 
    1   2   3   4 
    1   2   3   4 
    1   2   3   4 
    1   2   3   4 
    1   2   3   4 
    1   2   3   4 
    1   2   3   4 

Так как вы можете видеть только первые четыре элемента из массива альфа претворяются в Array3 Вместо 1 - 20. Некоторые, где моя логика ошибочна но я не уверен, как исправить это.

Любые предложения?

PS: Я понимаю, что циклы for могут быть сжаты, и я планирую это сделать, также я не устанавливал циклы for для завершения обработки в строке 5, потому что в этот момент меня больше интересует диапазон чисел, верный.

ответ

0

Три вложенные петли - это не способ сделать это. Это может сработать:

void CopyArrays(int Array1[], int a1_Size, int Array2[], int a2_Size, int Array3[][COLUMNS]) 
{ 
    int i = 0; 

    for (; i < a1_Size; i++) 
     // indexing a 2D array with one variable 
     Array3[i/COLUMNS][i % COLUMNS] = Array1[i]; 

    for (int j = 0; j < a2_Size; j++) 
     Array3[(j + i)/COLUMNS][(j + i) % COLUMNS] = Array2[j]; 
} 

(j + i) Я использовал, чтобы продолжать писать элементы Array3 «сек после того, как, где первый контур кончили.

+1

О, да, я был совершенно вне базы, это имеет смысл, хотя спасибо за ответ, который он решил решить. Я нахожу многомерные массивы, чтобы быть болью в заднице. – Afflicted

Смежные вопросы