Vydělávej až 160.000 Kč měsíčně! Akreditované rekvalifikační kurzy s garancí práce od 0 Kč. Více informací.
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.

Diskuze: Potrebujem pomôcť ZADANIE #2: HANGMAN

V předchozím kvízu, Online test znalostí C++, jsme si ověřili nabyté zkušenosti z kurzu.

Aktivity
Avatar
Lubo Cerebla
Člen
Avatar
Lubo Cerebla:24.11.2022 19:25

Zdravim dostal som na vysokej škole zadanie a neviem si pomôcť. Dá sa povedať, že neviem, kde začať. Vedel by ste mi niekto pomôcť alebo ma nasmerovať k úspešnému výsledku ?

https://www.itnetwork.cz/…lighter/1544
https://www.itnetwork.cz/…lighter/1545
https://www.itnetwork.cz/…lighter/1546

Mam k tomu ešte súbor words.txt viem dodať.

Chci docílit: Aby program úspešne fungovať v linuxe. Pomocou makefile, ktorý som už spravil.

Editováno 24.11.2022 19:28
 
Odpovědět
24.11.2022 19:25
Avatar
DarkCoder
Člen
Avatar
Odpovídá na Lubo Cerebla
DarkCoder:24.11.2022 19:42

Nahraješ si slovník do paměti, konkrétně vytvoříš pole řetězců. Zjistíš jak je toto pole velké. Vygeneruje náhodné číslo v rozsahu 0 až N-1. Vytvoriš dynamicky alokovane pole o velikosti délky řetězce na daném indexu. Nakopiruješ do něj slovo na daném indexu. To představuj hádané slovo. Vytvoříš další pole prázdné o stejné velikosti pro hadajícího. Necháš uživatele zadávat znaky. Pomocí cyklu budeš porovnávat znaky hádanek řetězce se zadaným znakem. V případě shody přiřadiš daný znak na pozici která se shoduje. Inkrementujes proměnnou vyjadřující počet uhodnutych znaků. To celé opakuješ dokud počet uhodnutých znaků nebude rovno počtu znaků hádanek řetězce. Hádaný řetězec vypisuje v každé iteraci před výzvou zadání nového znaku.

Nahoru Odpovědět
24.11.2022 19:42
"I ta nejlepší poučka postrádá na významu, není-li patřičně předána." - DarkCoder
Avatar
DarkCoder
Člen
Avatar
DarkCoder:25.11.2022 11:44

Rozbor předvytvořené funkce get_word(), kterou můžete používat..

int get_word(char secret[]){
    // kontroluje pritomnost suboru so slovami
    FILE *fp = fopen(WORDLIST_FILENAME, "rb");
    if( fp == NULL ){
        fprintf(stderr, "Subor sa nenasiel: %s\n", WORDLIST_FILENAME);
        return 1;
    }

    // zisti velkost suboru
    struct stat st;
    stat(WORDLIST_FILENAME, &st);
    long int size = st.st_size;

    do{
        // generuje nahodne cislo zo suboru
        long int random = (rand() % size) + 1;
        // nastavi na vygenerovanu poziciu
        fseek(fp, random, SEEK_SET);
        // ziska slovo zo suboru
        int result = fscanf(fp, "%*s %20s", secret);
        if( result != EOF )
            break;
    }while(1);

    fclose(fp);

    return 0;
}
  • Nastala chyba, my se nepodíváme do errno, ale přesto víme že soubor se nenašel.
  • Pomocí funkce stat() zjistíme informace o souboru a uložíme do proměnné typu struct stat, přesto se velikost ukládá ještě jednou.
  • Vygenerované náhodné číslo se ukládá do proměnné, i přesto, že výraz lze použít přímo jako argument funkce.
  • Vygenerované náhodné číslo začíná od 1L, přesto že začátek souboru má offset 0L.
  • První slovo v souboru nikdy nemůže být hledaným slovem, když se přeskakuje.
  • Při generování hledaného slova jsou preferována delší slova před kratšími
  • Cyklus není ošetřen pro případ opakování vygenerovaného čísla maximálního rozsahu.

Opravdu povedená funkce. :-D

Nahoru Odpovědět
25.11.2022 11:44
"I ta nejlepší poučka postrádá na významu, není-li patřičně předána." - DarkCoder
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 3 zpráv z 3.