# Pset3 Fifteen: Draw and/or Init Function Problem

I cannot figure out why this code is not working. The output appears to be random. Any help is greatly appreciated. Thanks! My Init code:

``````void init(void)
{
int MAX = (d*d)-1;
int below = 0;
int board [d][d];

for (int i=0; i<d; i++)
{
for (int j=0; j<d; j++)
{
board[i][j] = MAX-below;
below++;
}
}
//if  even switch 1 and 2
if (d/2 == 0)
{
int gridtwo;
gridtwo = board [d-(d-2)][d-(d-2)];
board [d-(d-2)][d-(d-2)] = board [d-(d-1)][d-(d-1)];
board [d-(d-1)][d-(d-1)] = gridtwo;
}
}
``````

My draw code:

``````void draw(void)
{
int board [d][d];

for (int i = 0; i<d; i++)
{
for (int j = 0; j<d; j++)
{
if (board[i][j]==0)
printf("_   ");
else
{
printf("%d", board[i][j]);
printf("   ");
}
}
printf("\n");
}
``````

Thanks again!

• why do you have `board[][]` variable again? I remember from this assignment, it is already declared as a global variable. you should not Change it. use that one. Jul 11, 2016 at 16:37

You cannot check if number is `even` with ```if (d/2 == 0) ``` use `%` sign (remainder sign).

Number is `even` if you divide the number with 2 and remainder becomes 0.

for example

``````if (d%2 == 0)
{
//BODY
}
``````

Edit:

For draw:

Use `%2d` so that each time you get space for two letters and `\t` tab for equal spacing.

``````printf("%2d\t", board[i][j]);
``````

and remove the `printf` below. your complete `draw` function should look like

``````for (int i = 0; i<d; i++)
{
for (int j = 0; j<d; j++)
{
if (board[i][j]==0)
printf(" _\t");
else
{
printf("%2d\t", board[i][j]);

}
}
printf("\n");
}
``````

Also your swap code is wrong. You want to replace the second element from the last row not from the second last row. Last row will be `d-(d-1)`

``````int gridtwo;
gridtwo = board [d-1][d-3];
board [d-1][d-3] = board [d- 1][d-2];
board [d-1][d-2] = gridtwo;
``````

• Thanks, I fixed that part of my code, but am still having random number outputted. Any other suggestions? Thanks! Jul 11, 2016 at 17:29
• Can you post your Output? how does it Looks like? Jul 11, 2016 at 17:43
• I guess now the Problem should be solved. check the edit in my answer. Jul 11, 2016 at 17:49
• Thank you so much! Jul 11, 2016 at 19:15

The test for even is incorrect and it is switching two fixed tiles. Dividing by two doesn't tell if the number is even. It needs to be a modulo % operation.

The code is switching a fixed pair of tiles in the board[][] array. `board [d-(d-2)][d-(d-2)]` is always going to be board[2][2]. Similarly, `board [d-(d-1)][d-(d-1)]` will always be baord[1][1].

If you simplify the calculation, it looks like this: d-(d-2) = d + ( -1 * (d-2) ) = d + ( -d + 2 ) = d - d + 2 = 2

So, you're not swapping the 1 and 2 tiles, you're just swapping two fixed tiles no matter how large the array is.

If this answers your question, please click on the check mark to accept. Let's keep up on forum maintenance. ;-)

• Thank you, I fixed that part of my code, but am still getting random numbers printed out. Any other suggestions? Jul 11, 2016 at 17:29