aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSyndamia <kamen@syndamia.com>2023-11-02 15:00:22 +0200
committerSyndamia <kamen@syndamia.com>2023-11-02 15:00:22 +0200
commitd09b1a288ae51fe2e141676948d225296f2f7d72 (patch)
tree7e3666545c04c4602be5374859001bf03e98f4b3
parentfbbe586d25b1ebaf66fe2e92e1986bb5debf961d (diff)
downloadupp-2023-solutions-d09b1a288ae51fe2e141676948d225296f2f7d72.tar
upp-2023-solutions-d09b1a288ae51fe2e141676948d225296f2f7d72.tar.gz
upp-2023-solutions-d09b1a288ae51fe2e141676948d225296f2f7d72.zip
[w3] Added solutions
-rw-r--r--week03/exercise01.cpp11
-rw-r--r--week03/exercise02-bonus.cpp15
-rw-r--r--week03/exercise02.cpp12
-rw-r--r--week03/exercise03.cpp19
-rw-r--r--week03/exercise04.cpp13
-rw-r--r--week03/exercise05.cpp24
-rw-r--r--week03/exercise06.cpp23
-rw-r--r--week03/exercise07.cpp15
-rw-r--r--week03/exercise08.cpp43
-rw-r--r--week03/exercise09.cpp13
-rw-r--r--week03/exercise10.cpp32
-rw-r--r--week03/exercise11.cpp29
12 files changed, 249 insertions, 0 deletions
diff --git a/week03/exercise01.cpp b/week03/exercise01.cpp
new file mode 100644
index 0000000..1bfe5f5
--- /dev/null
+++ b/week03/exercise01.cpp
@@ -0,0 +1,11 @@
+#include <iostream>
+
+int main() {
+ unsigned int x, n;
+ std::cin >> x >> n;
+ unsigned int xToPowerOfN = 1;
+ for (int i = 0; i < n; i++) {
+ xToPowerOfN *= x;
+ }
+ std::cout << xToPowerOfN << std::endl;
+}
diff --git a/week03/exercise02-bonus.cpp b/week03/exercise02-bonus.cpp
new file mode 100644
index 0000000..6b553ad
--- /dev/null
+++ b/week03/exercise02-bonus.cpp
@@ -0,0 +1,15 @@
+#include <iostream>
+
+int main() {
+ int x;
+ std::cin >> x;
+ double step = 10.0 / x;
+ double length = step;
+ while (length <= 10) {
+ for (int col = 0; col < length; col++) {
+ std::cout << '#';
+ }
+ std::cout << std::endl;
+ length += step;
+ }
+}
diff --git a/week03/exercise02.cpp b/week03/exercise02.cpp
new file mode 100644
index 0000000..dd301e8
--- /dev/null
+++ b/week03/exercise02.cpp
@@ -0,0 +1,12 @@
+#include <iostream>
+
+int main() {
+ int x;
+ std::cin >> x;
+ for (int row = 0; row < x; row++) {
+ for (int col = 0; col <= row; col++) {
+ std::cout << '#';
+ }
+ std::cout << std::endl;
+ }
+}
diff --git a/week03/exercise03.cpp b/week03/exercise03.cpp
new file mode 100644
index 0000000..bc7879b
--- /dev/null
+++ b/week03/exercise03.cpp
@@ -0,0 +1,19 @@
+#include <iostream>
+
+int main() {
+ char input;
+ std::cin >> input;
+ while (input != '^') {
+ if (('A' <= input && input <= 'Z') ||
+ ('a' <= input && input <= 'z')) {
+ std::cout << "letter" << std::endl;
+ }
+ else if ('0' <= input && input <= '9') {
+ std::cout << "digit" << std::endl;
+ }
+ else {
+ std::cout << "other" << std::endl;
+ }
+ std::cin >> input;
+ }
+}
diff --git a/week03/exercise04.cpp b/week03/exercise04.cpp
new file mode 100644
index 0000000..fb37716
--- /dev/null
+++ b/week03/exercise04.cpp
@@ -0,0 +1,13 @@
+#include <iostream>
+
+int main() {
+ int num = 65536;
+ int input;
+ for (int i = 0; i < 10; i++) {
+ std::cin >> input;
+ if (input == 0) break;
+
+ num /= input;
+ }
+ std::cout << num << std::endl;
+}
diff --git a/week03/exercise05.cpp b/week03/exercise05.cpp
new file mode 100644
index 0000000..0facfdb
--- /dev/null
+++ b/week03/exercise05.cpp
@@ -0,0 +1,24 @@
+#include <iostream>
+
+int main() {
+ int countLower = 0, countUpper = 0, countDigit = 0;
+ char input;
+ std::cin >> input;
+ while (input != '$') {
+ if (input == '@') {
+ return 0;
+ }
+ // Грешка ли е, че тук има "if" вместо "else if"?
+ if ('a' <= input && input <= 'z') {
+ countLower++;
+ }
+ else if ('A' <= input && input <= 'Z') {
+ countUpper++;
+ }
+ else if ('0' <= input && input <= '9') {
+ countDigit++;
+ }
+ std::cin >> input;
+ }
+ std::cout << "Lowercase: " << countLower << " Uppercase: " << countUpper << " Digit: " << countDigit << std::endl;
+}
diff --git a/week03/exercise06.cpp b/week03/exercise06.cpp
new file mode 100644
index 0000000..d257e29
--- /dev/null
+++ b/week03/exercise06.cpp
@@ -0,0 +1,23 @@
+#include <iostream>
+
+int main() {
+ int num = 15;
+ char command = '\0';
+ while (true) {
+ std::cin >> command;
+ switch (command) {
+ case 's': std::cin >> num; break;
+ case 'l': num <<= 1; break;
+ case 'r': num >>= 1; break;
+ case 'q': num *= num; break;
+ case 'c': num *= num * num; break;
+ case 'm': num -= 351; break;
+ case 'p': num += 94; break;
+ case '&': return 0;
+ default:
+ std::cout << "Invalid command!" << std::endl;
+ continue;
+ }
+ std::cout << num << std::endl;
+ }
+}
diff --git a/week03/exercise07.cpp b/week03/exercise07.cpp
new file mode 100644
index 0000000..00fd65b
--- /dev/null
+++ b/week03/exercise07.cpp
@@ -0,0 +1,15 @@
+#include <iostream>
+
+int main() {
+ double num = 3.14159;
+ do {
+ if (num > 0) {
+ std::cout << "Positive" << std::endl;
+ }
+ else {
+ std::cout << "Negative" << std::endl;
+ }
+
+ std::cin >> num;
+ } while (num != 0);
+}
diff --git a/week03/exercise08.cpp b/week03/exercise08.cpp
new file mode 100644
index 0000000..736ed31
--- /dev/null
+++ b/week03/exercise08.cpp
@@ -0,0 +1,43 @@
+#include <iostream>
+
+int main() {
+ unsigned int time = 0;
+ char input;
+ unsigned int mode = 0;
+ bool twelveHour = false;
+ while (true) {
+ std::cin >> input;
+ switch (input) {
+ case 'c':
+ if (mode == 0) {
+ unsigned newHour;
+ std::cin >> newHour;
+ time = 60 * newHour + time % 60;
+ }
+ else if (mode == 1) {
+ unsigned newMinutes;
+ std::cin >> newMinutes;
+ time = (time - time % 60) + newMinutes;
+ }
+ mode = (mode + 1) % 3;
+ twelveHour = !twelveHour;
+ case 'f':
+ twelveHour = !twelveHour;
+ if (mode == 0) {
+ time -= 1;
+ }
+ case 't':
+ if (mode == 0) {
+ time = (time + 1) % 1440; // 60 minutes * 24 hours
+ }
+ if (twelveHour) {
+ bool pm = (time / 60) > 12;
+ std::cout << (time / 60) - 12 * pm << ":" << (time % 60) << " " << (pm ? "PM" : "AM") << std::endl;
+ }
+ else {
+ std::cout << (time / 60) << ":" << (time % 60) << std::endl;
+ }
+ break;
+ }
+ }
+}
diff --git a/week03/exercise09.cpp b/week03/exercise09.cpp
new file mode 100644
index 0000000..a4a5008
--- /dev/null
+++ b/week03/exercise09.cpp
@@ -0,0 +1,13 @@
+#include <iostream>
+#include <stdlib.h>
+#include <ctime>
+
+int main() {
+ srand(time(NULL));
+ for (int row = 0; row < 20; row++) {
+ for (int col = 0; col < 20; col++) {
+ std::cout << ((rand() % 2) ? '/' : '\\');
+ }
+ std::cout << std::endl;
+ }
+}
diff --git a/week03/exercise10.cpp b/week03/exercise10.cpp
new file mode 100644
index 0000000..0b7ef87
--- /dev/null
+++ b/week03/exercise10.cpp
@@ -0,0 +1,32 @@
+#include <iostream>
+
+int main() {
+ int current = 0, memory = 0, temp = 0;
+ std::cin >> current;
+ char buff;
+ bool printMem = false;
+ while (true) {
+ std::cin >> buff;
+ switch (buff) {
+ case 'a': memory += current; printMem = true; break;
+ case 's': memory -= current; printMem = true; break;
+ case 'm': memory = 0; printMem = true; break;
+
+ case 'c': current = 0; std::cout << current << std::endl; continue;
+ }
+ if (printMem) {
+ std::cout << memory << std::endl;
+ printMem = false;
+ continue;
+ }
+
+ std::cin >> temp;
+ switch (buff) {
+ case '+': current += temp; break;
+ case '-': current -= temp; break;
+ case '*': current *= temp; break;
+ case '/': current /= temp; break;
+ }
+ std::cout << current << std::endl;
+ }
+}
diff --git a/week03/exercise11.cpp b/week03/exercise11.cpp
new file mode 100644
index 0000000..c4bf464
--- /dev/null
+++ b/week03/exercise11.cpp
@@ -0,0 +1,29 @@
+#include <iostream>
+#include <cassert>
+
+int parseSensor(int s) { return ((((s=(s>>1)&(~0xF617A100))<0x54)?s|0xF01:s&0xCBFF)>>2)-21; }
+
+int main() {
+ int rawValue;
+ std::cin >> rawValue;
+
+ int temp = parseSensor(rawValue);
+ assert(-20 <= temp);
+ assert(temp <= 40);
+
+ if (30 <= temp && temp <= 40) {
+ std::cout << "Hot" << std::endl;
+ }
+ else if (20 <= temp && temp <= 29) {
+ std::cout << "Warm" << std::endl;
+ }
+ else if (11 <= temp && temp <= 19) {
+ std::cout << "Temperate" << std::endl;
+ }
+ else if (0 <= temp && temp <= 10) {
+ std::cout << "Cold" << std::endl;
+ }
+ else if (-20 <= temp && temp <= -1) {
+ std::cout << "Freezing" << std::endl;
+ }
+}