Image
8.6.2016 0 Comments

C++ pod lupou - Prvá časť: Úvod

Späť na úvod >> Späť na programovanie >> Späť na seriál

Milí čitatelia, od tohto čísla sa budeme pravidelne stretávať na stránkach PC REVUE v seriáli, v ktorom sa budem usilovať voviesť vás viac či menej do tajomstiev programovania v jazyku C++. Mnohí z vás o takýto kurz prejavili záujem, čo ma vedie k domnienke, že nie každému vyhovuje programovanie v zrejme najrozšírenejšom jazyku, totiž v Pascale.

Nie som ortodoxným prívržencom nijakého dnes používaného jazyka, poznám ich už riadnu kôpku, ale najbližšie mám práve k C++. Prečo, o tom by sa dalo diskutovať donekonečna, nie je to však cieľom tohto seriálu. Nebudem vás presviedčať o výhodách a zamlčiavať nevýhody C++. Budem sa snažiť predostrieť vám tento jazyk v celej jeho kráse tak, aby ste po skončení boli schopní písať programy na relatívne slušnej (i keď určite nie profesionálnej) úrovni. Lenže pozor, nijaký kurz, seriál či kniha vám nemôžu dať to najdôležitejšie – prax. Vyžaduje si to napísať veľké množstvo vlastných programov a preštudovať ešte viac cudzích. Berte, prosím, teda tento seriál ako sprievodcu, ako akýsi návod, uvedomte si však, že podstatné množstvo skutočnej práce zostane v každom prípade na vás. Samozrejme, rátam s vašimi ohlasmi, pripomienkami či otázkami, ak niečomu nebudete rozumieť. Výhodu budú mať tí z vás, ktorí majú prístup k elektronickej pošte – moja adresa je na konci článku.

Pri výklade sa budem snažiť používať tie slovenské pojmy, ktoré sa mi budú zdať dostatočne bežné; ak to bude možné, uvediem v zátvorke príslušný anglický ekvivalent. Všetky programy by mali byť funkčné pre architektúru Intel a príslušné operačné systémy. Čo sa týka prekladačov potrebných na preklad programov, dlho postačí veľmi rozšírený Borland C++ 3.1, prípadne MS Visual C++ 1.0 (ktorý možno získať za zanedbateľnú sumu spolu s knihou Programujeme v jazyce Visual C++. Computer Press 1997). Podotýkam, že seriál sa nebude zaoberať opisom prostredia prekladačov a ich ovládania, na tieto účely odporúčam preštudovať si príručku alebo nápoveď k programu, prípadne obrátiť sa na niekoho, kto má viac skúseností.

A ešte posledná poznámka: Seriál čítajte pozorne a nepreskakujte odseky, pretože rozhodne nemám v úmysle vypĺňať text nepodstatnou „vatou“ a môže vám uniknúť podstatný detail. A teraz nám nezostáva nič iné ako začať.

Základné pojmy

Na úvod si dovolím objasniť niekoľko pojmov, ktoré budeme ďalej používať. Niekomu sa možno budú zdať triviálne, v takom prípade nech prejde na ďalší odsek.

Bit je základná jednotka informácie, premenná s veľkosťou 1 bit (logická premenná, boolovská premenná – boolean variable) môže nadobúdať dva stavy – log. 0 (false) a log. 1 (true).

Bajt je postupnosť ôsmich bitov. V počítačovej branži je táto jednotka význačná vďaka tomu, že elementárnou adresovateľnou jednotkou pamäte je práve jeden bajt. Bity v bajte sa číslujú od 0 po 7, pričom bit č. 0 sa obyčajne kreslí najviac vpravo a nazývame ho najmenej významný bit (least significant bit – LSB), bit č. 7 je, naopak, najviac vľavo a nazýva sa najvýznamnejší bit (most significant bit – MSB). Na obr. 1 je bajt tak, ako sa zvykne kresliť – každý štvorček predstavuje jeden bit. Keďže bajt je zložený z ôsmich bitov a každý bit môže byť v jednom z dvoch stavov, podľa kombinatorického pravidla si ľahko spočítame, že premenná s dĺžkou jedného bajtu môže nadobúdať spolu 28 = 256 rôznych hodnôt (podotýkam, ak to niekomu ešte nedošlo, že hodnota je v bajte uložená vo forme binárneho čísla). Najpoužívanejšie násobky bajtu sú kilobajt (Kbyte, KB) = 210 = 1 024 B, megabajt (Mbyte, MB) = 220 = 1 048 576 B a gigabajt (Gbyte, GB) = 230 = 1 073 741 824 B.

Obr. 1   Bajt

