1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
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();
}
|