C - Как переместить число в другое место в матрице - PullRequest
0 голосов
/ 21 декабря 2018

это то, что я написал

int n=0,i=0,j=0,k=0,s=0,a=0,b=0;
int blk[n][n];

printf("how many blocks?\n");
scanf ("%d", &n);
printf("\n");

for(i=0;i<n;i++){
    blk[i][j]=k;
    printf("%d: %d\t  ",k, blk[i][j]);
    k++;
    printf("\n");
}

это должно выглядеть так

0: 0

1: 1

2: 2

...

8: 8

9: 9

тогда у пользователя есть набор команд, которые перемещают числа в разныеСпособы выполнения функций Моя проблема в том, что я не знаю, как заставить числа двигаться так, например:

0: 0

1: 1 9

2:2

...

8: 8

9:

первая команда ставит "a" поверх b "(так что 9 сверхуиз 1)

первые числа - это позиции (# :), числа впереди - это то место, где начинается матрица

Ответы [ 2 ]

0 голосов
/ 21 декабря 2018

Похоже, вы описываете матрицу NxN.Для N == 10, инициализируемый нулями, он может концептуально выглядеть следующим образом:

enter image description here

Затем вы описываете, что хотите переместить число вокруг,Например, поместите значение в определенное место, например, поместите 55 в matrix[3][3].Имея в виду систему индексов с нулевым индексом, матрица теперь будет выглядеть так:

enter image description here

Шаги, которые могут быть реализованы для этого:

Шаги:
0) вызвать программу со значением командной строки для порядка матрицы.
1) создать таблицу nxn, используя значение, введенное в командной строке.
2) предложить пользователю ввести, где и какое значение поместить, или выйти.
3) очистить предыдущее содержимое.
4) установить новое значение.
5) перейти к шагу 2.

Пример реализации:

int main(int argc, char *argv[])
{
    int x = 0, y = 0;
    int value = 0;
    if(argc != 2) 
    {
        printf("Usage: %s <integer value for order>\n Exiting", argv[0]);
        getchar();
        return 0;
    }
    int order = atoi(argv[1]);

    int matrix[order][order];

    int exit = 'x';

    while(exit != 'q')
    {
        printf("Enter 3 space delimited digits with values from 0 to %d.\n\n", order-1);
        scanf(" %d %d %d", &x, &y, &value);
        memset(matrix, 0, x*y*sizeof(int));
        matrix[x][y] = value;
        for(int i=0;i<order;i++)
        {
            for(int j=0;j<order;j++)
            {
                if((i==x) && (j==y)) 
                {
                    printf("%3d", value);
                    if(j == order-1)printf("\n");
                }
                else
                {
                    printf("%3d", 0);
                    if(j == order-1)printf("\n");
                }
            }
        }
        printf("\nHit 'q' to quit, any other key to continue");
        exit = getchar();
    }


    return 0;
}

Для матрицы order == 10, проверено на следующие записи командной строки x, y и value:

0 0 99, 0 9 99, 9 0 99, 9 9 99

enter image description here

0 голосов
/ 21 декабря 2018

Вы должны были объявить переменную блоков после того, как прочитали n примерно так.

Также вы забыли второй цикл for.

int n=0,i=0,j=0,k=0,s=0,a=0,b=0;

printf("Enter the numember of blocks desired\n");
scanf ("%d", &n);
printf("\n");

int blocks[n][n];

for(i = 0; i < n; i++){
    for (j = 0; j < n; j++){
        blocks[i][j]=k;
        printf("%d: %d\t  ",k, blocks[i][j]);
        k++;
        printf("\n");
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...