From 1388eb2ead9f0bb5909b76f11bbc4627520fd51b Mon Sep 17 00:00:00 2001 From: Den Date: Fri, 22 Oct 2021 17:40:39 +0300 Subject: [PATCH 1/3] add new double sort v2 --- Semester_1/Lab_6/snippets.c | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/Semester_1/Lab_6/snippets.c b/Semester_1/Lab_6/snippets.c index 496694e..52ce8c0 100644 --- a/Semester_1/Lab_6/snippets.c +++ b/Semester_1/Lab_6/snippets.c @@ -376,4 +376,18 @@ void double_sort(list *list, int sort_1, int sort_2, int order) { if (swap < 0) swap_nodes(node1, node2); } } +} + +// новая версия двойной сортировки +void double_sort_2(list *list, int sort_1, int sort_2, int order) { + for (int i = 0; i < list -> size; i++) { + for (int j = i+1; j < list -> size; j++) { + struct node *node1 = get_node(list, i); + struct node *node2 = get_node(list, j); + int swap = need_swap(node1 -> word, node2 -> word, sort_1, order); + if ((sort_1 == ALPHABET && swap >= 0) || (sort_1 != ALPHABET && !swap)) + swap = need_swap(node1 -> word, node2 -> word, sort_2, order); + if (swap < 0) swap_nodes(node1, node2); + } + } } \ No newline at end of file From c6df0cf1d5bdee9c297717982d351635bf928064 Mon Sep 17 00:00:00 2001 From: Den Date: Sat, 23 Oct 2021 04:22:27 +0300 Subject: [PATCH 2/3] new words added to lab 5 + additional task passed! --- Semester_1/Lab_5/Lab_5.c | 96 ++++++++++++++++-------------------- Semester_1/Lab_5/Lab_5_dop.c | 17 ++++++- 2 files changed, 58 insertions(+), 55 deletions(-) diff --git a/Semester_1/Lab_5/Lab_5.c b/Semester_1/Lab_5/Lab_5.c index 18bc756..b4d894a 100644 --- a/Semester_1/Lab_5/Lab_5.c +++ b/Semester_1/Lab_5/Lab_5.c @@ -1,75 +1,65 @@ -// . -// ('.' - , ',' - , '?' - , ':' - ) - -// If cyrillic symbols are broken: -// ctrl + shift + P -> Change file rncoding -> Reopen with encoding -> Windows 1251 - -#define USE_RUS 0 // 1 - yes +// Ввести строку. Заменить знаки препинания на сокращения +// ('.' - тчк, ',' - зпт, '?' - впр, ':' - дтч) #include #include -#if USE_RUS == 1 -#include -#endif #define length(x) (sizeof(x) / sizeof((x)[0])) int len = 0; -char *readstr() -{ +char *readstr() { len = 0; - int capacity = 1; // - char *s = (char *)malloc(sizeof(char)); // + int capacity = 1; + char *s = (char *)malloc(sizeof(char)); char c = getchar(); - while (c != '\n') - { + while (c != '\n') { s[(len)++] = c; - if (len >= capacity) - { // , - capacity *= 2; // - s = (char *)realloc(s, capacity * sizeof(char)); // + if (len >= capacity) { + capacity *= 2; + s = (char *)realloc(s, capacity * sizeof(char)); } c = getchar(); } s[len] = '\0'; - return s; // + return s; } -void print_char(char ch) -{ - switch (ch) - { - case '.': - printf(USE_RUS == 1 ? "" : "DOT"); - break; - case ',': - printf(USE_RUS == 1 ? "" : "COMMA"); - break; - case '!': - printf(USE_RUS == 1 ? "" : "EXCLM"); - break; - case '?': - printf(USE_RUS == 1 ? "" : "QSTN"); - break; - case ':': - printf(USE_RUS == 1 ? "" : "COLON"); - break; - default: - printf("%c", ch); - break; +void print_char(char ch) { + switch (ch) { + // это было написано в 4:20 ночи + // оптимизировать это говно + case '!': printf("XCLM"); break; + case '"': printf("QTES"); break; + case '#': printf("HASH"); break; + case '$': printf("DLLR"); break; + case '%': printf("PRCNT"); break; + case '&': printf("AMPSND"); break; + case '(': printf("LBRCK"); break; + case ')': printf("RBRCK"); break; + case '*': printf("ASTRK"); break; + case '+': printf("PLUS"); break; + case '-': printf("MINUS"); break; + case '/': printf("SLSH"); break; + case '.': printf("DOT"); break; + case ',': printf("COMMA"); break; + case ':': printf("COLON"); break; + case ';': printf("SCLN"); break; + case '@': printf("ATSMB"); break; + case '?': printf("QSTN"); break; + case '<': printf("LARR"); break; + case '=': printf("EQUL"); break; + case '>': printf("RARR"); break; + case '~': printf("TILDE"); break; + case '|': printf("PIPE"); break; + case '_': printf("UNDSC"); break; + default: printf("%c", ch); break; } } -void main() -{ -#if USE_RUS == 1 - setlocale(LC_ALL, "Russian"); - system("chcp 1251"); -#endif - - printf(USE_RUS == 1 ? " :\n" : "Input string:\n"); - char *str = readstr(); // - printf(USE_RUS == 1 ? "\n :\n" : "\nString after replace:\n"); +void main() { + printf("Input string:\n"); + char *str = readstr(); + printf("\nString after replace:\n"); for (int i = 0; i < len; i++) print_char(str[i]); free(str); diff --git a/Semester_1/Lab_5/Lab_5_dop.c b/Semester_1/Lab_5/Lab_5_dop.c index 422fec6..b024dc4 100644 --- a/Semester_1/Lab_5/Lab_5_dop.c +++ b/Semester_1/Lab_5/Lab_5_dop.c @@ -1,5 +1,6 @@ // Ввести строку. Заменить знаки препинания на сокращения // ('.' - тчк, ',' - зпт, '?' - впр, ':' - дтч) + // доп: обратная задача, заменить сокращения на символы // * учитывать любой регистр @@ -7,8 +8,20 @@ #include #define W_COUNT 5 -const char words[W_COUNT][6] = {"DOT", "COMMA", "EXCLM", "QSTN", "COLON"}; -const char punct[W_COUNT] = {'.', ',', '!', '?', ':'}; + +const char words[W_COUNT][7] = { + "XCLM", "QTES", "HASH", "DLLR", "PRCNT", "AMPSND", + "LBRCK", "RBRCK", "ASTRK", "PLUS", "MINUS", "SLSH", + "DOT", "COMMA", "COLON", "SCLN", "ATSMB", "QSTN", + "LARR", "EQUL", "RARR", "TILDE", "PIPE", "UNDSC" +}; + +const char punct[W_COUNT] = { + '!', '"', '#', '$', '%', '&', + '(', ')', '*', '+', "-", "/", + '.', ',', ':', ';', '@', '?', + '<', '=', '>', '~', '|', '_' +}; char lower(int c) { return c > 64 && c < 91 ? c + 32 : c; From 1120b099fca0455a8536207c2e96dd64c379a813 Mon Sep 17 00:00:00 2001 From: Den Date: Sat, 23 Oct 2021 04:38:00 +0300 Subject: [PATCH 3/3] lab 5 v2 - optimized --- Semester_1/Lab_5/Lab_5.c | 48 ++++++++++-------------------------- Semester_1/Lab_5/Lab_5_dop.c | 17 +------------ Semester_1/Lab_5/reducts.c | 15 +++++++++++ 3 files changed, 29 insertions(+), 51 deletions(-) create mode 100644 Semester_1/Lab_5/reducts.c diff --git a/Semester_1/Lab_5/Lab_5.c b/Semester_1/Lab_5/Lab_5.c index b4d894a..2c3ca96 100644 --- a/Semester_1/Lab_5/Lab_5.c +++ b/Semester_1/Lab_5/Lab_5.c @@ -3,10 +3,11 @@ #include #include +#include "reducts.c" #define length(x) (sizeof(x) / sizeof((x)[0])) -int len = 0; +int len = 0; char *readstr() { len = 0; int capacity = 1; @@ -24,43 +25,20 @@ char *readstr() { return s; } -void print_char(char ch) { - switch (ch) { - // это было написано в 4:20 ночи - // оптимизировать это говно - case '!': printf("XCLM"); break; - case '"': printf("QTES"); break; - case '#': printf("HASH"); break; - case '$': printf("DLLR"); break; - case '%': printf("PRCNT"); break; - case '&': printf("AMPSND"); break; - case '(': printf("LBRCK"); break; - case ')': printf("RBRCK"); break; - case '*': printf("ASTRK"); break; - case '+': printf("PLUS"); break; - case '-': printf("MINUS"); break; - case '/': printf("SLSH"); break; - case '.': printf("DOT"); break; - case ',': printf("COMMA"); break; - case ':': printf("COLON"); break; - case ';': printf("SCLN"); break; - case '@': printf("ATSMB"); break; - case '?': printf("QSTN"); break; - case '<': printf("LARR"); break; - case '=': printf("EQUL"); break; - case '>': printf("RARR"); break; - case '~': printf("TILDE"); break; - case '|': printf("PIPE"); break; - case '_': printf("UNDSC"); break; - default: printf("%c", ch); break; - } -} - void main() { printf("Input string:\n"); char *str = readstr(); + printf("\nString after replace:\n"); - for (int i = 0; i < len; i++) - print_char(str[i]); + for (int i = 0; i < len; i++) { + int flag = 1; + for (int c = 0; c < W_COUNT; c++) { + if (str[i] == punct[c]) { + printf("%s", words[c]); + flag = 0; + } + } + if (flag) printf("%c", str[i]); + } free(str); } \ No newline at end of file diff --git a/Semester_1/Lab_5/Lab_5_dop.c b/Semester_1/Lab_5/Lab_5_dop.c index b024dc4..b35c2eb 100644 --- a/Semester_1/Lab_5/Lab_5_dop.c +++ b/Semester_1/Lab_5/Lab_5_dop.c @@ -6,22 +6,7 @@ #include #include - -#define W_COUNT 5 - -const char words[W_COUNT][7] = { - "XCLM", "QTES", "HASH", "DLLR", "PRCNT", "AMPSND", - "LBRCK", "RBRCK", "ASTRK", "PLUS", "MINUS", "SLSH", - "DOT", "COMMA", "COLON", "SCLN", "ATSMB", "QSTN", - "LARR", "EQUL", "RARR", "TILDE", "PIPE", "UNDSC" -}; - -const char punct[W_COUNT] = { - '!', '"', '#', '$', '%', '&', - '(', ')', '*', '+', "-", "/", - '.', ',', ':', ';', '@', '?', - '<', '=', '>', '~', '|', '_' -}; +#include "reducts.c" char lower(int c) { return c > 64 && c < 91 ? c + 32 : c; diff --git a/Semester_1/Lab_5/reducts.c b/Semester_1/Lab_5/reducts.c new file mode 100644 index 0000000..e56f626 --- /dev/null +++ b/Semester_1/Lab_5/reducts.c @@ -0,0 +1,15 @@ +#define W_COUNT 24 + +const char words[W_COUNT][7] = { + "XCLM", "QTES", "HASH", "DLLR", "PRCNT", "AMPSND", + "LBRCK", "RBRCK", "ASTRK", "PLUS", "MINUS", "SLSH", + "DOT", "COMMA", "COLON", "SCLN", "ATSMB", "QSTN", + "LARR", "EQUL", "RARR", "TILDE", "PIPE", "UNDSC" +}; + +const char punct[W_COUNT] = { + '!', '"', '#', '$', '%', '&', + '(', ')', '*', '+', '-', '/', + '.', ',', ':', ';', '@', '?', + '<', '=', '>', '~', '|', '_' +}; \ No newline at end of file