abclinuxu.cz AbcLinuxu.cz itbiz.cz ITBiz.cz HDmag.cz HDmag.cz abcprace.cz AbcPráce.cz
Inzerujte na AbcPráce.cz od 950 Kč
Rozšířené hledání
×
    včera 22:44 | Nová verze

    Wayland (Wikipedie) byl vydán ve verzi 1.23.0. Z novinek lze vypíchnout podporu OpenBSD.

    Ladislav Hagara | Komentářů: 0
    včera 21:22 | Zajímavý článek

    Craig Loewen na blogu Microsoftu představil novinky ve Windows Subsystému pro Linux (WSL). Vypíchnout lze GUI aplikaci pro nastavování WSL nebo správu WSL z Dev Home.

    Ladislav Hagara | Komentářů: 0
    včera 12:44 | Pozvánky

    V sobotu 1. června lze navštívit Maker Faire Ostrava, festival plný workshopů, interaktivních činností a především nadšených a zvídavých lidí.

    Ladislav Hagara | Komentářů: 0
    včera 12:22 | Nová verze

    Webový server Caddy (Wikipedie) s celou řadou zajímavých vlastností byl vydán ve verzi 2.8 (𝕏). Přehled novinek na GitHubu.

    Ladislav Hagara | Komentářů: 2
    29.5. 22:11 | Nová verze

    Byla vydána verze 3.0 (@, 𝕏) svobodného softwaru HAProxy (The Reliable, High Performance TCP/HTTP Load Balancer; Wikipedie) řešícího vysokou dostupnost, vyvažování zátěže a reverzní proxy. Detailní přehled novinek v příspěvku na blogu společnosti HAProxy Technologies.

    Ladislav Hagara | Komentářů: 3
    29.5. 21:11 | IT novinky

    Společnost Framework Computer představila novou vylepšenou verzi svého modulárního notebooku Framework Laptop 13 s Intel Core Ultra Series 1, displej s lepším rozlišením a novou webovou kameru. Přímo do Česka jej zatím koupit nelze.

    Ladislav Hagara | Komentářů: 0
    29.5. 15:44 | Nová verze

    Byla vydána nová verze 2.16 svobodného video editoru Flowblade (GitHub, Wikipedie). Přehled novinek v poznámkách k vydání. Videoukázky funkcí Flowblade na Vimeu. Instalovat lze také z Flathubu.

    Ladislav Hagara | Komentářů: 2
    28.5. 21:22 | Zajímavý software

    TerminalTextEffects (TTE) je engine pro vizuální efekty v terminálu. Zdrojové kódy jsou k dispozici na GitHubu pod licencí MIT.

    Ladislav Hagara | Komentářů: 43
    28.5. 17:11 | Pozvánky

    Od čtvrtka 30. 5. do soboty 1. 6. lze v Praze navštívit Veletrh vědy, tj. největší populárně naučnou akci v České republice, kterou každoročně od roku 2015 pořádá Akademie věd ČR. Vstup zdarma.

    Ladislav Hagara | Komentářů: 14
    28.5. 14:11 | Komunita

    Canonical představil Ubuntu optimalizované pro jednodeskový počítač s RISC-V procesorem Milk-V Mars.

    Ladislav Hagara | Komentářů: 0
    Podle hypotézy Mrtvý Internet mj. tvoří většinu online interakcí boti.
     (90%)
     (3%)
     (4%)
     (4%)
    Celkem 1010 hlasů
     Komentářů: 16, poslední 14.5. 11:05
    Rozcestník

    Dotaz: Jazyk C JEDNOSMĚRNĚ VÁZANÝ SEZNAM

    17.12.2020 19:53 Kajajaa
    Jazyk C JEDNOSMĚRNĚ VÁZANÝ SEZNAM
    Přečteno: 759×
    Příloha:

    Zdravím, mohl by mi s tím proísm vás někdo pomoc, vbc se nechytám a nevím jak pokračovat. Děkuji za pomoc! Jedná se o jazyk C. Přikládám soubor


    Řešení dotazu:


    Odpovědi

    Řešení 1× (Вherzet)
    17.12.2020 21:06 z_sk | skóre: 34 | blog: analyzy
    Rozbalit Rozbalit vše Re: Jazyk C JEDNOSMĚRNĚ VÁZANÝ SEZNAM
    Pouzi pri programovani ceruzku a papier. Najprv to rob na papieri, ako sa robi s objektami zoznam a co obsahuje 1 prvok zoznamu, a az potom programuj.

    Ak rozumies "Vrati pocet polozek seznamu.", tak potom ostatne by nemali byt problem.

    list_empty() kedy vracia false? :D

    list_ctor() je zle. A ma nieco vraciat a nevracia nic.

    item_ctor() - premmena i radsej pouzi cely nazov a ne skratku. Premmena 'a', 'b', 'i' a 'j' sa zvyknu pouzivat na indexy pre polia (i ako index).

    list_delete_first() je zle.

    list_count() spravne. Ak to vies, tak vies odstranovat data, list_find_minid() a list_find_name(). Ved pracujes s prvkami zoznami (a pripadne Objektami v prvok zoznamu).

    pridanie dat na zaciatok - ekvivalent v realnom zivote, co musim urobit ak chcem pridat novy knizku v kniznici?
    debian.plus@protonmail.com
    Gréta avatar 18.12.2020 03:10 Gréta | skóre: 36 | blog: Grétin blogísek | 🇮🇱==❤️ , 🇵🇸==💩 , 🇪🇺==☭
    Rozbalit Rozbalit vše Re: Jazyk C JEDNOSMĚRNĚ VÁZANÝ SEZNAM

    bez papíru/čmárání bokem to fakt jako někdy u víc složitějších věcí nejde ale todleto imho neni ten případ kdyby papír jako něco víc řešil :O ;D

    pridanie dat na zaciatok - ekvivalent v realnom zivote, co musim urobit ak chcem pridat novy knizku v kniznici?

    jít do knichkupetví koupit knížku najít nejvíc nejvolnější místo v nějakým tom regálku knihovny a tu knížku tam jakoby strašně silou narvat ajeto :D ;D

    takle si to ale asi jako nemyslel že :D ;D

    Gréta avatar 18.12.2020 03:01 Gréta | skóre: 36 | blog: Grétin blogísek | 🇮🇱==❤️ , 🇵🇸==💩 , 🇪🇺==☭
    Rozbalit Rozbalit vše Re: Jazyk C JEDNOSMĚRNĚ VÁZANÝ SEZNAM

    nesmíš namě ale říct že eště nespim :O :O :D ;D

    kuli tomu kolik je hodin si to jako určitě musíš pořádně zkontrolovat protože sotva udržim voči votevřený teďko už :O :O :D ;D pustit to ale de a asi to i jako funguje si myslim :D

    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    #include <stdbool.h>
    
    // fakt jako maj bejt ty data voddělený vod těch položek??????? :O :O
    typedef struct
    {
        int id;
        char * name;
    }
    Object;
    
    typedef struct PolozkaSeznamu PolozkaSeznamu;
    struct PolozkaSeznamu
    {
        Object data;
        struct PolozkaSeznamu * next;
    };
    
    typedef struct 
    {
        PolozkaSeznamu * first;
        // k čemu jako potřebujem v dopředným seznamu pološku last když
        // ji jakoby žádná z těch funkcí nepoužívá nanic?? :O :O
        //PolozkaSeznamu * last;
    }
    Seznam;
    
    /**
     * Inicializace seznamu. Vytvori prazdny seznam.
     */
    Seznam * list_ctor()
    {
        Seznam * sznm = malloc(sizeof(Seznam));
        sznm->first = NULL;
        return sznm;
    }
    
    PolozkaSeznamu * novaPolozka(Object data)
    {
        PolozkaSeznamu * p = malloc(sizeof(PolozkaSeznamu));
        p->data = data;
        p->next = NULL;
        return p;
    }
    
    /**
     * Vlozi polozku na zacatek seznamu.
     */
    void list_insert_first(Seznam * sznm, PolozkaSeznamu * polozka)
    {
        //nejdřiv si zapamatujem první položku v seznamu protože ji jakoby přepišem novou první
        //ale tu starou potřebujem aby jsme ji napojili zatu první 
        PolozkaSeznamu * puvodniPrvni = sznm->first;
        
        // přepišem první položku novou skovanou v proměný 'polozka'
        sznm->first = polozka;
        
        // celou tu nudli položek/uzlů celýho seznamu/grafu teďko musíme zase připojit
        // známe uzlík kterým ta šňurka má pokračovat ==> toje ta původní první položka seznamu
        // nóó tak ji napojíme jako příští uzel naši nový první položky :O ;D
        polozka->next = puvodniPrvni;
        // nebo taky mužem přidat ukazatelem v tom poli takle Ňejak
        // sznm->first->next = puvodniPrvni
        // pracujem se stejnou věcí furt
    }
    
    /**
     * Vrati true, pokud je seznam prazdny.
     */
    bool isEmpty(Seznam * sznm)
    {
        // budem předpokládat že ten seznam je prázdnej když nemá žádnou první položku
        // noa první položku nemá když ukazatel 'first' kouká nikam jakože teda na NULL
        
        if(sznm->first == NULL)
            return true;
        else
            return false;
        
        //celý todleto mužem frajersky přepsat jako
        //return sznm->first;
    }
    
    /**
     * Odstrani prvni prvek seznamu, pokud je.
     */
    void list_delete_first(Seznam * sznm)
    {
        //kdybysme rovnou jentak dali dopryč první položku tak by se nám seznam rozbil :O :O
        // musíme si skovat druhou položku seznamu atu pak strčit misto ty první
        // kterou jakoby chcem vodstranit
        
        PolozkaSeznamu * prvni = sznm->first;
        PolozkaSeznamu * druha = prvni->next;
        
        //uvolníme paměť první položky
        // skoro uplně ždycky když někde děláme 'malloc' tak taky jakoby pak musíme někde dělat 'free'
        free(prvni);
        
        //jako novou první položku seznamu nastavíme druhou
        sznm->first = druha;
    }
    
    /**
     * Vrati pocet polozek seznamu.
     */
    unsigned int list_count(Seznam * sznm)
    {
        //spočítáme kolik máme položek v seznamu
        // uděláme si nějakou počítací proměnou která bude začínat na nule
        // a pudem seznamem vod první po poslední položku a za kažnou naštívenou položku
        // počítací proměnou inkrementujeme/zvíšíme o jedničku
        // nóó a to se jakoby po nás v týdletý funkci chce :D ;D
        
        //začínáme první položkou celýho seznamu
        // kdyby náááhodou byl seznam nazačátku prázdnej tak nám stejně tendleten argolytmus udělá že vrátí 0
        PolozkaSeznamu * pristiPolozka = sznm->first;
        
        // naše počítací proměná
        unsigned int kolik = 0;
        
        // todleto si měl dobře :D
        // děláme dokuď proměná 'příštíPoložka' neni null/jeji adresa je věčí od nuly takže jakoby 'true'
        while(pristiPolozka)
        {
            // zvednem počítací proměnou o 1 a jako příští položku nastavíme nóóóóóóó
            // příští položku příští položky :D :D :D ;D
            kolik++;
            pristiPolozka = pristiPolozka->next;
        }
        
        //vrátíme kolik sme napočítali
        return kolik;
        
    }
    
    /**
     * Najde polozku seznamu s nejmensim identifikatorem. Vraci NULL, pokud je
     * seznam prazdny.
     */
    PolozkaSeznamu *list_find_minid(Seznam * sznm)
    {
        //podobně jako v předchozí funkci budem procházet seznam položku popoložce
        // akorátže budem mit navíc jednu proměnou typu 'PoložkaSeznamu' noa do ní si budeme skovávat položku s nejvíc nejmenším id vobsaženýho oběktu ;D
        
        PolozkaSeznamu * pristiPolozka = sznm->first;
        
        //sem si budeme strkat tu položku s nejvíc nejmenším id oběktu
        // zatim si tam dáme tu uplně první naštívenou
        PolozkaSeznamu * nalezenaPolozka = sznm->first;
        
        while(pristiPolozka)
        {
            //pokuď id právě našívený položky je menčí než id zatim nalezený položky
            // tak si ji uložíme misto tý nalezený
            if(pristiPolozka->data.id < nalezenaPolozka->data.id)
                nalezenaPolozka = pristiPolozka;
            
            pristiPolozka = pristiPolozka->next;
        }
        
        //nakonec vrátíme ukazatel natu nalezenou položku seznamu
        return nalezenaPolozka;
        
    }
    
    /**
     * Najde polozku seznamu s odpovidajicim jmenem objektu. Vraci NULL, pokud
     * takova polozka v seznamu neni.
     */
    PolozkaSeznamu *list_find_name(Seznam * sznm, char *name)
    {
        // jeto zase uplně stejný jako předtim akorátže nebudem hledat nejmenčí id
        // ale první výskyt položky který data.name bude stejný
        
        PolozkaSeznamu * pristiPolozka = sznm->first;
        
        while(pristiPolozka)
        {
            // použijem funkci strcmp z knihovny string.h na dělání porovnání stringů
            // (vrací 0 když sou voba stringy stejný) noa když se ména schodujou tak
            // položku vrátíme
            if( strcmp(name, pristiPolozka->data.name) == 0)
                return pristiPolozka;
            
            pristiPolozka = pristiPolozka->next;
        }
        
        // pokuď sme došli až sem nóó tak asi jako hledaná položka v seznamu neni 
        // a podle zadání musíme vrátit null
        return NULL;
    }
    
    /**
     * Uvolneni seznamu.
     */
    void list_dtor(Seznam * sznm)
    {
        //projdem seznam a uděláme že vodstraníme všechny ty položky vobsažený
        // furt jeto všecko stejný
        
        PolozkaSeznamu * pristiPolozka = sznm->first;
        while(pristiPolozka)
        {
            //skováme si adresu současný oložky než ji přepišem příští
            PolozkaSeznamu * soucasna = pristiPolozka;
            pristiPolozka = pristiPolozka->next;
            //a tu současnou teďko uvolníme z paměti
            free(soucasna);
        }
        
        sznm->first = NULL;
        
    }
    
    int main()
    {
        printf("list_ctor...\n");
        Seznam * sznm = list_ctor();
    
        printf("list_empty...\n");
        printf("Seznam prazdny: %s\n", isEmpty(sznm) ? "ano" : "ne");
    
        PolozkaSeznamu *item;
    
        Object o1 = {42, "Honza"};
        printf("item_ctor...\n");
        item = novaPolozka(o1);
        printf("list_insert_first...\n");
        list_insert_first(sznm, item);
    
        printf("Seznam prazdny: %s\n", isEmpty(sznm) ? "ano" : "ne");
        printf("list_count...\n");
        printf("Pocet prvku v seznamu: %d\n", list_count(sznm));
    
        Object o2 = {2, "Malem"};
        item = novaPolozka(o2);
        printf("list_insert_first...\n");
        list_insert_first(sznm, item);
    
        Object o3 = {0, "Kralem"};
        item = novaPolozka(o3);
        printf("list_insert_first...\n");
        list_insert_first(sznm, item);
    
        printf("Pocet prvku v seznamu: %d\n", list_count(sznm));
    
        printf("Odstraneni prvniho prvku ze seznamu \n");
        list_delete_first(sznm);
        printf("Pocet prvku v seznamu: %d\n", list_count(sznm));
    
    
        // opetovne vlozeni objektu o1
        item = novaPolozka(o1);
        printf("list_insert_first...\n");
        list_insert_first(sznm, item);
    
        printf("list_find_minid...\n");
        item = list_find_minid(sznm);
        if (item != NULL) {
            printf("Polozka s nejmensim identifikatorem: {%d, \"%s\"}\n",
                item->data.id, item->data.name);
    	}
    	else
                printf("Polozka s nejmensim identifikatorem nenalezena\n");
    
        printf("list_find_name...\n");
        char* name = "Honza";
        item = list_find_name(sznm, name);
        if (item != NULL) {
                 printf("Polozka s daty %s nalezena\n", name);
    	}
    	else
                 printf("Polozka s daty %s nenalezena.\n",name);
    
        printf("list_dtor...\n");
        list_dtor(sznm);
        printf("Seznam prazdny: %s\n", isEmpty(sznm) ? "ano" : "ne");
    
        return 0;
    }
    
    
    Řešení 1× (Вherzet)
    18.12.2020 11:58 z_sk | skóre: 34 | blog: analyzy
    Rozbalit Rozbalit vše Re: Jazyk C JEDNOSMĚRNĚ VÁZANÝ SEZNAM
    list_delete_first() je zle. Neosetrujes, ak je list prazdny. V tom pripade najskor dojde k segmentation fault.
    debian.plus@protonmail.com
    Gréta avatar 18.12.2020 15:28 Gréta | skóre: 36 | blog: Grétin blogísek | 🇮🇱==❤️ , 🇵🇸==💩 , 🇪🇺==☭
    Rozbalit Rozbalit vše Re: Jazyk C JEDNOSMĚRNĚ VÁZANÝ SEZNAM

    ttssssssssssssssssss zato jako muže učitelskej že nám dal blbou testovací funkci main by sme nato jako mohli ve tři ráno nějak po spuštění hnedka přijít :O :/ :D ;D

    v zadání seto po nás chce aby seto jako hlídalo vtý samotný fci todleto takže máš pravdu :D ;D je tam teda potřeba připsat hlídací řádeček na prázdnej list/seznam malej a pak to snad bude uplně dobrý :O :O

    takle třeba ta funkce

    .
    .
    .
    
    void list_delete_first(Seznam * sznm)
    {
        // pokud je první položka null tak nebudem nic vodstraňovat a vrátíme se z funkce/přerušíme ji
        if(sznm->first == NULL)return;
        // nebo takle
        // if(!sznm->first)return;
    
        PolozkaSeznamu * prvni = sznm->first;
        PolozkaSeznamu * druha = prvni->next;
        free(prvni);
        sznm->first = druha;
    }
    
    .
    .
    .
    
    18.12.2020 18:02 Peter Golis | skóre: 64 | blog: Bežné záležitosti | Bratislava
    Rozbalit Rozbalit vše Re: Jazyk C JEDNOSMĚRNĚ VÁZANÝ SEZNAM
    On to tam dal z klasického dôvodu, aby mu to našiel Gogoľ keď bude na troch kráľov kontrolovať ktoré z detí si to nechalo vypracovať voľakde po internetoch.
    Gréta avatar 18.12.2020 20:17 Gréta | skóre: 36 | blog: Grétin blogísek | 🇮🇱==❤️ , 🇵🇸==💩 , 🇪🇺==☭
    Rozbalit Rozbalit vše Re: Jazyk C JEDNOSMĚRNĚ VÁZANÝ SEZNAM

    učitelskej línej jeto pořádně naučit a bude jako googlit svý zadání pocelým internetu jóóó?? :O :O :D :D ;D ;D

    18.12.2020 21:10 Peter Golis | skóre: 64 | blog: Bežné záležitosti | Bratislava
    Rozbalit Rozbalit vše Re: Jazyk C JEDNOSMĚRNĚ VÁZANÝ SEZNAM
    Kto tvrdí že nespal na výučbe, ten tam spí do teraz.
    Gréta avatar 23.12.2020 13:46 Gréta | skóre: 36 | blog: Grétin blogísek | 🇮🇱==❤️ , 🇵🇸==💩 , 🇪🇺==☭
    Rozbalit Rozbalit vše Re: Jazyk C JEDNOSMĚRNĚ VÁZANÝ SEZNAM

    asi natom stim googlením jako něco bude hele :O :D :D ;D

    23.12.2020 16:45 Peter Golis | skóre: 64 | blog: Bežné záležitosti | Bratislava
    Rozbalit Rozbalit vše Re: Jazyk C JEDNOSMĚRNĚ VÁZANÝ SEZNAM
    To sa deje odkedy zaviedli internet do škôl.

    Založit nové vláknoNahoru

    Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

    ISSN 1214-1267   www.czech-server.cz
    © 1999-2015 Nitemedia s. r. o. Všechna práva vyhrazena.