From 01a4b932421a791d04560ed285c725984936b4aa Mon Sep 17 00:00:00 2001 From: Yurii Chechur Date: Wed, 2 Oct 2024 16:24:50 +0000 Subject: [PATCH] Update cv1/program.c --- cv1/program.c | 172 +++++++++++++++++++++++++------------------------- 1 file changed, 86 insertions(+), 86 deletions(-) diff --git a/cv1/program.c b/cv1/program.c index c5f332a..cd17ae9 100644 --- a/cv1/program.c +++ b/cv1/program.c @@ -1,111 +1,111 @@ -#include #include +#include #include -void replace(char* DishName); -void normalize(char* str); +#define MAX_ITEMS 100 +#define MAX_NAME_LENGTH 100 +// Структура для зберігання назви страви і ціни struct MenuItem { - char dish[50]; // Тільки назва страви - float price; // Ціна страви + char name[MAX_NAME_LENGTH]; + float price; }; -char answer1[100]; +// Функція для перетворення символу в "Hack3r Script" +char to_hacker_script(char c) { + switch (tolower(c)) { + case 'o': return '0'; + case 'i': return '1'; + case 'z': return '2'; + case 'e': return '3'; + case 'a': return '4'; + case 's': return '5'; + case 'b': return '6'; + case 't': return '7'; + case 'q': return '9'; + default: return tolower(c); // Перетворюємо всі літери на малі + } +} -int main(void) { - // Динамічне зчитування меню - struct MenuItem menu[100]; - int MenuSize = 0; - char line[100]; - - printf("Zadajte položky menu (формат: Назва, Ціна). Введіть 'end' для завершення вводу.\n"); - +// Функція для нормалізації рядка (перетворює у "Hack3r Script") +void normalize(char* str) { + for (int i = 0; str[i]; i++) { + str[i] = to_hacker_script(str[i]); + } +} + +// Функція для зчитування меню +int read_menu(struct MenuItem* menu) { + int count = 0; + char line[MAX_NAME_LENGTH]; + + printf("Zadaj jedalny listok (v formate 'nazov jedla, cena'). Pre ukoncenie zadajte 'end'.\n"); 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("Vlož položku menu (nazov jedla): "); + if (!fgets(line, MAX_NAME_LENGTH, stdin)) break; + + if (strncmp(line, "end", 3) == 0) break; // Якщо "end", закінчуємо введення + + line[strcspn(line, "\n")] = '\0'; // Видаляємо символ нового рядка + + strcpy(menu[count].name, line); // Копіюємо назву страви + + // Зчитуємо ціну + printf("Vlož cenu jedla: "); + if (!fgets(line, MAX_NAME_LENGTH, stdin)) break; + menu[count].price = strtof(line, NULL); // Конвертуємо рядок у float + + count++; } + return count; +} - // Виведення кількості зчитаних позицій - printf("Успішно зчитано %d позицій меню.\n", MenuSize); - - // Введення пошукового запиту - printf("Zadajte hladanu surovinu: "); - fgets(answer1, 100, stdin); - - // Видалення символа нового рядка - if (answer1[strlen(answer1) - 1] == '\n') { - answer1[strlen(answer1) - 1] = '\0'; - } - - // Нормалізація пошукового запиту - normalize(answer1); - +// Функція для пошуку страв за інгредієнтом +void search_menu(const struct MenuItem* menu, int menu_size, const char* ingredient) { int found = 0; + char normalized_ingredient[MAX_NAME_LENGTH]; - for (size_t i = 0; i < MenuSize; i++) { - // Копія назви страви для нормалізації - char normalized_dish[50]; - strcpy(normalized_dish, menu[i].dish); + // Копія пошукового запиту та його нормалізація + strcpy(normalized_ingredient, ingredient); + normalize(normalized_ingredient); - // Нормалізуємо для порівняння - normalize(normalized_dish); + printf("\nVýsledky hľadania:\n"); + for (int i = 0; i < menu_size; i++) { + char normalized_dish[MAX_NAME_LENGTH]; + strcpy(normalized_dish, menu[i].name); + normalize(normalized_dish); // Нормалізуємо назву страви - // Пошук інгредієнта у назві страви - if (strstr(normalized_dish, answer1) != NULL) { + // Якщо знайдено відповідність + if (strstr(normalized_dish, normalized_ingredient)) { + printf("%s\n%.2f\n", menu[i].name, menu[i].price); 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"); } +} + +int main() { + struct MenuItem menu[MAX_ITEMS]; + char search_term[MAX_NAME_LENGTH]; + int menu_size; + + // Введення пошукового запиту + printf("Zadaj hladanu surovinu: "); + fgets(search_term, MAX_NAME_LENGTH, stdin); + search_term[strcspn(search_term, "\n")] = '\0'; // Видаляємо символ нового рядка + + // Зчитування меню + menu_size = read_menu(menu); + + // Пошук страв за інгредієнтом + search_menu(menu, menu_size, search_term); + + // Виведення кількості позицій меню + printf("\nNacitanych %d poloziek.\n", menu_size); 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; - } - } - } -} - -// Нормалізація рядка для пошуку (перетворює на малі літери і замінює символи) -void normalize(char* str) { - int l = strlen(str); - for (int i = 0; i < l; i++) { - str[i] = tolower(str[i]); // Заміна великих літер на малі - replace(&str[i]); // Заміна символів на цифри для порівняння - } -}