From 2f74cf522abccd6a764fb644e7350c08938dbed3 Mon Sep 17 00:00:00 2001 From: Yevhen Kozirovskyi Date: Thu, 3 Oct 2024 10:42:43 +0000 Subject: [PATCH] =?UTF-8?q?=D0=9E=D0=B1=D0=BD=D0=BE=D0=B2=D0=B8=D1=82?= =?UTF-8?q?=D1=8C=20cv1/program.c?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- cv1/program.c | 112 ++++++++++++++++++-------------------------------- 1 file changed, 39 insertions(+), 73 deletions(-) diff --git a/cv1/program.c b/cv1/program.c index c923f45..2402de3 100644 --- a/cv1/program.c +++ b/cv1/program.c @@ -1,97 +1,63 @@ #include #include #include +#include -#define MAX_DISHES 100 -#define MAX_NAME_LEN 100 - -// Функция для декодирования символов -void decodovane_slovo(char *text) { - for (int i = 0; text[i]; i++) { - switch (text[i]) { - case '0': text[i] = 'o'; break; - case '1': text[i] = 'i'; break; - case '2': text[i] = 'z'; break; - case '3': text[i] = 'e'; break; - case '4': text[i] = 'a'; break; - case '5': text[i] = 's'; break; - case '6': text[i] = 'b'; break; - case '7': text[i] = 't'; break; - case '8': text[i] = 'b'; break; - case '9': text[i] = 'q'; break; - default: text[i] = tolower(text[i]); break; +void normalize(char *str) { + for (int i = 0; str[i] != '\0'; i++) { + switch (str[i]) { + case '0': str[i] = 'o'; break; + case '1': str[i] = 'i'; break; + case '2': str[i] = 'z'; break; + case '3': str[i] = 'e'; break; + case '4': str[i] = 'a'; break; + case '5': str[i] = 's'; break; + case '6': str[i] = 'b'; break; + case '7': str[i] = 't'; break; + case '8': str[i] = 'b'; break; + case '9': str[i] = 'q'; break; + default: str[i] = tolower(str[i]); break; } } } int main() { - char ingredient[MAX_NAME_LEN]; - char dishes[MAX_DISHES][2][MAX_NAME_LEN]; // Массив для хранения блюд и цен - int count = 0; // Количество введенных блюд + SetConsoleOutputCP(CP_UTF8); + char search[100]; + char item_name[100]; + char price[10]; + int count = 0; - // Запрос ингредиента - printf("Zadaj hladanu surovinu:\n"); - if (fgets(ingredient, MAX_NAME_LEN, stdin) == NULL) { - return 0; // Выход, если ввод не удался - } - ingredient[strcspn(ingredient, "\n")] = '\0'; // Удаление символа новой строки - printf("%s\n", ingredient); // Вывод ингредиента сразу после запроса - // Запрос списка блюд + printf("Zadaj hladanu surovinu:"); + fgets(search, sizeof(search), stdin); + search[strcspn(search, "\n")] = '\0'; + normalize(search); + printf("Zadaj jedalny listok:\n"); + while (1) { - char name[MAX_NAME_LEN], price[MAX_NAME_LEN]; - // Чтение названия блюда - if (fgets(name, MAX_NAME_LEN, stdin) == NULL) { - return 0; // Выход, если ввод не удался - } - name[strcspn(name, "\n")] = '\0'; // Удаление символа новой строки + fgets(item_name, sizeof(item_name), stdin); + item_name[strcspn(item_name, "\n")] = '\0'; + if (strlen(item_name) == 0) break; - // Если строка пустая, завершить ввод - if (strlen(name) == 0) { - break; - } - // Чтение цены - if (fgets(price, MAX_NAME_LEN, stdin) == NULL) { - return 0; // Выход, если ввод не удался - } - price[strcspn(price, "\n")] = '\0'; // Удаление символа новой строки + fgets(price, sizeof(price), stdin); + price[strcspn(price, "\n")] = '\0'; + count++; - // Сохранение названия блюда и цены - strncpy(dishes[count][0], name, MAX_NAME_LEN - 1); - dishes[count][0][MAX_NAME_LEN - 1] = '\0'; // Завершение строки + char normalized_name[100]; + strcpy(normalized_name, item_name); + normalize(normalized_name); - strncpy(dishes[count][1], price, MAX_NAME_LEN - 1); - dishes[count][1][MAX_NAME_LEN - 1] = '\0'; // Завершение строки - - count++; // Увеличение счётчика блюд - } - - // Декодирование введенного ингредиента - decodovane_slovo(ingredient); - - // Поиск и вывод блюд, содержащих искомый ингредиент - int found = 0; // Флаг для отслеживания, если хотя бы одно блюдо будет найдено - for (int i = 0; i < count; i++) { - char decoded_name[MAX_NAME_LEN]; - strncpy(decoded_name, dishes[i][0], MAX_NAME_LEN - 1); - decoded_name[MAX_NAME_LEN - 1] = '\0'; - - decodovane_slovo(decoded_name); // Декодируем название блюда - - if (strstr(decoded_name, ingredient) != NULL) { // Проверка на совпадение с ингредиентом - printf("%s %s\n", dishes[i][0], dishes[i][1]); // Вывод оригинального названия и цены - found = 1; + if (strstr(normalized_name, search) != NULL) { + printf("%s\n%s\n", item_name, price); } } - if (!found) { - printf("\n"); // Если блюда не найдены, добавить пустую строку перед счетчиком - } - // Вывод количества введенных блюд - printf("Nacitanych %d poloziek.\n", count); + printf("Считано %d блюд.\n", count); + return 0; }