diff options
sem 3
6 files changed, 175 insertions, 0 deletions
| -rw-r--r-- | Sem. 03/README.md | 110 | ||||
| -rw-r--r-- | Sem. 03/example 1 - gcd (naive).cpp | 21 | ||||
| -rw-r--r-- | Sem. 03/example 2 - gcd (euclid).cpp | 24 | ||||
| -rw-r--r-- | Sem. 03/example 3 - reverse and increment.cpp | 20 | ||||
| -rw-r--r-- | Sem. 03/example 4 - prime number.cpp | 0 | ||||
| -rw-r--r-- | Sem. 03/example 5 - prime factors.cpp | 0 |
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 + + + +```c++ +while(<condition>) +{ + 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(<condition>); +``` +**Важно**: При 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 <iostream> + +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 <iostream> + +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 <iostream> +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 --- /dev/null +++ b/Sem. 03/example 4 - prime number.cpp 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 --- /dev/null +++ b/Sem. 03/example 5 - prime factors.cpp |