Slovo (word) je postupnosť dvoch bajtov, jeho dĺžka je teda 16 bitov (často sa nazýva aj 16-bitové slovo). Funkciu najvýznamnejšieho bitu preberá bit č. 15 (čo je vlastne v poradí šestnásty bit sprava). Dva bajty, z ktorých sa slovo skladá, sa často nazývajú nižší (dolný, low) bajt (t. j. bity 0 až 7) a vyšší (horný, high) bajt (bity 8 až 15), pozri obr. 2. Premenná s veľkosťou jedného slova môže nadobúdať 216 = 65 536 rôznych hodnôt.

Obr. 2   Slovo

Dvojslovo (double-word) je postupnosť 4 bajtov, resp. 32 bitov (často sa nazýva aj 32-bitové slovo), pozri obr. 3. Počet rôznych hodnôt premennej tejto veľkosti je, samozrejme, 232.

Obr. 3   Dvojslovo

Pamäť (vo význame operačná pamäť počítača) je v zjednodušenom pohľade postupnosť (presnejšie vektor) bajtov, pozri obr. 4. Každý z týchto bajtov predstavuje jednu pamäťovú bunku a má svoju jedinečnú adresu (jedinečnú z hľadiska hardvéru, nie nevyhnutne z hľadiska programátora!). Program bežiaci na počítači je umiestnený niekde v pamäti (pre jednoduchosť teraz zabudnime na to, že existuje niečo ako virtuálna pamäť) – nejakú oblasť zaberá kód programu, nejakú zase dáta, s ktorými pracuje. Tu by som ešte objasnil pojem premenná v  programátorskom zmysle – premenná je určitá oblasť pamäte, ktorá je programátorovi nejakým spôsobom prístupná, obyčajne svojím menom. Adresa premennej je adresou začiatku tejto oblasti, dĺžka oblasti závisí od typu premennej.

Obr. 4   Pamäť

Nasleduje stručný a maximálne zjednodušený opis veľmi často používanej údajovej štruktúry – ide o zásobník. Zásobník je jedna z kľúčových vecí, na ktorých je založený celý beh programu v C++ (minimálne na platforme Intel), i keď programátor s ním prakticky vo väčšine prípadov vôbec neprichádza do styku. Jazyk C++ je však veľmi blízky programovaniu v jazyku symbolických inštrukcií (na vysvetlenie – assembler nie je jazyk, ale program na preklad z jazyka symbolických inštrukcií do strojového kódu daného procesora), v ktorom programátor zásobník na 99 % používať musí – už len preto, že ho používa procesor. Takže zásobník je údajová štruktúra, nazývaná aj LIFO, z anglického Last-In-First-Out (posledný dnu, prvý von). Jeho špecifickou vlastnosťou je, že údaje z neho nemožno vyberať ľubovoľne, ale len po jednom a vždy len ten údaj, ktorý bol do zásobníka vložený posledný (hovoríme, že je na vrchole zásobníka). Nad zásobníkom sú definované dve základné operácie – push(), ktorá vloží údaj do zásobníka, a pop(), ktorá údaj vyberie. Na objasnenie – po vykonaní série operácií push(A); push(B); push(C) ďalšou sériou pop(); pop(); pop() vyberieme údaje v poradí C, B, A (ak to nie je úplne jasné, pozri obr. 5). Konkrétnu realizáciu a používanie zásobníka vo vzťahu k C++ vysvetlím na príslušných miestach.

Obr. 5   Zásobník

Väčšina operačných systémov používa pojmy štandardný vstup a štandardný výstup. Štandardný vstup (tiež stdin) je určité rozhranie, ktoré má program automaticky k dispozícii na vstup údajov vždy po svojom spustení. Implicitne ide o vstup z klávesnice. Štandardný výstup (tiež stdout) naproti tomu umožňuje programu jednoduchý výstup údajov, implicitne ide o výstup na obrazovku. K týmto dvom pojmom môžeme pridať ešte štandardný výstup pre chybové hlásenia (tiež stderr), ktorý smeruje implicitne takisto na obrazovku. Podotýkam, že program nemusí tieto rozhrania používať – ide o jedno z najzákladnejších spojení programu s operačným systémom (na úrovni výmeny údajov) a používa sa na jednoduchý vstup/výstup (spomeňte si napríklad na príkaz time v MS-DOS – čas zadaný z klávesnice si program prečíta zo štandardného vstupu a text, ktorý vidíte na obrazovke, posiela na štandardný výstup).

Z histórie

Základné pojmy sme si objasnili, nasleduje okienko do histórie a príčin vzniku C++.

