From d7c6ef7130288c7a842184e9e280c8a07abfbc9c Mon Sep 17 00:00:00 2001 From: angeld55 Date: Thu, 21 Oct 2021 21:12:50 +0300 Subject: sem 3 --- Sem. 03/README.md | 110 ++++++++++++++++++++++++++ Sem. 03/example 1 - gcd (naive).cpp | 21 +++++ Sem. 03/example 2 - gcd (euclid).cpp | 24 ++++++ Sem. 03/example 3 - reverse and increment.cpp | 20 +++++ Sem. 03/example 4 - prime number.cpp | 0 Sem. 03/example 5 - prime factors.cpp | 0 6 files changed, 175 insertions(+) create mode 100644 Sem. 03/README.md create mode 100644 Sem. 03/example 1 - gcd (naive).cpp create mode 100644 Sem. 03/example 2 - gcd (euclid).cpp create mode 100644 Sem. 03/example 3 - reverse and increment.cpp create mode 100644 Sem. 03/example 4 - prime number.cpp create mode 100644 Sem. 03/example 5 - prime factors.cpp diff --git a/Sem. 03/README.md b/Sem. 03/README.md new file mode 100644 index 0000000..92d836a --- /dev/null +++ b/Sem. 03/README.md @@ -0,0 +1,110 @@ +# Оператори за цикъл + + +### Цикъл while + + +![enter image description here](https://i.ibb.co/7GgKR7k/Untitled-Diagram-1.png) +```c++ +while() +{ + body... +} +``` + +Пример с на **Алгоритъмът на Евклид**: +```c++ + n = 16, k = 24 + <24, 16> 24 % 16 = 8 + <16, 8> 16 % 8 = 0 + <8, 0> + => gcd(16,24) = 8 +``` + + +### Цикъл for +```c++ +for(int i = 0; i <= 300; i+=2) +{ + //body +} +``` + +Структурата на for-циклите включва: +1. инициализационен блок +2. условие на цикъла +3. команди за обновяване на водещите променливи +4. Тяло на цикъла + + +### Цикъл do-while + +_Do-while_ конструкцията е подобна _while_ цикъла, но с тази разлика, че условието е зададено в края т.е. проверката се прави след като се изпълни тялото на цикъла. +```c++ +do +{ + //body +} while(); +``` +**Важно**: При do-while тялото се изпълнява поне веднъж! + +**Задача 1:** Да се напише програма, която приема поток от числа. Числата се събират, докато не срещне числото 0. Тогава трябва да се отпечата акумулираният резултат и да програмта да приключи. + +*Вход: 1 2 3 4 5 6 0, Изход: 21* + +*Вход: 9 9 1 0, Изход: 19* + +*Вход: 5 4 3 0 Изход: 12* + +**Задача 2:** Да се напише програма, която приема 2 числа. Да се отпечатат всички общи делители сортиран наобратно. + +*Вход: 28 21, Изход: 7 3 1* + +*Вход: 60 30 Изход: 30 15 10 5 3 1* + +*Вход: 5 4 3 0 Изход: 12* + +**Задача 3:** Да се напише програма, която приема число и премахва среднaта цифра , ако числото има нечетен брой цифри или премахва средните две цифри, ако числото има четен брой цифри. След това да се отпечата числото увеличено с 1-ца. + + +*Вход: 1234, Изход: 14, 15* + +*Вход: 123 Изход: 13, 14* + +*Вход: 51234 Изход: 5134, 5135* + +*Вход: 5 Изход: 0, 1* + +**Задача 4:** Да се напише програма, която приема 2 числa - a и b и отпечатва всички прости числа в интервала [a, b]. + + +*Вход: 10 20, Изход: 11, 13, 17, 19* + +*Вход: 20 1 Изход: * + +*Вход: 1 20 Изход: 2 3 5 7 11 13 17 19* + +**Задача 5:** Да се напише програма, която приема цяло число и отпечатва дали е степен на 2-ката. + +*Вход: 1 , Изход: true* + +*Вход: 20 Изход: false* + +*Вход: 1024 Изход: true* +**Задача 6:** Да се напише програма, която приема цяло число и го отпечатва като сума на степени 2-ката, без повторение. (всяко число има единствено такова представяне) + +*Вход: 5 , Изход: 2^2 + 2^0* + +*Вход: 20 Изход: 2^4 + 2^2* + +*Вход: 15 Изход: 2^3 + 2^2 + 2^1 +2^0* + +**Задача 7:** Въвеждат се 5 цели числа - a,b,c,d, e. +Разглеждаме полинома f(x) = a * x^4 + b * x^3 + c* x^2 + d * x + e. +Отпечатайте всички цели решения на f(x) >= 0 където x e в интервала [-100, 100] + + +*Вход: -1 4 0 8 1 , Изход: -1 0 2 3* + +*Вход: 0 0 -1 5 -6 Изход: 2 3* + diff --git a/Sem. 03/example 1 - gcd (naive).cpp b/Sem. 03/example 1 - gcd (naive).cpp new file mode 100644 index 0000000..65d82d4 --- /dev/null +++ b/Sem. 03/example 1 - gcd (naive).cpp @@ -0,0 +1,21 @@ +#include + +using namespace std; +int main() +{ + int n, k; + cin >> n >> k; + + int min = n < k ? n : k; + int gcd = 1; + while (min >= 1) + { + if (n % min == 0 && k % min == 0) + { + gcd = min; + } + min--; + } + + cout << gcd << endl; +} \ No newline at end of file diff --git a/Sem. 03/example 2 - gcd (euclid).cpp b/Sem. 03/example 2 - gcd (euclid).cpp new file mode 100644 index 0000000..4f2a97d --- /dev/null +++ b/Sem. 03/example 2 - gcd (euclid).cpp @@ -0,0 +1,24 @@ +#include + +using namespace std; +int main() +{ + int n, k; + cin >> n >> k; + + if (n < k) //swap + { + int temp = k; + n = k; + k = temp; + } + + while (k != 0) + { + int mod = n % k; + n = k; + k = mod; + } + + cout << n << endl; +} \ No newline at end of file diff --git a/Sem. 03/example 3 - reverse and increment.cpp b/Sem. 03/example 3 - reverse and increment.cpp new file mode 100644 index 0000000..e096f0b --- /dev/null +++ b/Sem. 03/example 3 - reverse and increment.cpp @@ -0,0 +1,20 @@ +#include +using namespace std; + +int main() +{ + int n; + cin >> n; + int reversed = 0; + + while (n != 0) + { + int lastDigit = n % 10; + (reversed *= 10) += lastDigit; + + n /= 10; + } + + reversed++; + cout << reversed << endl; +} \ No newline at end of file diff --git a/Sem. 03/example 4 - prime number.cpp b/Sem. 03/example 4 - prime number.cpp new file mode 100644 index 0000000..e69de29 diff --git a/Sem. 03/example 5 - prime factors.cpp b/Sem. 03/example 5 - prime factors.cpp new file mode 100644 index 0000000..e69de29 -- cgit v1.3.1-23-gd82d