Academic Integrity: tutoring, explanations, and feedback — we don’t complete graded work or submit on a student’s behalf.

/** * fifteen.c * * Computer Science 50 * Problem Set 3 * * Implements Game of F

ID: 3596714 • Letter: #

Question

/** * fifteen.c * * Computer Science 50 * Problem Set 3 * * Implements Game of Fifteen (generalized to d x d). * * Using fifteen d * * wherebt the board's dimensions are to be d x d, * where d must be in [DIM_MIN,DIM_MAX] * * Note that usleep is obsolete, but it offers more granularity than * sleep and is simpler to use then nanosleep; man usleep for more. */ #define _XOPEN_SOURCE 500 #include #include #include #include // Restrictions #define DIM_MIN 3 #define DIM_MAX 3 // board int board[DIM_MAX][DIM_MAX]; // dimensions int d; // prototypes void clear(void); void greet(void); void init(void); void draw(void); int move(int tile); int won(void); int main(int argc, char* argv[]) { // ensure proper usage if (argc != 2) { printf("Usage: fifteen d "); return 1; } // ensure valid dimensions d = atoi(argv[1]); if (d < DIM_MIN || d > DIM_MAX) { printf("Board must be between %i x %i and %i x %i, inclusive. ", DIM_MIN, DIM_MIN, DIM_MAX, DIM_MAX); return 2; } // open log FILE* file =fopen("log.txt", "w"); if(file == NULL) { return 3; } // greet user with instructions greet(); // initialize the board init(); // accept moves until someone wins while (1) { // clear screen clear(); // draw the current state of the board draw(); // log the current state of the baord for (int j = 0; j < d; j++) { // fprintf(file, "%i", board[i][j]); if ( j < d - 1) { fprintf(file, "l"); } } fprintf(file, " "); } fflush(file); // check for win if (won()) { printf("ftw! "); exit(0); } // prompt for move printf("Tile to move: "); int tile = get_int(); // quit if user inputs 0 if (tile == 0) { exit(0); } // log the move fprintf(file, "%i ", tile); fflush(file); // move if possible else report illegal move if (!move(tile)) { printf(" illegal move. "); usleep(500000); } // sleep for animations sake usleep(500000); // close log fclose(file); return 0; } /** * Clears screen using ANSI escape sequences. * / * void clear(void) { clear(); printf("WELCOME TO GAME OF FIFTEEN "); usleep(200000); } /** * Initializes the game's board with tiles numbering 1 through d * d - 1 * (i.e., fills 2d array with values but does not actually print them). */ void init(void) { int counter = d * d, tmp = d; if(--counter % 2 != 0) { tmp--; for(int i = 0, j = d - 1; i < d - 3; i++, j--) board[d-1][i] = j; board[d - 1][d - 1] = 0; board[d - 1][d - 2] = 2; board[d - 1][d - 3] = 1; } for(int i = 0; i < tmp; i++) for(int j = 0; j < d; j++) { board[i][j] = counter --; } } /** Prints board in present state * */ void draw(void) { for(int i = 0; i < d; i++) { for(int j = 0; j < d; j++) { if(board[i][j] < 10) printf(" "); printf("%i", board[i][j]); } printf(" "); } } /** * If tile borders empty space, move tile and return true, else * returns false */ int move(int tile) { int x = - 1, y; for(int i = 0; i < d; i++) for(int j = 0; j < d; j++) if(board[i][j] == tile) { x = i; y = j; break; } if(x == -1) return 0; if(x-1 >= 0 && board[x-1][y] == 0) { board[x-1][y] = tile; board[x][y] = 0; return 1; } else if(x+1 < d && board[x+1][y] == 0) { board[x+1][y] = tile; board[x][y] = 0; return 1; } else if(y - 1 >= 0 && board[x][y-1] == 0) { board[x][y+1] = tile; board[x][y] = 0; return 1; } return 0; } /** * Returns true if the game is won * else false */ int won(void) { for(int i = 0; i < d; i ++) { for(int j = 0; j < d; j++) if(j+1 < d && board[i][j] > board[i][j+1]) return 0; if(i+1 < d && board[i][d-1] > board[i+1][0]) return 0; } int testArr[(d*d)]; int counter = 0; // put all 10 array for(int i = 0; counter < (d*d); i++){ for(int j = 0; j < d; j++ ){ testArr[counter++] = board[i][j]; } } //check for all array in ascending order for(int i = 0; i < counter - 2; i++) { if(testArr[i] > testArr[i+1]) { return 0; } } return 1; } how do I solve this error ? fifteen.c:135:1: error: '/*' within block comment [-Werror,-Wcomment] /** ^ 1 error generated. make: *** [fifteen] Error 1

Explanation / Answer

Your code is distorted. Not able to find what error is in line 135:1

I found only one problem that is usage of get_int() function and that because of there is not c library installed in your system to resolve get_int(). Use scanf to read integer from stdin.

Here is the resolved code aligned properly. Put a comment if you need further clarification.

/**************************/

/*
* fifteen.c
*
* Created on: 20-Oct-2017
*      Author:
*/