Jazyk C++ nevznikol „na zelenej lúke“. V sedemdesiatych rokoch (nášho storočia, samozrejme) bol vyvinutý pre potreby vývoja operačného systému UNIX jazyk nazvaný jednoducho C. Mnohým sú známe mená jeho autorov, alebo skôr duchovných otcov – boli to páni Brian Kernighan a Dennis Ritchie. Jazyk C je mimoriadne vhodný na písanie niečoho takého fundamentálneho, ako je operačný systém, pre jeho silnú väzbu na hardvér a mocné schopnosti pri zachovaní efektívnosti binárneho kódu. Ak sa dobre pamätám, 90 % kódu Unixu bolo napísaných práve v jazyku C (zvyšok boli rôzne low-level procedúry, ako ovládače zariadení a pod., písané v jazyku symbolických inštrukcií). Dnes, keď svetom letí Java, sa môže zdať táto závislosť od technických prostriedkov skôr brzdou, ale existuje nemálo postupov a pravidiel, ako urobiť program portabilným (t. j. preložiteľným na viacerých platformách).

Jazyk C sa čoskoro natoľko rozšíril medzi profesionálnych i amatérskych programátorov, že jeho opis bol niekoľkokrát kodifikovaný normou ANSI (posledná kodifikácia – spoločná s normou ISO - je z roku 1990), v neposlednom rade kvôli zjednoteniu rôznych štandardov od rôznych firiem.

V priebehu osemdesiatych rokov v súvislosti s rozšírením princípov objektovoorientovaného programovania (OOP) Bjarne Stroustrup navrhol jazyk, ktorý bol založený na jazyku C, vylepšoval niektoré jeho črty a zaviedol mnohé nové, hlavne však umožňoval uplatniť spomínané princípy OOP. Stroustrup nazval svoj jazyk C++ a v súčasnosti by mal byť takisto kodifikovaný normou ANSI/ISO.

V našom seriáli sa budeme najprv zaoberať neobjektovými črtami jazyka C++ (tých je viac než dosť) a až po ich zvládnutí prejdeme k prostriedkom pre OOP.

Prvý program

Ak ste sa prehrýzli obsiahlym teoretickým úvodom až sem, zrejme ste už netrpezliví a radi by ste čím skôr programovali. Možno vás trochu sklamem, ale mám pre vás len jeden veľmi jednoduchý program, ktorý je tak hlboko zakorenený v tradíciách výučby programovania (a v C/C++ obzvlášť), že si netrúfam ho vynechať. Jediným jeho cieľom je výpis pozdravu „Hello, world!“ na obrazovku (v skutočnosti sa zapisuje na štandardný výstup):

 

#include <stdio.h>

 

int main()

{

    printf("Hello, world!\n");

    return 0;

}

 

Tento program treba prepísať do samostatného súboru podľa zaužívaných konvencií s príponou .CPP a následne preložiť príslušným prekladačom a spustiť. To je možné buď priamo z integrovaného prostredia, alebo spustením prekladača z príkazového riadka, čo je však komplikovanejšie, už len z dôvodu pamätania si desiatok rôznych prepínačov. Po preklade dostaneme súbor s príponou .EXE, ktorý stačí spustiť a na obrazovke sa objaví pozdrav. Možno vás prekvapí veľkosť vytvoreného súboru (závisí od prekladača a jeho nastavenia, u mňa napríklad asi 9 KB), ale všetko má svoje opodstatnenie a časom sa dostaneme k vysvetleniu.

Nabudúce

To by bolo na začiatok všetko, nabudúce si objasníme filozofiu vývoja programov v C++, opíšeme typy súborov používaných pri programovaní, postup prekladu a začneme s vysvetľovaním štruktúry a častí programu (súčasne si rozoberieme aj ten dnešný).

Zobrazit Galériu
C++

Nechajte si posielať prehľad najdôležitejších správ emailom

Mohlo by Vás zaujímať

Ako na to 1

Tipy a triky: Ako aplikácii prednastaviť spúšťanie s administrátorskými právami?

30.11.2016 00:10

Väčšina aspoň trochu skúsenejších používateľov vie, že aj keď máte na operačnom systéme Windows vytvorený administrátorský účet, aplikácie pre bezpečnosť nefungujú vždy splnými administrátorskými práv ...

Ako na to 1

Tipy a triky: Ako vypnúť uzamykaciu obrazovku vo Windows 10?

29.11.2016 00:10

Rozčuľuje vás, že pred každým prihlásením doúčtu vášho počítača musíte prejsť uzamykacou obrazovkou? Windows 10 na tejto obrazovke ukazuje čas,dátum anejakú zaujímavú fotografiu zrôznych kútov sveta. ...

Ako na to 3

Ako na to: Ochranná fólia versus tvrdené sklo? Čo je lepšie pre smartfón?

25.11.2016 00:16

Pomôže mobilu ďalšia vrstva ochrany alebo nie? Stačí klasická – plastová fólia alebo je tvrdené sklo tá lepšia voľba? Všetci dobre vieme, ako ľahko sa dokážu moderné smartphony doškriabať – či už pria ...

Žiadne komentáre

Vyhľadávanie

Kyocera - prve-zariadenia-formatu-a4-s-vykonom-a3

Najnovšie videá