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 18:11 | IT novinky

    Dnes a zítra probíhá vývojářská konference Google I/O 2025. Sledovat lze na YouTube a na síti 𝕏 (#GoogleIO).

    Ladislav Hagara | Komentářů: 0
    dnes 15:22 | Komunita

    V Bostonu probíhá konference Red Hat Summit 2025. Vybrané přednášky lze sledovat na YouTube. Dění lze sledovat na síti 𝕏 (#RHSummit).

    Ladislav Hagara | Komentářů: 0
    dnes 15:00 | Nová verze

    Společnost Red Hat oficiálně oznámila vydání Red Hat Enterprise Linuxu 10. Vedle nových vlastností přináší také aktualizaci ovladačů a předběžné ukázky budoucích technologií. Podrobnosti v poznámkách k vydání.

    Ladislav Hagara | Komentářů: 1
    dnes 12:22 | Pozvánky

    Tuto sobotu 24. května se koná historicky první komunitní den projektu Home Assistant. Zváni jsou všichni příznivci, nadšenci a uživatelé tohoto projektu. Pro účast je potřebná registrace. Odkazy na akce v Praze a v Bratislavě.

    jose17 | Komentářů: 0
    dnes 04:44 | IT novinky

    Troy Hunt představil Have I Been Pwned 2.0, tj. nový vylepšený web služby, kde si uživatelé mohou zkontrolovat, zda se jejich hesla a osobní údaje neobjevili v únicích dat a případně se nechat na další úniky upozorňovat.

    Ladislav Hagara | Komentářů: 13
    včera 23:22 | Zajímavý software

    Microsoft představil open source textový editor Edit bežící v terminálu. Zdrojové kódy jsou k dispozici na GitHubu pod licencí MIT.

    Ladislav Hagara | Komentářů: 7
    včera 22:22 | Zajímavý software

    V Seattlu a také online probíhá konference Microsoft Build 2025. Microsoft představuje své novinky. Windows Subsystem for Linux je nově open source. Zdrojové kódy jsou k dispozici na GitHubu pod licencí MIT.

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

    Z příspěvku Turris Sentinel – co přinesl rok 2024 na blogu CZ.NIC: "Za poslední rok (únor 2024 – únor 2025) jsme zachytili 8,3 miliardy incidentů a to z 232 zemí a z jejich závislých území. Tyto útoky přišly od 6,2 milionu útočníků (respektive unikátních adres). SMTP minipot je stále nejlákavější pastí, zhruba 79 % útoků bylo směřováno na tento minipot, 16 % útoků směřovalo na minipot Telnet, 3 % útoků směřovaly na minipot HTTP a 2 % na minipot FTP. Dále jsme zaznamenali 3,2 milionu unikátních hesel a 318 tisíc unikátních loginů, které útočníci zkoušeli."

    Ladislav Hagara | Komentářů: 1
    včera 12:44 | Nová verze

    Byla vydána (Mastodon, 𝕏) nová verze 3.0.4 svobodné aplikace pro úpravu a vytváření rastrové grafiky GIMP (GNU Image Manipulation Program). Přehled novinek v oznámení o vydání a v souboru NEWS na GitLabu. Nový GIMP je již k dispozici také na Flathubu.

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

    Byla vydána nová stabilní verze 7.4 webového prohlížeče Vivaldi (Wikipedie). Postavena je na Chromiu 136. Přehled novinek i s náhledy v příspěvku na blogu.

    Ladislav Hagara | Komentářů: 0
    Jaký je váš oblíbený skriptovací jazyk?
     (60%)
     (23%)
     (9%)
     (2%)
     (0%)
     (0%)
     (6%)
    Celkem 47 hlasů
     Komentářů: 5, poslední dnes 20:57
    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: 790×
    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.