/**
*
* * fifteen.c *
* * Computer Science 50
* * Problem Set 3
* * Implements Game of Fifteen (generalized to d x d). *
* * Using fifteen d *
* * wherebt the board's dimensions are to be d x d,
* * where d must be in [DIM_MIN,DIM_MAX]
* * * Note that usleep is obsolete, but it offers more granularity than
* * sleep and is simpler to use then nanosleep; man usleep for more.
* */

#define _XOPEN_SOURCE 500
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <cstdint>
// Restrictions
#define DIM_MIN 3
#define DIM_MAX 3
// board
int board[DIM_MAX][DIM_MAX];
// dimensions
int d;
// prototypes
void clear(void);
void greet(void);
void init(void);
void draw(void);
int move(int tile);
int won(void);
int main(int argc, char* argv[])
{
   // ensure proper usage
   if (argc != 2)
   {
       printf("Usage: fifteen d ");
       return 1;
   }
   // ensure valid dimensions
   d = atoi(argv[1]);
   if (d < DIM_MIN || d > DIM_MAX)
   {
       printf("Board must be between %i x %i and %i x %i, inclusive. ",
               DIM_MIN, DIM_MIN, DIM_MAX, DIM_MAX);
       return 2;
   }
   // open log
   FILE* file =fopen("log.txt", "w");
   if(file == NULL)
   {
       return 3;
   }
   // greet user with instructions
   greet();
   // initialize the board
   init();
   // accept moves until someone wins
   while (1)
   {
       // clear screen
       clear();
       // draw the current state of the board
       draw();
       // log the current state of the baord
       for (int j = 0; j < d; j++)
       {
           // fprintf(file, "%i", board[i][j]);
           if ( j < d - 1)
           {
               fprintf(file, "l");
           }
       }
       fprintf(file, " ");
   }
   fflush(file);
   // check for win
   if (won())
   {
       printf("ftw! ");
       exit(0);
   }
   // prompt for move
   printf("Tile to move: ");
//   int tile = get_int();
   int tile;
   scanf("%d",&tile);
   // quit if user inputs 0
   if (tile == 0)
   {
       exit(0);
   }
   // log the move
   fprintf(file, "%i ", tile);
   fflush(file);
   // move if possible else report illegal move
   if (!move(tile))
   {
       printf(" illegal move. ");
       usleep(500000);
   }
   // sleep for animations sake
   usleep(500000);
   // close log
   fclose(file);
   return 0;
}
/** * Clears screen using ANSI escape sequences. * / * */
void clear(void)
{
   clear();
   printf("WELCOME TO GAME OF FIFTEEN ");
   usleep(200000);
}
/** * Initializes the game's board with tiles numbering 1 through d * d - 1 *
* (i.e., fills 2d array with values but does not actually print them). */
void init(void)
{
   int counter = d * d, tmp = d;
   if(--counter % 2 != 0)
   { tmp--;
   for(int i = 0, j = d - 1; i < d - 3; i++, j--)
       board[d-1][i] = j;
   board[d - 1][d - 1] = 0;
   board[d - 1][d - 2] = 2;
   board[d - 1][d - 3] = 1;
   }
   for(int i = 0; i < tmp; i++)
       for(int j = 0; j < d; j++)
       { board[i][j] = counter --; }
}
/** Prints board in present state * */
void draw(void)
{
   for(int i = 0; i < d; i++)
   {
       for(int j = 0; j < d; j++)
       {
           if(board[i][j] < 10)
               printf(" ");
           printf("%i", board[i][j]);
       }
       printf(" ");
   }
}
/** * If tile borders empty space, move tile and return true, else * returns false */
int move(int tile)
{
   int x = - 1, y;
   for(int i = 0; i < d; i++)
       for(int j = 0; j < d; j++)
           if(board[i][j] == tile)
           {
               x = i;
               y = j;
               break;
           }
   if(x == -1)
       return 0;
   if(x-1 >= 0 && board[x-1][y] == 0)
   {
       board[x-1][y] = tile;
       board[x][y] = 0;
       return 1;
   }
   else if(x+1 < d && board[x+1][y] == 0)
   {
       board[x+1][y] = tile;
       board[x][y] = 0;
       return 1; }
   else if(y - 1 >= 0 && board[x][y-1] == 0)
   {
       board[x][y+1] = tile;
       board[x][y] = 0;
       return 1;
   }
   return 0;
}
/** * Returns true if the game is won * else false */
int won(void)
{
   for(int i = 0; i < d; i ++)
   {
       for(int j = 0; j < d; j++)
           if(j+1 < d && board[i][j] > board[i][j+1])
               return 0;
       if(i+1 < d && board[i][d-1] > board[i+1][0])
           return 0;
   }
   int testArr[(d*d)];
   int counter = 0;
   // put all 10 array
   for(int i = 0; counter < (d*d); i++)
   {
       for(int j = 0; j < d; j++ )
       {
           testArr[counter++] = board[i][j];
       }
   }
   //check for all array in ascending order
   for(int i = 0; i < counter - 2; i++)
   {
       if(testArr[i] > testArr[i+1])
       {
           return 0;
       }
   }
   return 1;
}


/*
   //how do I solve this error ?
fifteen.c:135:1: error: '/*' within block comment [-Werror,-Wcomment]
^ 1 error generated. make: *** [fifteen] Error 1
*/