Zpět na seznam článků     Číst komentáře (4)     Verze pro tisk

SooM-D 01) Programovani v jazyce C

Autor: Tecquilka   
24.4.2006

Dotazy na irc individualne (necekejte caste odpovedi), nebo ve stanovenem datu (http://kubicek.ic.cz/elearning.html , minimalni spozdeni odpovedi)


Pocatky tohoto programovaciho jazyku jsou mezi lety 1969 a 1973 v Bellovych laboratori AT&T. Jmeno tohoto jazyku vychazi z jmena programovaciho jazyku "B" (jeho jmeno bylo zase odvozeno z jazyka BCPL), jelikoz programovaci jazyk C z jazyka B prebiral nektere jeho vlastnosti. Toto je jemna zminka, pokud Vas zajima historie jazyka, wikipedie.cz urcite poradi.

Tak a ted zacnem zakladnimi informacemi. Urcite vsichni vite ze programy nejspis nerostou na stromech a ze jsou zde lide - "programatori", kteri ony programy sepisuji. K tomu aby jste vedeli jak, je dulezite znat nektere veci napr. "Co je to ten program vlastne je?!" Program je sled instrukci pro procesor, ktere se nasledne provadi. Samotny kod muzete sepsat v libovolnem textovem editoru. Tento zdrojovy kod, pokud je spravny (lexikalne a syntakticky) se zkompiluje pomoci prekladace (anglicky "compiler"). Timto nam vznikne spustitelny soubor. Existuji ruzne vyvojove prostredi, ktere maji sve vlastni integrovane kompilatory. Osobne nepouzivam zadne vyvojove prostredi (moje hloupost), ale jen KATE (editor, ktery zvlada zvyrazeni klicovych slov) a gcc kompilator. Dale je nutne znat jak spravne pojmenovavat sve zdrojove kody. Zdrojove kody jazyka C konci kupodivu priponou .c :D, ale dale se zde jeste rozlisuji hlavickove soubory, ktere obsahuji deklaraci funkci (napr. stdio.h pro praci se vstupem/vystupem). Soubory s priponou .c vytvarime my, hlavickove soubory s priponou .h (neni udajne nutnosti) jsou zalezitosti systemu/vyv. prostredi. Je nutne na zminene soubory s deklarovanymi funkcemi nezapominat, jestlize totiz pouziji funkci pro napr. zjisteni casu a nepripojim hlavickovy soubor .h, ktera onu funkci deklaruje, kompilator zacne hazet mnoho chyb, ale to uz casem asi sami poznate :D. Na zaver sem "pastnu" z jednoho webu dodatecne informace:

Editor: Pomoci nej se vytvari a opravuje zdrojovy soubor s priponou .c.
Preprocesor: Soucast prekladace, pri prekladu odstranuje napr. komentare, vklada hlavicky atd.
Compiller (Kompilátor): Preklada vystup preprocesoru do souboru relativnich adres (.obj), vystupem vystupem jsou take protokoly o prekladu (.lis). Jsou to sahodlouhe seznamy (listings) chyb :-)
Linker: Soubory .lib sestavuje do sebe a relativni adresy prevadi na skutecne a vznika nam exe soubor
Debugger: "Odvsivovac", slouzi k ladeni programu, odstranovani chyb po nalezeni chyby se cely cyklus opakuje (editor, compiller, linker, debugger)


[Preprocesor:]
Preprocesor je jedna z veci, ktere nektere jine jazyky nemaji vubec (pascal, java). Preprocesor neprovadi zadnou kontrolu, jen slouzi ke vkladani hlavickovych souboru (napr. stdio.h) do naseho zdrojoveho kodu, ci rozvyji makra, vypousti z kodu komentare apod., cimz nam (v pripade vkladani hlavickovych souboru) zpristupnuje nektere funkce s nim spojene. Vkladane soubory mivaji vetsinou priponu .h, ale neni to podminkou.

[Hlavickove soubory:]
Soubory s priponou .h obsahuji hlavicky vsech funkci, ktere jsou uzivany z ostatnich .c zdrojovych kodu. Obsahuje take definice uzivatelsky typu, deklarace globalnich promennych a makra preprocesoru. Vkladam zapisem "#include " (bez stredniku) a ze slusnosti do prvnich radek kodu. Osobne jsem si myslel ze lze hlavickove soubory vkladat jen do prvnich radku kodu, ale diky Czoklovi jsem byl vyveden z omylu a timto mu chci podekovat. Hlavickove soubory muzete tedy vkladat kamkoliv. Mohu si vytvorit i vlastni hlavickovy soubor, a pro malickost jeste existuji dva druhy zapisu, #include bude hledat hlavickovy soubor v mistech, ktere urci system. Behem zapisu #include "x.h" bude soubor hledan v aktualni slozce (rozliseno pomoci <> a "")..

