Заполнение массива неправильными значениями - PullRequest
0 голосов
/ 01 февраля 2020

Я создаю программу, которая зависит от набора 2d массивов. В той части, над которой я сейчас работаю, пользователь сначала вводит желаемый размер (со стороны квадрата), и программа должна инициализировать все массивы и заполнить их нулями, кроме строки 0 и столбца, где метки быть. Полученный массив должен выглядеть примерно так:

0 1 2 3 4 ...
1 0 0 0 0 ...
2 0 0 0 0 ...
3 0 0 0 0 ...
4 0 0 0 0 ...
...

Код, который я написал, выглядит хорошо, но как только маркировка была реализована, все внутри (метки не затронуты) начало заполняться некоторыми случайными числами , с 0 появляется на каждом втором поле. Этот фрагмент кода на данный момент работает независимо, но я перенесу некоторые переменные в глобальную область для соединения частей:

 int show_Board(int size){
    size++;
    int board[size][size];
    int i=0, x=0;
    for (i=0; i<size; i++){     //filling up the array
        for (x=0; x<size; x++){
            board[i][x]=0;  
        }
    for (i=0; i<=size; i++){    //filling in labels on the borders
        board[i][0]=i;          // only row 0 breaks if this loop is disabled
        for (x=0; x<=size; x++){
            board[0][x]=x;
        } 
    }       
    }
    for (i=0; i<size; i++){        //displaying the result
        for (x=0; x<size; x++){
            cout <<"  "<< board[i][x];
        }
        cout << endl;
    }
}

int main(){
  show_Board(20);
}

У меня вопрос, как сделать так, чтобы массив правильно заполняется (ie. метки и 0)?

1 Ответ

1 голос
/ 01 февраля 2020
for (int i = 0; i < size; i++){    
    for (x=0; x < size; x++){
            board[i][x]=0;  
    }
    for (int i = 0; i <= size; i++){    
        board[i][0]=i;          
        for (int x = 0; x <= size; x++){
            board[0][x]=x;
        } 
    }       
}

Это фрагмент из вашего кода, только слегка очищенный. Обратите внимание, что вы закрываете первый для l oop в неправильном месте, так что на самом деле в нем есть петли для установки меток. Это, к сожалению, результат написания некрасивого кода. Этот код не только плохо написан, но и выполняет больше работы, чем нужно. Легче видеть ошибки, исправлять и оптимизировать хороший код, так что это то, что вы обязательно должны изучить.

EDIT: вы также используете i

Я не уверен, почему вы увеличиваете размер в начале функции, так как это создаст квадрат на 1 больше, чем просит пользователь.

Вот мое решение:

#include <iostream>

int show_board(int size) {

    // size++;
    int board[size][size];

    for (int i = 0; i < size; ++i) {

        for (int j = 0; j < size; ++j) {
            // Set board tile to 0.
            board[i][j] = 0;
        }

        // Set vertical label.
        board[i][0] = i;
        // Set horizontal label.
        board[0][i] = i;

    }

    // Display board
    for (int i = 0; i < size; ++i) {
        for (int j = 0; j < size; ++j) {
            std::cout << board[i][j] << " ";
        }
        std::cout << std::endl;
    }

}

int main() {
    show_board(5);
    return 0;
}
...