#include #include #include using namespace std; /* Exercises: * https://github.com/triffon/ip-2021-22/blob/master/practicum/6/week4/%D0%97%D0%B0%D0%B4%D0%B0%D1%87%D0%B8%20%D1%87%D0%B5%D1%82%D0%B2%D1%8A%D1%80%D1%82%D0%B0%20%D1%81%D0%B5%D0%B4%D0%BC%D0%B8%D1%86%D0%B0.pdf */ // Задача първа: // Да се напише функция която при подадени два параметъра m и n връща сумата на // числата в интервала [m, n]. int rangeSum(int m, int n) { if (m > n) return 0; int sum = m; while(++m <= n) // can be optimized with progression sum formula sum += m; return sum; } void ex1() { int m, n; cin >> m >> n; cout << rangeSum(m, n) << endl; } // Задача втора: // Напишете функция която приема за аргументи х и n като n e цяло число и връща // х на степен n. Не можем да използваме функция pow. // Пример: // Вход: 3 2 Изход: 9 int powered(int x, int n) { int poweredNum = 1; while(--n >= 0) poweredNum *= x; return poweredNum; } void ex2() { int x, n; cin >> x >> n; cout << powered(x, n) << endl; } // Задача трета: // Да се напише функция която приема число и връща абсолютната му стойност. int absNum(int n) { return (n < 0) ? -n : n; } void ex3() { int n; cin >> n; cout << absNum(n) << endl; } // Задача четвърта: // Напишете функция която намира разстоянието между две точки по подадени // координати в декартова координатна система. double pointDistance(int x1, int y1, int x2, int y2) { return sqrt(powered(absNum(x2 - x1), 2) + powered(absNum(y2 - y1), 2)); } void ex4() { int x1, y1, x2, y2; cin >> x1 >> y1 >> x2 >> y2; cout << pointDistance(x1, y1, x2, y2) << endl; } // Задача пета: // Напишете функция която намира обиколката на триъгълник определен по // подадени три точки double trianglePerimeter(int x1, int y1, int x2, int y2, int x3, int y3) { return pointDistance(x1, y1, x2, y2) + pointDistance(x1, y1, x3, y3) + pointDistance(x2, y2, x3, y3); } void ex5() { int x1, y1, x2, y2, x3, y3; cin >> x1 >> y1 >> x2 >> y2 >> x3 >> y3; cout << trianglePerimeter(x1, y1, x2, y2, x3, y3) << endl; } // Задача шеста: // Напишете функция, която приема цяло число и връща факториела му. int fac(int n) { if (n <= 1) return 1; // doesn't support negatives int factoriel = 1; for(int i = 1; i <= n; i++) factoriel *= i; return factoriel; } void ex6() { int n; cin >> n; cout << fac(n) << endl; } // Бонус // Напишете функция която пресмята лицето на триъгълник определен по подадени // три точки. double triangleArea(int x1, int y1, int x2, int y2, int x3, int y3) { double a = pointDistance(x1, y1, x2, y2), b = pointDistance(x1, y1, x3, y3), c = pointDistance(x2, y2, x3, y3); double p = (a + b + c) / 2; return sqrt(p * (p - a) * (p - b) * (p - c)); // Heron's formula } void bonus() { int x1, y1, x2, y2, x3, y3; cin >> x1 >> y1 >> x2 >> y2 >> x3 >> y3; cout << triangleArea(x1, y1, x2, y2, x3, y3) << endl; } // Задача седма: // Напишете функция която приема символ и определя дали е число. bool charIsNum(char ch) { return ch >= '0' && ch <= '9'; } void ex7() { char s; cin >> s; cout << ((charIsNum(s) ? "Is a number" : "Is NOT a number")) << endl; } // Задача осма**: // Напишете функция която приема два агрумента и връща цяло число. Числото // трябва да е различно за всеки две различни стойности на входа. // Тоест: // (f(a, b) == f(c, d)) ⇐⇒ (a == c & b == d) int f(int a, int b) { // This is some old code of mine: https://gitlab.com/Syndamia/algorithms/-/blob/master/C_C++/FindSpiralNumber.cpp int n, v = max(abs(a), abs(b)), g = 8 * (v * (v + 1) / 2); if (b == v || a == v) { // Top row or right column n = g - a + b - 6 * v; } else { // Left column or bottom row n = g + a - b - 2 * v; } return n; } void ex8() { int a, b, c, d; cin >> a >> b >> c >> d; cout << f(a, b) << " " << f(c, d) << endl; } // Задача девета: // Играем играта guess the number! Правилата са следните: // Компютърът си намисля число на случаен принцип (използваме функцията rand()) // Потребителя въвежда число. Ако числото е правилно сме победители. В противен // случай получаваме съобщение дали въведеното от нас число е по - голямо или по - // малко от намисленото. Играта продължава докато не се познае числото. // Играта да се реализира във функция play(). void play() { int n = rand(); int input; while(true) { cin >> input; if(input == n) { cout << "You win!" << endl; return; } else cout << ((n > input) ? "Smaller than n" : "Bigger than n") << endl; } } void ex9() { play(); } int main() { ex9(); }