diff --git a/kr/1.cpp b/kr/1.cpp new file mode 100644 index 0000000..3996cd2 --- /dev/null +++ b/kr/1.cpp @@ -0,0 +1,34 @@ +// #include +#include + +template +size_t incremental_seq(const T& cnt) { + int max_len = 0; + + auto iter = cnt.begin(); + + int last = *iter; + int now = 1; + while (iter != cnt.end()) { + if (last + 1 == *iter) { + ++now; + } else { + max_len = std::max(max_len, now); + now = 1; + } + + last = *iter; + + ++iter; + } + + return max_len; +} + + +// int main() { +// std::vector v{ 4,1,2,3,4,3,4,5 }; +// std::cout << incremental_seq(v) << std::endl; + +// return 0; +// } \ No newline at end of file diff --git a/kr/2 copy.cpp b/kr/2 copy.cpp new file mode 100644 index 0000000..ce15209 --- /dev/null +++ b/kr/2 copy.cpp @@ -0,0 +1,38 @@ +#include +#include +#include + +template +I separate(I beg, I end, F pred) { + auto tmp = beg; + while (tmp != end) { + std::cout << *tmp << std::endl; + ++tmp; + } + + + auto r = remove_if(beg, end, pred); + + tmp = beg; + while (tmp != end) { + std::cout << *tmp << std::endl; + ++tmp; + } + + std::cout << "meow" << std::endl; + + return r; +} + +int main() { + std::vector v{ 1, -2, 3, -4, 5, -6 }; + auto r = separate(v.begin(), v.end(), [](auto x) { return x >= 0; }); + + // std::cout << std::distance(v.begin(), r) << std::endl << std::endl; + + for (auto& item : v) { + std::cout << item << std::endl; + } + + return 0; +} \ No newline at end of file diff --git a/kr/2.cpp b/kr/2.cpp new file mode 100644 index 0000000..02e728c --- /dev/null +++ b/kr/2.cpp @@ -0,0 +1,29 @@ +#include +// #include +#include + +template +I separate(I beg, I end, F pred) { + std::vector mas_to; + std::copy_if(beg, end, std::back_inserter(mas_to), pred); + + auto r = remove_if(beg, end, pred); + std::copy(mas_to.begin(), mas_to.end(), r); + + return r; +} + +// int main() { +// std::vector v{ 1, -2, 3, -4, 5, -6 }; +// auto r = separate(v.begin(), v.end(), [](auto x) { return x >= 0; }); + +// // std::cout << std::distance(v.begin(), r) << std::endl << std::endl; + +// std::cout << "meow" << std::endl; + +// for (auto& item : v) { +// std::cout << item << std::endl; +// } + +// return 0; +// } \ No newline at end of file diff --git a/kr/3.cpp b/kr/3.cpp new file mode 100644 index 0000000..358a9f8 --- /dev/null +++ b/kr/3.cpp @@ -0,0 +1,115 @@ +#include +#include + +bool is_num(std::string& s) { + auto iter = s.begin(); + while (iter != s.end() && std::isdigit(*iter)) ++iter; + return iter == s.end(); +} + +enum TokenKind +{ + T_EOF, // end of input stream + T_NUMBER, // int64 number + T_ID, // identifier + K_ALG, + K_ARG, + K_RES, + K_NACH, + K_KON, + K_TSEL, + K_VESHCH, + K_SIM, + K_LIT, + K_LOG, + K_TAB, + K_NTS, + K_KTS, + K_DLIN, + K_DANO, + K_NADO, + K_ESLI, + K_TO, + K_INACHE, + K_VSE, + K_POKA, + K_DLYA, + K_OT, + K_DO, + K_ZNACH, + K_I, + K_ILI, + K_NE, + K_DA, + K_NET, + K_PRI, + K_VYBOR, + K_VVOD, + K_VYVOD, + K_UTV, + T_SEMICOLON, + T_COMMA, + T_ASSIGN, + T_LBR, + T_RBR, + T_LSQBR, + T_RSQBR, + T_PLUS, + T_MINUS, + T_MUL, + T_DIV, + T_EQ, + T_NE, + T_GT, + T_GE, + T_LT, + T_LE +}; + +const std::string tokens[] = +{ + "", // EOF + "", // NUMBER + "", // ID + "алг", "арг", "рез", "нач", "кон", "цел", "вещ", "сим", "лит", "лог", + "таб", "нц", "кц", "длин", "дано", "надо", "если", "то", "иначе", "все", + "пока", "для", "от", "до", "знач", "и", "или", "не", "да", "нет", + "при", "выбор", "ввод", "вывод", "утв", + ";", ",", ":=", "(", ")", "[", "]", "+", "-", "*", + "/", "=", "!=", ">", ">=", "<", "<=", +}; + +int main() { + // строим словарь соответствий + std::map mp; + + int tmp = 0; + for (auto& wd : tokens) { + mp[wd] = TokenKind(tmp++); + } + + // std::cout << mp["алг"] << " " << mp[";"]; + + // std::string s1("123"); + // std::string s2("12a3"); + // std::cout << is_num(s1) << is_num(s2); + // return -1; + + std::string word; + + while (std::cin >> word) { + if (mp.find(word) != mp.end()) { + std::cout << mp[word]; + } else if (is_num(word)) { + std::cout << 1 << ':' << word; + } else { + std::cout << 2 << ':' << word; + } + + std::cout << std::endl; + } + + std::cout << 0 << std::endl; + + return 0; +} \ No newline at end of file diff --git a/kr/4.cpp b/kr/4.cpp new file mode 100644 index 0000000..881f4f5 --- /dev/null +++ b/kr/4.cpp @@ -0,0 +1,103 @@ +#include +#include +#include +#include + +enum TokenKind +{ + T_EOF, // end of input stream + T_NUMBER, // int64 number + T_ID, // identifier + K_ALG, + K_ARG, + K_RES, + K_NACH, + K_KON, + K_TSEL, + K_VESHCH, + K_SIM, + K_LIT, + K_LOG, + K_TAB, + K_NTS, + K_KTS, + K_DLIN, + K_DANO, + K_NADO, + K_ESLI, + K_TO, + K_INACHE, + K_VSE, + K_POKA, + K_DLYA, + K_OT, + K_DO, + K_ZNACH, + K_I, + K_ILI, + K_NE, + K_DA, + K_NET, + K_PRI, + K_VYBOR, + K_VVOD, + K_VYVOD, + K_UTV, + T_SEMICOLON, + T_COMMA, + T_ASSIGN, + T_LBR, + T_RBR, + T_LSQBR, + T_RSQBR, + T_PLUS, + T_MINUS, + T_MUL, + T_DIV, + T_EQ, + T_NE, + T_GT, + T_GE, + T_LT, + T_LE +}; + +const std::string tokens[] = +{ + "", // EOF + "", // NUMBER + "", // ID + "алг", "арг", "рез", "нач", "кон", "цел", "вещ", "сим", "лит", "лог", + "таб", "нц", "кц", "длин", "дано", "надо", "если", "то", "иначе", "все", + "пока", "для", "от", "до", "знач", "и", "или", "не", "да", "нет", + "при", "выбор", "ввод", "вывод", "утв", + ";", ",", ":=", "(", ")", "[", "]", "+", "-", "*", + "/", "=", "!=", ">", ">=", "<", "<=", +}; + +int main() { + // строим словарь соответствий + std::map mp; + + int tmp = 0; + for (auto& wd : tokens) { + mp[wd] = TokenKind(tmp++); + } + + std::vector> v; + for (auto& h : mp) { + v.push_back(std::make_pair(h.second, h.first)); + } + + std::sort(v.begin(), v.end()); + + int n = 0; + for (auto& h : v) { + std::cout << h.first << " <=> " << h.second << "\t"; + if (!(n++ % 4)) { + std::cout << std::endl; + } + } + + return 0; +} \ No newline at end of file diff --git a/seminars/7.md b/seminars/7.md index 90f0d9c..75a269c 100644 --- a/seminars/7.md +++ b/seminars/7.md @@ -1,4 +1,4 @@ -# Хуй знает что тут +# Фиг знает что тут ## Задания diff --git a/seminars/7.pdf b/seminars/7.pdf new file mode 100644 index 0000000..473c7a5 Binary files /dev/null and b/seminars/7.pdf differ