Website Summary Files Commits Branches @commit @diff @stats
diff options
context:
space:
mode:
Commitae848f59af8762134c090563ce86bf114b295352 (patch)
Author
 Justsvetoslavov <justsvetoslavov@gmail.com>
2021-11-02 16:23:54 +0200
Committer
 Justsvetoslavov <justsvetoslavov@gmail.com>
2021-11-02 16:23:54 +0200
Filesf9f86dfa04bf9b3afcb39aaf2bd0a50147b5ed37
Introduction_to_programming_FMI-ae848f59af8762134c090563ce86bf114b295352.tar
Introduction_to_programming_FMI-ae848f59af8762134c090563ce86bf114b295352.tar.gz
Introduction_to_programming_FMI-ae848f59af8762134c090563ce86bf114b295352.zip
Parente55e9fb058a046f6f1e08da521660a8d98b1d5db (diff)
Parenta0d9a533e6e4f6b5b06fff9268e9bf6233ef3eef (diff)
Merge branch 'main' of https://github.com/Angeld55/Introduction_to_programming_FMI
9 files changed, 378 insertions, 1 deletions
-rw-r--r--README.md1
-rw-r--r--Sem. 04/README.md117
-rw-r--r--Sem. 04/Solutions/exercise01.cpp11
-rw-r--r--Sem. 04/example01_no_functions.cpp39
-rw-r--r--Sem. 04/example01_with_functions.cpp27
-rw-r--r--Sem. 04/example02-08.cpp141
-rw-r--r--Sem. 04/example09 .cpp21
-rw-r--r--Sem. 04/example10.cpp21
-rw-r--r--Sem. 04_KN/tasks.cpp1
diff --git a/README.md b/README.md
index 1004739..8afebbd 100644
--- a/README.md
+++ b/README.md
@@ -3,6 +3,7 @@
- **Тема 1:** Увод. Примитивни типове данни. Преобразуване между типове. Оператори.
- **Тема 2:** Условни конструкции - if, switch и тернарен оператор.
- **Тема 3:** Цикли. Оператори break и continue.
+ - **Тема 4:** Функции. Оператор return.
### Практикум:
diff --git a/Sem. 04/README.md b/Sem. 04/README.md
new file mode 100644
index 0000000..d6f9af9
--- /dev/null
+++ b/Sem. 04/README.md
@@ -0,0 +1,117 @@
+.
+# Функции
+
+![enter image description here](https://i.ibb.co/PCGYQ71/func.png)
+
+В контекста на програмирането, функция се нарича именувана група от инструкции, които изпълняват дадена функционалност.
+
+### Синтаксис
+```c++
+<тип на връщане> <идентификатор> (параметър1, параметър ...)
+{
+ //тяло
+}
+```
+Всеки параметър се състои от **тип** и **идентификатор**.
+
+Пример:
+```c++
+int max(int n, int k)
+{
+ return n > k ? n : k;
+}
+```
+Оператор **return**:
+
+ - Прекратява изпълнението на функцията
+ - Замества извикването и с резултата (връща резултата)
+
+Операторът може да се използва и при функции, които не връщат нищо (void функции). Тогава return единствено прекратява функцията.
+
+### Параметри по копие
+**Важно**: Функциите, написани по този начин, приемат своите параметри **по копие**. (Функции, които приемат параметри по референция (не по копие) ще учим по-натам).
+```c++
+void f(int n)
+{
+ n++;
+}
+int main()
+{
+ int n = 4;
+ f(n);
+ cout << n << endl; //4
+}
+```
+
+
+### Примери:
+
+**Задача 1:** Въвежда се неотрицателно число n. Да се отпечатат всички двойки прости числа, които са във вида 6k-1 и 6k+1.
+
+-решена без функции и решена с функции.
+
+**Задача 2:** Напишете функция, която приема неотрицателно число n и връща числото обърнато
+
+*Вход: 288, Изход: 882*
+
+**Задача 3:** Напишете функция, която приема неотрицателно число и връща дали числото е палиндром.
+
+*Вход: 2882 Изход: true*
+
+**Задача 4:** Напишете функция, която приема неотрицателни числа n и k и връща дали k е суфикс на n.
+
+*Вход: 288, 88, Изход: true*
+
+**Задача 5:** Напишете функция, която приема неотрицателни числа n и k и връща дали k е префикс на n.
+
+*Вход: 288, 28, Изход: true*
+
+**Задача 6:** Напишете функция, която приема неотрицателни числа n и k и връща дали k се съдържа в n.
+
+*Вход: 2831, 83, Изход: true*
+
+**Задача 7:** Напишете функция, която приема неотрицателно число и връща дали цифрите му са сортирани (във възходящ или в низходящ ред).
+
+*Вход: 122239, Изход: true*
+
+
+**Задача 8:** Напишете функция, която приема неотрицателно число и връща дали цифрите му са еднакви.
+
+*Вход: 111111, Изход: true*
+
+**Задача 9:** Напишете функция, която приема неотрицателно числа n и k връща n^k
+
+*Вход: 3 4, Изход: 81*
+
+**Задача 10:** Напишете функция, която приема неотрицателно числа n и k връща log_k(n) (закръглено надолу)
+
+*Вход: 90 3 Изход: 4*
+
+<h3>Задачи:</h3>
+
+**Задача 1:** Напишете функция, която приема цяло число и връща модула му.
+
+*Вход: 4, Изход: 4*
+
+*Вход: -4, Изход: 4*
+
+*Вход: 5 4 3 0 Изход: 12*
+
+**Задача 2:** Напишете функция, която приема 4 цели числа - координати на 2 точки. Функцията да връща разстоянието между тези точки.
+
+*Вход: 1 1 4 3, Изход: 6.403*
+
+**Задача 3:** Напишете функция, която приема 6 целочислени координати (3 точки) и връща обиколката на триъгълника по тези точки.
+
+*Вход: 1 1 4 7 0 10, Изход: 20.764*
+
+**Задача 4:** Да се напише функция, която приема три естествени числа a и b и k отпечатва всички числа в интервата [a...b], които имат точно k различни прости делители.
+*Вход: 19 32 3, Изход: 20 30*
+*Вход: 19 32 1, Изход: 19 23 29 31*
+
+**Задача 5:** Да се напише функция, която приема естествено число n и отпечатва всички двойки <a,b>, такива че a и b са прости и a + b = n.
+
+**Задача 6:** Да се напише функция, която приема две естествени числа a и b и отпечава всички числа k и интервала [a,b], такива че k = x^y (за някои ест. числа x и y)
+*Вход: 15 30, Изход: 16 25 27* , защото (4^2, 5^2, 3^3)
+
+
diff --git a/Sem. 04/Solutions/exercise01.cpp b/Sem. 04/Solutions/exercise01.cpp
new file mode 100644
index 0000000..edc9c9c
--- /dev/null
+++ b/Sem. 04/Solutions/exercise01.cpp
@@ -0,0 +1,11 @@
+#include <iostream>
+using namespace std;
+
+int mod(int n)
+{
+ return n < 0 ? -n : n;
+}
+int main()
+{
+ cout << mod(-4) << endl;
+}
diff --git a/Sem. 04/example01_no_functions.cpp b/Sem. 04/example01_no_functions.cpp
new file mode 100644
index 0000000..06e6629
--- /dev/null
+++ b/Sem. 04/example01_no_functions.cpp
@@ -0,0 +1,39 @@
+#include <iostream>
+using namespace std;
+
+
+int main()
+{
+ int n;
+ cin >> n;
+
+ for (int i = 6; i < n; i += 6)
+ {
+ int firstToCheck = i - 1;
+ int secondToCheck = i + 1;
+
+ //prime check
+ bool isFirstPrime = true;
+ double temp = sqrt(firstToCheck);
+ for (int j = 2; j <= temp; j++)
+ {
+ if (firstToCheck % j == 0)
+ isFirstPrime = false;
+ }
+
+ if (!isFirstPrime)
+ continue;
+
+ //prime check
+ bool isSecondPrime = true;
+ double temp2 = sqrt(secondToCheck);
+ for (int j = 2; j <= temp2; j++)
+ {
+ if (secondToCheck % j == 0)
+ isSecondPrime = false;
+ }
+
+ if (isSecondPrime)
+ cout << firstToCheck << " " << secondToCheck << endl;
+ }
+} \ No newline at end of file
diff --git a/Sem. 04/example01_with_functions.cpp b/Sem. 04/example01_with_functions.cpp
new file mode 100644
index 0000000..f33b6b9
--- /dev/null
+++ b/Sem. 04/example01_with_functions.cpp
@@ -0,0 +1,27 @@
+#include <iostream>
+using namespace std;
+
+bool isPrime(int n)
+{
+ double temp = sqrt(n);
+
+ for (int i = 2; i <= temp; i++)
+ {
+ if (n % i == 0)
+ return false;
+ }
+
+ return true;
+}
+
+int main()
+{
+ int n;
+ cin >> n;
+
+ for (int i = 6; i < n; i += 6)
+ {
+ if (isPrime(i - 1) && isPrime(i + 1))
+ cout << i - 1 << " " << i + 1 << endl;
+ }
+} \ No newline at end of file
diff --git a/Sem. 04/example02-08.cpp b/Sem. 04/example02-08.cpp
new file mode 100644
index 0000000..002a8ab
--- /dev/null
+++ b/Sem. 04/example02-08.cpp
@@ -0,0 +1,141 @@
+#include <iostream>
+using namespace std;
+
+
+//задача 2:
+// Напишете функция, която приема цяло число и връща обърнатото му.
+// 1234 - 4321
+
+int reverse(unsigned int n)
+{
+ unsigned int result = 0;
+
+ while (n != 0)
+ {
+ int lastDigit = n % 10;
+ (result *= 10) += lastDigit;
+ n /= 10;
+ }
+
+ return result;
+}
+
+//задача 3: Напишете функция, която приема цяло число и връща дали е палиндром
+
+//12321 -> true
+//123 -> false;
+
+bool isPalindrome(unsigned int n)
+{
+ return n == reverse(n);
+}
+//задача 4: Напишете функция, която приема две цели числа - n и k.
+//Функцията да връща дали k е суфикс на n.
+// n = 1234 k = 34 true
+// n = 1234 k = 234 true
+// n = 1234 k = 1234 true
+// n = 1234 k = 23 false
+
+bool isSuffix(unsigned int n, unsigned int k)
+{
+ if (k == 0 && (n % 10 != 0))
+ return false;
+
+ while (k != 0)
+ {
+ int lastDigitOfN = n % 10;
+ int lastDigitOfK = k % 10;
+
+ if (lastDigitOfN != lastDigitOfK)
+ return false;
+
+ n /= 10;
+ k /= 10;
+ }
+
+ return true;
+}
+
+
+// задача 5: Напишете функция, която приема две цели числа -n и k.
+// Функцията да връща дали k е префикс на n.
+
+// n = 1234, k = 12 true
+// n = 1234, k = 23 false;
+
+// u е префикс на w <-> u ^rev е суфикс на w^rev
+bool isPrefix(unsigned int n, unsigned int k)
+{
+ return isSuffix(reverse(n), reverse(k));
+}
+
+// задача 6: Напишете функция, която приема две числа - n,k.
+// Функцията връща дали k е инфикс на n.
+
+bool isInfix(unsigned int n, unsigned int k)
+{
+ if (n == 0 && k == 0)
+ return true;
+
+ while (n > 0)
+ {
+ if (isSuffix(n, k))
+ return true;
+ n /= 10;
+ }
+ return false;
+}
+
+
+//задача.
+//Да се напише функция, която приема цяло число и връща дали цифрите му са сортирани.
+
+// 1234 true
+// 12379 true
+// 1231 false
+// 4321 true
+// 4325 false
+// 1111 true
+
+bool areDigitsSortedAscending(unsigned int n)
+{
+ while (n >= 10)
+ {
+ int lastDigit = n % 10;
+ int prevLastDigit = (n / 10) % 10;
+
+ if (prevLastDigit > lastDigit)
+ return false;
+
+ n /= 10;
+ }
+
+ return true;
+}
+
+bool areDigitsSortedDescending(int n)
+{
+ return areDigitsSortedAscending(reverse(n));
+}
+
+bool areDigitsSorted(int n)
+{
+ return areDigitsSortedDescending(n) || areDigitsSortedAscending(n);
+}
+
+//задача.
+// Напишете функция, която приема цяло число и връща дали се съдържа само от еднакви цифри.
+
+//Вход: 11111 Изход:true
+//Вход: 123 Изход: false
+
+bool containOnlyOneDigit(int n)
+{
+ return areDigitsSortedDescending(n) && areDigitsSortedAscending(n);
+}
+
+
+int main()
+{
+ cout << containOnlyOneDigit(444) << endl;
+} \ No newline at end of file
diff --git a/Sem. 04/example09 .cpp b/Sem. 04/example09 .cpp
new file mode 100644
index 0000000..f7f072b
--- /dev/null
+++ b/Sem. 04/example09 .cpp
@@ -0,0 +1,21 @@
+#include <iostream>
+using namespace std;
+
+unsigned int log(unsigned int n, unsigned int k)
+{
+ int count = 0;
+
+ while (n >= k)
+ {
+ n /= k;
+ count++;
+ }
+
+ return count;
+}
+
+
+int main()
+{
+ cout << log(4, 10) << endl;
+} \ No newline at end of file
diff --git a/Sem. 04/example10.cpp b/Sem. 04/example10.cpp
new file mode 100644
index 0000000..f7f072b
--- /dev/null
+++ b/Sem. 04/example10.cpp
@@ -0,0 +1,21 @@
+#include <iostream>
+using namespace std;
+
+unsigned int log(unsigned int n, unsigned int k)
+{
+ int count = 0;
+
+ while (n >= k)
+ {
+ n /= k;
+ count++;
+ }
+
+ return count;
+}
+
+
+int main()
+{
+ cout << log(4, 10) << endl;
+} \ No newline at end of file
diff --git a/Sem. 04_KN/tasks.cpp b/Sem. 04_KN/tasks.cpp
deleted file mode 100644
index 9c558e3..0000000
--- a/Sem. 04_KN/tasks.cpp
+++ /dev/null
@@ -1 +0,0 @@
-.