commit 67729244c827d760ed270311c96f7ac22390ce51 Author: Denis Landa Date: Fri Oct 3 07:50:26 2025 +0000 Add program.c diff --git a/program.c b/program.c new file mode 100644 index 0000000..208492f --- /dev/null +++ b/program.c @@ -0,0 +1,138 @@ +#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; +} \ No newline at end of file