diff options
6 files changed, 0 insertions, 399 deletions
| -rw-r--r-- | pract KN/week7/solution/Source.cpp | 10 | ||||
| -rw-r--r-- | pract KN/week7/solution/betType.h | 14 | ||||
| -rw-r--r-- | pract KN/week7/solution/game.cpp | 154 | ||||
| -rw-r--r-- | pract KN/week7/solution/game.h | 25 | ||||
| -rw-r--r-- | pract KN/week7/solution/player.cpp | 142 | ||||
| -rw-r--r-- | pract KN/week7/solution/player.h | 54 |
diff --git a/pract KN/week7/solution/Source.cpp b/pract KN/week7/solution/Source.cpp deleted file mode 100644 index d28893f..0000000 --- a/pract KN/week7/solution/Source.cpp +++ /dev/null @@ -1,10 +0,0 @@ -#include<iostream>
-#include"player.h"
-#include"game.h"
-
-int main() {
- /*player p("Ivan", "1111", 19, 100);
-
- game g;
- g.play(p);*/
-}
\ No newline at end of file diff --git a/pract KN/week7/solution/betType.h b/pract KN/week7/solution/betType.h deleted file mode 100644 index e540d6d..0000000 --- a/pract KN/week7/solution/betType.h +++ /dev/null @@ -1,14 +0,0 @@ -#ifndef BET_TYPE_HEADER
-#define BET_TYPE_HEADER
-
-enum class betType {
- isEven,
- isNotEven,
- isPrime,
- isPowerOfTwo,
- isBiggerThan,
- isSmallerThan,
- isTheSameAs
-};
-
-#endif // !BET_TYPE_HEADER
diff --git a/pract KN/week7/solution/game.cpp b/pract KN/week7/solution/game.cpp deleted file mode 100644 index 7adc45c..0000000 --- a/pract KN/week7/solution/game.cpp +++ /dev/null @@ -1,154 +0,0 @@ -#include "game.h"
-#include<iostream>
-#include<time.h>
-#include<cmath>
-
-void game::generateNumber() {
- srand(time(NULL));
-
- number = rand() % 100 + 1;
-}
-
-void game::validateBet(double& bet, double currentMoney) const {
- std::cout << "How much money would you like to bet? " << std::endl
- << "Your money now: " << currentMoney << std::endl;
-
- bool fail = false;
-
- do {
- if (fail)
- std::cout << "Invalid input" << std::endl;
-
- std::cin >> bet;
-
- fail = true;
-
- // Проверява дали сме въвели текстов низ вместо число
- // и поправя потока.
- if (!(bool)(std::cin)) {
- std::cin.clear();
- std::cin.ignore(255, '\n');
- }
-
- } while (bet > currentMoney || bet < 0);
-}
-
-void game::validateNumber(int& num) const {
- std::cout << "Enter your number: ";
-
- bool fail = false;
-
- do {
- if (fail)
- std::cout << "Try again" << std::endl;
-
- std::cin >> num;
-
- if (!(bool)(std::cin)) {
- std::cin.clear();
- std::cin.ignore(255, '\n');
- }
-
- fail = true;
-
- } while (num < 20 || num > 60);
-}
-
-double game::getRate(betType currentBet) const {
- double rate = 0;
- int myNumber = 0;
-
- switch (currentBet) {
- case betType::isEven:
- rate = !(number % 2) ? 0.2 : -1;
- break;
- case betType::isNotEven:
- rate = !(number % 2) ? -1 : 0.2;
- break;
- case betType::isPrime:
- rate = isPrime(number) ? 0.5 : -1;
- break;
- case betType::isPowerOfTwo:
- rate = isPowerOfTwo(number) ? 1 : -1;
- break;
- case betType::isBiggerThan:
- validateNumber(myNumber);
- rate = (myNumber > number) ? 0.25 : -1;
- break;
- case betType::isSmallerThan:
- validateNumber(myNumber);
- rate = (myNumber < number) ? 0.25 : -1;
- break;
- case betType::isTheSameAs:
- validateNumber(myNumber);
- rate = (myNumber == number) ? 10 : -1;
- break;
- }
-
- return rate;
-}
-
-void game::play(player& p) {
- if (p.getAge() < 18) {
- std::cout << "You are too young" << std::endl;
- return;
- }
-
- char buff[20];
- std::cout << "Enter your password, " << p.getName() << ": ";
- std::cin.getline(buff, 20, '\n');
-
- if (!p.comparePassword(buff)) {
- std::cout << "Wrong password. Goodbye.";
- return;
- }
-
- while (!p.isBroke()) {
- double myBet = 0;
-
- betType currentBet = p.makeBet();
-
- generateNumber();
-
- validateBet(myBet, p.getMoney());
-
- p.updateMoney(myBet, getRate(currentBet));
-
- std::cout << "The number was: " << number << std::endl;
- }
-
- std::cout << "You lost all your money!" << std::endl;
-}
-
-// Bonus -> Newton's method for finding square root
-// https://math.mit.edu/~stevenj/18.335/newton-sqrt.pdf
-// Formula: a_n = 0.5 * (a_{n-1} + number / a_{n-1})
-double newtonSquareRoot(double num, int l = 100) {
- double result = 1;
- double temp = 1;
-
- for (int i = 0; i < l; i++) {
- temp = 0.5 * (result + num / result);
-
- if (temp == result && result != 1)
- return result;
-
- result = temp;
- }
-
- return result;
-}
-
-bool isPrime(int num) {
- // int border = sqrt(num); is perfectly fine!
- int border = newtonSquareRoot(num);
-
- for (int i = 2; i <= border; i++)
- if (num % i == 0)
- return false;
- return true;
-}
-
-bool isPowerOfTwo(int num) {
- return num != 0 && ((num & (num - 1)) == 0);
-}
\ No newline at end of file diff --git a/pract KN/week7/solution/game.h b/pract KN/week7/solution/game.h deleted file mode 100644 index a2a4ed0..0000000 --- a/pract KN/week7/solution/game.h +++ /dev/null @@ -1,25 +0,0 @@ -#ifndef GAME_HEADER
-#define GAME_HEADER
-
-#include"player.h"
-
-double newtonSquareRoot(double, int);
-bool isPrime(int number);
-bool isPowerOfTwo(int number);
-
-class game {
-private:
- size_t number;
-
- void generateNumber();
-
- void validateBet(double& bet, double cMoney) const;
- void validateNumber(int& number) const;
-
- double getRate(betType currentBet) const;
-public:
- void play(player& p);
-};
-
-
-#endif
diff --git a/pract KN/week7/solution/player.cpp b/pract KN/week7/solution/player.cpp deleted file mode 100644 index 4d56462..0000000 --- a/pract KN/week7/solution/player.cpp +++ /dev/null @@ -1,142 +0,0 @@ -#include "player.h"
-#include<iostream>
-
-void player::free() {
- delete[] name;
- delete[] password;
-}
-
-void player::copy(const player& other) {
- name = copyDynamic(other.name);
- password = copyDynamic(other.password);
-
- money = other.money;
- age = other.age;
-}
-void player::showHelp() const {
- std::cout <<
- "0 for even" << std::endl <<
- "1 for not even" << std::endl <<
- "2 for prime" << std::endl <<
- "3 for power of two" << std::endl <<
- "4 for is less than " << std::endl <<
- "5 for is bigger than" << std::endl <<
- "6 for is equals" << std::endl;
-}
-
-char* player::copyDynamic(const char* arg) const {
- char* toReturn = new char[strlen(arg) + 1];
- strcpy(toReturn, arg);
- return toReturn;
-}
-
-player::player(const char* name, const char* pass, int age, double money) {
- this->name = copyDynamic(name);
- password = copyDynamic(pass);
-
- setAge(age);
- this->money = money;
-}
-
-player::player(const player& other) {
- copy(other);
-}
-
-player& player::operator=(const player& other) {
- if (this != &other) {
- free();
- copy(other);
- }
- return *this;
-}
-
-void player::setName(const char* newName) {
- delete[] name;
- name = copyDynamic(newName);
-}
-
-void player::setAge(int newAge) {
- if (newAge <= 0 || newAge >= 100) {
- age = 0;
- return;
- }
- age = newAge;
-}
-
-const char* player::getName() const {
- return name;
-}
-
-void player::changePassword(const char* newPass, const char* oldPass) {
- if (comparePassword(oldPass)) {
- delete[] password;
- password = copyDynamic(newPass);
- }
-}
-
-void player::updateMoney(double bet, double rate) {
- money += bet * rate;
-}
-
-int player::getAge() const {
- return age;
-}
-
-double player::getMoney() const {
- return money;
-}
-
-bool player::isBroke() const {
- return money <= 0;
-}
-
-bool player::comparePassword(const char* pwd) const {
- return pwd != nullptr && (strcmp(password, pwd) == 0);
-}
-
-betType player::makeBet() const {
- std::cout << name << ", what is your bet? Press h for help and m to view money.\n";
-
- while (true) {
- std::cout << ">";
- char ch;
-
- std::cin >> ch;
-
- switch (ch) {
- case 'h':
- showHelp();
- break;
- case 'm':
- std::cout << "Money: " << money << std::endl;
- break;
- case '0':
- return betType::isEven;
- break;
- case '1':
- return betType::isNotEven;
- break;
- case '2':
- return betType::isPrime;
- break;
- case '3':
- return betType::isPowerOfTwo;
- break;
- case '4':
- return betType::isSmallerThan;
- break;
- case '5':
- return betType::isBiggerThan;
- break;
- case '6':
- return betType::isTheSameAs;
- break;
- default:
- break;
- }
- }
-}
-
-player::~player() {
- free();
-}
diff --git a/pract KN/week7/solution/player.h b/pract KN/week7/solution/player.h deleted file mode 100644 index 134e0d6..0000000 --- a/pract KN/week7/solution/player.h +++ /dev/null @@ -1,54 +0,0 @@ -#ifndef PLAYER_HEADER
-#define PLAYER_HEADER
-#include"betType.h"
-
-#pragma warning(disable : 4996)
-
-class player {
-private:
- char* name;
- char* password;
- int age;
- double money;
-
- void free();
-
- void copy(const player& other);
-
- void showHelp() const;
-
- char* copyDynamic(const char* arg) const;
-
-public:
- player() : name(nullptr), password(nullptr), age(0), money(0) {}
-
- player(const char* name,const char* pass, int age, double money);
-
- player(const player& other);
-
- player& operator=(const player& other);
-
- void setName(const char* newName);
-
- void setAge(int newAge);
-
- const char* getName() const;
-
- void changePassword(const char* newPass, const char* oldPass);
-
- void updateMoney(double bet, double rate);
-
- int getAge() const;
-
- double getMoney() const;
-
- bool isBroke() const;
-
- bool comparePassword(const char* pwd) const;
-
- betType makeBet() const;
-
- ~player();
-};
-
-#endif
|
