Website Summary Files Commits Branches @commit @diff @stats
path: root / Sem. 05
diff options
context:
space:
mode:
Commit7881119e0914b9207568918fcf868eea84ef3d78 (patch)
Author
 Angeld55 <angel_dimitriev@abv.bg>
2020-11-28 01:45:44 +0200
Committer
 Angeld55 <angel_dimitriev@abv.bg>
2020-11-28 01:45:44 +0200
Filesab70701506971ec44b9aab9ba00ad9525b8da0e5 /Sem. 05
Introduction_to_programming_FMI-7881119e0914b9207568918fcf868eea84ef3d78.tar
Introduction_to_programming_FMI-7881119e0914b9207568918fcf868eea84ef3d78.tar.gz
Introduction_to_programming_FMI-7881119e0914b9207568918fcf868eea84ef3d78.zip
Parente5646c51794632f5816c00f4d1e7933ea7dcbbc0 (diff)
sem 8
7 files changed, 217 insertions, 0 deletions
-rw-r--r--Sem. 05/README.md18
-rw-r--r--Sem. 05/Task 1.cpp58
-rw-r--r--Sem. 05/Task 2.cpp39
-rw-r--r--Sem. 05/Task 3.cpp27
-rw-r--r--Sem. 05/Task 4.cpp23
-rw-r--r--Sem. 05/Task 5.cpp33
-rw-r--r--Sem. 05/Task 6.cpp19
diff --git a/Sem. 05/README.md b/Sem. 05/README.md
new file mode 100644
index 0000000..b65599b
--- /dev/null
+++ b/Sem. 05/README.md
@@ -0,0 +1,18 @@
+**Задача 1:** Въвежда �е неотрицателно чи�ло n. Да �е провери дали n е про�то.
+
+**Задача 2:** Въвежда �е неотрицателно чи�ло n. Да �е отпечата неговото разбиване на про�ти множители.
+
+*Вход: 288, Изход: 2^5 * 3^2*
+
+**Задача 3:** Въвежда �е неотрицателно чи�ло n. Пре�метнете n + 1, използвайки �амо цикли и побитови операции.
+
+**Задача 4:** Въвеждат �е неотрицателни чи�ла n и k. Пре�метнете n + k, използвайки �амо цикли и побитови операции.
+
+**Задача 5:** Въвеждат �е неотрицателни чи�ла n и k. Пре�метнете n * k, използвайки �амо цикли и побитови операции.
+
+**Задача 6:** В��ко е�те�твено чи�ло �е пред�тав� по един�твен начин като �ума на **различни**(не �е повтар�т) �тепени на двойката.
+Въвежда �е е�те�твено чи�ло n. Отпечатайте това разбиване на n.
+
+*Вход: 26, Изход: 2^1 + 2^3 + 2^4*
+
+*Вход: 15, Изход: 2^0 + 2^1 + 2^2 + 2^3*
diff --git a/Sem. 05/Task 1.cpp b/Sem. 05/Task 1.cpp
new file mode 100644
index 0000000..20ca708
--- /dev/null
+++ b/Sem. 05/Task 1.cpp
@@ -0,0 +1,58 @@
+#include <iostream>
+using namespace std;
+
+int main()
+{
+ unsigned int n;
+ cin >> n;
+
+ //Ðåøåíèå 1:
+ bool isPrime1 = true;
+ for (int i = 2; i <= n - 1; i++)
+ {
+ if (n % i == 0)
+ isPrime1 = false;
+ }
+ cout << isPrime1 << endl;
+ // Ðåøåíèåòî ðàáîòè. Íî ïðàâè èçëèøíè ïðîâåðêè. Íå å íåîáõîäèìî äà òúðñèì äåëèòåë ÷àê äî n-1.
+ // Àêî íå íàìåðèì äåëèòåë îò êîðåí(n), òî íÿìà äà íàìåðèì è ñëåä êîðåíà.
+
+ //Ðåøåíèå 2:
+ bool isPrime2 = true;
+ for (int i = 2; i <= sqrt(n); i++)
+ {
+ if (n % i == 0)
+ isPrime2 = false;
+ }
+ cout << isPrime2 << endl;
+
+ // Ðåøåíèåòî ïàê ðàáîòè. Íî íà âñÿêà ïðîâåðêà i <= sqrt(n) ïðåñìÿòàìå êîðåí(n), êîåòî å î÷åâèäíî, ÷å å èçëèøíî.
+ // Ìîæå äà ãî ñìåòíåì âåäíúæ è ïîñëå äà ãî ïîëçâàìå.
+
+ //Ðåøåíèå 3:
+ bool isPrime3 = true;
+ double temp = sqrt(n);
+ for (int i = 2; i <= temp; i++)
+ {
+ if (n % i == 0)
+ isPrime3 = false;
+ }
+ cout << isPrime3 << endl;
+
+ // È òîâà ðåøåíèå äàâà âåðåí ðåçóëòàò. Íî îòíîâî å âúçìîæíî äà ïðàâè èçëèøíè ïðîâåðêè.
+ // Ïðè âúâåæäàíå íà ÷èñëîòî 2000000, î÷åâèäíî áè áèëî, ÷å ÷èñëîòî ÍÅ å ïðîñòî, ïîíåæå ñå äåëè íà 2.
+ // Íî íàøåòî ðåøåíèå ùå ïðîäúëæè äà òúðñè äåëèòåëè, äîðè ñëåä êàòî å âèäÿëî, ÷å èìà òàêúâ (â ñëó÷àÿ ÷èñëîòî 2).
+
+ //Ôèíàëíî ðåøåíèå:
+ bool isPrime4 = true;
+ double temp2 = sqrt(n);
+ for (int i = 2; i <= temp2; i++)
+ {
+ if (n % i == 0)
+ {
+ isPrime4 = false;
+ break;
+ }
+ }
+ cout << isPrime4 << endl;
+} \ No newline at end of file
diff --git a/Sem. 05/Task 2.cpp b/Sem. 05/Task 2.cpp
new file mode 100644
index 0000000..0f4408d
--- /dev/null
+++ b/Sem. 05/Task 2.cpp
@@ -0,0 +1,39 @@
+#include <iostream>
+using namespace std;
+
+int main()
+{
+ unsigned int n;
+ cin >> n;
+
+ for (int i = 2; n != 1; i++) //Âñè÷êè âúçìîæíè äåëèòåëè (ìíîæèòåëè) íà n 2,3,4,5,...,
+ {
+ // Ïðîâåðÿâàìå äàëè ÷èñëîòî å ïðîñòî (ïîíåæå íè èíòåðåñóâàò ñàìî ïðîñòè ìíîæèòåëè)
+ bool isPrime = true;
+ double temp = sqrt(i);
+ for (int j = 2; j <= temp; j++)
+ {
+ if (i % j == 0)
+ {
+ isPrime = false;
+ break;
+ }
+ }
+
+ if (!isPrime)
+ continue; //Àêî íå å ïðîñòî - íå íè èíòåðåñóâà òîâà ÷èñëî. Ïðåìèíàâàìå êúì ñëåäâàùîòî.
+
+ // Ùîì ñìå ñòèãíàëè òóê, ñìå óáåäåíè, ÷å i å ïðîñòî ÷èñëî.
+ // Èñêàìå äà âèäèì êîëêî ïúòè i äåëè n.
+
+ int pow = 0;
+ while (n % i == 0)
+ {
+ n /= i;
+ pow++;
+ }
+
+ if (pow != 0) //Àêî ïîíå âåäíúæ ãî å ðàçäåëèëî - çíà÷è ó÷àñòâà â ðàçáèâàíåòî íà ïðîñòè ìíîæèòåëè.
+ cout << i << "^" << pow << " ";
+ }
+} \ No newline at end of file
diff --git a/Sem. 05/Task 3.cpp b/Sem. 05/Task 3.cpp
new file mode 100644
index 0000000..6723ee2
--- /dev/null
+++ b/Sem. 05/Task 3.cpp
@@ -0,0 +1,27 @@
+#include <iostream>
+using namespace std;
+
+
+//Àëãîðèòúìúò çà ñúáèðàíå ñ 1 â äâîè÷åí çàïèñ:
+//Îò äÿñíî íà ëÿâî - ïðàâèì âñè÷êè 1-öè íà 0, äîêàòî íå ñðåùíåì ïúðâàòà 0.
+//Ïúðâàòà 0 ÿ ïðàâèì íà 1.
+
+// 101001111 + 1
+// 101010000
+int main()
+{
+ unsigned int n;
+ cin >> n;
+
+ int mask = 1; //Íàé-äåñíèÿò áèò íà ìàñêàòà å 1-öà. Âñè÷êè äðóãè ñà 0-ëè.
+
+
+ while ((n & mask) > 0) //Ïðîâåðÿâàìå äàëè òåêóùèÿ áèò å 1-öà. (ïðè ïúðâîòî âëèçàíå, ïðîâåðÿâàìå íàé-äåñíèÿ)
+ {
+ n ^= mask; // Ïðàâèì ãî íà 0 ( n = n ^ mask)
+ mask <<= 1; // Îòìåñòâàìå ìàñêàòà, çà äà ïðîâåðèì áèò-à â ëÿâî. (mask = mask << 1)
+ }
+
+ //Îòêðèëè ñìå ïúðâàòà 0. 1-öàòà å íà òî÷íàòà ïîçèöèÿ â ìàñêàòà.
+ n |= mask; // Ïðàâèì íà 1-öa (n = n | mask)
+} \ No newline at end of file
diff --git a/Sem. 05/Task 4.cpp b/Sem. 05/Task 4.cpp
new file mode 100644
index 0000000..6d57f92
--- /dev/null
+++ b/Sem. 05/Task 4.cpp
@@ -0,0 +1,23 @@
+#include <iostream>
+using namespace std;
+
+int main()
+{
+ unsigned int n, k;
+ cin >> n >> k;
+
+
+ //Изпълн�ваме k пъти �ъбирането на n � 1
+ for (int i = 0; i < k; i++)
+ {
+ //Събираме n � 1-ца (кодът от миналата задача)
+ int mask = 1;
+ while ((n & mask) > 0)
+ {
+ n ^= mask;
+ mask <<= 1;
+ }
+ n |= mask;
+ }
+ cout << n << endl;
+}
diff --git a/Sem. 05/Task 5.cpp b/Sem. 05/Task 5.cpp
new file mode 100644
index 0000000..6f3d0dd
--- /dev/null
+++ b/Sem. 05/Task 5.cpp
@@ -0,0 +1,33 @@
+#include <iostream>
+using namespace std;
+
+int main()
+{
+ unsigned int n, k;
+ cin >> n >> k;
+
+ //Ñìÿòàìå n*k. n+n+n...+n (k ïúòè).
+ //�ðèëàãàìå êîäà îò ïðåäèøíàòà çàäà÷à k ïúòè
+
+
+ int result = 0;
+
+ //Събирането � n го правим k пъти. Т.е �тава точно n*k
+ for (int t = 0; t < k; t++)
+ {
+
+ //Събирането � 1 го правим пъти. Т.е �тава +n
+ for (int i = 0; i < n; i++)
+ {
+ //Събираме n � 1.
+ int mask = 1;
+ while ((result & mask) > 0)
+ {
+ result ^= mask;
+ mask <<= 1;
+ }
+ result |= mask;
+ }
+ }
+ cout << result << endl;
+}
diff --git a/Sem. 05/Task 6.cpp b/Sem. 05/Task 6.cpp
new file mode 100644
index 0000000..415cae4
--- /dev/null
+++ b/Sem. 05/Task 6.cpp
@@ -0,0 +1,19 @@
+#include <iostream>
+using namespace std;
+
+int main()
+{
+ unsigned int n;
+ cin >> n;
+
+ int currentPosition = 0;
+ while (n != 0)
+ {
+ if (n % 2 == 1) //Провер�ваме по�ледни� бит дали е 1.
+ {
+ cout << "2^" << currentPosition << " ";
+ }
+ currentPosition++;
+ n >>= 1; // Премахваме по�ледни� бит и предпо�ледни� �тава по�леден (n /=2);
+ }
+}