diff --git a/du1/program.c b/du1/program.c index f295d7a..7150319 100644 --- a/du1/program.c +++ b/du1/program.c @@ -1,14 +1,14 @@ #define LINE_SIZE 100 -#define POCET_JEDAL 100000 //macros pre velky vstupy a vystupy +#define POCET_JEDAL 100000//macros pre velky vstupy a vystupy #include #include #include #include -struct pizza ///materialy z cvicenia +struct pizza///materialy z cvicenia { float prize; char name[LINE_SIZE]; }; -struct pizza jedalny_listok[POCET_JEDAL]; +struct pizza jedalny_listok[POCET_JEDAL]; struct pizza *prva = jedalny_listok; struct pizza *druha = jedalny_listok + 1; struct pizza *tretia = &jedalny_listok[2]; @@ -18,12 +18,12 @@ struct pizza *tretia = &jedalny_listok[2]; /// funkcia na prevratenie zakodovaneho znaku ane povodnyj char hacker_script(char c) { - /// ked pismeno je vel'ke, tak vratim male + /// ked pismeno je vel'ke, tak vratim male if (isupper(c)) { - return tolower(c); + return (char) tolower(c); } - - /// zoznamy specialnych znakov +/// zoznamy specialnych znakov a povodnych znakov + const char numbers[] = "0123456789"; const char letters[] = "oizeasbtbq"; // ked' znak patri do zonamu specialnych, vratime povodnu @@ -32,20 +32,32 @@ char hacker_script(char c) { return letters[i]; } } - +//nerobim nic, vratime znak return c; -} +}/// funkcia pre nacitanie pizzy. Ma ako argument refeenciu v pamati na struct pizz int read_pizza(struct pizza *item) { + /// pomozne pole pre nazov jedla char line[LINE_SIZE]; + //pomozne pole pre cenu jedla; tak tiez pole pre scitanie floatu char line2[LINE_SIZE]; +/// Podmienky ked nazov je neplatny: alebo ne ma nic, alebo nezmozeme nacitat' + if (!fgets(line, sizeof(line), stdin)) + return 0; + if (strlen(line) == 0) + return 0; +/// ked' nemozeme nacitac cenu, vratime 0 + if (!fgets(line2, sizeof(line2), stdin)) + return 0; - +///endpointer, pouzivaju a sa dostat' do znaku, ktory nemoze byt' pouzity pre pretvorenie pol'a na float ('\0' - null terminator za normal'nych podmienok') char *endptr; + ///& je operator, ktory vrati adresu premenoj v pamati float value = strtof(line2, &endptr); if (value == 0.0F) return 0; - +/// strcpy prekopiruje jeden ret'azec v iny +/// -> je smernikovy operator, ktory pozivame ked' mame referenciu na strukturu namiesto . strcpy(item->name, line); item->prize = value; @@ -54,50 +66,58 @@ int read_pizza(struct pizza *item) { int search_string(const char* heap, const char* needle) { - +/// dlzky hl'adaneho a v ktorom hl'adame int heap_len = strlen(heap); int needle_len = strlen(needle); - +/// prvy cyklus pre zdvih hl'adaneho for (int i = 0; i <= heap_len - needle_len; i++) { int j; + // cyklus aby porovnat' aktualny znaky for (j = 0; j < needle_len; j++) { + /// dekodovanie pomocou hacker_script char perm_n = hacker_script(needle[j]); char perm_h = hacker_script(heap[i + j]); - + /// znamena, ze znaky su b, sa rovnaju a mozeme pokracovat' if ((perm_n == '6' && perm_h == '8') || (perm_n == '8' && perm_h == '6')) { continue; } - +// ked' nerovnaju, potom string sme nenajdeme if (perm_n != perm_h) { break; } } - +/// ked' j sa rovna dlzke, tak vratime i - zacatok patternu if (j == needle_len) { return i; } } - +/// vratime -1 ked' nenasli return -1; } int main() { printf("Zadaj hladanu surovinu:\n"); + /// pole pre hl'adane char search[LINE_SIZE]; + /// ked' nenacitame, ukoncime program + if (!fgets(search, sizeof(search), stdin)) { + return 1;} + /// pre hl'adanie, potrebujeme najst', kde zanica novy riadok and premenit' ho na null terminator pre porovnanie search[strcspn(search, "\n")] = '\0'; printf("Zadaj jedalny listok:\n"); - +/// pocet nacitanych poloziek int loaded = 0; + //pokial' pocet mensie ako macros a jedlo je platne, zvacseme pocet while (loaded < POCET_JEDAL && read_pizza(&jedalny_listok[loaded])) { loaded++; } - +/// ked' najdeme v stravotnom listku hl'adane - vypiseme nazov a cenu for(int i = 0; i