Dnes a zítra probíhá vývojářská konference Google I/O 2025. Sledovat lze na YouTube a na síti 𝕏 (#GoogleIO).
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).
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í.
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ě.
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.
Microsoft představil open source textový editor Edit bežící v terminálu. Zdrojové kódy jsou k dispozici na GitHubu pod licencí MIT.
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.
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."
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.
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.
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:
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
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; }
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; } . . .
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
asi natom stim googlením jako něco bude hele :O :D :D ;D
Tiskni
Sdílej: