diff options
Fixed filename date
1 files changed, 205 insertions, 0 deletions
| -rw-r--r-- | Year 1/Programming introduction/Practice-02.11.21.cpp | 205 |
diff --git a/Year 1/Programming introduction/Practice-02.11.21.cpp b/Year 1/Programming introduction/Practice-02.11.21.cpp new file mode 100644 index 0000000..1ddf6bd --- /dev/null +++ b/Year 1/Programming introduction/Practice-02.11.21.cpp @@ -0,0 +1,205 @@ +#include <cstdlib> +#include <iostream> +#include <cmath> + +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(); +} |
