Member 12919791 Ответов: 1

PSET3 game of fifteen выводит неверный


To understand the code's goal, please go to:

<a href="http://cdn.cs50.net/2016/x/psets/3/pset3/pset3.html#the_game_begins">Problem Set 3: Game of Fifteen</a> 

My code doesn't show any error. My output, however, is wrong in the last part ( switching the 1 and 2 if the d dimension is even). The 1 and 2 won't switch.

<pre>Some example outputs:

<pre>~/workspace/pset3/fifteen/ $ ./fifteen 4
WELCOME TO GAME OF FIFTEEN
  15  14  13  12
  11  10   9   8
   7   6   5   4
   3   2   1   _
Tile to move: ^C

~/workspace/pset3/fifteen/ $ ./fifteen 3
WELCOME TO GAME OF FIFTEEN
   8   7   6
   5   4   3
   2   1   _
Tile to move: 


Подробное Изложение.:

Если d-размерность нечетна, то порядок последних 2 чисел должен быть: 1 2.
Если d четно, то порядок последних 2 чисел должен быть: 2 1.

Ошибка в моем выводе заключается в том, что эти 2 числа печатаются в неправильном порядке С d как четными. В приведенном выше примере мой вывод для d как 4 дает последние 2 числа как 2 1 вместо 1 2.


PS: Я пробовал gdb. Я еще не мог сделать вывод о какой-либо явной ошибке (по точкам останова и печатным значениям).

Большое спасибо,

Что я уже пробовал:

void init(void)
{
    int c = 1;
    for (int a = 0; a < d; a++)
    {
        for (int b = 0; b < d; b++)
        {
            
            board[a][b] = d*d - c;
            c++;
            if (c == d*d -2)
            {
                if (d % 2 == 0)
                {
                    board[d-1][d-3] = 1;
                    board[d-1][d-2] = 2;
                    board[d-1][d-1] = 0;
                }
                
                else if (d % 2 != 0)
                {
                    board[d-1][d-3] = 2;
                    board[d-1][d-2] = 1;
                    board[d-1][d-1] = 0;
                }
                
             }
            
            
        }
    }
    
     
     
}

/**
 * Prints the board in its current state.
 */
void draw(void)
{
   for (int e = 0; e < d; e++)
   {
       for (int f = 0; f < d; f++)
       {
           if (!( ( e == d-1) && ( f == d-1) ))
             {
                printf("%c %2d",' ', board[e][f]);
              }

            else
               {
                   printf("%2s","   _");
               }
            
       }
       printf("\n");
   }
    
}

Patrice T

"Мой вывод, однако, неправильный", неправильный не информативен, определите, что неправильно.
Показать фактический выход и желаемый выход.

Member 12919791

Если d-размерность нечетна, то порядок последних 2 чисел должен быть: 1 2.
Если d четно, то порядок последних 2 чисел должен быть: 2 1.

Ошибка в моем выводе заключается в том, что эти 2 числа печатаются в неправильном порядке С d как четными. В приведенном выше примере мой вывод для d как 4 дает последние 2 числа как 2 1 вместо 1 2.

Спасибо,

Patrice T

Воспользуйся Улучшить вопрос чтобы обновить ваш вопрос.
Чтобы каждый мог обратить внимание на эту информацию.

Member 12919791

Хорошо, спасибо.

Richard MacCutchan

Вы должны начать с использования значимых имен для ваших переменных. Использование a,b, c и т. д. Ничего нам не говорит. Вам также нужно объяснить, что должен делать код; в его нынешнем виде угадать невозможно.

1 Ответов

Рейтинг:
2

Patrice T

Цитата:
Мой код не показывает никаких ошибок. Мой вывод, однако, неверен в последней части

Вам действительно нужно обратить внимание и понять несколько вещей.
- Когда компилятор находит ошибки, это просто означает, что ваша программа не соответствует синтаксису языка и имеет некоторые "орфографические" ошибки.
- Отсутствие ошибки компилятора не означает, что программа делает то, что она должна делать. "Кот летит" - это правильный английский, но тоже чепуха.

Цитата:
Я попробовал gdb. Я еще не мог прийти к какому-либо ясному выводу об ошибке

Отладчик не находит ошибок в вашей программе, он просто показывает вам, что делает программа, ваша задача-сравнить с тем, что она должна делать, и выявить несоответствия.