9. Preprocesor I
  1. Vzhledn∞j╣φ °e╣enφ p°edchozφho zadßnφ m∙╛eme zφskat pomocφ komponenty StringGrid. S pou╛φvßnφm tΘto komponenty se seznßmφme v novΘ aplikaci. Na formulß° umφstφme tuto komponentu a tlaΦφtko ?Spus╗. Formulß° zv∞t╣φ?. Formulß° zv∞t╣φme. StringGrid zm∞nφme dßle tyto vlastnosti: ColCount (poΦet sloupc∙) nastavφme na 6, RowCount (poΦet °ßdk∙) na 5, DefaultColWidth (implicitnφ ╣φ°ka sloupce) na 100 a ScrollBars na ssNone (zßkaz pou╛itφ posuvnφk∙). Komponentu zv∞t╣φme tak, aby v╣echny sloupce a °ßdky byly zobrazeny. Obsluha stisku tlaΦφtka bude tvo°ena p°φkazy:

  2. char pom[20];
    int Sloupec, Radek;
    for (Sloupec = 1; Sloupec <= 5; Sloupec++) {
      sprintf(pom, "Sl. %d", Sloupec);
      StringGrid1->Cells[Sloupec][0] = pom;
    }
    for (Radek = 1; Radek <= 4; Radek++) {
      sprintf(pom, "Rad. %d", Radek);
      StringGrid1->Cells[0][Radek] = pom;
    }
    for (Sloupec = 1; Sloupec <= 5; Sloupec++)
      for (Radek = 1; Radek <= 4; Radek++) {
        sprintf(pom, "Sl. %d Rad. %d", Sloupec, Radek);
        StringGrid1->Cells[Sloupec][Radek] = pom;
    }
    Prostudujte si v²stup a zjist∞te, jak se pou╛φvß vlastnost Cells komponenty StringGrid. Zjist∞te k Φemu se dajφ pou╛φt vlastnosti FixedColor, FixedCols a FixedRows.
  3. Aplikaci vypisujφcφ hodnoty funkce sinus nebo kosinus vy°e╣te pomocφ komponenty StringGrid. Vytvo°te tabulku o 2 sloupcφch a 11 °ßdcφch. Hodnoty prvnφho sloupce jsou stßle stejnΘ. M∙╛eme je tedy zobrazit v obsluze udßlosti OnCreate formulß°e.
  4. Preprocesor p°ed zahßjenφm p°ekladu projde zdrojov² text programu a provede rozvinutφ maker, vlo╛enφ vklßdan²ch soubor∙ a zpracuje direktivy podmφn∞nΘho p°ekladu. Ka╛d² °ßdek zdrojovΘho textu programu, kter² zaΦφnß znakem # je pova╛ovßn za direktivu preprocesoru.

  5. V na╣ich programech jsme se ji╛ seznßmili s direktivou #include, kterß vklßdß do zdrojovΘho textu programu jin² soubor (t∞mto soubor∙m °φkßme hlaviΦkovΘ nebo vklßdanΘ soubory). Za include nßsleduje specifikace vklßdanΘho souboru. Tato specifikace m∙╛e b²t zapsßna ve ╣piΦat²ch zßvorkßch (pro systΘmovΘ hlaviΦkovΘ soubory) nebo v uvozovkßch (pro na╣e hlaviΦkovΘ soubory). Rozdφl mezi t∞mito tvary direktivy include spoΦφvß v algoritmu, kter² se pou╛φvß k vyhledßnφ vklßdanΘho souboru. P°i pou╛itφ ╣piΦat²ch zßvorek se vklßdan² soubor hledß v adresß°φch vklßdan²ch soubor∙, zatφmco v p°φpad∞ uvozovek je nejprve prohledßn aktußlnφ adresß° (obvykle adresß° obsahujφcφ p°eklßdan² zdrojov² soubor) a nenφ-li zde soubor nalezen jsou prohledßny i adresß°e vklßdan²ch soubor∙.
    ProhlΘdn∞te si n∞kterou ji╛ vytvo°enou aplikaci a zjist∞te, jak² tvar direktivy include je zde pou╛it.
  6. Direktiva #define definuje makroinstrukci (b∞╛n∞ pou╛φvßme nßzev makro). Makra mohou b²t bez parametr∙ nebo s parametry. Pokud makro nemß ╛ßdnΘ parametry, pak jej zapisujeme takto:

  7. #define identifikßtor_makra posloupnost_znak∙
    Ka╛d² v²skyt identifikßtoru_makra ve zdrojovΘm textu programu, kter² nßsleduje za touto direktivou, bude nahrazen posloupnostφ_znak∙. Tato nahrazenφ se naz²vajφ rozvoj maker. Posloupnost_znak∙ se n∞kdy naz²vß t∞lo makra. Nap°. definujeme-li makro
    #define PI 3.14159
    pak v dal╣φm textu zdrojovΘho programu je ka╛d² v²skyt identifikßtoru PI nahrazen znaky 3.14159.
    Definici makra je mo╛no zru╣it pomocφ direktivy #undef. Nap°.
    #undef PI
    Po zru╣enφ makra je definice makra zapomenuta.
    N∞kolik maker je definovßno p°φmo p°ekladaΦem. N∞kterß z t∞chto maker jsou popsßna v dal╣φ tabulce:
    __cplusplus        Je definovßno pro programy v C++
    __DATE__        Datum zahßjenφ p°ekladu.
    __FILE__          JmΘno p°eklßdanΘho souboru.
    __TIME__        ╚as zahßjenφ p°ekladu.
    Makra s parametry majφ tento tvar:
    #define identifikßtor_makra(seznam_parametr∙) posloupnost_znak∙
    Tato makra lze pak ve zdrojovΘm textu programu rozvφjet zßpisem
    identifikßtor_makra(seznam_skuteΦn²ch_parametr∙)
    Nap°. v nßsledujφcφ Φßsti programu je definovßno makro poΦφtajφcφ t°etφ mocninu a je zde takΘ toto makro pou╛ito:
    #define TRETIMOCNINA(x) ((x)*(x)*(x))
    ...
    int n, y;
    n = TRETIMOCNINA(y);
    Poslednφ °ßdek po rozvoji makra vypadß takto:
    n = ((y)*(y)*(y));
    Asi se vßm zdß, ╛e je zde pou╛ito mnoho zßvorek. Musφme ale p°edpoklßdat, ╛e parametry makra mohou b²t i trochu slo╛it∞j╣φ a pak jsou zde zßvorky nezbytnΘ. Nap°. v p°φpad∞
    n = TRETIMOCNINA(y+1);
    Pokud bychom v definici makra nem∞li uvedeny vnit°nφ zßvorky, pak makro by nepoΦφtalo t°etφ mocninu parametru.
  8. Vytvo°te konzolovou aplikaci, kterß vypφ╣e tabulku druh²ch a t°etφch mocnin hodnot ze zadanΘho intervalu. Mimo intervalu zadßvejte z klßvesnice i krok. K v²poΦtu mocnin pou╛φvejte makra, kterß si sami vytvo°φte.
  9. Nßsledujφcφ konzolovß aplikace provßdφ hledßnφ maximßlnφ hodnoty z N cel²ch Φφsel Φten²ch z klßvesnice. Upravte tento program tak, aby provßd∞l souΦasn∞ hledßnφ maximßlnφ i minimßlnφ hodnoty.

  10. int i, n, cislo, max;
    cout << "Zadej poΦet Φφsel: ";
    cin >> n;
    cout << "Zadßvej celß Φφsla:" << endl;
    cin >> max;
    for (i = 2; i <= n; i++) {
      cin >> cislo;
      if (cislo > max) max = cislo;
    }
    cout << "Maximßlnφ Φφslo = " << max << endl;
  11. Nßsledujφcφ makro nßm umo╛nφ nalΘzt men╣φ hodnotu ze dvou hodnot stejnΘho typu

  12. #define MIN(a,b) (((a)<(b)) ? (a) : (b))
    Napi╣te definici obdobnΘho makra pro urΦenφ v∞t╣φ hodnoty. Ob∞ makra pou╛ijte v p°edchozφ konzolovΘ aplikaci.

  13. Dßle se budeme zab²vat Editorem k≤du. Editor k≤du C++ Builderu umo╛≥uje volit ze Φty° konfiguracφ mapovßnφ klßvesnice: Default, IDE Classic, BRIEF a Epsilon. Editor k≤du C++ Builderu je obvykl² editor. Zßkladnφ Φinnosti se zde provßd∞jφ b∞╛n²m zp∙sobem. V tomto popisu se budeme zab²vat pouze specißlnφmi Φinnostmi. Editor k≤du je okno se zßlo╛kami. Pokud mßme otev°eno vφce soubor∙, pak ka╛d² soubor je otev°en na samostatnΘ strßnce. Na zßlo╛kßch strßnek v hornφ Φßsti okna jsou uvedena jmΘna t∞ch soubor∙, kterΘ jsou na strßnkßch otev°eny. P°epnutφ na jinou strßnku provedeme kliknutφm na p°φslu╣nou zßlo╛ku. Stavov² °ßdek (u spodnφho okraje okna) poskytuje obvyklΘ informace. Je zde uvedena souΦasnß pozice kurzoru. Pokud jsme soubor od poslednφho ulo╛enφ modifikovali, pak je zde uvedeno slovo Modified. Mohou zde b²t i dal╣φ informace (nap°. otev°enφ souboru pouze pro Φtenφ). Okno editoru mß ╣ed² lev² okraj. Na tomto okraji se v r∙zn²ch stavech v²voje zobrazujφ ikony (nap°. body p°eru╣enφ a zßlo╛ky).

  14. Editor k≤du takΘ podporuje operaci p°eta╛enφ vybranΘho textu. Vybereme text a my╣φ jej m∙╛eme p°etßhnout do novΘ pozice. Pokud jej chceme p°ekopφrovat, pak je nutno p°i ta╛enφ dr╛et stisknutou klßvesu Ctrl. Je takΘ mo╛no zru╣it naposled provedenΘ operace. PoΦet ·rovnφ ru╣enφ je implicitn∞ 32767 (je mo╛no ru╣it provedenΘ zm∞ny od poslednφho ulo╛enφ souboru).
    Operace hledßnφ a nahrazovßnφ textu usnad≥ujφ programovßnφ. M∙╛eme nap°. hledat ve svΘm k≤du v²skyt jistΘ prom∞nnΘ. N∞kdy takΘ pot°ebujeme zm∞nit jmΘno prom∞nnΘ nebo funkce. Tyto Φinnosti provßdφme volbami Search | Find a Search | Replace. Provßd∞jφ se b∞╛n²m zp∙sobem. Pokud pot°ebujeme nalΘzt n∞jak² text v n∞kolika souborech, pak m∙╛eme pou╛φt volbu Search | Find in Files. Zadßme hledan² text, volby hledßnφ a souborovou masku (vΦetn∞ adresß°ovΘ cesty).
    Jednou z velmi u╛iteΦn²ch slu╛eb Editoru k≤du je jeho interakce s nßpov∞dn²m systΘmem. Umφstφme kurzor editoru na klφΦovΘ slovo C++, vlastnost nebo metodu VCL nebo jin² specifick² text C++ Builderu a stiskneme klßvesu F1. Pokud existuje nßpov∞da pro textov² prvek pod kurzorem, je zobrazena.
  15. Editor k≤du mß takΘ n∞kolik dal╣φch specializovan²ch slu╛eb. Jednou z nich jsou ╣ablony k≤du. ⌐ablony k≤du umo╛≥ujφ vklßdat p°eddefinovan² k≤d do zdrojov²ch jednotek. K pou╛itφ ╣ablony k≤du b∞hem editace v Editoru k≤du stiskneme Ctrl+J. Je zobrazen seznam ╣ablon, ve kterΘm m∙╛eme vybφrat. Vybereme po╛adovanou ╣ablonu, stiskneme klßvesu Enter a text odpovφdajφcφ ╣ablony (tj. k≤d ╣ablony) je vlo╛en do zdrojovΘho k≤du na mφst∞ kurzoru.

  16. P°idßvat novΘ ╣ablony a editovat existujφcφ m∙╛eme na strßnce Code Insight dialogovΘho okna zobrazenΘho po volb∞ Tools | Environment Options. Pro editaci ╣ablon k≤du lze pou╛φt i jin² editor. ⌐ablony jsou ulo╛eny v souboru CBULIDER\BIN\BCB.DCI. Znak | v k≤du ╣ablony urΦuje, kde bude umφst∞n po vlo╛enφ ╣ablony kurzor.
  17. Dal╣φ u╛iteΦnou slu╛bou jsou zßlo╛ky. Zßlo╛ky v na╣em k≤du m∙╛eme pou╛φt k doΦasnΘmu oznaΦenφ n∞jakΘho mφsta. Najednou lze mφt nastaveno a╛ 10 zßlo╛ek. K nastavenφ zßlo╛ky na jistΘm mφst∞ stiskneme Ctrl+Shift a Φφslo nastavovanΘ zßlo╛ky (zßlo╛ky jsou Φφslovßny 0 a╛ 9). K nßvratu na definovanou zßlo╛ku stiskneme Ctrl a Φφslo zßlo╛ky. Ka╛d² otev°en² soubor mß svΘ vlastnφ zßlo╛ky (nelze p°ejφt na zßlo╛ku do jinΘho souboru). K odstran∞nφ zßlo╛ky op∞t stiskneme Ctrl+Shift a Φφslo odstra≥ovanΘ zßlo╛ky (kurzor musφ stßt na °ßdku se zßlo╛kou, jinak zßlo╛ku pouze p°emφstφme).
  18. Dal╣φ u╛iteΦnou slu╛bou Editoru k≤du je inkrementßlnφ hledßnφ. Toto hledßnφ zahßjφme volbou Search | Incremental Search. Po zahßjenφ tohoto hledßnφ, na klßvesnici zapisujeme hledan² text a tento text je hledßn od mφsta kurzoru v textu zobrazenΘm v editaΦnφm okn∞. Editor k≤du takΘ umo╛≥uje hledßnφ pßr∙ zßvorek. Pokud kurzor stojφ na otevφracφ nebo zavφracφ zßvorce, pak stiskem Alt+[ p°ejdeme na zßvorku, kterß s touto zßvorkou tvo°φ pßr.
  19. Editor k≤du mß takΘ mφstnφ nabφdku. Volby v tΘto nabφdce je mo╛no rozd∞lit do dvou skupin: volby editoru a volby ladφcφho prost°edku. Nynφ se budeme zab²vat pouze volbami editoru (volby ladφcφho prost°edku budou popsßny pozd∞ji). Volby editoru jsou popsßny v nßsledujφcφ tabulce.

  20.  
    Volba Popis
    Open Source/Header File Pokud hlaviΦkov² soubor odpovφdajφcφ souΦasnΘmu zdrojovΘmu souboru nenφ otev°en, pak touto volbou jej otev°eme na novΘ strßnce v editoru. Pokud tyto oba soubory jsou otev°eny, pak touto volbou se mezi nimi p°epφnßme.
    Close Page Uzavφrß aktivnφ strßnku editaΦnφho okna.
    Open File At Cursor Otevφrß soubor pod kurzorem (mß vliv pouze na zdrojovΘ a hlaviΦkovΘ soubory).
    New Edit Window Otevφrß novou kopii Editoru k≤du (vhodnΘ nap°. kdy╛ pot°ebujeme porovnat dva soubory).
    Topis Search Zobrazφ nßpov∞du pro text pod kurzorem.
    View As Form Pokud aktivnφ soubor v editoru je formulß° zobrazen² jako text, pak touto volbou jej p°evedeme op∞t do zobrazenφ v NßvrhovΘm formulß°i.
    Read Only P°epφnß u aktivnφho souboru re╛im Read only a Read/write.
    Message View Zobrazuje nebo skr²vß okno zprßv.
    Properties Zobrazuje dialogovΘ okno voleb prost°edφ.
  21. Volbou Tools | Environment Options zobrazφme dialogovΘ okno voleb prost°edφ. Toto okno mß t°i strßnky. Strßnka Editor obsahuje r∙znΘ volby ovliv≥ujφcφ prßci editoru. Strßnka Display obsahuje volby t²kajφcφ se zobrazenφ textu v okn∞ Editoru k≤du. Strßnka Colors umo╛≥uje pln∞ p°izp∙sobit volby barevnΘho oznaΦovßnφ syntaxe. Podrobn∞ji se tφmto dialogov²m oknem nebudeme zab²vat. Jeho pou╛itφ je velmi snadnΘ.

NovΘ pojmy:

9. Preprocesor I