Note 0
Note 0
void printStudents(Student
arr[MAX_SIZE], int N) {
for (int i = 0; i < N; i++) {
printf("Student NO.%d:\n", i);
printf("Name: ");
puts(arr[i].name);
printf("ID: %d\n", arr[i].id);
Maze_Solver // A wall ahead
#include <stdio.h> turn_left(&dir, &right);
#include <time.h> }
#include <stdlib.h> }
#define BOUND 12 else {
// No wall on the right
int trans_dir (char dir); turn_right(&dir, &right);
step_forward(map,dir_map, dir, &x, &y);
int check_right (char map[BOUND][BOUND], int dir_map[4][2], }
char right, int x, int y);
if (steps++ == 2 * (BOUND - 2) * (BOUND - 2)) {
int check_forward (char map[BOUND][BOUND], int printf("UNSOLVABLE!!! (Steps taken: %i; Map
dir_map[4][2], char dir, int x, int y); area: %i)\n", steps, (BOUND - 2) * (BOUND - 2));
return 1;
void turn_right (char *p_dir, char *p_right); }
}
void turn_left (char *p_dir, char *p_right);
printf("Route taken:\n");
void step_forward (char map[BOUND][BOUND], int for (int row = 0; row < BOUND; row++) {
dir_map[4][2], char dir, int *x, int *y); for (int col = 0; col < BOUND; col++) {
printf("%c ", map[row][col]);
int main() { }
char map[BOUND][BOUND] = {...} printf("\n");
... path| # wall }
// Randomly generate a maze. printf("=================================\n");
srand(time(0)); printf("SOLVED!!!\n");
for (int row = 1; row < BOUND - 1; row++) {
for (int col = 1; col < BOUND - 1; col++) { return 0;
int r = rand() % 4; }
if (r) {
map[row][col] = '.'; int trans_dir (char dir) {
} if (dir == 'E') {
else { return 0;
map[row][col] = '#'; }
} else if (dir == 'W') {
} return 1;
} }
else if (dir == 'N') {
for (int row = 0; row < BOUND; row++) { return 2;
for (int col = 0; col < BOUND; col++) { }
printf("%c ", map[row][col]); else if (dir == 'S') {
} return 3;
printf("\n"); }
} return -1;
printf("=================================\n"); }
int dir_map[4][2] = {{1, 0}, {-1, 0}, {0, -1}, {0, 1}}; int check_right (char map[BOUND][BOUND], int dir_map[4][2],
char right, int x, int y) {
char dir = 'E'; int n = trans_dir(right);
char right = 'S'; int i = dir_map[n][0];
int x = 0; int j = dir_map[n][1];
int y = 2;
int steps = 0; // If there is a wall return 1
if (map[y + j][x + i] == '#') {
while (x != (BOUND - 1)) { return 1;
if (check_right(map, dir_map, right, x, y)) { }
// A wall on the right return 0;
if (check_forward(map, dir_map, dir, x, y)) { }
// No wall ahead
step_forward(map, dir_map, dir, &x, &y); int check_forward (char map[BOUND][BOUND], int
} dir_map[4][2], char dir, int x, int y) {
else { int n = trans_dir(dir);
int i = dir_map[n][0]; *p_right = 'W';
int j = dir_map[n][1]; }
else if (*p_right == 'S') {
if (map[y + j][x + i] == '.') { *p_right = 'E';
return 1; }
} }
return 0;
} void step_forward (char map[BOUND][BOUND], int
dir_map[4][2], char dir, int *x, int *y) {
void turn_right (char *p_dir, char *p_right) { int n = trans_dir(dir);
// Turn direction; int i = dir_map[n][0];
if (*p_dir == 'E') { int j = dir_map[n][1];
*p_dir = 'S';
} map[*y][*x] = 'x';
else if (*p_dir == 'W') { *x += i;
*p_dir = 'N'; *y += j;
} map[*y][*x] = 'O';
else if (*p_dir == 'N') { }
*p_dir = 'E';
}
else if (*p_dir == 'S') { String Manipulation
*p_dir = 'W'; const char claim[] = "I am Nguyen Anh Khoa, ITITIU19141\n.
} This is my midterm exercises for C/C++\n."
"This is all my own work. I did
// Change its right appropriately not copy the code from any other source\n";
if (*p_right == 'E') { // 2.1 count the number of characters
*p_right = 'S'; int i = 0;
} while (claim[i] != '\0') {
else if (*p_right == 'W') { i++;
*p_right = 'N'; }
} printf("Number of characters: %i\n", i);
else if (*p_right == 'N') {
*p_right = 'E'; // 2.2 count number of appearances of characters (a-z or
} A-Z) and digits 0-9
else if (*p_right == 'S') { int array[36] = {0};
*p_right = 'W'; i = 0;
} while (claim[i] != '\0') {
} if (claim[i] >= 65 && claim[i] <=90) {
array[(int)claim[i] - 65]++;
void turn_left (char *p_dir, char *p_right) { } else if (claim[i] >= 97 && claim[i] <= 122) {
// Turn direction; array[(int)claim[i] - 97]++;
if (*p_dir == 'E') { } else if (claim[i] >= 48 && claim[i] <= 57) {
*p_dir = 'N'; array[(int)claim[i] - 21]++;
} }
else if (*p_dir == 'W') { i++;
*p_dir = 'S'; }
}
else if (*p_dir == 'N') { // 2.3 draw a histogram
*p_dir = 'W'; printf("\nHISTOGRAM\n");
} for (int j = 0; j < 5; j++) {
else if (*p_dir == 'S') { printf("%c%c %02i ", j+97,j+65, array[j]);
*p_dir = 'E'; for (int k = 0; k < (int)array[j]; k++) {
} printf("*");
}
// Change its right appropriately printf("\n");
if (*p_right == 'E') { }
*p_right = 'N';
}
else if (*p_right == 'W') {
*p_right = 'S';
}
else if (*p_right == 'N') {