#include #include #include #include #define LINESIZE 100 #define MAX_ITEMS 100 struct pizza { float prize; char name[LINESIZE]; }; // Funkcia na transformáciu znaku do Hacker Script formátu char hacker_script(char c) { // Ak je znak veľké písmeno, premeníme na malé if (isupper(c)) { return tolower(c); } // Tabuľka premeny číslic na písmená char numbers[] = "0123456789"; char letters[] = "oizeasbtbq"; // Pre každú číslicu nájdeme zodpovedajúce písmeno for (int i = 0; i < 10; i++) { if (c == numbers[i]) { return letters[i]; } } // Ak žiadna z predchádzajúcich podmienok neplatí, vrátime pôvodný znak return c; } // Funkcia na vyhľadávanie reťazca s podporou Hacker Script int search_string(const char* heap, const char* needle) { int heap_len = strlen(heap); int needle_len = strlen(needle); // Ak je hľadaný reťazec dlhší ako prehľadávaný, nemôže sa v ňom nachádzať if (needle_len > heap_len) { return -1; } // Prejdeme všetky možné začiatky v heap for (int i = 0; i <= heap_len - needle_len; i++) { int found = 1; // Porovnáme každý znak s ohľadom na Hacker Script for (int j = 0; j < needle_len; j++) { char h_char = hacker_script(heap[i + j]); char n_char = hacker_script(needle[j]); if (h_char != n_char) { found = 0; break; } } if (found) { return i; // Vrátime pozíciu nájdeného reťazca } } return -1; // Reťazec nebol nájdený } // Funkcia na načítanie jednej položky pizze int read_pizza(struct pizza* item, FILE* stream) { char line[LINESIZE]; char price_line[LINESIZE]; // Načítanie názvu if (fgets(line, LINESIZE, stream) == NULL) { return 0; } // Odstránenie nového riadku line[strcspn(line, "\n")] = 0; // Načítanie ceny if (fgets(price_line, LINESIZE, stream) == NULL) { return 0; } // Prevod reťazca na float char* endptr; float value = strtof(price_line, &endptr); // Kontrola, či sa konverzia podarila if (endptr == price_line || value == 0.0f) { return 0; } // Uloženie hodnôt do štruktúry strcpy(item->name, line); item->prize = value; return 1; } int main() { char search_term[LINESIZE]; struct pizza items[MAX_ITEMS]; int item_count = 0; // Výzva a načítanie hľadaného reťazca printf("Zadaj hladanu surovinu:\n"); if (fgets(search_term, LINESIZE, stdin) == NULL) { printf("Chyba pri čítaní hľadaného reťazca\n"); return 1; } // Odstránenie nového riadku z hľadaného reťazca search_term[strcspn(search_term, "\n")] = 0; // Výzva na zadanie jedálneho lístka printf("Zadaj jedalny listok:\n"); // Načítanie položiek jedálneho lístka while (item_count < MAX_ITEMS && read_pizza(&items[item_count], stdin)) { item_count++; } // Vyhľadávanie a výpis vyhovujúcich položiek for (int i = 0; i < item_count; i++) { if (search_string(items[i].name, search_term) != -1) { printf("%s\n", items[i].name); printf("%.2f\n", items[i].prize); } } // Výpis počtu načítaných položiek printf("Nacitanych %d poloziek.\n", item_count); return 0; }