Website Summary Files Commits Branches @commit @diff @stats
path: root / Sem. 09
diff options
context:
space:
mode:
Commit55fc7eb3bba83f4084b2f897c61d0280a5f9c097 (patch)
Author
 angeld55 <angel_dimitriev@abv.bg>
2021-10-02 17:44:35 +0300
Committer
 angeld55 <angel_dimitriev@abv.bg>
2021-10-02 17:44:35 +0300
Files85d32a9a73f85c54162f9233f36a054ebe0de212 /Sem. 09
Introduction_to_programming_FMI-55fc7eb3bba83f4084b2f897c61d0280a5f9c097.tar
Introduction_to_programming_FMI-55fc7eb3bba83f4084b2f897c61d0280a5f9c097.tar.gz
Introduction_to_programming_FMI-55fc7eb3bba83f4084b2f897c61d0280a5f9c097.zip
Parent7f51b56297270d4a1f808bc73d082b71418a2fe0 (diff)
new
3 files changed, 0 insertions, 237 deletions
-rw-r--r--Sem. 09/README.md35
-rw-r--r--Sem. 09/free_space_in_room.cpp72
-rw-r--r--Sem. 09/tic-tac-toe.cpp130
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;
- }
-}