Summary Files Commits Branches @commit @diff @stats
path: root / Year 1 / Programming introduction / Practice-29.11.21.cpp
diff options
context:
space:
mode:
Commit6bc2d9c8ca39a3cfa0d557c0211b9391a0ab5ed4 (patch)
Author
 Syndamia <kamen.d.mladenov@protonmail.com>
2021-11-29 14:10:37 +0200
Committer
 Syndamia <kamen.d.mladenov@protonmail.com>
2021-11-29 14:10:37 +0200
Filesc58c819ede05fa794cd60b4a6c5069011da60c21 /Year 1/Programming introduction/Practice-29.11.21.cpp
uni-projects-6bc2d9c8ca39a3cfa0d557c0211b9391a0ab5ed4.tar
uni-projects-6bc2d9c8ca39a3cfa0d557c0211b9391a0ab5ed4.tar.gz
uni-projects-6bc2d9c8ca39a3cfa0d557c0211b9391a0ab5ed4.zip
Parent3143d152b861c7461420b541b308e994d9417a13 (diff)
Added work from todays practice
1 files changed, 172 insertions, 0 deletions
-rw-r--r--Year 1/Programming introduction/Practice-29.11.21.cpp172
diff --git a/Year 1/Programming introduction/Practice-29.11.21.cpp b/Year 1/Programming introduction/Practice-29.11.21.cpp
new file mode 100644
index 0000000..6d55337
--- /dev/null
+++ b/Year 1/Programming introduction/Practice-29.11.21.cpp
@@ -0,0 +1,172 @@
+#include <iostream>
+#include <cstring>
+
+using namespace std;
+
+/* Exercises:
+ * https://github.com/triffon/ip-2021-22/blob/master/practicum/6/week8/%D1%83%D0%BA%D0%B0%D0%B7%D0%B0%D1%82%D0%B5%D0%BB%D0%B8%20%D0%B8%20%D0%BD%D0%B8%D0%B7%D0%BE%D0%B2%D0%B5.pdf
+ */
+
+// Задача първа:
+// Да се напише функция, която проверява дали низ е симетричен.
+
+bool isSymetrical(char const str[]) {
+ int len = strlen(str);
+
+ for (int i = 0; i <= len / 2; i++) {
+ if (str[i] != str[len - 1 - i])
+ return false;
+ }
+ return true;
+}
+
+void ex1() {
+ char str1[] = "racecar";
+ char str2[] = "normalcar";
+
+ cout << isSymetrical(str1) << " " << isSymetrical(str2) << endl;
+}
+
+// Задача втора:
+// Да се напише програма, която въвежда символен низ с максимална дължина 20
+// символа и извежда низ, в който всяка малка буква е заменена с голяма, а другите
+// символи са непроменени.
+// Пример:
+// Вход: Hello
+// Изход: HELLO
+
+void capitalizeLetters(char str[]) {
+ int len = strlen(str);
+
+ for (int i = 0; i < len; i++) {
+ if (str[i] >= 'a' && str[i] <= 'z')
+ str[i] -= 'a' - 'A';
+ }
+}
+
+void ex2() {
+ const int MAX_STR_LEN = 20;
+
+ char str[MAX_STR_LEN];
+ cin.getline(str, MAX_STR_LEN);
+
+ capitalizeLetters(str);
+
+ cout << str << endl;
+}
+
+// Задача трета:
+// Да се напише функция, която приема изречение под формата на символен низ и
+// извежда всички думи в него.
+
+void printWords(char str[]) {
+ int len = strlen(str);
+
+ for (int i = 0; i < len; i++) {
+ if (str[i] == ' ')
+ cout << endl;
+ else
+ cout << str[i];
+ }
+}
+
+void ex3() {
+ const int MAX_STR_LEN = 100;
+
+ char str[MAX_STR_LEN];
+ cin.getline(str, MAX_STR_LEN);
+
+ printWords(str);
+}
+
+// Задача четвърта:
+// Да се напише функция, която приема изречение под формата на символен низ и
+// изтрива ненужните интервали между думите.
+
+void removeSpaces(char str[]) {
+ int len = strlen(str), moveBack = 0;
+
+ for (int i = 0; i < len; i++) {
+ str[i - moveBack] = str[i];
+ if (str[i] == ' ')
+ moveBack++;
+ }
+ str[len - moveBack] = '\0';
+}
+
+void ex4() {
+ const int MAX_STR_LEN = 100;
+
+ char str[MAX_STR_LEN];
+ cin.getline(str, MAX_STR_LEN);
+
+ removeSpaces(str);
+
+ cout << str << endl;
+}
+
+// Задача пета:
+// Шифърът на Цезар е една от най-простите техники за криптиране. Има параметер
+// offset (цяло число), което е броят на буквите, с които всяка буква в английската
+// абзука е отместена. Например, в шифър с отместване 2, буквата a би станала c.
+// Буквата z би станала b. Шифър с отместване 0 значи, че всички букви остават
+// непроменени. Всички символи, които не са букви остават непроменени.
+// Създайте функции, които извършват криптиране и декриптиране на даден низ
+// използвайки шифъра на Цезар.
+
+const int AMOUNT_OF_LETTERS = 'z' - 'a' + 1;
+
+char rotateLetter(char let, int offset) {
+ char start;
+
+ if (offset >= 0)
+ start = (let <= 'Z') ? 'A' : 'a';
+ else
+ start = (let <= 'Z') ? 'Z' : 'z';
+
+ char letterInd = let - start;
+
+ return start + ((letterInd + offset) % AMOUNT_OF_LETTERS);
+}
+
+void caesarEncrypt(char msg[], int offset) {
+ int len = strlen(msg);
+
+ for (int i = 0; i < len; i++) {
+ msg[i] = rotateLetter(msg[i], offset);
+ }
+}
+
+void caesarDecrypt(char msg[], int offset) {
+ caesarEncrypt(msg, -offset);
+}
+
+void ex5() {
+ const int MAX_STR_LEN = 100;
+
+ int offset = 0;
+ cin >> offset;
+
+ char msg[MAX_STR_LEN];
+ cin.ignore();
+ cin.getline(msg, MAX_STR_LEN);
+
+ caesarEncrypt(msg, offset);
+ cout << "Encrypted: " << msg << endl;
+ caesarDecrypt(msg, offset);
+ cout << "Decrypted: " << msg << endl;
+}
+
+// Задача шеста:
+// Да се създаде функция, която проверява дали даден текстов низ е коректен имейл.
+// Изискванията за коректност са поне една малка буква, поне една голяма буква,
+// поне един символ от следните: $, &, *, !, %. Също така трябва да завършва на
+// @<domain>.com.
+
+void ex6() {
+
+}
+
+int main() {
+ ex5();
+}