From edd377d393cfba33cab5db3254ec032272a60ae5 Mon Sep 17 00:00:00 2001 From: Yurii Chechur Date: Wed, 2 Oct 2024 08:31:44 +0000 Subject: [PATCH] Update cv1/program.c --- cv1/program.c | 96 ++++++++++++++++++++++++++++++++++----------------- 1 file changed, 64 insertions(+), 32 deletions(-) diff --git a/cv1/program.c b/cv1/program.c index 22f319e..c5f332a 100644 --- a/cv1/program.c +++ b/cv1/program.c @@ -1,53 +1,80 @@ #include #include - +#include void replace(char* DishName); +void normalize(char* str); struct MenuItem { - - char dish[50]; - float price; + char dish[50]; // Тільки назва страви + float price; // Ціна страви }; char answer1[100]; int main(void) { - + // Динамічне зчитування меню + struct MenuItem menu[100]; + int MenuSize = 0; + char line[100]; - struct MenuItem menu[] = { - {"Pizza Margarita", 4.4}, - {"Pizza Cucumber", 4.4}, - {"Pizza Ajika", 4.4}, - {"Pizza Paperoni", 4.4} - }; - + printf("Zadajte položky menu (формат: Назва, Ціна). Введіть 'end' для завершення вводу.\n"); - printf("Zadaj hladanu surovinu: "); + while (1) { + printf("Введіть меню: "); + fgets(line, 100, stdin); + + if (strcmp(line, "end\n") == 0) break; // При введенні "end" завершити зчитування + + // Парсинг введеної інформації + if (sscanf(line, "%[^,], %f", menu[MenuSize].dish, &menu[MenuSize].price) == 2) { + MenuSize++; // Збільшити розмір тільки якщо зчитано правильно + } else { + printf("Невірний формат. Будь ласка, введіть у форматі: Назва, Ціна\n"); + } + } + + // Виведення кількості зчитаних позицій + printf("Успішно зчитано %d позицій меню.\n", MenuSize); + + // Введення пошукового запиту + printf("Zadajte hladanu surovinu: "); fgets(answer1, 100, stdin); - + // Видалення символа нового рядка if (answer1[strlen(answer1) - 1] == '\n') { answer1[strlen(answer1) - 1] = '\0'; } - int MenuSize = sizeof(menu) / sizeof(menu[0]); - int found = 0; + // Нормалізація пошукового запиту + normalize(answer1); + + int found = 0; - for (size_t i = 0; i < MenuSize; i++) { - - if (strstr(menu[i].dish, answer1) != NULL) { - found = 1; - - replace(menu[i].dish); - - printf("%s\n%.2f\n", menu[i].dish, menu[i].price); + // Копія назви страви для нормалізації + char normalized_dish[50]; + strcpy(normalized_dish, menu[i].dish); + // Нормалізуємо для порівняння + normalize(normalized_dish); + + // Пошук інгредієнта у назві страви + if (strstr(normalized_dish, answer1) != NULL) { + found = 1; + + // Копія назви страви для "хакерської" заміни + char hacker_dish[50]; + strcpy(hacker_dish, menu[i].dish); + + // Заміна символів на стиль "хакер" + replace(hacker_dish); + + // Виведення результату + printf("Nájdené: %s, Cena: %.2f\n", hacker_dish, menu[i].price); } } - if (!found) { printf("Zadana surovina nebola najdena.\n"); } @@ -55,21 +82,18 @@ int main(void) { return 0; } - +// Функція заміни "Hacker Script" символів на цифри void replace(char* DishName) { - + // Масиви символів для заміни char original[] = "aAeEiIoOsSzZ"; - char replacement[] = "443311005522"; - + int l = strlen(DishName); - + // Заміна літер на цифри for (int i = 0; i < l; i++) { - for (int j = 0; j < strlen(original); j++) { if (DishName[i] == original[j]) { - DishName[i] = replacement[j]; break; } @@ -77,3 +101,11 @@ void replace(char* DishName) { } } +// Нормалізація рядка для пошуку (перетворює на малі літери і замінює символи) +void normalize(char* str) { + int l = strlen(str); + for (int i = 0; i < l; i++) { + str[i] = tolower(str[i]); // Заміна великих літер на малі + replace(&str[i]); // Заміна символів на цифри для порівняння + } +}