L I N U X W A R EUtilitky a nástroje Nájdete<strong>na</strong> CD REVUEeXtraceeXtrace je program <strong>na</strong> vizuálnu a<strong>na</strong>lýzu zvuku. Ako audiozdroj vyuíva ESDaudio démo<strong>na</strong>. Obsahuje rozlièné Fourierove transformácie v reálnom èase.hovorí improved version!☺ Samozrejme, hra jepod GNU GPL a okremLinuxu funguje aj podMac OS X a pod Win<strong>do</strong>ws.Okrem toho existujeaj nieko¾ko zlepšení(add-ons), <strong>na</strong>príklad Moviepack vás prenesie <strong>do</strong>sveta filmu... Ak máte poèítaè,ktorý má rýchlejšiepripojenie, a chceli by steho vyui <strong>na</strong> vytvorenie servera, nemusíte <strong>na</strong> òom hneï štartova X-ká! Staèíspusti serverovú verziu... Samozrejme, ak si <strong>na</strong> danom poèítaèi chcete aj zahra,server je zabu<strong>do</strong>vaný aj v grafickej verzii.Web: http://armagetron.sourceforge.net/Easy FunktionEasy Funktion je program nemeckého pôvodu, urèený <strong>na</strong> kreslenie a riešeniematematických rovníc. Má GUI v štýle kancelárskych programov (<strong>na</strong>pr.Výsle<strong>do</strong>k môe zobrazi ako 3D mapu, a 256-kanálový ekvalizér alebo ako jedenz ïalších zaujímavých druhov vizualizácie. Samozrejme, poh¾ad môete ovládasami (uhol poh¾adu i rýchlos). Rov<strong>na</strong>ko si môete prispôsobi aj farebnos.Web: http://extace.sourceforge.net/My CalendarNiekedy sa zíde monos poz<strong>na</strong>me<strong>na</strong> si nieèo tak, aby ste to mali kdeko¾veka kedyko¾vek poruke. Lístoèky s poznámkami sa tratia rýchlosou blíiacou saWord...). Okrem toho obsahuje editor rovníc s automatickou úpravou a kalkulaèkus podporou komplexných èísel. Urèite je uitoèná aj podpora exportovaniagrafov <strong>do</strong> tabu¾kového editora.Web: http://home.t-online.de/home/mgreither/eflinux. htmrýchlosti svetla, Murphyho zákony fungujú lepšie, ako by mali... ostáva náminternet. Webový kalendár je prístupný z celého sveta (ak sa vám tam podarí pripojik sieti) a nestratíte ho (pokia¾ vám niekto nejde po serveri...☺). My Calendarje jednoduchý a malý webový kalendár, <strong>na</strong>písaný v Perle. Ak chcete, môe vámkadý deò e-mailom pripomí<strong>na</strong> udalosti. A ak idete niekam, kde internet jednoduchonie je, môete si pomocou priloeného skriptu kalendár vytlaèi.Web: http://<strong>www</strong>.fuzzymonkey.org/newfuzzy/software/perl/GTranslatorAk ste prekladate¾mi alebo èlenmi nejakého lokalizaèného tímu, tento programby vás takisto mohol poteši. Pohodlne a preh¾adne v òom môete editovarôzne formáty prekla<strong>do</strong>vých súborov s rôznymi zaujímavými a uitoènýmiWeb: http://<strong>www</strong>.gimp.org/GimpAsi nemá prive¾ký zmyselpredstavova vámtento program. Gnu ImageManipulation Program(teda GIMP) má práveïalšiu stabilnú verziu(1.2.5), ktorú nájdete <strong>na</strong><strong>na</strong>šom CD.ArmagetronAsi poznáte staruèkú hru, v ktorej sa <strong>na</strong>háòajú „hadíky“ a svojimi chvostmi sa<strong>na</strong>vzájom blokujú (multiplayer verzia háïatka, ktoré sa <strong>na</strong>chádza aj <strong>na</strong> mobiloch...).Toto je jej trojrozmerné vyhotovenie. Ale to nie je všetko! Okrem peknejgrafiky a zvukov je k dispozícii monos zahra si <strong>na</strong> jednom stroji a štyriahráèi, alebo si zahra proti poèítaèu. Najlepším z<strong>do</strong>ko<strong>na</strong>lením sa mi zdá hrapo sieti (LAN, ale aj internet) – maximálne a sedemnás strojov! Tomu safunkciami, <strong>na</strong>príklad vyh¾adávanie a <strong>na</strong>hradzovanie, farebné odlíšenie prelo-ených textov a pod.Web: http://<strong>www</strong>.gtranslator.org/Okrem týchto programov nájdete <strong>na</strong> CD aj <strong>na</strong>jnovší stabilný linuxový kernel2.4.21 (ftp://ftp.kernel.org/), ktorý vyšiel zhruba po polroènej (!) odmlke.Oto Komiòák7/2003 PC REVUE 109
P R O G R A M U J E M EProgramujeme v jazyku C# / 10. èasV desiatej èasti seriálu o programovaní v jazyku C# sa bu−deme venova základným syntaktickým èrtám jazyka, akosú kontrolné štruktúry a operátory.PREPÍNAÈ SWITCH. Prepí<strong>na</strong>è switch umoòuje vetve−nie programu <strong>na</strong> základe podmienky po<strong>do</strong>bne ako if s týmrozdielom, e umoòuje porov<strong>na</strong>nie s viacerými hodnota−mi <strong>na</strong>raz. Ide teda v podstate o zloený if. Jeho všeobec−nú syntax by sme mohli zapísa takto:switch (výraz) {case konštanta1: príkaz1;príkaz2;...príkazN;break;case konštanta2: príkaz1;príkaz2;...príkazN;break;case konštanta3: príkaz1;príkaz2;...príkazN;break;default: príkaz1;príkaz2;...príkazN;break;}Riadiaca hodnota výrazu v zátvorkách je vyhodnotenáiba raz – hneï pri vstupe <strong>do</strong> tela prepí<strong>na</strong>èa. Nasleduje skok<strong>na</strong> to návestie case, ktorého uvedená konštanta sa zhodu−je s hodnotou výrazu. V prípade, e také návestie neexis−tuje, je riadenie programu o<strong>do</strong>vzdané vetve default. Poskoku sú vykonávané postupne príkazy a <strong>do</strong>vtedy, kým sanevyskytne príkaz break. Ten zabezpeèí ukonèenie èinnos−ti prepí<strong>na</strong>èa a pokraèovanie programu za jeho telom.Oproti iným programovacím jazykom je tu jed<strong>na</strong> maláodlišnos – za kadým blokom príkazov pre dané návestiemusí <strong>na</strong>sle<strong>do</strong>va príkaz break. Tým sa zabránilo monémuzabudnutiu <strong>na</strong> príkaz break a nechcenému vyko<strong>na</strong>niuïalších príkazov, ktoré u k danému návestiu nepatria. Dô−sledkom je však aj fakt, e nie je moné zdruova viaceronávestí case spolu, teda <strong>na</strong>príklad takto:switch (výraz) {case konštanta1:case konštanta2: príkaz1;príkaz2;...príkazN;break;case konštanta3: príkaz1;príkaz2;...príkazN;break;}V prípade, e <strong>na</strong> príkaz break zabudnete, upozorní vás<strong>na</strong> to u prekladaè. Blok príkazov default, ktorý sa vykonáv prípade, e nie je nájdené nijaké vyhovujúce návestie, jenepovinný. Ako riadiaci výraz prepí<strong>na</strong>èa switch a konštan−ty v návestiach case je moné poui iba primitívne dátovétypy (pozri predchádzajúcu èas).Ïalej sa budeme venova iteraèným kontrolným štruk−túram.CYKLUS WHILE. Tento cyklus je moné oz<strong>na</strong>èi aj akocyklus s podmienkou <strong>na</strong> zaèiatku. Jeho syntax je <strong>na</strong>sledu−júca:while (výraz) {príkazy;}Výraz v zátvorkách musí by logický, teda jeho vyhod−notením musí by hodnota true alebo false. Príkazy v telecyklu sú vykonávané tak dlho, kým je riadiaci výraz vyhod−notený ako true. Výraz je vyhodnocovaný vdy pred ka−<strong>do</strong>u iteráciou, z èoho vyplýva, e príkazy v tele cyklu ne−musia by vyko<strong>na</strong>né ani raz (v prípade, e hneï pred prvouiteráciou je riadiaci výraz vyhodnotený ako false). Je po−trebné zabezpeèi, aby po urèitom poète iterácií vrátil ria−diaci výraz hodnotu false, teda aby sa cyklus niekedy skon−èil. Niekedy programátori cyklus úmyselne zacyklia, aby hoprerušili príkazom break v jeho tele:while (true) {príkazy;if (podmienka) break;príkazy;}CYKLUS DO..WHILE. Tento cyklus je v podstate obrá−tením cyklu while. Má podmienku <strong>na</strong> konci a má <strong>na</strong>sledu−júcu syntax:<strong>do</strong> {príkazy;} while (výraz);Opä platí, e výraz v zátvorkách musí by logický. Telotohto cyklu je vykonávané tak dlho, kým je riadiaci výraz<strong>na</strong> konci kadej iterácie vyhodnotený ako true. Z tohovyplýva, e telo tohto cyklu je vyko<strong>na</strong>né vdy aspoò raz,pretoe k prvému vyhodnoteniu výrazu dôjde a po prvejiterácii. Tento cyklus je moné takisto zacykli, prípadnekedyko¾vek preruši jeho beh a súèasnú iteráciu príkazombreak.ZLOENÉ OPERÁTORY. Prv ne sa budeme venovaïalšiemu typu cyklu, uvedieme si niektoré aritmetickéoperátory, ktoré by mohli by pre tento cyklus uitoèné.Operátory inkrementácie a dekrementácie majú <strong>na</strong>sledu−júci tvar:i++i−−Tieto zápisy sú ekvivalentné zápisomi = i + 1i = i − 1Pouitie operátorov inkrementácie a dekrementácie jerýchlejšie ako ich ob<strong>do</strong>bný zápis. Tieto operátory existujúv prefixovej i postfixovej po<strong>do</strong>be. My sme uviedli postfixo−vú (operátor je uvedený za premennou). Prefixový tvar jeteda <strong>na</strong>sledujúci:++i−−iRozdiel medzi postfixovou a prefixovou verziou spoèívav pouití vo výrazoch. Pokia¾ pouijete postfixový operá−tor, je vo výraze <strong>na</strong>jprv vrátená hodnota premennej a apotom je inkrementovaná. Na objasnenie uvádzam <strong>na</strong>sle−dujúci príklad:int i;i = 10;Console.WriteLine(i++);i = 10;Console.WriteLine(++i);Výstupom <strong>na</strong> konzole by boli postupne hodnoty1011z èoho vyplýva, e v prvom prípade bola <strong>na</strong>jprv vrátenáhodnota 10 a a potom bola hodnota premennej inkre−mentovaná, zatia¾ èo v druhom prípade bolo toto poradieopaèné.Na koniec tejto sekcie si ešte povieme nieèo o zloenýchoperátoroch priradenia. Majme <strong>na</strong>sledujúci zápis:i = i + 10;Ten je moné <strong>na</strong>hradi takto:i += 10;Opä ide o kratší a rýchlejší zápis. Zloený operátor pri−radenia je moné kombinova so všetkými aritmetickýmioperátormi:Operátor Dlhý zápis Skrátený zápis Výz<strong>na</strong>m+ i = i + hodnota i += hodnota prièítanie hodnoty− i = i − hodnota i −= hodnota odèítanie hodnoty* i = i * hodnota i *= hodnota vynásobeniehodnotou/ i = i / hodnota i /= hodnota vydelenie hodnotou% i = i % hodnota i %= hodnota zvyšok po deleníhodnotouCYKLUS FOR. Cyklus for patrí medzi komplexnejšie cyklya umoòuje zápis ve¾mi jednoduchého kódu, pokia¾ je jehojadrom práve iterovanie polokami. Jeho syntax je po<strong>do</strong>b−ná syntaxi v jazyku C alebo Java:for (inicializácia; logický výraz; iteraèný výraz) {príkazy;}Pred samotným spustením cyklu for je vdy vyko<strong>na</strong>náinicializaèná èas. Tá môe obsahova <strong>na</strong>príklad príkazypriradenia a deklarácie (èo vo väèšine prípa<strong>do</strong>v aj obsahu−je). Druhý výraz v zátvorkách je logický a jeho splneniepodmieòuje ukonèenie cyklu. Ide teda o riadiaci výraz a jevyhodnocovaný pred ka<strong>do</strong>u iteráciou. Pokia¾ <strong>na</strong><strong>do</strong>budnehodnotu true, je vyko<strong>na</strong>ná ïalšia iterácia, v opaènom prí−pade je beh celého cyklu ukonèený.Tretí výraz je vyhodnotený pred ka<strong>do</strong>u iteráciou a jehohodnota je vyhodnotená a platná pre celú iteráciu. V prí−pade, e pouijete <strong>na</strong>pr. prefixový operátor inkrementácieo 1, bude <strong>na</strong>jprv príslušná premenná inkrementovaná anásledne bude vrátená hodnota tejto premennej. Ak všakpouijete postfixový operátor, bude vrátená hodnota pre−mennej a a potom bude táto premenná inkrementovaná.Pre iteráciu však bude plati pôvodná hodnota premennej.Syntax cyklu for umoòuje vynechanie ktorejko¾vek ztroch menovaných èastí. Je moné <strong>do</strong>konca poui zápisfor (;;) {príkazy;}Tento zápis je ekvivalentný s nekoneèným cyklom, a pre−to by sa v tele tohto cyklu mal <strong>na</strong>chádza príkaz break.Ako bený príklad pouitia cyklu for uvádzam:for (int i = 0; i < 10; i++) {Console.WriteLine("Ria<strong>do</strong>k c. " + i);}Tento cyklus vypíše 10 riadkov (èíslovaných od 0 po 9).Pokia¾ telo cyklu pozostáva iba z jedného príkazu èi volaniametódy (ako v tomto prípade), je moné ho skombinova siteraèným výrazom. Nasledujúci kód bude ma teda rov<strong>na</strong>kýefekt, ale bude o nieèo rýchlejší, keïe neobsahuje nijaké telo:for (int i = 0; i < 10; Console.WriteLine("Ria<strong>do</strong>k c. " + i++));V cykle for je však moné vykonáva rôzne zloité kon−štrukcie, <strong>na</strong>príklad:for (int i = 0, j = 0; i < 10 && j < 5; ++i, j++) {príkazy;}Ako vidíte, monosti vyuitia cyklu for sú <strong>na</strong>ozaj ve¾kéa v koneènom dôsledku môe <strong>do</strong>brý zápis tohto cykluzlepši váš program èo <strong>do</strong> rýchlosti alebo preh¾adnosti.Iteraèný výraz nemusí vdy obsahova aktualizáciu ria−diacej premennej. Môe obsahova akýko¾vek výraz, pri−èom aktualizova riadiacu premennú je moné aj v samot−nom tele cyklu.PRÍKAZ CONTINUE. Príkaz continue patrí spolu s príka−zom break medzi príkazy <strong>na</strong> explicitné riadenie cyklu. No za−tia¾ èo príkaz break beh cyklu preruší, príkaz continue prerušíiba práve prebiehajúcu iteráciu. Týmto príkazom teda reali−zujete skok <strong>na</strong> zaèiatok cyklu a spustenie novej iterácie s tým,e sú opä vyhodnotené všetky riadiace a v prípade cyklu foraj iteraèné výrazy. Pokia¾ ide o cyklus <strong>do</strong>..while (s podmienkou<strong>na</strong> konci), je príkazom continue realizovaný skok <strong>na</strong> konieccyklu a takisto opätovné vyhodnotenie riadiaceho výrazu.ZÁVER. V tejto èasti sme ukonèili rozprávanie o kon−trolných štruktúrach jazyka C# a povedali sme si aj nieèoo zloených aritmetických a priraïovacích operátoroch.V <strong>na</strong>sledujúcom pokraèovaní sa budeme venova pouíva−te¾sky definovaným typom – záz<strong>na</strong>mom a zoz<strong>na</strong>mom.Andrej Chu110 PC REVUE 7/2003