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í
×
    dnes 04:55 | Nová verze

    OpenJS Foundation, oficiální projekt konsorcia Linux Foundation, oznámila vydání verze 22 otevřeného multiplatformního prostředí pro vývoj a běh síťových aplikací napsaných v JavaScriptu Node.js (Wikipedie). V říjnu se verze 22 stane novou aktivní LTS verzí. Podpora je plánována do dubna 2027.

    Ladislav Hagara | Komentářů: 0
    dnes 04:22 | Nová verze

    Byla vydána verze 8.2 open source virtualizační platformy Proxmox VE (Proxmox Virtual Environment, Wikipedie) založené na Debianu. Přehled novinek v poznámkách k vydání a v informačním videu. Zdůrazněn je průvodce migrací hostů z VMware ESXi do Proxmoxu.

    Ladislav Hagara | Komentářů: 0
    dnes 04:11 | Nová verze

    R (Wikipedie), programovací jazyk a prostředí určené pro statistickou analýzu dat a jejich grafické zobrazení, bylo vydáno ve verzi 4.4.0. Její kódové jméno je Puppy Cup.

    Ladislav Hagara | Komentářů: 0
    včera 22:44 | IT novinky

    IBM kupuje společnost HashiCorp (Terraform, Packer, Vault, Boundary, Consul, Nomad, Waypoint, Vagrant, …) za 6,4 miliardy dolarů, tj. 35 dolarů za akcii.

    Ladislav Hagara | Komentářů: 9
    včera 15:55 | Nová verze

    Byl vydán TrueNAS SCALE 24.04 “Dragonfish”. Přehled novinek této open source storage platformy postavené na Debianu v poznámkách k vydání.

    Ladislav Hagara | Komentářů: 0
    včera 13:44 | IT novinky

    Oznámeny byly nové Raspberry Pi Compute Module 4S. Vedle původní 1 GB varianty jsou nově k dispozici také varianty s 2 GB, 4 GB a 8 GB paměti. Compute Modules 4S mají na rozdíl od Compute Module 4 tvar a velikost Compute Module 3+ a předchozích. Lze tak provést snadný upgrade.

    Ladislav Hagara | Komentářů: 0
    včera 04:44 | Nová verze

    Po roce vývoje od vydání verze 1.24.0 byla vydána nová stabilní verze 1.26.0 webového serveru a reverzní proxy nginx (Wikipedie). Nová verze přináší řadu novinek. Podrobný přehled v souboru CHANGES-1.26.

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

    Byla vydána nová verze 6.2 živé linuxové distribuce Tails (The Amnesic Incognito Live System), jež klade důraz na ochranu soukromí uživatelů a anonymitu. Přehled změn v příslušném seznamu. Tor Browser byl povýšen na verzi 13.0.14.

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

    Byla vydána nová verze 30.0.0 frameworku pro vývoj multiplatformních desktopových aplikací pomocí JavaScriptu, HTML a CSS Electron (Wikipedie, GitHub). Chromium bylo aktualizováno na verzi 124.0.6367.49, V8 na verzi 12.4 a Node.js na verzi 20.11.1. Electron byl původně vyvíjen pro editor Atom pod názvem Atom Shell. Dnes je na Electronu postavena celá řada dalších aplikací.

    Ladislav Hagara | Komentářů: 2
    včera 04:11 | Nová verze

    Byla vydána nová verze 9.0.0 otevřeného emulátoru procesorů a virtualizačního nástroje QEMU (Wikipedie). Přispělo 220 vývojářů. Provedeno bylo více než 2 700 commitů. Přehled úprav a nových vlastností v seznamu změn.

    Ladislav Hagara | Komentářů: 0
    KDE Plasma 6
     (72%)
     (9%)
     (2%)
     (17%)
    Celkem 741 hlasů
     Komentářů: 4, poslední 6.4. 15:51
    Rozcestník

    Dotaz: Snazim se pochopit pole v C a nefunguje mi program

    Bundas avatar 24.1.2014 16:27 Bundas | skóre: 14 | Pardubice
    Snazim se pochopit pole v C a nefunguje mi program
    Přečteno: 664×
    >
    
    int main(void)
    {
        int a,k,i;
        scanf("%d", &a);
        int b[2000];
        for(i = 0; i < a; i++){
            b[i];
        }
        b[i] = k;
        printf("\n%d\n", k);
        return 0;
    
    }
    
    

    Nevite proc to nefunguje? na zacatku se ma ulozit hodnota do promenne a. Potom se definuje neinicializovane pole b. Potom by se mela zapsat hodnota z promenne a do pole b a pak by se mela hodnota pole b priradit do promenne k.
    Abe the Messiah has come.

    Odpovědi

    24.1.2014 16:37 axel
    Rozbalit Rozbalit vše Re: Snazim se pochopit pole v C a nefunguje mi program
    Je to uplny nesmysl, projdi si jednotlive radky a rekni si slovy, co delaji. Z toho by melo vyjit, ze napr. "b[i]" nedela vubec nic, nebo ze prochazet pole podle indexu zadanych v promenne a nema zadny vztah k tvemu zadani, ktere je ostatne popsane dost zmatecne... Pripadne si poloz otazku, kde se vzala konstanta "2000".
    Bundas avatar 24.1.2014 16:45 Bundas | skóre: 14 | Pardubice
    Rozbalit Rozbalit vše Re: Snazim se pochopit pole v C a nefunguje mi program
    Dej sem prosim zdrojak.
    Abe the Messiah has come.
    24.1.2014 16:58 axel
    Rozbalit Rozbalit vše Re: Snazim se pochopit pole v C a nefunguje mi program
    Zdrojak ceho? Jestli neumis napsat prirazeni do promenne (coz neumis), zacni nejakym tutorialem - v tuto chvili nejsi ve stavu, abys nejake zdrojaky vybec pochopil. Coz nemyslim zle, zadny uceny z nebe nespadl, ale samostudium je zaklad, ptat se na forech na takove veci je ztrata casu vsech zucastnenych.
    25.1.2014 11:51 xxxx
    Rozbalit Rozbalit vše Re: Snazim se pochopit pole v C a nefunguje mi program
    #include <iostream>
    #include <array>
    
    using namespace std;
    
    void main(int argc, char* argv[])
    {
    	array<int, 3> arr = { 1, 2, 3 };
    	for (int i : arr) cout << i << endl;
    	system("pause");
    }
    25.1.2014 12:23 Šangala | skóre: 56 | blog: Dutá Vrba - Wally
    Rozbalit Rozbalit vše Re: Snazim se pochopit pole v C a nefunguje mi program
    C?
    To, že trpíš stihomamem, ještě neznamená, že po tobě nejdou. ⰞⰏⰉⰓⰀⰜⰉ ⰗⰞⰅⰜⰘ ⰈⰅⰏⰉ ⰒⰑⰎⰉⰁⰕⰅ ⰏⰉ ⰒⰓⰄⰅⰎ ·:⁖⁘⁙†
    24.1.2014 17:18 potato
    Rozbalit Rozbalit vše Re: Snazim se pochopit pole v C a nefunguje mi program
    Přiřazení v C má formu[*]
    lhs = rhs;
    lhs je věc, do které se přiřazuje. Normálně tedy proměnná, prvek pole nebo struktury, ..., obecně něco adresovatelného.

    rhs je hodnota, která se přiřazuje.

    Porovnej si na základě toho svoje popisy, co se má dít, s kódem. Zjistíš, že vůbec neodpovídají.

    [*] Pro puristy: coby příkaz. Přiřazení je samozřejmě výraz, takže lze přiřadit i někde uprostřed výrazu, ale tímto teď nekomplikuji.
    24.1.2014 19:13 MadCatX
    Rozbalit Rozbalit vše Re: Snazim se pochopit pole v C a nefunguje mi program
    Trochu mimo soutěž, ale vzhledem k tomu, že ten zdroják obsahuje pár nelogických věcí, by ti asi pomohlo překládat to nějakým ukecaným kompilátorem. Když to totiž já přeložím já, dostanu tohle:

    GCC 4.8 -Wall -pedantic
    waste01.c: In function ‘main’:
    waste01.c:7:5: warning: ISO C90 forbids mixed declarations and code [-Wpedantic]
         int b[2000];
         ^
    waste01.c:9:2: warning: statement with no effect [-Wunused-value]
      b[i];
      ^
    waste01.c:11:10: warning: ‘k’ is used uninitialized in this function [-Wuninitialized]
         b[i] = k;
              ^
    
    Clang 3.4 -Wall -pedantic
    waste01.c:9:5: warning: expression result unused [-Wunused-value]
            b[i];
            ~ ~^
    waste01.c:11:12: warning: variable 'k' is uninitialized when used here [-Wuninitialized]
        b[i] = k;
               ^
    waste01.c:5:12: note: initialize the variable 'k' to silence this warning
        int a,k,i;
               ^
                = 0
    2 warnings generated.
    
    Měl by ses snažit, aby ti kompilátor žádné warningy nevyhazoval i při velmi drsném nastavení, co se má kontrolovat. Minimálně v tomto případě bys totiž hned viděl, že ten tvůj kód nedává moc smysl.

    Co si BTW představuješ pod pojmem "pole"? Přijde mi, že ti to není vůbec jasné...
    Bundas avatar 24.1.2014 19:32 Bundas | skóre: 14 | Pardubice
    Rozbalit Rozbalit vše Re: Snazim se pochopit pole v C a nefunguje mi program
    pole si predstavuju jakou soubor cisel se stejnym nazvem a ruznou adresou
    Abe the Messiah has come.
    24.1.2014 21:48 MadCatX
    Rozbalit Rozbalit vše Re: Snazim se pochopit pole v C a nefunguje mi program
    Já bych spíš řekl, že pole v C je Spojitý blok paměti obsahující objekty stejného typu. S jednotlivými prvky se zachází stejně jako s normálními proměnnými. Moc nerozumím tomu, cos myslel tím "uložit hodnotu proměnné a do pole". Ukládat se dá jen do prvků pole, ne do pole jako takového.
    Bundas avatar 24.1.2014 23:24 Bundas | skóre: 14 | Pardubice
    Rozbalit Rozbalit vše Re: Snazim se pochopit pole v C a nefunguje mi program
    Trochu mimo topic:

    kdyz je dvourozmerne pole int pole[1001][3] jak se da zadat vstup do toho pole?

    nebo kdyz na vstupu zadame cislo do promenne N a cislo N ma predstavovat pole[N][3]
    Abe the Messiah has come.
    25.1.2014 00:21 MadCatX
    Rozbalit Rozbalit vše Re: Snazim se pochopit pole v C a nefunguje mi program
    Sorry, ale opět ten dotaz moc nechápu.
    pole[N][3] - hodnota v poli "pole" na řádku N, sloupci 3
    
    pole[N][3] = x; // Do pole "pole" přiřaď na řádek N, sloupec 3 hodnotu "x"
    
    Bundas avatar 25.1.2014 12:35 Bundas | skóre: 14 | Pardubice
    Rozbalit Rozbalit vše Re: Snazim se pochopit pole v C a nefunguje mi program
    tkze kdyby bylo

    int N = 20;
    int pole[N][3];
    pole[1-N][1-3] = 3; // Do pole "pole" prirad cislo 3 na radek 1 az N, sloupec 1 az 3 hodnotu 3 

    muze to tak byt?
    Abe the Messiah has come.
    25.1.2014 13:07 Jakub Galgonek
    Rozbalit Rozbalit vše Re: Snazim se pochopit pole v C a nefunguje mi program
    Ne, nemůže. Obecně nelze přiřadit hodnotu všem prvkům pole jedním přiřazením. Nejlepší asi bude pořídit si nějakou učebnici jazyka C a začít od začátku. Já osobně třeba začínal s Heroutem (http://www.kopp.cz/www/cz/607-vyrobek-ucebnice-jazyka-c).
    25.1.2014 13:12 MadCatX
    Rozbalit Rozbalit vše Re: Snazim se pochopit pole v C a nefunguje mi program
    Nemůže a to hned ze dvou důvodů. Jednak indexy pole v C nesmí být záporné a druhak staticky alokované pole (to, co operátor [] vyrobí) nemůže mít proměnnou velikost, takže použít jako délku pole nekonstantní proměnnou není přípustné.

    Přiřadit hodnotu více prvkům v poli najednou nelze, na to je třeba použít cyklus.
    25.1.2014 13:18 Michal Kubeček | skóre: 72 | Luštěnice
    Rozbalit Rozbalit vše Re: Snazim se pochopit pole v C a nefunguje mi program
    staticky alokované pole (to, co operátor [] vyrobí) nemůže mít proměnnou velikost, takže použít jako délku pole nekonstantní proměnnou není přípustné

    V tomhle případě to projde, protože ta alokace se provádí až za běhu. Neprošlo by to u globální proměnné nebo kdyby pole bylo static. Použije se ale samozřejmě aktuální hodnota N v okamžiku té inicializace.

    Jardík avatar 26.1.2014 21:46 Jardík | skóre: 40 | blog: jarda_bloguje
    Rozbalit Rozbalit vše Re: Snazim se pochopit pole v C a nefunguje mi program
    Imho když dop*dele někho chcu učit C v roce 2014, proč ho neučím C11 či alespoň C99 (15 let starý standard), ale musím se z nějakýho důvodu držet kravin, co vám vtloukali do hlavi v jeslích. imho index samozřejmě záporný být může, C99 §6.5.2.1/2 stanoví:
    The definition of the subscript operator [] is that E1[E2] is identical to (*((E1)+(E2))).
    
    Klidně můžete napsat i 50[mojepole]. Souhlasím, žě nemusíme mást (česky?) začátečníka, ale taky mu nemusíme lhát. A jeho pole je něco, čemu se nadává VLA a je naprosto v souladu s C99, C11 pak tuto "featuru" stanoví jako volitelnou (když není dostupné, musí být definováno __STDC_NO_VLA__).
    Přiřadit hodnotu více prvkům v poli najednou nelze, na to je třeba použít cyklus.
    Když se chce, tak jde i toto :-)
    Věřím v jednoho Boha.
    27.1.2014 08:07 Šangala | skóre: 56 | blog: Dutá Vrba - Wally
    Rozbalit Rozbalit vše Re: Snazim se pochopit pole v C a nefunguje mi program
    Taky neříkáš všechno:

    int N = 20;
    int pole[N][3];     /*int pole[20][3]    */
    pole[1-N][1-3] = 3; /*pole[-19][-2] = 3; */
    
    Tedy zápis mimo alokovaný prostor.

    Záporné indexy mohou fungovat takto, ale že by to byla zrovna začátečnická praktika…

    int pole[3] = {0,1,2};
    int *ptr = &pole[2];
    printf("%d,%d,%d",pole[0],pole[1],pole[2]);
    printf("%d,%d,%d",ptr[-2],ptr[-1],ptr[0] );
    

    To, že trpíš stihomamem, ještě neznamená, že po tobě nejdou. ⰞⰏⰉⰓⰀⰜⰉ ⰗⰞⰅⰜⰘ ⰈⰅⰏⰉ ⰒⰑⰎⰉⰁⰕⰅ ⰏⰉ ⰒⰓⰄⰅⰎ ·:⁖⁘⁙†
    25.1.2014 13:13 Michal Kubeček | skóre: 72 | Luštěnice
    Rozbalit Rozbalit vše Re: Snazim se pochopit pole v C a nefunguje mi program

    Ne. Nevymýšlejte si, prosím, svou vlastní syntaxi. Četl jste snad někde něco o tom, že jako index pole můžete napsat rozsah, navíc se znakem, který obvykle znamená odečítání? Překladač není člověk a nebude hádat, co jste tím asi tak mohl myslet. To, co jste napsal, by ve skutečnosti znamenalo

      pole[-19][-2] = 3
    

    Pokud chcete naplnit celé pole, musíte to udělat cyklem:

      int i, j;
    
      for (i = 0; i < N; i++)
        for (j = 0; j < 3; j++)
          pole[i][j] = 3;
    
    nebo pokud překladač podporuje C99 syntaxi
      for (int i = 0; i < N; i++)
        for (int j = 0; j < 3; j++)
          pole[i][j] = 3;
    
    Bundas avatar 25.1.2014 19:45 Bundas | skóre: 14 | Pardubice
    Rozbalit Rozbalit vše Re: Snazim se pochopit pole v C a nefunguje mi program
    co kdyz na vstupu program dostane 2 radky a na kazdem radku 123123 ruznych cisel?

    jak se to da zapsat do pole cisla[2][123123]?
    Abe the Messiah has come.
    25.1.2014 20:19 potato
    Rozbalit Rozbalit vše Re: Snazim se pochopit pole v C a nefunguje mi program
    Úplně stejně. Akorát normální programátor v C nebude nikdy vytvářet statické pole cisla[2][123123], ale paměť dynamicky alokuje z haldy.
    26.1.2014 01:32 lertimir | skóre: 64 | blog: Par_slov
    Rozbalit Rozbalit vše Re: Snazim se pochopit pole v C a nefunguje mi program
    Takhle, že se budeš ptát na chybné programy, se to naučit nejde. Z těch příkladů je zcela jasně vidět, že naprosto nevíš, co se v tom jazyku děje. Potom i otázky jsou v podstatě nesmyslné a nedá se na ně odpovědět. Vezmi si dobrou knihu o C a tu si přečti, udělej všechny příklady, a porozumíš tomu jazyku. Já jsem se před mnoha lety učil z Programovací jazyk C - Kernighan, Brian W.; Ritchie, Dennis M. Což má tu výhodu, že jsou to autoři jazyka C a vyložili ho vynikajícím způsobem. Všichni také říkají, že Herout Učebnice jazyka C, je také výborná kniha, ale tu jsem nečetl. A v téhle chvíli zapomeň na pole. Při práci s polemi je C mnohem blíže assembleru než skoro jakýkoliv jiný jazyk, který jsi potkal (ať je to pascal, java, nebo co jsi zkoušel). Nejdříve zvládni pointry, protože tak se realizuje to pole. V nějaké proměnné máš adresu do paměti, kde jsou další data. Dokud neporozumíš jak nastavit (inicializovat), co je v pointru a kam má ukazovat, aby to bylo správně, nezabývej se polem, protože pole je jen konstantní pointer.

    A k té otázce: Co to znamená "co kdyz na vstupu program dostane 2 radky..."? Je to myšleno podprogram/funkce dostane v parametrech? Pak podprogram dostane pointr na pole o dvou prvcích, každý z těchto prvků obsahuje pointr na adresu paměti (začátek prostoru) o velikosti 123123 objektů (a záleží jestli je to objekt int, short, long, float). Protože v tom jediném pointru, který podprogram dostane, není žádná informace o rozměrech, musí dostat dalšími parametry počet řádku a sloupců. A pak se po prostoru pole může pohybovat.

    Nebo je to myšleno, že program dostane datový proud na STDIN? Pak si na to musí udělat/alokovat místo, načíst data a opět se pointry dostane, kam potřebuje.
    26.1.2014 12:11 sad
    Rozbalit Rozbalit vše Re: Snazim se pochopit pole v C a nefunguje mi program
    Já bych jako první knihu o C bych doporučil Učebnici jazyka C od Herouta, protože programování učí. Kniha Programovací jazyk C Kernighan, Ritchie mi přijde spíše jako referenční příručka pro lidi, kteří už umí programovat. V Heroutovi je lépe vysvětlen oddělený překlad a dynamická alokace paměti, u KR je malloc zmíněn jen okrajově. Herout upozorňuje na to, že enter zůstává načten v bufferu, což je u KR pravděpodobně vinou zastaralosti opomíjeno a má to za následek to, že správně nefunguji i ty nejjednodušší příklady na getchar, a matoucí může být i testování getchar na EOF. Heroutova Učebnice obsahuje rozmanitější příklady, není tak roztahaná a nezáživná jako KR, srovnává C s Pascalem, takže člověk dostane základy i jiného jazyka. Takže pro začátečníka bych skutečně doporučil toho Herouta a pak, když už začal s C, ať se pustí do C++, algoritmů, datových struktur a knihovny závislé na tom, co chce programovat. Ale podotýkám, že nejsem moc dobrý programátor, takže možná píši kraviny.
    26.1.2014 22:19 potato
    Rozbalit Rozbalit vše Re: Snazim se pochopit pole v C a nefunguje mi program
    Obě knihy, K&R a Herout jsou dobré. Ani jedna není úplně ideální. K&R je už dnes trochu moc historická (psát dnes v C99 by už neměla být žádná exotika, není-li tedy člověk v zajetí MSVC). Herout je zase taková přeučovací příručka pro pascalisty (to pro mne kdysi bylo ideální, ale dnes už Pascal nevládne výuce informatiky).

    Celkově ale asi jakákoli učebnice, která slušně vysvětluje C, by měla postačovat k pochopení syntaxe a ukazatelů -- a aby tazatelovy programy přestaly být snůškou náhodných, a často i syntakticky pochybných konstrukcí, a obsahovaly nanejvýš normální chyby, nad kterými už lze smysluplně diskutovat.
    24.1.2014 20:21 Petr Šobáň | skóre: 80 | blog: soban | Olomouc
    Rozbalit Rozbalit vše Re: Snazim se pochopit pole v C a nefunguje mi program
    int main(void)
    {
        int a,k,i;                // tři proměnné int neinicializované
        scanf("%d", &a);          //přečteme číslo a uložíme proměnnou do "a"
         int b[2000];             // neinicializované pole 
        for(i = 0; i < a; i++){   //provedeme cyklus několikrát pokud bude a>i
            b[i];                 //zde nic neděláme nemá to význam
        }                         //konec cyklu                   
        b[i] = k;                 //neinicializovanou proměnnou přečteme a zapíšeme do pole někam kam ukazuje proměnná i čili zapisujeme buhví co a bůh ví kam
        printf("\n%d\n", k);      //vypíšeme nesmysl co je v neinicializované proměnné k
        return 0;                 //konec
    
    }
    
    Co takhle si nejdříve něco přečíst Programování v jazyce C
    24.1.2014 22:05 Michal Kubeček | skóre: 72 | Luštěnice
    Rozbalit Rozbalit vše Re: Snazim se pochopit pole v C a nefunguje mi program
        b[i] = k;                 //neinicializovanou proměnnou přečteme a zapíšeme do pole někam kam ukazuje proměnná i čili zapisujeme buhví co a bůh ví kam
    

    To není tak úplně pravda, bezprostředně po skončení cyklu bude mít proměnná i hodnotu a. Že to nedává smysl, protože pravá strana je neinicializovaná a levou pak nikdy nepoužijeme (a nedávalo by to smysl ani obráceně, protože levá strana také není inicializovaná), to už je jiná kapitola.

    Musím říct, že tady mne tazatel dostal. Většinou u špatně napsaného programu aspoň tuším, co měl autor na mysli. Tady se naprosto neodvažuji hádat; podobné pocity jsem měl při čtení zdrojáku z úlohy 6 tady.

    martin-ux avatar 24.1.2014 23:52 martin-ux | skóre: 18 | Bratislava
    Rozbalit Rozbalit vše Re: Snazim se pochopit pole v C a nefunguje mi program
    otazne je, co nie je uplne pravda. pretoze ak a >= 2000, tak ten comment je presny - nevieme co zapisujeme nevieme kam (resp. vieme kam, ale nevieme co prepisujeme).
    ..when you do things right, people won't be sure you've done anything at all..
    25.1.2014 00:48 Michal Kubeček | skóre: 72 | Luštěnice
    Rozbalit Rozbalit vše Re: Snazim se pochopit pole v C a nefunguje mi program
    To samozřejmě ano, ale takové věci má IMHO smysl začít řešit až tehdy, když ten program bude dávat aspoň trochu smyslu.

    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.