#include #include #include #define LINESIZE 100 #define MAX_PIZZA 100 // Структура для зберігання інформації про піцу struct pizza { float prize; // Ціна піци char name[LINESIZE]; // Назва піци }; // Функція для перетворення символу у "Hacker Script" char hacker_script(char c) { // Приводимо до нижнього регістру if (c >= 'A' && c <= 'Z') { c += 32; // Перетворюємо у нижній регістр } // Замінюємо літери на цифри switch (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 'g': return '8'; case 'q': return '9'; default: return c; // Повертаємо без змін } } // Функція для нормалізації рядка void normalize_string(const char* input, char* output) { int i = 0; while (input[i] != '\0' && i < LINESIZE - 1) { output[i] = hacker_script(input[i]); i++; } output[i] = '\0'; // Додаємо термінатор рядка } // Функція для пошуку підрядка з урахуванням "Hacker Script" int search_string(const char* heap, const char* needle) { int len_heap = strlen(heap); int len_needle = strlen(needle); for (int i = 0; i <= len_heap - len_needle; i++) { int j; for (j = 0; j < len_needle; j++) { if (hacker_script(heap[i + j]) != hacker_script(needle[j])) { break; // Не співпадає } } if (j == len_needle) { return i; // Знайдено } } return -1; // Не знайдено } // Функція для читання однієї піци int read_pizza(struct pizza* item) { char line[LINESIZE]; // Для назви піци char line2[LINESIZE]; // Для ціни // Читаємо назву піци if (fgets(line, sizeof(line), stdin) == NULL) { return 0; // Помилка при читанні } // Видаляємо символ нового рядка з назви line[strcspn(line, "\n")] = 0; // Читаємо ціну if (fgets(line2, sizeof(line2), stdin) == NULL) { return 0; // Помилка при читанні } // Перетворюємо рядок ціни у число з плаваючою комою float value = strtof(line2, NULL); if (value == 0.0F && line2[0] != '0') { return 0; // Перетворення не вдалося } // Копіюємо дані у структуру item->prize = value; strcpy(item->name, line); return 1; // Успішно } int main() { struct pizza jedalny_listok[MAX_PIZZA]; // Масив для зберігання позицій меню int counter = 0; printf("Zadaj hladanu surovinu:\n"); char search_string_input[LINESIZE]; // Для пошукового запиту fgets(search_string_input, sizeof(search_string_input), stdin); // Видаляємо символ нового рядка з пошукового рядка search_string_input[strcspn(search_string_input, "\n")] = 0; printf("Zadaj jedalny listok:\n"); // Читаємо піци до тих пір, поки не буде помилка while (read_pizza(&jedalny_listok[counter]) && counter < MAX_PIZZA) { counter++; } // Обробка пошуку printf("Vyhovujuce jedla:\n"); char normalized_search[LINESIZE]; // Для нормалізованого пошукового рядка normalize_string(search_string_input, normalized_search); // Нормалізуємо пошуковий рядок for (int i = 0; i < counter; i++) { char normalized_name[LINESIZE]; // Для нормалізованої назви піци normalize_string(jedalny_listok[i].name, normalized_name); // Нормалізуємо назву піци if (search_string(normalized_name, normalized_search) != -1) { printf("%s má cenu %.2f\n", jedalny_listok[i].name, jedalny_listok[i].prize); } } printf("Nacitanych %d poloziek.\n", counter); return 0; }