11.07.2015 Views

Untitled - Vitajte na stránkach www.einsty.hostujem.sk

Untitled - Vitajte na stránkach www.einsty.hostujem.sk

Untitled - Vitajte na stránkach www.einsty.hostujem.sk

SHOW MORE
SHOW LESS
  • No tags were found...

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

P R O G R A M U J E M Eafx_msg void OnPaint();afx_msg void OnLButtonDown(UINT nFlags,CPoint point);DECLARE_MESSAGE_MAP()Prvý parameter funkcie OnLButtonDown nás teraz nemusízaujíma . O druhom nám staèí vedie to, že v òom súuložené súradnice kurzora pri stlaèení ¾avého tlaèidla myši. X-ová súradnica je prístupná ako point.x a Y-ová ako point.y(preèo to tak je, to si vysvetlíme v ïalších èastiach, majte strpenie).Takže funkcia OnLButtonDown nám po<strong>sk</strong>ytuje presneto, èo potrebujeme. Aby náš program fungoval, nestaèípripísa funkciu <strong>na</strong> stlaèenie ¾avého tlaèidla len do deklaráciema- py správ. Musíme pozmeni aj jej implementáciu(súbor: First.cpp), a to takto:BEGIN_MESSAGE_MAP(CMyFrame, CFrameWnd)//mapa správON_WM_LBUTTONDOWN()ON_WM_PAINT()END_MESSAGE_MAP()Teraz máme funkciu už kompletne pridanú do systémumapy správ. Ale po spustení programu zistíte, že stlaèenie¾avého tlaèidla myši niè neurobí. Na èo sme asi zabudli?Samozrejme, zabudli sme <strong>na</strong>písa samotné telo funkcieOnLButtonDown. Pripíšte preto <strong>na</strong>sledujúci kód dosúboru First.cpp <strong>na</strong>d funkciu OnPaint (alebo aj pod òu, jeto jedno):void CMyFrame::OnLButtonDown(UINTnFlags, CPoint point){CClientDC dc(this);dc.TextOut(point.x, point.y, “Tusom”);}Ak teraz spustíte program First, po stlaèení ¾avéhotlaèidla myši sa <strong>na</strong> obrazovke presne <strong>na</strong> pozícii kurzoraobjaví text: „Tu som“. A je to hotové. Ani to nebolo takéažké, no nie? Ak vás zaujíma, èo to z<strong>na</strong>mená CClientDCdc(this), prezradím vám len to, že týmto vytvárame kontextzariadení, ktorý má také rozmery ako používate¾<strong>sk</strong>áoblas ok<strong>na</strong> programu First. Na zopakovanie:používate¾<strong>sk</strong>á oblas ok<strong>na</strong> nezahàòa titulkový pruh, menua okraj ok<strong>na</strong>. Podrobnejšie si túto tému rozoberieme vèasti venovanej triedam kontextu zariadení.Tipy <strong>na</strong> WWWAko som písal v úvode, od tejto èasti vás budempravidelne informova o zaujímavých adresách, ktoré satýkajú problematiky programovania v jazykoch C/C++a Visual C++. Ak aj vy poznáte nejaké dobré adresy,prosím, <strong>na</strong>píšte mi ich, èím ich bude viac, tým lepšie. Tuje prvých pä :http://<strong>www</strong>.programmingtutorials.com/main.asp – nieèo pre zaèiatoèníkov,rôzne tutorialyhttp://<strong>www</strong>.visualc.com – stránka venovaná Visual C++http://<strong>www</strong>.planet-source-code.com – tu nájdete <strong>sk</strong>utoènenepreberné množstvo zdrojových kódovhttp://<strong>www</strong>.programmersheaven.com – vynikajúca stránka, nájdetetu ve¾a odkazov <strong>na</strong> iné stránkyhttp://<strong>www</strong>.cuj.com – stránka C/C++ Jour<strong>na</strong>lu, èasopis venovanýjazykom C/C++To¾ko <strong>na</strong> zaèiatok, <strong>na</strong>budúce ïalšie.Tipy <strong>na</strong> domaSkúste prida do programu First ïalšie funkcie obsluhujúcesprávy. Napríklad vymyslite nejakú èinnos pre pravé tlaèidlomyši, pre „dvojklik“ ¾avého tlaèidla a podobne. Inšpiráciu <strong>na</strong>funkcie, ktoré môžete použi , nájdete v tabu¾ke 2.NabudúceNabudúce si opíšeme prácu s prostredím Visual C++(vytvoríme aplikáciu s App Wizardom, použijeme ClassWizard, editor zdrojov). Takže stretneme sa až v budúcomroku. Želám vám krásne prežitie vianoèných sviatkov a ve¾aúspechov v novom roku. Majte sa pekne.n Marek ŠamajJava pod lupou / 4. èas : Operátory (pokraèovanie)Vo štvrtej èasti seriálu, poslednej v tomto storoèí, pokraèujemeopisom operátorov, ktoré jazyk Java po<strong>sk</strong>ytuje programátorovi<strong>na</strong> prácu s údajmi. Dosia¾ sme prebrali základnéaritmetické operátory +, –, *, / a % a dva operátoryinkrementácie/dekrementácie ++ a ––.Relaèné operátoryÏalšou <strong>sk</strong>upinou operátorov sú tzv. relaèné operátory.Pojem relácia bude laikovi pravdepodobne evokovanejaký vz ah. Skutoène, relaèné operátory v Jave slúžia <strong>na</strong>zistenie, èi sú dva výrazy v požadovanom vz ahu. Relácie,ktoré tieto operátory rozpoznávajú, sú dobre známe z matematiky:ide o rovnos a ostrú a neostrú nerovnos .Operátory testujúce nerovnos dvoch výrazov sú štyri:=. Vz ahy, ktoré reprezentujú, sú po rade„menší“, „menší alebo rovný“, „väèší“ a „väèší aleborovný“. Z<strong>na</strong>ky operátorov neostrej nerovnosti =treba zapisova v uvedenom poradí, nikdy nie <strong>na</strong>opak.Všetky štyri operátory sú binárne. Ich operandy musiaby povinne primitívne èíselné typy a výsledok je vždytypu boolean. Z toho vyplýva, že i keï sa asociujú z¾avadoprava, nemá asociácia v tomto prípade nijaký výz<strong>na</strong>m,pretože zápis a < b < c povedie k chybe pri preklade (a< b je typu boolean, ktorý nemožno porovnáva s premennouc, nech by bola akéhoko¾vek typu).V prípade, že porovnávame výrazy typu float alebodouble, je výsledkom NaN, ak je aspoò jeden z operandovNaN. Na úèely porovnávania prostredníctvom operátorov, = sú èísla „kladná nula“ a „záporná nula“rovné a výraz –0.0 < +0.0 vráti false.Ïalšie dva relaèné operátory, == a !=, zis ujú rovnos ,resp. nerovnos dvoch výrazov. Oba sú <strong>na</strong>vzájom komplementárnea vždy platí, že a!=b má rov<strong>na</strong>kú hodnotu ako!(a==b). Aj tieto operátory sú binárne a ich výsledok jevždy typu boolean. Èo sa však týka typu ich operandov,máme k dispozícii trochu širšiu oblas použitia.Predovšetkým môžu by operandmi == a != primitívneèíselné typy. Pri porovnávaní výrazov typu float/doubleplatí, že ak je aspoò jeden z operandov NaN, výsledok ==je false, výsledok != je true. Kladná a záporná nula súpovažované za <strong>na</strong>vzájom rovné.Druhá možnos je porovnáva operandy typu boolean.Za pozornos stojí, že v takom prípade je výsledok operátora!= totožný s výsledkom operátora ^ (pozri ïalej).Koneène môžeme pomocou operátorov == a !=porovnáva výrazy referenèných typov. Treba si rýchlospomenú <strong>na</strong> predchádzajúcu èas seriálu, kde smeuviedli, že premenné referenèných typov obsahujú ibaadresu, odkaz <strong>na</strong> <strong>sk</strong>utoèné údaje, uložené niekde inde vpamäti. (Na zopakovanie: referenènými typmi sú v Javeobjekty [inštancie tried] a polia). Po krátkej úvahe dospejemek záveru, že operátor == aplikovaný <strong>na</strong> dve premennéreferenèného typu vráti true len vtedy, ak obe premennébudú ukazova <strong>na</strong> jeden a ten istý objekt èi pole.Operátor != v takom prípade vráti, pochopite¾ne, false.Relaèné operátory sa používajú <strong>na</strong>jmä v podmienkovýchvýrazoch príkazov if, for èi while.Príkazom Javy budeme venova samostatnú èas seriálu,preto <strong>na</strong> demonštráciu aplikácie operátorov použijeme lentakýto jednoduchý príklad:int a = –5;int b = 14;System.out.println(“(a < b) = “ + (a < b));System.out.println(“(a b));System.out.println(“(a >= b) = “ + (a >= b));System.out.println(“(a == b) = “ + (a == b));System.out.println(“(a != b) = “ + (a != b));boolean c = true;boolean d = false;System.out.println(“(c == d) = “ + (c == d));System.out.println(“(c != d) = “ + (c != d));int pa[] = { 1, 2, 3 };int pb[] = pa;int pc[] = { 1, 2, 3 };System.out.println(“(pa == pb) = “ + (pa== pb));System.out.println(“(pa == pc) = “ + (pa== pc));Výsledkom aplikácie jednotlivých operátorov budú porade literály true, true, false, false, false, true(prvá èas programu), false, true (druhá èas programu)a true, false (tretia èas programu). Ako vidie , premennépa a pb ukazujú <strong>na</strong> to isté pole, preto sa z poh¾aduoperátora == <strong>na</strong>vzájom „rov<strong>na</strong>jú“. Premenné pa a pc savšak „nerov<strong>na</strong>jú“ <strong>na</strong>priek tomu, že polia, ktoré reprezentujú,majú rov<strong>na</strong>ké hodnoty prvkov. Vy<strong>sk</strong>úšanie aplikácieoperátorov <strong>na</strong> iné hodnoty ponechávam <strong>na</strong> èitate¾ovi.Aby bolo vymenovanie relaèných operátorov úplné,nesmieme vynecha operátor instanceof, ktorý pomôžepri zis ovaní <strong>sk</strong>utoèného typu výrazu. To však platí len prereferenèné typy, výrazy primitívnych typov takto identifikovanemožno. Operátor instanceof je binárny,¾avým operandom musí by výraz referenèného typu,pravým operandom je literál predstavujúci vyšetrovanýtyp. Ak je typ ¾avého operandu zhodný s pravým operandom,výsledkom je hodnota true, i<strong>na</strong>k je výsledkomfalse.Typickým príkladom použitia môže by obslužná ruti<strong>na</strong>nejakej udalosti grafického používate¾<strong>sk</strong>ého rozhrania,ktorá zis uje, ktorý prvok GUI má udalos „<strong>na</strong> svedomí“:if (sender instanceof Button){// ...}Predpokladáme, že premenná sender obsahuje odkaz <strong>na</strong>objekt predstavujúci prvok GUI, ktorý udalos spôsobil.Trieda Button by mohla reprezentova prvky typu „tlaèidlo“,potom bude uvedený príkaz if testova , èi je zdrojomudalosti niektoré tlaèidlo.Bitové a logické operátoryPodobne ako C++ možno nájs v Jave nieko¾ko operátorov,ktoré pracujú s bitovou reprezentáciou èísel. Jednotlivébity celoèíselných premenných èi hodnôt môžemepovažova za logické premenné a aplikova <strong>na</strong> ne základnéfunkcie boolov<strong>sk</strong>ej algebry: logický súèin (AND), logickýsúèet (OR), exkluzívny logický súèet (takisto nonekvivalencia– XOR) a negáciu (NOT). Pre tieto štyri logické funkciesú v Jave urèené štyri operátory: &, |, ^ a ~. V tabu¾ke 1nájde èitate¾ funkèné hodnoty logických funkcií pre jednotlivékombinácie bitových hodnôt.Operátory majú prívlastok bitové z toho dôvodu, že realizujúlogické funkcie bit po bite, vždy medzi zodpovedajúcimibitmi svojich operandov (výnimkou je, samozrejme,operátor negácie, ktorý je unárny a má len jediný operand).Operátor bitového logického súèinu & slúži <strong>na</strong> výpoèetlogického súèinu dvoch celoèíselných hodnôt. Ide teda obinárny operátor, ktorý sa asociuje podobne ako aditívneèi multiplikatívne operátory z¾ava doprava. Príklad logickéhosúèinu dvoch premenných typu int:int a = 0x3CA8;int b = 0xCAFE;int c = a & b;12/2000 PC REVUE 123

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!