Summary Files Commits Branches @commit @diff @stats
path: root / Year 1 / Programming introduction / Practice-08.11.21.cpp
diff options
context:
space:
mode:
Commita1c1170a6deb96f439138b83a3024441d907053b (patch)
Author
 Syndamia <kamen.d.mladenov@protonmail.com>
2021-11-08 14:08:10 +0200
Committer
 Syndamia <kamen.d.mladenov@protonmail.com>
2021-11-08 14:08:10 +0200
Files40e2d542ac5228f5650fbf5c9357220e020f3557 /Year 1/Programming introduction/Practice-08.11.21.cpp
uni-projects-a1c1170a6deb96f439138b83a3024441d907053b.tar
uni-projects-a1c1170a6deb96f439138b83a3024441d907053b.tar.gz
uni-projects-a1c1170a6deb96f439138b83a3024441d907053b.zip
Parentb113f2adc40bbff1fa6aa4527da19f63d60afbc4 (diff)
Added todays practice
1 files changed, 176 insertions, 0 deletions
-rw-r--r--Year 1/Programming introduction/Practice-08.11.21.cpp176
diff --git a/Year 1/Programming introduction/Practice-08.11.21.cpp b/Year 1/Programming introduction/Practice-08.11.21.cpp
new file mode 100644
index 0000000..134dcfa
--- /dev/null
+++ b/Year 1/Programming introduction/Practice-08.11.21.cpp
@@ -0,0 +1,176 @@
+#include <iostream>
+
+using namespace std;
+
+/* Exercises:
+ * https://github.com/triffon/ip-2021-22/blob/master/practicum/6/week5/%D0%B7%D0%B0%D0%B4%D0%B0%D1%87%D0%B8%20%D0%BF%D0%B5%D1%82%D0%B0%20%D1%81%D0%B5%D0%B4%D0%BC%D0%B8%D1%86%D0%B0.pdf
+ */
+
+// Задача първа:
+// Напишете функция, която приема малка буква и връща главна.
+
+char capitalize(char a) {
+ if (a >= 'A' && a <= 'Z')
+ return a;
+ return a - 32; // 32 = 'а' - 'А'
+}
+
+void ex1() {
+ char a;
+ cin >> a;
+
+ cout << capitalize(a) << endl;
+}
+
+// Задача втора:
+// Напишете функция, която приема 2 цели числа и пресмята най-големия им общ
+// делител. Използвайте алгоритъм на евклид.
+
+int gcd(int a, int b) {
+ // Using Euclidean algorithm https://simple.wikipedia.org/wiki/Euclidean_algorithm#The_algorithm_as_an_enumerated_list
+ if (a < b) {
+ int tmp = a;
+ a = b;
+ b = tmp;
+ }
+
+ while (b != 0) {
+ int r = a % b;
+ a = b;
+ b = r;
+ }
+ return a;
+}
+
+void ex2() {
+ int a, b;
+ cin >> a >> b;
+
+ cout << gcd(a, b) << endl;
+}
+
+// Задача трета:
+// Използвайки задача втора, намерете най - малкото общо кратно.
+
+int lcm(int a, int b) {
+ int numsGCD = gcd(a, b);
+
+ return (a / numsGCD) * (b / numsGCD) * numsGCD;
+}
+
+void ex3() {
+ int a, b;
+ cin >> a >> b;
+
+ cout << lcm(a, b) << endl;
+}
+
+// Задача четвърта:
+// Напишете функция която приема две числа n и m и връща цифрата на m та
+// позиция в числото n.
+// Пример:
+// Вход: 4210 3
+// Изход: 4
+
+int mthDigit(int n, int m) {
+ for(int i = 0; i < m; i++) {
+ n /= 10;
+ }
+ return n % 10;
+}
+
+void ex4() {
+ int n, m;
+ cin >> n >> m;
+
+ cout << mthDigit(n, m) << endl;
+}
+
+// Задача пета:
+// Напишете функция, която приема число и връща 1 ако то има поне две повтарящи
+// се цифри. Функцията връща 0 в противен случай.
+
+int repeatedNums(int a) {
+ for(int i = a % 10; a != 0; i = (a /= 10) % 10) {
+ for (int j = a / 10; j != 0; j /= 10) {
+ if (j % 10 == i) return 1;
+ }
+ }
+ return 0;
+}
+
+void ex5() {
+ int a;
+ cin >> a;
+
+ cout << repeatedNums(a) << endl;
+}
+
+// Задача шеста:
+// Напишете функция която приема цяло число n и извежда на стандартния изход
+// всички наредени двойки (i, j) където 1 ≤ i,j ≤ n.
+
+void printDoubles(int n) {
+ for (int i = 1; i <= n; i++) {
+ for (int j = 1; j <= n; j++)
+ cout << "(" << i << ", " << j << ")" << endl;
+ }
+}
+
+void ex6() {
+ int n;
+ cin >> n;
+
+ printDoubles(n);
+}
+
+// Задача седма:
+// Напишете функция която приема променлива цяло число и чете от стандартния
+// вход стойности за нея, докато не бъде въведена стойност над 100. Променливата да
+// се декларира и изведе в main().
+
+void cinUntilMoreThan100(int *x) {
+ while(*x <= 100)
+ cin >> *x;
+}
+
+void ex7() { // This function acts as our main
+ int x;
+ cinUntilMoreThan100(&x);
+
+ cout << x << endl;
+}
+
+// Задача осма:
+// Да се изведат всички числа в интервала [a..b] за които сумата и произведението от
+// цифрите им е равно.
+
+bool hasEqualSumMult(int a) {
+ int sum = 0, mult = 1;
+ while (a != 0) {
+ int digit = a % 10;
+ sum += digit;
+ mult *= digit;
+ a /= 10;
+ }
+ return sum == mult;
+}
+
+void printEqualDigitSumMult(int a, int b) {
+ for (int i = a; i <= b; i++) {
+ if (hasEqualSumMult(i))
+ cout << i << endl;
+ }
+}
+
+void ex8() {
+ int a, b;
+ cin >> a >> b;
+
+ printEqualDigitSumMult(a, b);
+}
+
+int main() {
+ ex8();
+}
+