Summary Files Commits Branches @commit @diff @stats
path: root / Year 1 / Programming introduction / Practice-02.11.21.cpp
diff options
context:
space:
mode:
Commit07fe4df7b89a56f0f3e6bd224895483b04a52696 (patch)
Author
 Syndamia <kamen.d.mladenov@protonmail.com>
2021-11-07 12:27:31 +0200
Committer
 Syndamia <kamen.d.mladenov@protonmail.com>
2021-11-07 12:27:31 +0200
Files144219863e69b6b051f516ca87659b1d21e20003 /Year 1/Programming introduction/Practice-02.11.21.cpp
uni-projects-07fe4df7b89a56f0f3e6bd224895483b04a52696.tar
uni-projects-07fe4df7b89a56f0f3e6bd224895483b04a52696.tar.gz
uni-projects-07fe4df7b89a56f0f3e6bd224895483b04a52696.zip
Parent3f402620ecd071fb467b108036ac08ed48c5f929 (diff)
Fixed filename date
1 files changed, 205 insertions, 0 deletions
-rw-r--r--Year 1/Programming introduction/Practice-02.11.21.cpp205
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();
+}