From d49b98e349a5c51bee50d5b707825e2a06730684 Mon Sep 17 00:00:00 2001 From: Stoycho Kyosev <68247567+stoychoX@users.noreply.github.com> Date: Mon, 25 Oct 2021 15:28:54 +0300 Subject: Add files via upload --- pract_KN/pract. 03/solutions/0.cpp | 38 +++++++++++++++++++++++++++ pract_KN/pract. 03/solutions/1.cpp | 30 +++++++++++++++++++++ pract_KN/pract. 03/solutions/2.cpp | 18 +++++++++++++ pract_KN/pract. 03/solutions/3.cpp | 33 +++++++++++++++++++++++ pract_KN/pract. 03/solutions/4.cpp | 21 +++++++++++++++ pract_KN/pract. 03/solutions/5.cpp | 30 +++++++++++++++++++++ pract_KN/pract. 03/solutions/6.cpp | 32 ++++++++++++++++++++++ pract_KN/pract. 03/solutions/7.cpp | 54 ++++++++++++++++++++++++++++++++++++++ 8 files changed, 256 insertions(+) create mode 100644 pract_KN/pract. 03/solutions/0.cpp create mode 100644 pract_KN/pract. 03/solutions/1.cpp create mode 100644 pract_KN/pract. 03/solutions/2.cpp create mode 100644 pract_KN/pract. 03/solutions/3.cpp create mode 100644 pract_KN/pract. 03/solutions/4.cpp create mode 100644 pract_KN/pract. 03/solutions/5.cpp create mode 100644 pract_KN/pract. 03/solutions/6.cpp create mode 100644 pract_KN/pract. 03/solutions/7.cpp 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 + +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 + +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 + +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 + +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 + +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 + +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 + +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 +#include +#include + +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 + ... + + може да махнете коментарите което ще извежда колко празни пространства и звездички програмата извежда всяка стъпка + */ -- cgit v1.3.1-23-gd82d