Website Summary Files Commits Branches @commit @diff @stats
path: root / pract_KN
diff options
context:
space:
mode:
Commitd49b98e349a5c51bee50d5b707825e2a06730684 (patch)
Author
 Stoycho Kyosev <68247567+stoychoX@users.noreply.github.com>
2021-10-25 15:28:54 +0300
Committer
 GitHub <noreply@github.com>
2021-10-25 15:28:54 +0300
Files7b6ddac365d0f506b509c56e9c55c5eed6cd3478 /pract_KN
Introduction_to_programming_FMI-d49b98e349a5c51bee50d5b707825e2a06730684.tar
Introduction_to_programming_FMI-d49b98e349a5c51bee50d5b707825e2a06730684.tar.gz
Introduction_to_programming_FMI-d49b98e349a5c51bee50d5b707825e2a06730684.zip
Parent5b9017aa843d1bc2b8e83cb89c80ab2667d32470 (diff)
Add files via upload
diff --git a/pract_KN/pract. 03/solutions/0.cpp b/pract_KN/pract. 03/solutions/0.cpp
new file mode 100644
index 0000000..7ba246b
--- /dev/null
+++ b/pract_KN/pract. 03/solutions/0.cpp
@@ -0,0 +1,38 @@
+#include<iostream>
+
+int main() {
+ //Създаваме число и го въвеждаме от стандартния вход.
+ int number = 0;
+ std::cin >> number;
+
+ //Докато това число не стане нула вземаме последната му цифра, изкарваме я на стандартния изход
+ //и го делим на 10:
+ while (number != 0) {
+ std::cout << number % 10;
+ number = number / 10;
+ }
+}
+ /* Пример с вход 123
+ while(123 != 0) {
+ std::cout<<(123 % 10); -> печата се 3
+ number = number / 10; -> number става 12
+ }
+
+ =>
+
+ while(12 != 0){
+ std::cout<<(12%10); -> печата се 2
+ number = number / 10; -> number става 1
+ }
+
+ =>
+
+ while(1 != 0){
+ std::cout<<(1 % 10); -> печата се 1
+ number = number / 10; -> number става 0
+ }
+
+ while(0 != 0) -> цикъла приключва. На стандартния изход сме останали с 321, което решава задачата.
+
+ Ако искаме програмата да работи с вход нула можем да добавим допълнителна проверка.
+ */
diff --git a/pract_KN/pract. 03/solutions/1.cpp b/pract_KN/pract. 03/solutions/1.cpp
new file mode 100644
index 0000000..9c4e3c6
--- /dev/null
+++ b/pract_KN/pract. 03/solutions/1.cpp
@@ -0,0 +1,30 @@
+#include<iostream>
+
+int main() {
+ int number = 0;
+ std::cin >> number;
+
+ int rootOfNumber = sqrt(number);
+ bool prime = true;
+
+ for (int i = 2; i <= rootOfNumber; i++) {
+ if (number % i == 0) {
+ prime = false;
+ break;
+ }
+ }
+
+ if (prime) {
+ std::cout << "The number is prime!";
+ }
+ else {
+ std::cout << "The number is not prime!";
+ }
+}
+ /*
+ Число е просто тогава и само тогава когато е естествено число, по - голямо от единица, и се дели само на себе си и на единица.
+ Лесен начин да проверим дали число е просто е да обходим всички числа от 2 до корена на числото включително и да проверим дали са делители.
+ Ако намерим дори един делител, отбелязваме, че числото вече не е просто (в булевата променлива prime) и приклчваме цикъла.
+
+ Също така изнасяме коренът на числото в отделна променлива. Защо?
+ */
diff --git a/pract_KN/pract. 03/solutions/2.cpp b/pract_KN/pract. 03/solutions/2.cpp
new file mode 100644
index 0000000..5afad2a
--- /dev/null
+++ b/pract_KN/pract. 03/solutions/2.cpp
@@ -0,0 +1,18 @@
+#include<iostream>
+
+int main() {
+ int number = 0;
+ std::cin >> number;
+
+ int count = 0;
+
+ while (number != 0) { //докато числото не стане нула
+ ++count; //Увеличавай брояча с едно
+ number = number / 10; //дели числото на 10, с което намаляваш цифрите му с 1
+ }
+
+ std::cout << count;
+}
+ /*
+ Задачата е подобна на тази с извеждането на числото наобратно само, че този път броим цифрите с променлива count.
+ */
diff --git a/pract_KN/pract. 03/solutions/3.cpp b/pract_KN/pract. 03/solutions/3.cpp
new file mode 100644
index 0000000..052b34a
--- /dev/null
+++ b/pract_KN/pract. 03/solutions/3.cpp
@@ -0,0 +1,33 @@
+#include<iostream>
+
+int main() {
+ int numberOfDigits = 0;
+ std::cin >> numberOfDigits;
+
+ int digit = 0;
+ int result = 0;
+ for (int i = 0; i < numberOfDigits; i++) {
+ int powerOfTen = 1;
+ for (int j = i; j < numberOfDigits - 1; j++) {
+ powerOfTen = powerOfTen * 10;
+ }
+ std::cin >> digit;
+ result = result + digit * powerOfTen;
+ }
+ std::cout << result;
+}
+ /*
+ Имаме вход: 3
+ 1 2 3
+ Реално числото 123 е 100 + 20 + 3, което може да се представи като:
+ 1*10^2 + 2*10^1 + 3*10^0 (десет на нулева е единица)
+
+ for (int j = i; j < numberOfDigits - 1; j++) {
+ powerOfTen = powerOfTen * 10;
+ }
+ --> този цикъл вдига числото powerOfTen на желаната от нас степен на десет. Без проблем бихме могли да използваме и функцията pow(10, _);
+ След това, въвеждаме числото и го умножаваме по намерената вече степен на десятката.
+
+ 12345 = 1*10000 + 2*1000 + 3*100 + 4*10 + 5*1 = 1*10^4 + 2*10^3 + 3*10^2 + 4*10^1 + 5*10^0
+
+ */
diff --git a/pract_KN/pract. 03/solutions/4.cpp b/pract_KN/pract. 03/solutions/4.cpp
new file mode 100644
index 0000000..302468a
--- /dev/null
+++ b/pract_KN/pract. 03/solutions/4.cpp
@@ -0,0 +1,21 @@
+#include<iostream>
+
+int main() {
+ //Искаме да изведем всички числа между 100 и 1000, чиято сума е над 10.
+ //Минаваме между всички числа от 100 до 1000, намираме сумата им и ако тя е по - голяма или равна на 10 ги изкарваме на стандартния изход
+ for (int i = 100; i < 1000; i++) {
+ int sum = 0; //променлива в която пазим сумата
+ int iClone = i; //Променлива в която пазим числото, понеже ако работим със самото число ще объркаме цикъла.
+ //Вътре в цикъла можем да променяме стойносттите на i, но в случая това ще обърка задачата ни.
+
+ //Тук логиката е същата като задачата със сумата.
+ while (iClone != 0) {
+ sum = sum + iClone % 10;
+ iClone = iClone / 10;
+ }
+ //Проверка дали сумата е по голяма от 9, и ако е я идвеждаме на стандартния изход.
+ if (sum > 9) {
+ std::cout << i << std::endl;
+ }
+ }
+}
diff --git a/pract_KN/pract. 03/solutions/5.cpp b/pract_KN/pract. 03/solutions/5.cpp
new file mode 100644
index 0000000..ef81f30
--- /dev/null
+++ b/pract_KN/pract. 03/solutions/5.cpp
@@ -0,0 +1,30 @@
+#include<iostream>
+
+int main() {
+ int number = 0;
+
+ int temp = 0;
+ int tempTwo = 1;
+
+ int result = 0;
+
+ std::cin >> number;
+
+ for (int i = 0; i < number; i++) {
+ result = tempTwo;
+ tempTwo = tempTwo + temp;
+ temp = result;
+ //std::cout << "Local result at step " << i << " is: " << result << std::endl;
+ }
+ std::cout << result;
+
+ /*При числата на фибоначи всяко следващо е сбор на предходните две.
+ Започваме от 0 и 1.
+ Създаваме две променливи които представляват стойностите в 0 и 1.
+
+ 0 1 1 2 3 5 8 13 (х)
+ В случая х = 13 + 8.
+
+ Премахнете коментара в цикъла за да видите подробно как работи той. Пробвайте по - големи входове (примерно 17-19).
+ */
+}
diff --git a/pract_KN/pract. 03/solutions/6.cpp b/pract_KN/pract. 03/solutions/6.cpp
new file mode 100644
index 0000000..3d2aabf
--- /dev/null
+++ b/pract_KN/pract. 03/solutions/6.cpp
@@ -0,0 +1,32 @@
+#include<iostream>
+
+int main() {
+ int number = 0;
+ std::cin >> number;
+
+ for (int i = 1; i <= number; i++) {
+ for (int j = 0; j < i; j++) {
+ std::cout << "*";
+ }
+
+ for (int j = 0; j < number - i; j++) {
+ std::cout << " ";
+ }
+ //std::cout << " --At this step I printed " << i << "* symbols. Now I print new line and keep on printing...";
+ //std::cout << std::endl;
+ }
+ //std::cout << "End of cycle!";
+}
+
+ /*
+ В случая нямаме нищо повече от една последователност от звездички и нови редове. На първия ред е една звездичка, на втория 2 ...
+ на н-тия н.
+ Удобен инструмен в случая ще е цикъла for, с него преминаваме през всички числа от 1 до н.
+ След това от нас се иска да изведем на стандартния изход 1,2...н звездички. Забелязваме, че броят на звездичките
+ съответства с това на коя стъпка сме.
+ Затова започваме втори for цикъл, който за всяко число от нула до (текущата стъпка) принтира точно толкова звездички колкото са ни нужни!
+
+ Махнете коментарите по кода за да видите как се изпълнява стъпка по стъпка. Също така когато имате вложени цикли
+ никога не използвайте едно и също име за променлива. Обърнете внимание как външния цикъл има променлива i а вътрешния j.
+
+ */
diff --git a/pract_KN/pract. 03/solutions/7.cpp b/pract_KN/pract. 03/solutions/7.cpp
new file mode 100644
index 0000000..4ddc889
--- /dev/null
+++ b/pract_KN/pract. 03/solutions/7.cpp
@@ -0,0 +1,54 @@
+#include<iostream>
+#include<thread>
+#include<chrono>
+
+int main() {
+ int number = 0;
+ std::cin >> number;
+
+ if (number % 2 == 0) {
+ ++number;
+ }
+
+ for (int i = 0; i <= number; i += 2) {
+ for (int j = 0; j < i; j += 2) {
+ std::cout << " ";
+ }
+
+ for (int j = 0; j < number - i; j++) {
+ std::cout << "*";
+ }
+ //for (int j = 0; j < i; j++) {
+ //std::cout << " ";
+ //}
+ //std::cout << "--Now I print " << i / 2 << " blank spaces and " << number - i << " * symbols. Now i keep printing...";
+ std::cout << std::endl;
+ }
+
+ for (int i = number - 1; i >= 0; i -= 2) {
+ for (int j = 0; j < i; j += 2) {
+ std::cout << " ";
+ }
+
+ for (int j = 0; j < number - i; j++) {
+ std::cout << "*";
+ }
+ //for (int j = 0; j < i; j++) {
+ //std::cout << " ";
+ //}
+ //std::cout << "--Now I print " << i / 2 << " blank spaces and " << number - i << " * symbols. Now i keep printing...";
+ std::cout << std::endl;
+ }
+}
+ /*
+ Задачата може да се сведе до две по - прости задачи. До принтиране на триъгълник и същия триъгълнк наобратно.
+ Задачата за триъгълникът пък може да се сведе до просто принтиране на правилната последователност от
+ разстояния и звездички.
+ ако входа е 15 имаме (разстояния-звездички)
+ 0-15
+ 1-13
+ 2-11
+ ...
+
+ може да махнете коментарите което ще извежда колко празни пространства и звездички програмата извежда всяка стъпка
+ */