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í
×

včera 14:44 | Pozvánky

Spolek OpenAlt zve příznivce otevřených technologií a otevřeného přístupu na 151. brněnský sraz, který proběhne v pátek 20. 4. od 18:00 hodin v restauraci Benjamin na Drobného 46.

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

Byla vydána verze 18.04.0 KDE Aplikací (KDE Applications). Přehled novinek v kompletním seznamu změn a na stránce s dalšími informacemi.

Ladislav Hagara | Komentářů: 0
včera 13:11 | Nová verze

Bylo oznámeno vydání nové stabilní verze 1.26 a beta verze 1.27 open source textového editoru Atom (Wikipedie). Přehled novinek i s náhledy v příspěvku na blogu. Podrobnosti v poznámkách k vydání.

Ladislav Hagara | Komentářů: 0
včera 12:55 | Komunita

Dle plánu byla dnes vydána hra Rise of the Tomb Raider (Wikipedie) pro Linux. Koupit ji lze za 49,99 €.

Ladislav Hagara | Komentářů: 0
včera 09:55 | Bezpečnostní upozornění

Společnost Oracle vydala čtvrtletní bezpečnostní aktualizaci svých softwarových produktů (CPU, Critical Patch Update). Opraveno bylo celkově 254 bezpečnostních chyb. V Oracle Java SE je například opraveno 14 bezpečnostních chyb. Vzdáleně zneužitelných bez autentizace je 12 z nich. V Oracle MySQL je opraveno 33 bezpečnostních chyb. Vzdáleně zneužitelné bez autentizace jsou 2 z nich.

Ladislav Hagara | Komentářů: 3
18.4. 23:11 | Nová verze

Byla vydána verze 8.0 linuxové distribuce Trisquel GNU/Linux. Nejnovější verze Trisquel nese kódové jméno Flidas a bude podporována do roku 2021. Výchozím prostředím je nově MATE 1.12. Trisquel patří mezi svobodné distribuce doporučované Nadací pro svobodný software (FSF).

Ladislav Hagara | Komentářů: 0
18.4. 16:00 | Nová verze

Byla vydána nová verze 27.9.0 webového prohlížeče Pale Moon (Wikipedie) vycházejícího z Firefoxu. Přehled novinek v poznámkách k vydání. Jedná se o poslední větší aktualizaci verze 27. Vývojáři se zaměří na novou verzi 28.

Ladislav Hagara | Komentářů: 0
18.4. 12:00 | Nová verze

Google Chrome 66 byl prohlášen za stabilní (YouTube). Nejnovější stabilní verze 66.0.3359.117 tohoto webového prohlížeče přináší řadu oprav a vylepšení. Vylepšeny byly také nástroje pro vývojáře (YouTube). Opraveno bylo 62 bezpečnostních chyb.

Ladislav Hagara | Komentářů: 0
18.4. 06:00 | Nová verze

Byla vydána druhá RC verze nové řady 2.10 svobodné aplikace pro úpravu a vytváření rastrové grafiky GIMP. Přehled novinek i s náhledy v oznámení o vydání.

Ladislav Hagara | Komentářů: 0
17.4. 23:39 | Pozvánky

Již tento čtvrtek (19. 4.) se v posluchárně 107 na Fakultě informačních technologií ČVUT v Praze Dejvicích odehraje večer s Turrisem, tentokrát zaměřený na nový modulární router MOX. Mluvit o něm budou Patrick Zandl a Ondřej Filip, ale bude i prostor pro dotazy a diskuzi s vývojáři. Akce začíná v 18:00 a plánovaný konec je v 19:45. Mapka, kde se nachází daná posluchárna, a možnost registrace je k dispozici na webu CZ.NIC.

Miška | Komentářů: 0
Používáte na serverech port knocking?
 (2%)
 (7%)
 (47%)
 (27%)
 (16%)
Celkem 323 hlasů
 Komentářů: 29, poslední 5.4. 12:25
    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: 636×
    >
    
    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: 71 | 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: 71 | 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: 61 | 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: 79 | 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: 71 | 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: 71 | 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.