abclinuxu.cz AbcLinuxu.cz itbiz.cz ITBiz.cz HDmag.cz HDmag.cz abcprace.cz AbcPráce.cz
AbcLinuxu hledá autory!
Inzerujte na AbcPráce.cz od 950 Kč
Rozšířené hledání
×
    dnes 01:44 | Pozvánky

    Přemýšlíte, jak začít prázdniny? Už v úterý 1. července se bude konat Virtuální Bastlírna, tedy online setkání bastlířů, techniků, vědců i akademiků, kde se ve volné diskuzi probírají novinky ze světa techniky, ale i jiných zajímavých témat.

    Za poslední měsíc jsme byli svědky plamenů několika raket. Zatímco malá raketa od Hondy se úspěšně vznesla a opět přistála, raketa od SpaceX se rozhodla letět všemi směry najednou. Díkybohu méně … více »
    Uprdkávač | Komentářů: 0
    včera 23:44 | Komunita

    Linus Torvalds zmínil, že souborový systém Bcachefs zřejmě odstraní z mainline Linuxu v začleňovacím okně pro vydání 6.17. Kent Overstreet mu totiž posílá kód s novou funkcionalitou i pro začlenění do kandidátů na vydání, kdy očekává pouze opravy chyb. Ken Overstreet byl již dříve z vývoje vyloučen kvůli konfliktní komunikaci.

    Fluttershy, yay! | Komentářů: 7
    27.6. 11:55 | IT novinky

    Ministerstvo průmyslu a obchodu propaguje Microsoft. Ten ve spolupráci s Ministerstvem průmyslu a obchodu spouští AI National Skilling Plan v ČR. "Iniciativa Microsoftu přináší konkrétní a praktickou podporu právě tam, kde ji nejvíc potřebujeme – do škol, firem i veřejné správy.", říká ministr průmyslu a obchodu Lukáš Vlček.

    Ladislav Hagara | Komentářů: 28
    27.6. 10:55 | Zajímavý projekt

    Jste český ISP? Vyplněním krátkého dotazníku můžete pomoci nasměrovat vývoj nové generace routerů Turris Omnia [𝕏].

    Ladislav Hagara | Komentářů: 4
    27.6. 01:33 | IT novinky

    Celkové tržby společnosti Canonical za rok 2024 byly 292 milionů dolarů (pdf). Za rok 2023 to bylo 251 milionů dolarů.

    Ladislav Hagara | Komentářů: 1
    27.6. 01:22 | Nová verze

    Byla vydána verze 1.88.0 programovacího jazyka Rust (Wikipedie). Podrobnosti v poznámkách k vydání. Vyzkoušet Rust lze například na stránce Rust by Example.

    Ladislav Hagara | Komentářů: 0
    27.6. 01:11 | Nová verze

    Distribuce Tails specializující se ochranu online soukromí uživatele byla vydána ve verzi 6.17. Mimo jiné aktualizuje Tor Browser (14.5.4) a opravuje několik chyb.

    Fluttershy, yay! | Komentářů: 0
    26.6. 21:11 | Nová verze Ladislav Hagara | Komentářů: 0
    26.6. 13:11 | IT novinky

    Město Lyon posiluje svou digitální suverenitu a postupně nahrazuje software od společnosti Microsoft bezplatnými alternativami, zejména OnlyOffice pro kancelářské aplikace a Linux a PostgreSQL pro systémy a databáze.

    Ladislav Hagara | Komentářů: 9
    26.6. 11:44 | Zajímavý projekt

    Evropská občanská iniciativa Stop Destroying Videogames se snaží o to, aby vydavatelé, kteří spotřebitelům v Evropské unii prodávají videohry nebo na ně udělují licence, měli povinnost tyto hry ponechat ve funkčním (hratelném) stavu i po ukončení podpory ze své strany. Podpořit podpisem tuto iniciativu můžete v Systému pro online sběr podpisů.

    trekker.dk | Komentářů: 5
    Jaký je váš oblíbený skriptovací jazyk?
     (59%)
     (28%)
     (7%)
     (2%)
     (0%)
     (1%)
     (3%)
    Celkem 331 hlasů
     Komentářů: 16, poslední 8.6. 21: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: 791×
    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: 37 | 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: 37 | 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: 37 | 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: 37 | 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: 37 | 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.