diff options
new
3 files changed, 0 insertions, 237 deletions
| -rw-r--r-- | Sem. 09/README.md | 35 | ||||
| -rw-r--r-- | Sem. 09/free_space_in_room.cpp | 72 | ||||
| -rw-r--r-- | Sem. 09/tic-tac-toe.cpp | 130 |
diff --git a/Sem. 09/README.md b/Sem. 09/README.md deleted file mode 100644 index 51a6913..0000000 --- a/Sem. 09/README.md +++ /dev/null @@ -1,35 +0,0 @@ -- **Задача 1 (малък проект) :** Реализирайте играта **"Морски шах" (tic-tac-toe)**. Реализирайте програмата, така че да може смяната на големината на полето да става чрез промяната на стойността само на една константа. - -# Многомерни масиви - -Представляват масиви от масиви. - - - -## Инициализация на многомерни масиви - - ```c++ - int m1[2][3]; // Създава матрица с 2 реда и 3 колони. - int m2[2][3] = {{1, 2 ,3} , {4 ,5 , 6}}; //изреждаме редовете (те са елементите на масива) - int m3[2][3] = {1, 2, 3, 4, 5, 6}; //изреждаме елементите - - int arr[][3] = { 0, 0, 0, 4, 5, 6 }; // Пресмята колко реда трябва да е. - - int arr[3][0] = { 0, 0, 0, 4, 5, 6 }; // Грешка! - - int cube[3][3][3]; // Създава тримерен масив. -``` - -## Достъп на елемент - - ```c++ - m1[2][0] = 44; //Присвоява на елементът на ред с индекс 2 и колона с индекс 0 числото 44 - cout << m1[0][0]; //Отпечатва на стандартния изход елементът на индекси 0 0 -``` - -## Как се осъществява достъпът: - - ```c++ - m1[i][j] = 44;// адресът на m1 + i* sizeof(int)*rows_count + j* sizeof(int) -``` - diff --git a/Sem. 09/free_space_in_room.cpp b/Sem. 09/free_space_in_room.cpp deleted file mode 100644 index 532a5e1..0000000 --- a/Sem. 09/free_space_in_room.cpp +++ /dev/null @@ -1,72 +0,0 @@ -#include <iostream> -using namespace std; - -//Задача 2: - - -//Подадена е булева матрица. (Стая) -// 1- заета клетка -// 0- свободна клетка. -// 11111111 -// 11000001 -// 11000001 -// 11111111 - -// Подават ни обект(мебел) с размери n и k. -// Трябва да отпечатаме дали има място, където да поставим обекта - - -// Пример: -// В горния пример има къде да поставим обек 2x2, но няма къде да поставим обект 3x3 - - - -const int ROOM_SIZE_X = 4; -const int ROOM_SIZE_Y = 8; - -//Проверява дали има подматрица само със свободни клетки(само с 0-ли) с големина objXDim, objYDim -//където горният ляв ъгъл е на коодриднати upperLeftX и upperLeftY/ -bool hasFreeSpaceFromThisLeftUpCorner(bool room[ROOM_SIZE_X][ROOM_SIZE_Y], int objXDim, int objYDim, int upperLeftX, int upperLeftY) -{ - for (int i = 0; i < objXDim; i++) - { - for (int j = 0; j < objYDim; j++) - { - if (room[upperLeftX + i][upperLeftY + j] != 0) - return false; - } - } - return true; -} -bool hasSpace(bool room[ROOM_SIZE_X][ROOM_SIZE_Y], int objXDim, int objYDim) -//дали има подматрица само от 0-ли с размери objXDim x objYDim -{ - for (int i = 0; i < ROOM_SIZE_X - objXDim + 1; i++) - { - for (int j = 0; j < ROOM_SIZE_Y - objYDim + 1; j++) - { - //i,j - кандидат за горен ляв ъгъл на потенциално свободното пространство - if (hasFreeSpaceFromThisLeftUpCorner(room, objXDim, objYDim, i, j)) - { - //i,j са горен ляв ъгъл на достатъчно голямо свободно място за обект с рамери objXDim objYDim - - cout << "Free space found!" <<endl; - cout << "Corners:" << endl; - cout << i << " " << j<<endl; - cout << i + objXDim - 1 << " " << j << endl; - cout << i + objXDim-1 << " " << j + objYDim-1<<endl; - cout << i << " " << j + objYDim - 1 << endl; - return true; - } - } - } - return false; -} -int main() -{ - bool room[ROOM_SIZE_X][ROOM_SIZE_Y] = { { 1, 1, 1, 1, 1, 1, 1, 1 }, - { 1, 1, 0, 0, 0, 0, 0, 1 }, - { 1, 1, 0, 0, 0, 0, 0, 1 }, - { 1, 1, 1, 1, 1, 1, 1, 1 } }; - hasSpace(room, 2, 4); //Има ли къде да разположим мебел с размер 2x4 -} diff --git a/Sem. 09/tic-tac-toe.cpp b/Sem. 09/tic-tac-toe.cpp deleted file mode 100644 index d0e2aaf..0000000 --- a/Sem. 09/tic-tac-toe.cpp +++ /dev/null @@ -1,130 +0,0 @@ -#include <iostream> -using namespace std; - -//Зад1: Да се реализира играта tic-tac-toe -// Матрицата ще ни бъде от цели числа. Ще пазим следните стойности: -// [] = 0 (празна клетка) -// [x] = 1 -// [o] = -1 -const int TABLE_SIZE = 5; - -//Прави матрицата само от 0-ли (от празни клетки) -void init(int table[TABLE_SIZE][TABLE_SIZE]) -{ - for (int i = 0; i < TABLE_SIZE; i++) - { - for (int j = 0; j < TABLE_SIZE; j++) - { - table[i][j] = 0; - } - } -} - -//Дали не сме извън рамките на масива -bool areValidCoordinates(int x, int y) -{ - return x >= 1 && x <= TABLE_SIZE && y >= 1 && y <= TABLE_SIZE; -} - -//Дали клетката е свободна. Тук вече допускаме, че x и y са валидни координати. -bool isCellFree(int table[TABLE_SIZE][TABLE_SIZE], int x, int y) -{ - return table[x][y] == 0; -} - -//Проверяваме дали няма вече победител. -//el - кой проверяваме дали е победител (el = 1, значи проверяваме дали имаме последователност от TABLE_SIZE 1-ци.) -bool isWinner(int table[TABLE_SIZE][TABLE_SIZE], int el) -{ - for (int i = 0; i < TABLE_SIZE; i++) - { - //Проверка за редовете - bool isWinner = true; - for (int j = 0; j < TABLE_SIZE; j++) - { - if (table[i][j] != el) - isWinner = false; - } - if (isWinner) - return true; - - //Проверка за колоните - isWinner = true; - for (int j = 0; j < TABLE_SIZE; j++) - { - if (table[i][j] != el) - isWinner = false; - } - if (isWinner) - return true; - } - - //Проверка за главния диагонал - bool isWinner = true; - for (int i = 0; i < TABLE_SIZE; i++) - { - if (table[i][i] != el) - isWinner = false; - } - if (isWinner) - return true; - - //Проверка за второстепенния диагонал - isWinner = true; - for (int i = 0; i < TABLE_SIZE; i++) - { - if (table[i][TABLE_SIZE - 1 - i] != el) - isWinner = false; - } - return isWinner; -} -void print(int table[TABLE_SIZE][TABLE_SIZE]) -{ - for (int i = 0; i < TABLE_SIZE; i++) - { - for (int j = 0; j < TABLE_SIZE; j++) - { - cout << "["; - if (table[i][j] == -1) - cout << "o"; - else if (table[i][j] == 0) - cout << " "; - else - cout << "x"; - cout << "]"; - } - cout << endl; - } - cout << endl; -} -int main() -{ - int table[TABLE_SIZE][TABLE_SIZE]; - init(table); - - bool isFirstPlayersTurn = true; - print(table); - while (true) - { - cout << "It's player " << (isFirstPlayersTurn ? 1 : 2) << "\'s turn!"<<endl; - int x, y; - do - { - cin >> x >> y; - } while (!areValidCoordinates(x, y) || !isCellFree(table, x-1,y-1)); - // Първо проверяваме дали x и y са валидни индекси и САМО АКО СА, проверяваме дали клетката е свободна. - // Възползваме се, че при A || B, ако A е истина, не проверява стойността на B. - - int currentSymbol = isFirstPlayersTurn ? 1 : -1; - table[x - 1][y - 1] = currentSymbol; - - system("CLS"); //Изчиства всичко от конзолата. Работи само на Visual Studio. - print(table); - if (isWinner(table,currentSymbol)) - { - cout << "End game!"; - break; - } - isFirstPlayersTurn = !isFirstPlayersTurn; - } -} |
