diff options
Added work from todays practice
1 files changed, 172 insertions, 0 deletions
| -rw-r--r-- | Year 1/Programming introduction/Practice-29.11.21.cpp | 172 |
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(); +} |
