Úkoly pro čtvrtý seminář

Zadání

  1. Naprogramujte vlastní verze knihovních funkcí strlen a strcmp (string.h), které nepoužijí indexů, ale pouze pointerové aritmetiky a dereference.

  2. Vytvořte strukturu s několika položkami a aspoň jednu její proměnnou. Vypište informace o layoutu této proměnné: pro každou položku vypište její adresu a velikost. Vypište i adresu a velikost samotné proměnné.

  3. Naprogramujte funkci pro výpočet průměru a mediánu pole čísel (např. float). Jednu z hodnot vraťte pomocí argumentu předaného odkazem. (Funkce může změnit pořadí prvků v poli.)

  4. Napište funkci swap_int, která prohodí hodnoty dvou proměnných typu int.

  5. Napište funkci, která v poli řetězců najde znak, který se vyskytuje v nejvíce řetězcích v tomto poli.

  6. Uvažujme následující typ pro řetězec

    typedef struct
    {
         char *data;
         size_t len;
    } String;

    Naprogramujte funkci void print_string(String s) pro tisk.

    Naprogramujte funkci string get_prefix(char *src, char delimiter, char **rest), která vrátí část řetězce src od jeho začátku do prvního výskytu znaku delimiter. Současně odkazem pomocí rest vrátí adresu prvního znaku, který se nachází za prvním výskytem znaku delimiter. Pokud src delimiter neobsahuje, vrátí pomocí rest 0 a návratová hodnota funkce odpovídá celému řetězci. V následující ukázce program vypíše jednotlivé řádky řetěce ret očíslované.

    char *rem = ret;
    int line_number = 1;
    while (rem)
    {
        String line = get_prefix(rem, '\n', &rem);
        printf("%i ", line_number);
        print_string(line);
    }