[Makro preprocesoru:]
Definuji prikazem "#define MAKRO" bez parametru, nebo napr. "#define MAKRO 123" s parametry. Makro mohu definovat v hlavickovych souborech a ty nasledne includnout ("#include "moje_hlav.h") nebo je nechat v samotnych zdrojovych kodech. Pomoci maker mohu velmi zprehlednit zdrojovy kod, jelikoz mam nektere hodnoty na jednom miste. Makro muze obsahovat i deklarace cele funkce Mohu zapsat take s parametry: "#define MaKrO(a) (a+5)" bude pri pouziti vracet cislo o 5 vetsi.

[Identifikatory-promenne:]
Slouzi k pojmenovani promennych a funkci. Identifikator (dale jiz jen promenna) muze vypadat napr. takto: "moje" ci "moje_promenna", ale vyvarujte se pouzivani diakritiky a tomuto zapisu "_promenna", jelikoz promenne s podtrzitkem pred samotnym nazvem jsou vyhrazeny pro praci se systemem. Ale o tom az nekdy jindy. Take je dulezite zminit, ze jazyk C je case-sensitiv, tzn. hledi na velikosti pismen. Promenne "moje" a "MoJe" jsou dve zcela rozdilne promenne.
Dejte si pozor aby se zadna z Vasich promennych nejmenovala takto:auto, double, int, struct, break, else, long, switch, case, enum, register, typedef, char, extern, return, un*on, const, float, short, unsigned, continue, for, signed, void, default, goto, sizeof, volatile, do, if, static, while. Jsou to vyhrazena klicova slova. Pred promennou musim uvest jeji datovy typ: "int promenna;" (ukoncuji strednikem).

[Komentare:]
Kazdy program (zdrojovy kod) by mel byt spravne okomentovany. V C se komentare vkladaji mezi tento parovy znak: "/*" pro otevreni a "*/" pro uzavreni. Takto zapsane komentare mohou byti vice radkove. Komentare zapsane formou "//" jsou brany jen na urovni jednoho radku. Komentare nejsou zkompilovany, jsou zcela ignorovany, takze se na velikosti programu (exe) neprojevi. Malem bych zapomnel, nedavejte komentare napr. do parametru, ci do promennych. Uvedu priklad spatneho vyuziti: "int moje/*komentar*/promenna;", do funkci apod.


[Jednoduche datove typy:]
Datove typy nam urcuji jakeho typu bude promenna. U jednoduchych datovych typu ukazu rozdil na tom, co muze obsahovat. Promenna, ktera ma obsahovat znak nebyva stejneho typu jak promenna, ktera bude obsahovat cislo. Je nutne deklarovat promennou se spravnym datovym typem jeste drive nez ji zacneme pouzivat pro praci. Ted sem napisi zakladni datove typy a k tem pozdeji pridam jeste dalsi, ale to az v dobe, kdy bude treba. Jeste mala poznamka, je dulezite hledet, aby jste napriklad nepripocitavali k znaku nejake cislo :D (ikdyz i to by melo jit :D, znak by se posunul v ASCII tabulce (aspon takto to funguje v pascalu :D))
INTEGER :zapisuje se "int promenna", slouzi k uchovani celociselne promenne (bez desetinne carky), cislo muze byt i zaporne
SHORT :zapisuje se "short promenna", zkracena verze datoveho typu integer (16 bitu)
LONG :zapisuje se "long promenna", dlouhe cele cislo (32 bitu)
CHARACTER :zapisuje se "char promenna", slouzi k uchovani znaku
FLOAT :zapisuje se "float promenna", slouzi k uchovani realneho cisla (cisla s desetinou carkou)
DOUBLE :zapisuje se "double promenna", stejny vyznam jako FLOAT, jen je zvysena presnost (vic desetinnych carek)


[Konstanty:]
Konstanta, uz z pojmenovani je to promenna, ktera se v behu programu nemeni. Konstantu musite deklarovat a definovat zaroven pri vzniku ("const int prom=15;"), nelze menit behem behu programu. Konstanta nesmi obsahovat zadnou z techto operaci: prirazeni, inkrementace a dekremantace, funkcni volani a carku :D Spravne zapisy: "const int moje_konstanta = 123;", ci "const float Konstanta = 6.6256e-34;", nebo "const char male_a = 'a';" a take "const float meze[2] = {-20, 60};" Neuvedete-li pri vytvareni konstant zadny datovy typ, bude implicitne chapan jako konstanta datoveho typu integer.


[Operatory:]
Slouzi k praci s promennymi a hodnotami v nich ulozenych. Zakladni matematicke operatory jsou +,-,/,* a i zde plati priorita (nasobeni/deleni ma prednost pred scitanim a odcitanim). Dale je zde operator prirazeni "=", pomoci ktereho promenne priradim hodnotu, z prave strany leve. Jsou zde operatory inkrementace a dekrementace, ktere slouzi k zvyseni/snizeni hodnoty promenne o jednicku, zapisuji takto "++promenna_a;", vynam je stejny, jako pri zapisu "promenna_a = promenna_a + 1;". Toto byla inkrementace, dekrementaci zapisuji podobne, jen s pouzitim dvou minus (" --promenna_a;"). U inkrementace a dekrementace take zalezi na pozici, na ktere jsou ona plus/minus. Pri zapisu "++prom;" se v prvni rade zvedne hodnota promenne a pak se s ni manipuluje (nazyva se PREFIX), a pri zapisu "prom++;" se naopak v prvni rade pracuje s promennou a pak az se hodnota zvysuje (POSTFIX). Zda se to nevyznamne, ale na prikladech ukazi ze to neni zase takova pravda. Dalsim vyznamnymi operatory jsou: reference "&", logicka negace "!", bitova negace "~", funkce sizeof(), prirazeni "=", porovnani "==" (POZOR NEPLEST S PRIRAZENIM), ">>" a "<<" jsou bitove posuny, "&" je v ramci binarnich operatoru jako bitovy soucin (and), "|" je bitovy soucet, "&&" logicky soucin, "||" logicky soucet, "." tecka, primi pristup ke clenu struktury, "->" neprimy pristup k clenu struktury, "<" a ">" jako mensi a vetsi, "!=" nerovnost.
Existuji potom jeste operatory ternalni (jeden), a to jest on "? :" (zapis je slozitejsi, ale pro zasmani ukazi pozdeji). Jeste existuji kombinace (napriklad "+=" znamena priporazeni s vypoctem), ale ty ukazi pozdeji.
Operatoru je mnoho, ale bohate mi stacilo znat zakladni operatory pro matematicke vypocty (+,-,*,/), prirazeni a porovnani, vcetne vetsi a mensi (=,==,<,>) a inkrementace a dekrementace. O referenci si zminim dal, a o tecce, pomoci ktere prichazim k clenum struktury taky az bude treba.

No trosinku jsem se rozepsal, ale doufam ze sem nenapsal zadne blaboly :D ted uvedu uz jen par prikladu a vysvetleni.

[Priklady:]

01.) #include /* stdio slouzi pro standartni vstup/vystup */
int main() /* hlavni telo programu, musi byt,vysvetlim podrobneji az budem probirat funkce*/
{
printf("AHOJ SVETE"); // funkce pro vypis na obrazovku
return 0; // funkce ma mit navratovou hodnotu, normalne v pripade 0 ok, jinak chybka, neni pravidlem
}

02.) int main()
{
int a,b;
a = 5;
b = ++a; // promenna b ma hodnotu 6
a = 5;
b = a++; // promenna b ma hodnotu 5
}

03.) int main()
{
int a = 3;
a += 5; // hodnota bude 8 (stejne jako a = a + 5; )
}

04.) #include //musi byt, jelikoz pouzivam funkci printf
int main()
{
char znak;
znak = 'a';
printf("%c \n",znak);
}


Zatim si jen udelejte drobne poznamky a na foru navidenou :D
Priste si vysvetlime co je to to main, funkce pro vstup a vystup (terminalovy)
Teste se :D

PS: Dotazy ve stanovenou dobu na foru :D (v pripade chyby [neme-li by byt] piste kdykoliv pm :D)

Líbil se Vám článek?
Budeme potěšeni, pokud vás zaujme také reklamní nabídka

Social Bookmarking

     





Hodnocení/Hlasovalo: 3/1

1  2  3  4  5    
(známkování jako ve škole)