Systém pre podporu výuky teórie programovacích jazykov

Size: px
Start display at page:

Download "Systém pre podporu výuky teórie programovacích jazykov"

Transcription

1 Mendelova univerzita v Brně Provozně ekonomická fakulta Systém pre podporu výuky teórie programovacích jazykov Diplomová práca Vedúci práce: doc. Ing. Dr. Jiří Rybička Bc. Petra Pavlačičová Brno 2012

2

3 Ďakujem docentovi Ing. Dr. Jiřímu Rybičkovi za čas a pomoc pri písaní diplomovej práce a profesorovi RNDr. Ing. Jiřímu Šťastnému, CSc. za priebežnú kontrolu na diplomovom seminári. Taktiež by som sa chcela poďakovať mojej rodine a mojim blízkym za podporu a trpezlivosť pri vypracovávaní mojej práce.

4

5 Prehlasujem, že som diplomovú prácu vypracovala samostatne s použitím literatúry a zdrojov uvedených v zozname. V Brne dňa 27. decembra 2012

6 Abstract Pavlačičová, P. Support system for teaching the theory of programming languages. Diploma thesis. Brno, This thesis deals with the analysis and subsequent comparison of existing programming languages, selected according to selected criteria. The result is a scheme of a programming language and creating grammar for this language.as the output of this work are focused on the semantic actions in the process of compilation. Key words Programming languages, Language C, C++, Pascal, Java, Perl, PHP, compiler, semantic analysis Abstrakt Pavlačičová, P. Systém pre podporu výuky teórie programovacích jazykov. Diplomová práca. Brno, Diplomová práca sa zaoberá analýzou a následným porovnaním existujúcich vybraných programovacích jazykov podľa zvolených kritérií. Výsledkom analýzy je návrh programovacieho jazyka a vytvorenie gramatiky pre tento jazyk. Výstupom práce je aplikácia, zameraná na sémantické akcie v procese prekladu. Kľúčové slová Programovacie jazyky, Jazyk C, C++, Pascal, Java, Perl, PHP, prekladač, sémantická analýza

7 Obsah 7 Obsah 1 Úvod a cieľ práce Úvod Cieľ práce Teoretické východiská Základné pojmy Imperatívne programovanie Výber programovacích jazykov C/C Štruktúra jazyka C Pascal Štruktúra jazyka Pascal Perl Štruktúra jazyka Perl PHP Štruktúra programu v PHP Java Štruktúra jazyka Java Porovnanie programovacích jazykov Dátové typy Rozdiely jazykov podľa celočíselného dátového typu Rozdiely jazykov podľa dátových typov s plávajúcou desatinnou čiarkou Rozdiely jazykov podľa iných dátových typov Typová kontrola... 23

8 8 Obsah Porovnanie jazykov Syntax jazyka Rozdiely v zápise polí Rozdiely v zápise blokov Rozdiely v oddeľovaní príkazov Rozdiely v zápise podmienených príkazov Rozdiely v zápise viaccestného vetvenia Rozdiely v zápise cyklov Rozdiely v zápise komentárov Rozdiely v zápise funkcií Porovnanie jazykov z hľadiska ich využitia Porovnanie programovacích jazykov z hľadiska popularity TIOBE Programming Community Index za november Zhodnotenie jazykov Tvorba výukového jazyka Popis syntaxe Jazyk generovaný bezkontextovou gramatikou Implementácia Vývojové prostredie Microsoft Visual Studio MFC Požiadavky na aplikáciu Sémantická analýza Tabuľa symbolov Sémantické akcie Záver 69

9 Obsah 9 7 Literatúra 70 A Syntaktické grafy 75 B Základná lexikálna gramatika 79 C Syntaktická gramatika 81 D Začlenenie sémantických akcií do gramatiky 83

10 10 Zoznam obrázkov Zoznam obrázkov Obr. 1 Dlhodobý trend obľúbenosti programovacích jazykov Zdroj: [40], Obr. 2 Dlhodobý trend obľúbenosti programovacieho jazyka C Zdroj: [40], Obr. 3 Dlhodobý trend obľúbenosti programovacieho jazyka C++ Zdroj: [40], Obr. 4 Dlhodobý trend obľúbenosti programovacieho jazyka Java Zdroj: [40], Obr. 5 Dlhodobý trend obľúbenosti programovacieho jazyka PHP Zdroj: [40], Obr. 6 Dlhodobý trend obľúbenosti programovacieho jazyka Perl Zdroj: [40], Obr. 7 Dlhodobý trend obľúbenosti programovacieho jazyka Pascal Zdroj: [40], Obr. 8 Syntaktická gramatika 62 Obr. 9 Dialógové okno aplikácie 65 Obr. 10 Tabuľka symbolov 66 Obr. 11 Sémantické akcie začlenené do syntaktickj gramatiky 67 Obr. 12 Tabuľka symbolov 68

11 Zoznam tabuliek 11 Zoznam tabuliek Tab. 1 Porovnanie jazykov podľa celočíselného typu 22 Tab. 2 Rozdiely jazykov podľa dátových typov s plávajúcou desatinnou čiarkou 23 Tab. 3 Rozdiely jazykov podľa iných dátových typov 23 Tab. 4 Rozdiely v zápise polí 25 Tab. 5 Rozdiely v zápise blokov 26 Tab. 6 Rozdiely v zápise oddeľovania príkazov 27 Tab. 7 Rozdiely v zápise podmienených výrazov 28 Tab. 8 Rozdiely v zápise viaccestného vetvenia 30 Tab. 9 Rozdiely v zápise cyklu while 32 Tab. 10 Rozdiely v zápise cyklu do...while 33 Tab. 11 Rozdiely v zápise cyklu for 34 Tab. 12 Rozdiely v zápise komentárov 36 Tab. 13 Rozdiely v zápise funkcií, ktoré nevracajú hodnotu 37 Tab. 14 Rozdiely v zápise funkcií, ktoré vracajú hodnotu 40 Tab. 15 Rozdiely volania funkcií 41 Tab. 16 Rozdiely v jazykoch pri potrebe hlavnej funkcie 43 Tab. 17 Hodnotenie programovacích jazykov, porovnanie obľúbenosti k novembru Tab. 18 Prehľad terminálov a neterminálov 60 Tab. 19 Prehľad terminálov a čo predstavujú 61

12 12 Úvod a cieľ práce 1 Úvod a cieľ práce 1.1 Úvod Programovacie jazyky vznikajú, pretože iné formy ľudského vyjadrovania, ako napríklad prirodzené jazyky, nie sú v dostatočnej miere vhodné na jednoznačný a systémový opis. Takzvané vyššie programovacie jazyky sú zvyčajne presne definovanou podmnožinou prirodzeného jazyka (napr. angličtiny) s vlastnou definíciou gramatiky a sémantiky. Na svete už existuje veľké množstvo rôznych programovacích jazykov a stále vznikajú nové. Každý programovací jazyk bol vytvorený za nejakým cieľom. Napríklad Pascal bol pôvodne vyvinutý pre výukové účely, Perl na správu súborov jazyka pre Unix. Väčšina týchto jazykov sa rozšírila a začala sa používať aj na veci iné, než boli pôvodne určené. Z toho dôvodu je na svete veľa podobných programovacích jazykov avšak sú od seba konštrukčne odlišné. V mojej práci som sa zamerala na niekoľko známych a rozšírených programovacích jazykov, ktoré som porovnávala konštrukčne, z hľadiska ich využitia a popularity. Vo vyučovacích predmetoch na Provozně ekonomickej fakulte Mendelovy univerzity v Brne, odboru Teoretická informatika a Teorie programovacích jazyků, sa študenti venujú témam vytvárania gramatických pravidiel, tvorby lexikálnej, syntaktickej a sémantickej analýzy. Ide viac-menej o základ pre vytvorenie funkčného prekladača. Všimla som si ale, že všetky referenčné príklady sú sa týkajú jazykov, ktoré obsahujú základné aritmetické operácie. Sú to beztypové jazyky, neobsahujú riadiace štruktúry ani definície a deklarácie funkcií a premenných. Bolo by vhodné ukázať postup návrhu zložitejšieho jazyka. Jazyk som navrhla pomocou predchádzajúcej analýzy rôznych programovacích jazykov. 1.2 Cieľ práce Cieľom tejto práce bolo analyzovať mnou vybrané známe programovacie jazyky a porovnať ich medzi sebou z viacerých strán - z hľadiska typovej kontroly, dátových typov, syntaxe jazykov, využitia jazykov a ich popularity v súčasnej dobe a ukázať, v čom sú si podobné a v čom sa, naopak, odlišujú. Následne je cieľom na základe tejto analýzy vytvorenie výukového programovacieho jazyka, ktorého postupné vytváranie podrobne popisujem a vysvetľujem. Túto časť som sa rozhodla podrobnejšie popísať, pretože predpokladám, že pre študentov predmetov Teoretická informatika a Teorie programovacích jazyků bude užitočný popis vytvárania určitého zložitejšieho jazyka so zložitejšou gramatikou, pretože vo väčšine študijných materiálov ide o veľmi jednoduché gramatiky ako demonštračné ukážky vytvárania prekladača.

13 Úvod a cieľ práce 13 Ako výsledok vytvárania jazyka je aplikácia, ktorá bude tento vytvorený jazyk spracovávať a zameria sa hlavne na sémantickú analýzu. To znamená, že ak lexikálna a syntaktická analýza bude správna a chyba bude v sémantike jazyka, program na danú chybu upozorní. Aby sémantické akcie fungovali, je potrebné ich vhodne vložiť do syntaktickej analýzy, odkial sa budú vykonávať. V tomto vidím prínos najmä preto, že programov, ktoré sa zameriavajú na sémantické chyby, nie je veľa. Tým, že som čitateľa oboznámila s tým, ako má jazyk a gramatika vyzerať, je vhodné ukázať mu, ako detekovať aj sémantické chyby.

14 14 Teoretické východiská 2 Teoretické východiská V tejto kapitole popíšem vybrané programovacie jazyky imperatívnej paradigmy, ktoré budem analyzovať a porovnávať, zisťovať ich odlišnosti, výhody a nevýhody ich užívania. 2.1 Základné pojmy Imperatívne programovanie Imperatívne programovacie jazyky [5] majú svoje prostriedky, príkazy pre zápis ako riešiť úlohu aká akcia sa má previesť, poradie inštrukcií, adresy dát. Výpočet je riadený tokom inštrukcií. Imperatívne programovanie popisuje výpočet pomocou postupnosti príkazov a určuje presný postup (algoritmus), ako danú úlohu riešiť. Program je sadou premenných, ktoré v závislosti na vyhodnotení podmienok menia pomocou príkazu svoj stav. Základnou metódou imperatívneho programovania je procedurálne programovanie, tieto termíny bývajú často zamieňané. Imperatívne programovanie podľa prístupu členíme na: štruktúrované programovanie, procedurálne programovanie, modulové programovanie. 2.2 Výber programovacích jazykov Z imperatívnych jazykov som sa snažila vybrať takých zástupcov na porovnanie, ktorí sú podľa mňa najrozšírenejšíe alebo s nimi prišlo mnoho ľudí - programátorov do styku. Vyberala som jazyky, ktoré majú ako imperatívne jazyky podobnú konštrukciu, avšak sú medzi nimi rozdiely aj v spomínanej konštrukcii, lexikálnych jednotkách, v ich použití a ďalšie rozdiely, ktoré budem v nasledujúcich kapitolách skúmať. Jazyky, ktorým sa budem venovať, sú: C/C++ Pascal

15 Teoretické východiská 15 Perl PHP Java 2.3 C/C++ Programovací jazyk C je štandardný programovací jazyk vyvinutý začiatkom sedemdesiatych rokov. Autorom jazyka je Dennis Ritchie. Pôvodne bol určený pre použitie na operačných systémoch UNIX. Odvtedy sa rozšíril na mnohé iné operačné systémy a je jedným z najpoužívanejších programovacích jazykov. Jazyk C je všeobecne použiteľný programovací jazyk známy svojou efektivitou, úspornosťou a prenositeľnosťou. Táto charakteristika ho predurčuje pre prakticky všetky oblasti programovania. Obzvlášť je tento jazyk užitočný v systémovom programovaní (hoci sa používa aj na tvorbu aplikačného softvéru), pretože umožňuje písanie rýchlych a pomerne krátkych programov, ktoré sú ľahko prenositeľné pre iné systémy. Dobre napísaný C program je často rovnako rýchly ako program napísaný v strojovom kóde. Navyše, je čitateľnejší a ľahšie udržiavateľný. Jazyk C má pomerne málo jednoduchých pravidiel, pomocou ktorých je možné vytvárať a skladať jednotlivé úseky programov do väčších a väčších celkov. Tiež sa bežne používa pri výuke programovania, hoci nie je určený pre úplných začiatočníkov. Jazyk C je implementovaný pre všetky typy procesorov a spolu so systémom UNIX predstavuje dnes jeden z hlavných trendov vo svete. Vznikol tiež celý rad rozšírení jazyka C napr. Objective C pre objektové programovanie, Concurrent C pre paralelné programovanie, ale najperspektívnejším sa zdá byť objektovo orientované rozšírenie jazyka C++ [1, 7, 8] Štruktúra jazyka C Jeden programový modul (jeden zdrojový súbor s príponou.c) sa skladá z deklarácií globálnych premenných, deklarácií funkcií a definícií funkcií. Deklarácia funkcie deklaruje typ funkcie, meno funkcie a zoznam parametrov, definícia obsahuje aj telo. Deklarácie funkcií a premenných, ktoré majú byť dostupné aj z iných modulov, sa zväčša zapisujú do súboru s príponou.h. Súbory s príponou.h sa vkladajú do zdrojových súborov iných modulov pomocou direktívy #include. Komentáre v C sa začínajú /* a končia */. Medzery, tabulátory a konce riadkov sú rovnocenné a nie sú zaujímavé (s výnimkou ukončovania mena). Mená typov, premenných, funkcií a podobne začínajú písmenom a obsahujú písmená, číslice a podtržník. Jazyk C je tzv. case-sensitive, to znamená, že sa dodržiava písanie malých a veľkých písmen. Začiatok a koniec funkcie, tela programu je uzavretý v párových zložených zátvorkách {}.

16 16 Teoretické východiská Štruktúra programu v jazyku C má teda obecný tvar: skupina hlavičkových súborov štandardných funkcií, definície užívateľských funkcií, deklarácie globálnych premenných, funkcia main, ostatné užívateľské funkcie. Príklad kódu písaného v jazyku C: /* Vloženie súboru stdlib.h, ktorý sa hľadá v systémových adresároch */ #include <stdlib.h> /* Deklarácia globálnej premennej a typu int */ int a; /* hlavý program */ int main() { int b; /* lokálna premenná */ b = (x + 5)*a; if (b > 0) return b; return 0; } 2.4 Pascal V roku 1970 vznikol ďalší programovací jazyk, pomenovaný na počesť vynikajúceho francúzskeho vedca matematika a filozofa Blaisa Pascala. Jeho autorom bol Niclaus Wirth. Tento jazyk bol určený predovšetkým pre výuku, ale okamžite sa rozšíril takým tempom, aké nemá medzi programovacími jazykmi obdobu. Pascal je typickým predstaviteľom jazykov štruktúrovaného programovania, čím umožňuje dekompozíciu problému na čiastkové problémy a následne modulárnu výstavbu riešenia danej úlohy [11] Štruktúra jazyka Pascal Programovací jazyk PASCAL je procedurálny jazyk. Jeho štruktúra bola určená a je nutné ju dodržať. Program v Pascale je tvorený tromi časťami:

17 Teoretické východiská hlavička názov programu, 2. deklarácie v tejto časti sa môže vyskytovať šesť rôznych typov deklarácií: o uses <zoznam unitov> o label <deklarácia návestí> o const <deklarácia konštánt> o type<definícia údajových typov> o var <deklarácia premenných> o <deklarácia procedúr a funkcií> 3. príkazová časť je umiestnená v tzv. príkazových zátvorkách begin end (za ktorými je bodka) a predstavuje vlastnú výkonnú časť programu hovoríme o hlavnom programe [11, 12], Príklad kódu písaného v Pascale: program PR1; uses Crt, Dos, Graph; label 123; const N=100; type Pole= array[1..n] of real; var X: Pole; Y: real; procedure TLAC_VEKTOR(P: integer; A: Pole); begin end; begin end. 2.5 Perl Slovo Perl je skratkou odvodenou z anglického Practical Extraction and Report Language. Je to univerzálny, interpretovaný (t. j. netreba ho kompilovať) programovací jazyk. Vyvinul ho v roku 1987 Larry Wallom, lingvista, ktorý bol správcom systémov z NASA. Zámerom bolo vytvoriť jazyk praktický, ktorý sa bude ľahko používať, bude výkonný a kompletný a nie nevyhnutne minimalistický.

18 18 Teoretické východiská Perl bol pôvodne vyvinutý na manipuláciu textu, ale dnes má už širokú škálu užívania od správy systémov, programovanie webov, sieťové programovanie, vývoj GUI, programovanie hier a 3D grafiku pomocou OpenGL až po internetové aplikácie, akou je napríklad Wikipédia. Perl 5 beží na viac ako 100 platformách od prenosných zariadení až po mainframy. Perl je pod GNU GPL Actistic licenciou. Môžete ho používať zdarma, a to aj v komerčných projektoch. V Perle sa dá programovať štruktúrovane, ale aj objektovo. Pôvodne bol Perl napísaný pre unixovú platformu, ale dnes beží aj na mnohých ďalších. Medzi nimi sa dá relatívne dobre prenášať. Perl získal širokú popularitu v neskorých 90-tych rokoch ako CGI skriptovací jazyk, z časti kvôli jeho schopnosti pri spracovávaní. Kombinuje v sebe prvky jazyka C, awk, grepu, sedu a Bourne shellu [13, 14, 16] Štruktúra jazyka Perl Perl je rovnako ako jeho autor a celá myšlienka GNU veľmi voľným a slobodomyseľným jazykom v oblasti syntaxe. Jeho syntax síce vychádza z jazyka C, ale obsahuje aj prvky iných programovacích jazykov. Perlovské programy (skripty) sú zväčša ukladané v súboroch s príponou.pl, avšak táto prípona nie je povinná a väčšina skriptov na UNIXoch je spúšťaná pomocou konštrukcie #!. Preto prvý riadok skriptu písaného v Perle býva (aspoň v OS UNIX): #!/usr/bin/perl w [17] [16] Príklad kódu zapísaného v Perle: #!/usr/bin/env perl my $x = "foo"; my $some_condition = 1; if($some_condition) { my $y = "bar"; print $x; # prints "foo" print $y; # prints "bar" } print $x; # prints "foo" print $y; # prints nothing; $y has fallen out of scope

19 Teoretické východiská PHP PHP (PHP: Hypertext Preprocessor) je populárny open source skriptovací programovací jazyk, ktorý sa používa najmä na programovanie klient-server aplikácií (na strane servera) a pre vývoj dynamických webových stránok. Pôvodne bol navrhnutý ako niekoľko skriptov v jazyku Perl neskôr prepísaných do jazyka C. Ich autorom bol Rasmus Lerdorf v roku Svoje skripty zverejnil v roku 1995 pod názvom Personal Home Page Tools [18]. PHP je hypertextový preprocesor, ktorý na servere interpretuje stránky HTML s vlastnými príkazmi pred ich odoslaním ku klientovi (obvykle je ním webový prehliadač). To znamená, že PHP umožňuje vkladať vlastné skripty (krátke úseky kódu, ale aj celé programy) priamo do hypertextových stránok [20]. PHP bol inšpirovaný jazykmi, podporujúcimi štruktúrované programovanie; najviac vlastností prebral od jazykov C a Perl. V neskorších verziách bol rozšírenz o možnosť používať objekty. Jedna zo zaujímavých vlastností PHP je, že umožňuje viac než bežný skriptovací jazyk. Vďaka modulárnemu návrhu možno PHP používať aj na vývoj aplikácii s užívateľským rozhraním (GUI). PHP dokáže spolupracovať s relačnými databázami, napríklad MySQL, Oracle, IBM DB2, Microsoft SQL Server, PostgreSQL a SQLite, pričom si stále zachováva jednoduchú a priamočiaru syntax. PHP funguje na takmer všetkých najrozšírenejších operačných systémoch, vrátane UNIXu, Linuxu, Windows a Mac OS X. Spolupracuje s najrozšírenejšími webovými servermi. Architektúra Linux, Apache, MySQL, PHP (zaužívaná skratka je LAMP) sa stala veľmi obľúbenou v internetovom odvetví [18] Štruktúra programu v PHP PHP skriptovací blok vždy začína <? php a končí?> a môže byť umiestnený kdekoľvek v dokumente. PHP súbor zvyčajne obsahuje HTML značky, rovnako ako HTML súbor a nejaký PHP skriptovací kód [21]. Použiť sa však dá aj <script language="php"> a </script>, takisto skrátená forma <?, alebo <?= (na výpis reťazca alebo premennej) a?>, prípadne ASP-style tagy <%, <%= a %>. Zmyslom týchto tagov je oddeliť kód priamo spracúvaný PHP od zvyšného kódu. Názvy premenných začínajú symbolom $ a samotné premenné nemusia mať dopredu definovaný typ. Na rozdiel od názvov funkcií a tried, v názvoch premenných sa rozlišujú veľké a malé písmená [18].

20 20 Teoretické východiská Príklad kódu písaného v PHP: <html> <body> <?php?> $txt="hello World"; echo $txt; </body> </html> 2.7 Java Java je objektovo orientovaný programovací jazyk. Je vyvíjaný spoločnosťou Sun (v súčasnosti spoločnosť ORACLE). Základy Javy sa dajú nájsť v projekte Oak, ktorý vznikol vo firme Sun na počiatku 90. rokov pre riadenie elektronických výrobkov. V roku 1994 bol prenesený ako programovací jazyk do prostredia počítačov pod názvom Java. Java bol pôvodne vyvíjanz s cieľom použitia v spotrebnej elektronike, v ktorej Sun videl obrovský potenciál, cesta tohto jazyka sa celkom nečakane obrátila na web. V dobe rozmachu internetu boli stránky viac-menej statické a dynamika bola riešená zložitým spôsobom cez CGI skripty, vykonávajúce sa na strane servera. Keďže vývojári webových stránok požadovali možnosť vyššej interaktivity, Gosling so svojím tímom jazyk upravil tak, aby mohol bežať v prostredí webového prehliadača a zabezpečoval potrebnú a požadovanú interaktivitu. Tak vznikli applety, ktoré boli základom ďalšieho úspechu Javy. Zdrojové programy sa nekompilujú do strojového kódu, ale do medzistupňa, tzv. byte-code, ktorý nie je závislý od konkrétnej platformy. Obsahuje všetky vlastnosti, ktoré sú vyžadované v modernom programovaní, od modularity programu, riadiacich konštrukcií cez silnú typovú kontrolu, multithreading, ošetrenie výnimok, správu pamäti a aj silnou podporu pre databázy, XML a sieťové operácie [18, 22] Štruktúra jazyka Java Syntax jazyka vychádza z jazykov C a C++. Činnosť aj identifikátory programu sú uložené v definícii tried, neexistujú teda žiadne samostatné, globálne premenné alebo funkcie ako v iných, úplne neobjektových programovacích jazykoch.

21 Teoretické východiská 21 Zdrojový súbor, ktorý má byť spustiteľný, musí obsahovať verejnú triedu, uvedenúu kľúčovými slovami public class. Súbor musí byť uložený pod menom tejto triedy s príponou.java. Táto trieda musí obsahovať metódu so záhlavím public static void main(string args[]), ktorá sa spúšťa pri štarte programu. Kód programu je hierarchicky štruktúrovaný v blokoch, uzavretých v zložených zátvorkách {}. Najvyššia úroveň je celá trieda, ktorá obsahuje (okrem deklarácie svojich atribútov) aj samostatne uzatvorené metódy [22]. Príklad kódu zapísaného v jazyku Java: public class PrvyProgram { // po spustení programu sa ako prvá vykoná funkcia main(string[]) public static void main(string[] arg) { // vypíše do konzoly text v úvodzovkách System.out.println("Vas prvy program napisany v programovacom jazyku Java!"); } }

22 22 Porovnanie programovacích jazykov 3 Porovnanie programovacích jazykov Nedá sa jednoznačne povedať, ktorý jazyk je dobrý a ktorý zlý. Je však možné povedať, aj keď nikdy nie úplne jednoznačne, ktorý jazyk je na čo vhodný a na čo nie, čo určité jazyky obsahujú a iné nie. V tejto kapitole by som sa chcela venovať určitým rozdielom v hore popísaných programovacích jazykoch, porovnať ich a prehľadne spísať zozbierané informácie o ich rozdieloch a používaní, o ich obľúbenosti a rozšírenosti. 3.1 Dátové typy Dátový typ definuje druh alebo význam hodnôt, ktoré môže nadobúdať premenná (alebo konštanta). Je určený oborom hodnôt a zároveň výpočtovými operáciami, ktoré možno s hodnotami tohto typu robiť. Dátový typ by nemal byť určený len oborom hodnôt z toho dôvodu, že existujú aj dátové typy, ktoré sa líšia len v operáciách, ktoré je možné s nimi vykonávať [25] Rozdiely jazykov podľa celočíselného dátového typu Tab. 1 Porovnanie jazykov podľa celočíselného typu C (C99) C++ Signed signed char signed char 8 bit Unsigned Signed Unsigned Signed Unsigned Signed Unsigned Signed Unsigned unsigned char unsigned char 16 bit (short integer) short short unsigned short unsigned short Zdroj: Informácie v tejto tabuľke som čerpala z literatúry [23], Rozdiely jazykov podľa dátových typov s plávajúcou desatinnou čiarkou long long 32 bit unsigned long unsigned long 64 bit (long integer) long long long long unsigned long long unsigned long long Formát s jednoduchou presnosťou a s plávajúcou desatinnou čiarkou je počítačový formát čísla, ktoré zaberá 4 bajty (32 bitov) v pamäti počítača a predstavuje široký dynamický rozsah hodnôt pomocou plávajúceho bodu. Formát s dvojitou presnosťou, tzv. double precision, zaberá v pamäti počítača dve susediace miesta, čiže zaberá 64 bitov. Niekedy sa nazýva double. int int unsigned int unsigned int JAVA byte N/A short char int N/A long na na na Perl 5 N/A N/A N/A N/A N/A Perl 6 int8 uint8 int16 uint16 int32 uint32 int64 uint64 Int N/A PHP N/A N/A int N/A N/A N/A Veľkosť slova Pascal shortint byte smallint word longint longword int64 qword integer cardinal

23 Porovnanie programovacích jazykov 23 Tab. 2 Rozdiely jazykov podľa dátových typov s plávajúcou desatinnou čiarkou Jednoduchá presnosť Dvojitá presnosť C float double C++ float double Java float double Pascal single double PHP Perl float Perl 6 num32 num64 Zdroj: Informácie v tejto tabuľke som čerpala z literatúry [23], Rozdiely jazykov podľa iných dátových typov Tab. 3 Rozdiely jazykov podľa iných dátových typov Znak Reťazec Boolean Zdroj: Informácie v tejto tabuľke som čerpala z literatúry [23], 2012 Výčtový typ C (C99) char, wchar_t N/A bool enum «name» {item1, item2,... }; C++ (STL) char, wchar_t «std::»string bool enum «name» {item1, item2,... }; Java char String boolean enum name {item1, item2,... } Pascal char N/A boolean (item1, item2,...) PHP N/A string bool Perl N/A Text Perl 6 Char Str Bool enum name <item1 item2...> alebo enum name <<:item1(value) :item2(value)...>> 3.2 Typová kontrola Typová kontrola je proces overovania dátových typov v zdrojovom kóde počítačového programu (pre operandy vo výrazoch, parametre a návratové hodnoty funkcií aj inde). Ak je vykonávaná typová kontrola prekladačom pri preklade programu, hovoríme o statickej typovej kontrole, ak je vykonávaná až v prostredí za chodu programu, hovoríme o dynamickej typovej kontrole. Za silne typované označujeme jazyky, ktoré vyžadujú prísne udávanie dátových typov, ostatné programovacie jazyky označujeme ako slabo typované [24, 26]. Ak hovoríme o statickej typovej kontrole, pri každej deklarovanej premennej či pri parametri je nutné uvádzať typ. Typ potom definuje množinu hodnôt, ktoré môže premenná nadobudnúť, a množinu operácií, ktoré môžu byť s danou premennou vykonávané. V každom okamžiku potom musí byť úplne zrejmé, akého typu je premenná, s ktorou práve pracujeme.

24 24 Porovnanie programovacích jazykov U programovacích jazykov používajúcich statické typovanie sa typová kontrola koná už v dobe kompilácie. Pri programovaní v týchto jazykoch je nutné explicitne deklarovať typy premenných. Dynamická typová kontrola sa koná počas chodu programu. Jazyky používajúce dynamické typovanie nevyžadujú špecifikáciu dátového typu u premenných a môžu teda odkazovať na hodnotu akéhokoľvek typu. Pri dynamicky typovanom jazyku sa pri kompilácii vykoná iba syntaktická analýza. Silne typovaný jazyk predchádza vykonávanie operácií na argumentoch so zlým dátovým typom. Dovoľuje priradiť hodnoty jedného typu do iného, čo môže síce urobiť kód rýchlejším a kompaktnejším, ale taktiež sťažiť ladenie. Slabo typované jazyky implicitne prevádzajú typy pri ich použití. V nasledujúcom príklade nie je slabo typovanému jazyku jasný výsledok operácie: [27, 24] var x = 5; // x je typu integer var y = "37"; // y je typu string x + y; //? Porovnanie jazykov Medzi staticky, čiže silne typované jazyky patrí: C, C++, JAVA, Perl v jazyku Perl je veľmi benevolentná typová kontrola, ale to je už riešené vo verzii Perl 6. Medzi dynamicky, čiže slabo typované jazyky patrí: PHP. 3.3 Syntax jazyka Syntax jazyka predstavuje pravidlá pre zápis znakov v správnom poradí, ktoré definuje určitý programovací jazyk. Popisuje postupnosť jednotlivých znakov a skupín znakov, napríklad to, ako môže vyzerať názov premennej, alebo ako by mala byť zapísaná funkcia. Jazyky môžu mať rozličnú syntax, preto na niektoré rozdiely poukážem.

25 Porovnanie programovacích jazykov Rozdiely v zápise polí Pojmom pole označujeme dátovú štruktúru, ktorá združuje daný, vždy konečný počet prvkov (čísel, textových reťazcov ) rovnakého dátového typu. K jednotlivým prvkom poľa sa pristupuje pomocou ich indexu (celého čísla, označujúceho poradie prvkov) [28]. Tab. 4 Rozdiely v zápise polí C C++ (STL) Java Pascal type name[max_size+1] «std::»array<type, size> Zdroj: Informácie z tejto tabuľky som čerpala z literatúry [19, 11, 13, 29], 2012 Z tabuľky je zrejmé, že zápisy polí majú jazyky ozaj odlišné. Pri jazykoch C/C++, Java a Pascal je nutné uvádzať dátový typ, ktorý budeme mať v poli uložený, ale pri PHP a Perle typ neuvádzame. Polia delíme na indexové a asociatívne. Indexové polia používajú čísla, asociatívne polia využívajú premenné, reťazce a pod. Prvky tohto poľa pozostávajú z dvoch častí kľúč:hodnota, pričom sa kľúč používa ako index. V jazyku Perl sa zapisuje asociatívne pole týmto spôsobom: %asoc_pole = ("kluc1", "hodnota1", "kluc2", "hodnota2", "kluc3", "hodnota3"); Ako vidíme, každý druhý prvok je hodnotou predchádzajúceho prvku. Ďalším rozdielom, ktorý ale z tabuľky nie je zrejmý, je indexovanie poľa. Jazyky C/C++, Perl, Java sa indexujú od čísla 0, v jazyku Pascal sa indexuje od ľubovoľnej hodnoty a PHP sa indexuje kľúčmi (asociatívne pole) Rozdiely v zápise blokov Zápis pola type[] name = new type[size] type name : Array[1..MAX_SIZE] of Integer; PHP array( key => value, key => value.,..) Perl (@name= ("value1", "value2", "valuelast"); Blok je zápis pre skupinu dvoch alebo viacerých príkazov, výrazov alebo iných jednotiek kódu, ktoré pôsobia ako celok. Bloky rozčleňujú kód na súvislé logické časti (riadiace štruktúry pre podmienku if, cyklus while-do, cyklus for a podobne) alebo samostatné funkčné časti pri funkciách a procedúrach. Štruktúrované programovanie umožňuje vzájomné zanorovanie blokov, čo umožňuje používať lokálne premenné a funkcie.

26 26 Porovnanie programovacích jazykov Rôzne jazyky používajú iné označenie blokov, ako môžeme vidieť v nasledujúcej tabuľke: Tab. 5 Rozdiely v zápise blokov blok C {... } C++ {... } Java {... } PHP {... }(for & loop loops, or pass a block as argument) Perl {... } Pascal begin... End Zdroj: Informácie z tejto tabuľky som čerpala z literatúry [31, 20], 2012 Vo všetkých skúmaných programovacích jazykoch (okrem Pascalu) je telo bloku ohraničené znakmi zložených zátvoriek { }. V Pascale je telo bloku vymedzené medzi kľúčové slová begin end Rozdiely v oddeľovaní príkazov Programovacie jazyky majú konvencie pre príkazyv ako: oddeľovanie príkazov, ukončovanie príkazov, pokračovanie riadku. Oddeľovač príkazov sa používa na ohraničenie, vymedzenie hranice medzi dvomi odlišnými príkazmi. Ukončovač sa používa na oddelenie konca individuálneho príkazu. Pokračovanie riadku je konvencia v jazykoch, kde nový riadok môže byť chybne chápaný ako ukončovač príkazu.

27 Porovnanie programovacích jazykov 27 Tab. 6 Rozdiely v zápise oddeľovania príkazov oddeľovač/ukončovač príkazov ďalší oddeľovač (pre viac príkazov na jedom riadku ) C bodkočiarka ukončuje príkaz čiarka oddeľuje príkaz C++ bodkočiarka ukončuje príkaz čiarka oddeľuje príkaz Java bodkočiarka ukončuje príkaz PHP Perl Pascal Zdroj: Informácie z tejto tabuľky som čerpala z literatúry [31], 2012 Aj v tomto prípade sa nájdu rozdiely medzi jednotlivými jazykmi. V jazykoch C, C++, Java a PHP je bodkočiarka používaná ako ukončovač príkazov, no pri jazykoch Perl a Pascal bodkočiarka príkaz oddeľuje. Ak je viac príkazov v jednom riadku, C a C++ používa na jeho oddelenie čiarku Rozdiely v zápise podmienených príkazov Podmienený príkaz využívame hlavne vtedy, ak má program vykonať niečo na základe splnenia rozhodujúcej podmienky. Ak je podmienka splnená, vykoná sa kód v prvom bloku, ak je podmienka nesplnená, vykoná sa blok, ktorý sa nachádza za kľúčovým slovom else. Tento blok však nie je povinný. Ako príklad uvediem pseudokód podmieneného príkazu: If podmienka{ Prikaz1; }else { } Prikaz2; bodkočiarka ukončuje príkaz bodkočiarka oddeľuje príkaz bodkočiarka oddeľuje príkaz

28 28 Porovnanie programovacích jazykov Tab. 7 Rozdiely v zápise podmienených výrazov if... Else C if (condition) {instructions} «else {instructions}» C++ if (condition) {instructions} «else {instructions}» Java PHP if (condition) {instructions} «else {instructions}» if (condition) {instructions} «else {instructions}» Perl if (condition) {instructions} «else {instructions}» or unless (notcondition) {instructions} «else {instructions}» Pascal if condition then begin instructions end «else begin instructions end» Zdroj: Informácie z tejto tabuľky som čerpala z literatúry [23, 13], 2012 Pri tejto tabuľke by som chcela dodať, že aj keď je v nej zapísané, že po podmienke alebo po else idú inštrukcie v bloku, je tu výnimka.ak je inštrukcia iba jedna, blok sa udávať nemusí. Ako v nasledujúcom príklade v jazyku C: if(i>1) vysledok=10; else vysledok=0; Tento princíp bude platiť aj pri ostatných porovnaniach v ďalšom texte. Zápis podmienených výrazov sa vo väčšine jazykov (C/C++, Java, PHP, Perl) nelíši. V jazyku Perl existuje ešte jeden zápis podmieneného výrazu s názvom unless. Podmienka unless je negované if. Kód v časti unless sa vykoná, ak sa podmienka vyhodnotí ako false. Vzniklo to pre zjednodušenie pre if, kedy testujeme negovaný výraz.

29 Porovnanie programovacích jazykov 29 V jazyku Pascal sa zápis líši v tom, že Pascal zapisuje bloky kódu nie zloženými zátvorkami ako som popísala v kapitole vyššie, ale pomocou dvojice begin end. Takisto sa podmienka nedáva do zátvoriek a ukončenie podmienky a pokyn pre vykonanie jedného z blokov sa určuje kľúčovým slovom then Rozdiely v zápise viaccestného vetvenia Na viacnásobné vetvenie sa používa príkaz switch. Do príkazu switch vstupuje výraz, ktorý musí vracať celočíselnú hodnotu (int, char). Podľa hodnoty celočíselného výrazu sa vyberie jedna z vetví case. Ak sa nesplnila ani jedna vetva case, je možné príkazom default zadať, čo sa má v tom prípade vykonať. Ak sa splní nejaká vetva, vykoná sa príkaz, ktorý k nej bol napísaný, ale aj všetky ostatné príkazy, ktoré sú napísané pod ním. Na zastavenie vykonávania príkazov, ktoré už nepatria vetve, ktorú chceme vykonať, slúži príkaz break. Uvediem príklad v pseudokóde: switch (riadiaca_premenna) { } case 1:... break; case 2:... break; case 3:... break; default:... break;

30 30 Porovnanie programovacích jazykov Tab. 8 Rozdiely v zápise viaccestného vetvenia switch case C switch (variable) { case case1: instructions «break;» «default: instructions» } C++ switch (variable) { case case1: instructions «break;» «default: instructions» } Java switch (variable) { case case1: instructions «break;» «default: instructions» } PHP Perl Pascal switch (variable) { case case1: instructions «break;» «default: instructions» } use feature "switch";... given (variable){ when (case1) { instructions }... «default { instructions }» } case variable of case1: instructions... «else: instructions» end Zdroj: Informácie z tejto tabuľky som čerpala z literatúry [23][13], 2012 V tejto konštrukcii tiež nie je veľa odlišností, jazyky C/C++, Java, PHP ho majú rovnaký, líšia sa len jazyky Perl a Pascal. V jazyku Pascal je rozdiel hlavne v tom, že porovnávaný výraz nie je v zátvorke, nasleduje kľúčové slovo of. Ešte jedna zaujímavosť je v tejto konštrukcii - end nie je párový s begin, ale s case. Samotný Perl túto konštrukciu neponúka. Je treba použiť pragmu feature. use feature qw(switch); Po uvedení takéhoto príkazu získame novú konštrukciu given...when. Stačí potom napísať nasledujúce:

31 Porovnanie programovacích jazykov 31 given ($p) { } when(1){ } when(2){ } print '$p je jedna!'; print '$p je dva!'; when($_ > 3){ } default{ } print '$p je vecsi nez 3!'; print '$p je nieco iné!'; Taktiež sme si mohli všimnúť, že v tejto konštrukcii nemusíme do podmienky vetvenia (when($_ > 3)) dávať len ordinálnu hodnotu, ale aj podmienku na vyhodnotenie Rozdiely v zápise cyklov Veľa programátorských problémov sa rieši opakovaným vykonávaním akcie nad rovnakými dátami. Existujú dva spôsoby, ako to vykonať. Jedným z nich je rekurzia (tú ale nebudem v moje práci rozvádzať) a druhým je iterácia. Iteráciou rozumieme vykonávanie rovnakej operácie znovu a znovu. Základom iterácie je cyklus [32]. Cykly rozdeľujeme na: cyklus s podmienkou na začiatku, cyklus s podmienkou na konci, cyklus so známym počtom opakovaní. Poznáme viac druhov cyklov, ja sa budem venovať trom základným typom cyklov, a to typu: while, for a do while. Pre upresnenie spomeniem aj iné používané cykly, a to foreach a goto. Ako prvý cyklus si rozoberieme while, je to cyklus s podmienkou na začiatku. V pseudokóde zapíše nasledovne: while (podmienka_cyklenia) príkaz;

32 32 Porovnanie programovacích jazykov Cyklus while najprv otestuje podmienku, ktorá nasleduje za kľúčovým slovom while a ak je táto podmienka splnená, vykonáva sa telo cyklu. To sa opakuje, pokým nie je podmienka vyhodnotená ako nesplnená. Vtedy cyklus končí. Tab. 9 Rozdiely v zápise cyklu while while C while (condition) { instructions } C++ while (condition) { instructions } Java while (condition) { instructions } PHP while (condition) { instructions } Perl Pascal while (condition) { instructions } or until (notcondition) { instructions } while condition do begin instructions end Zdroj: Informácie z tejto tabuľky som čerpala z literatúry [23][13], 2012 Ako vidíme v tabuľke, zápis cyklu while je v jazykoch C, C++, Java, PHP a Perl rovnaký, líši sa však zápis v jazyku Pascal a v jazyku Perl je ešte jedna možnosť zápisu. V jazyku Perl má cyklus while ešte jednu alternatívu zápisu, a to pomocou kľúčového slova until. Rozdiel je v tom, že until vykonáva blok príkazov, pokým nezačne podmienka platiť. Jazyk Pascal sa odlišuje od predchádzajúcich jazykov v zápise cyklu aj tým, že na zápis bloku (tela cyklu) nepoužíva zložené zátvorky, ale konštrukciu begin...end. Takisto nie je nutné dávať do zátvorky podmienku testovania. Po podmienke nasleduje kľúčové slovo do, po ktorom nasleduje telo cyklu. Pri cykle while je možné, že sa telo cyklu nikdy nevykoná. Avšak pri cykle do...while sa vykoná minimálne raz. Podmienka sa testuje až za telom cyklu. V pseudokóde ho zapíšeme nasledovne: do príkaz while (podmienka_cyklenia);

33 Porovnanie programovacích jazykov 33 Tab. 10 Rozdiely v zápise cyklu do...while C C++ Java PHP Perl Pascal do while do { instructions } while (condition) do { instructions } while (condition) do { instructions } while (condition) do { instructions } while (condition) do { instructions } while (condition) or do { instructions } until (notcondition) repeat instructions until notcondition; Zdroj: Informácie z tejto tabuľky som čerpala z literatúry [23][13][11], 2012 Z tabuľky vidíme, že rozdiely v zápisoch v jazykoch sú podobné ako pri cykle while, až na to, že tu je najprv kľúčové slovo do, potom telo cyklu a až na konci je podmienka. Jediný rozdiel je zase v jazyku Pascal, kde nie je použitá konštrukcia s kľúčovými slovami do...while, ale je tu použitá konštrukcia repeat...until. A tu sa, tak isto ako pri jazyku Perl, cyklus opakuje až dovtedy, kým nie je podmienka vyhodnotená ako pravdivá. Táto konštrukcia sa líši ešte v tom, že ak telo má viac inštrukcií, nie je potreba ich ohraničiť blokovými kľúčovými slovami begin...end. Telo sa berie od kľúčového slova repeat po until. Ako ďalší druh cyklu si rozoberieme cyklus for. Pri predchádzajúcich typoch cyklov sa vždy testovala nejaká premenná, ktorá mohla byť v tele cyklu akokoľvek zmenená. Dopredu nevieme predpokladať, koľkokrát sa podmienka bude testovať. Cyklus for sa používa najmä vtedy, keď dopredu vieme, koľkokrát sa má cyklus vykonať. Cyklus for sa typicky skladá z kľúčového slova for a za ním nasledujú 3 príkazy: inicializácia, test a akcia. Potom nasleduje telo cyklu. for (inicializácia; test; akcia) príkaz; Prvý výraz (inicializácia) je ohodnotený (vykonaný) len raz, bezpodmienečne na začiatku cyklu. Na začiatku každej iterácie je ohodnotený druhý výraz (test). Ak je pravdivý, cyklus pokračuje a spracováva sa kód vo vnútri cyklu, ak je nepravdivý, cyklus končí. Na konci každej iterácie sa ohodnotí (vykoná) tretí výraz (akcia). V rôznych programovacích jazykoch existujú rôzne modifikácie for cyklu, ich rozdiely si popíšeme na základe porovnávacej tabuľky.

34 34 Porovnanie programovacích jazykov Tab. 11 Rozdiely v zápise cyklu for Informácie z tejto tabuľky som čerpala z literatúry [23][13][11][19], 2012 Jazyk C, C++ a Java používa konštrukciu inicializátor, podmienka, inkrement a telo cyklu: for ( i=0; i<n; i++ ) { // inicializátor; podmienka; inkrement } // telo cyklu Ako vidíme, konštrukcia sa začína kľúčovým slovom for, po ktorom nasledujú guľaté zátvorky, v ktorých je trojica inicializátor; podmienka; inkrement oddelená bodkočiarkou. Za nimi nasledujú zložené zátvorky, v ktorých je samotné telo cyklu. Túto konštrukciu využívajú aj jazyky PHP a Perl, ale pri týchto jazykoch má zápis cyklu for aj inú alternatívu. Je to konštrukcia foreach, ktorá sa používa najmä na prechádzanie polí alebo hashov. Rovnako ako pre cyklus for, cyklus foreach prechádza cez každý prvok poľa pomocou iterácie. Ale ako som už vyššie písala, konštrukciu foreach nebudem rozoberať podrobnejšie. Od predchádzajúcich jazykov sa v zápise cyklu for líši najmä jazyk Pascal. Pascal používa výpočet intervalu. for i := 0 to N do (* i nadobúda postupne hodnôt od 0 do N *) begin end (* telo cyklu *) for i = first to last C for («type» i = first; i <= last; i++) {instructions } C++ for («type» i = first; i <= last; i++) {instructions } Java for («type» i = first; i <= last; i++) {instructions } PHP Perl Pascal for ($i = first; $i <= last; $i++) { instructions } or foreach (array_expression as $value) {instructions } for ($i = first; $i <= last; $i++) { instructions } or foreach variable ( array ) { instructions } for i := first to/downto last do begin instructions end; Po kľúčovom slove for nenasleduje zátvorka, ale priamo interval, koľkokrát sa má cyklus opakovať, nasleduje kľúčové slovo do za ktorými začína telo cyklu, opäť medzi kľúčovými slovami begin...end. Perl umožňuje vynechať inicializáciu a inkrementačnú časť. Je možné inicializovať vopred a inkrementovať vo vnútri cyklu:

35 Porovnanie programovacích jazykov 35 [37] $counter = 1 for(; $counter < 10;){ } print "for loop #$counter\n"; $counter++; Rozdiely v zápise komentárov Komentáre sú v informatike súčasťou syntaktických pravidiel zápisu programu v mnohých programovacích jazykoch. Komentár sa vkladá pred alebo za časť zdrojového kódu (napr. príkaz), ktorého funkciu alebo význam je nutné vysvetliť. Používanie komentárov nie je povinné, umožňuje však napomôcť pochopenie činnosti programu. Komentár nemá popisovať, čo program robí (pretože to vyplýva zo zápisu programu), ale prečo to robí. Pri spracovaní zdrojového kódu preprocesor komentáre vypúšťa (ignoruje ich), ale pre programátora môžu byť veľmi dôležité. Komentáre všeobecne môžu veľmi uľahčiť pochopenie činnosti programu, môžu mať samodokumentující charakter a vo všeobecnosti by mali uľahčovať prenos tvorby programov z človeka na človeka, teda z jedného programátora na iného programátora. Syntax a pravidlá pre pridávanie komentárov sa v jednotlivých programovacích jazykoch líšia a sú definované v špecifikácii konkrétneho programovacieho jazyka. Komentáre teda nemajú žiadny vplyv na výsledný algoritmus programu, sú tu uvedené len ako pomôcka pre ľahšiu orientáciu v zdrojovom texte programu. Prekladač komentáre nijako neprekladá, ignoruje ich [34]. Komentáre rozdeľujeme na: riadkové komentáre, blokové komentáre. Pre rôzne časti zdrojového kódu možno použiť rôzne štýly komentárov. Možno použiť riadkové komentáre pre drobné komentáre a dočasné zakomentovanie jedného funkčného riadku kódu, blokové komentáre pre rozsiahle komentáre s vyššou mierou abstrakcie a dočasné zakomentovanie pre rozsiahle funkčné časti zdrojového kódu.

36 36 Porovnanie programovacích jazykov Tab. 12 Rozdiely v zápise komentárov riadkové komentáre blokové komentáre C // /* */ C++ // /* */ Java // /* */ PHP // /* */ Perl # =begin =cut Pascal // { } or (* *) Informácie z tejto tabuľky som čerpala z literatúry [31], 2012 Z tabuľky vidíme, že komentáre, či už blokové alebo riadkové, majú jazyky C, C++, Java a PHP rovnaké. Riadkové komentáre sa značia dvoma lomítkami //, //Toto je riadkový komentár blokové komentáre sa označujú dvojicou /* */. /* */ Toto je blokový komentár. Aj toto je stále komentár V jazyku Perl sa komentáre označujú inak. Riadkový komentár sa označuje znakom #. #Toto je riadkový komentár Viacriadkové komentáre začínajú slovom, ktorého prvý znak je =, a končí slovom = cut (oba tieto symboly musia začínať na začiatku riadku a za nimi už nesmie nič nasledovať). Tieto komentáre sú tiež považované za akýsi druh dokumentácie, zvaný Plain Old Documentation. Rôznymi programami možné tieto texty zo skriptu vyextrahovať a vyrobiť z nich text, manuálové stránky, HTML text alebo dokument v LaTeX-e [35]. =komentar Toto je viacriadkový komentár =cut V Pascale sa jednoriadkový komentár zaznačuje opäť dvojicou lomítok, za ktorými sa napíše text komentáru. Viacriadkový komentár je ohraničený buď zloženými zátvorkami {} alebo symbolmi (* a *), neobsahujúcimi symbol, ktorým je označený koniec, { Toto je blokový komentár.

37 Porovnanie programovacích jazykov 37 alebo: Aj toto je stále komentár} (* Ľubovoľný text neobsahujúci hviezdičku a bezprostredne nasledujúcu pravú oblú zátvorku *) Rozdiely v zápise funkcií Funkcie sú jedným zo základných prvkov programovacích jazykov. Funkcia je pomenovaný blok príkazov, ktorý možno z programu zavolať pomocou názvu funkcie. Funkciu použijeme, ak sa nám niektoré bloky príkazov budú opakovať. Obecný tvar funkcie je: typ_výsledku identifikátor(deklarácia_argumentov) blok V niektorých programovacích jazykoch (napríklad Pascal) sa rozlišujú funkcie a procedúry. Procedúry sú časťou programového kódu, ktoré sú vykonané ako celok, ale nevracajú hodnotu. Naopak, funkcie sú procedúry, ktoré hodnotu vracajú a môžu teda byť použité vo výrazoch. V mojej práci nebudem tieto dve entity rozlišovať a budem všetko označovať ako funkcie [8, 33]. Tab. 13 Rozdiely v zápise funkcií, ktoré nevracajú hodnotu basic/void funkcie C void foo(«parameters») { instructions } C++ void foo(«parameters») { instructions } Java void foo(«parameters») { instructions } PHP function foo(«parameters») { instructions } Perl sub foo { «my/local (parameters) instructions } Pascal procedure foo«(parameters)»; «label label declarations» «const constant declarations» «type type declarations» «var variable declarations» «local function declarations» begin instructions end; Informácie z tejto tabuľky som čerpala z literatúry [23, 33, 11, 19, 32], 2012 Pri jazykoch C, C++ a Jave vidíme, že definície funkcií sa nelíšia. Ako prvý je návratový typ funkcie, v tomto prípade je to void (prázdny). Za ním nasleduje

38 38 Porovnanie programovacích jazykov názov funkcie a v okrúhlych zátvorkách parametre. Ak funkcia parametre nemá, zátvorky ostanú prázdne. Za nimi nasleduje samotné telo funkcie v zložených zátvorkách. V jazyku PHP nemusíme písať návratový typ, ale pred názvom funkcie je kľúčové slovo function. Po názve funkcie je zápis zhodný so zápisom, aký majú predchádzajúce jazyky. Čiže v guľatých zátvorkách argumenty a v zložených zátvorkách telo funkcie. function napis($meno){ echo($meno); } Výrazná zmena je pri programovacom jazyku Perl, kde sa pred názvom funkcie udáva kľúčové slovo sub, po názve funkcie nasledujú zložené zátvorky. V nich sa nepovinne nachádzajú argumenty funkcie. Tie sú tvorené jedným zoznamom, vnútri funkcie prístupné pomocou neexistujú formálne argumenty. Prvý argument, ktorý odovzdáme podprogramu, je k dispozícii vo funkcii ako $_[0], druhý parameter $_[1] a tak ďalej. Nasledujúca funkcia tlačí zoznam, ktorý bol do nej predaný pomocou parametru. sub tlacargumenty { } print "@_\n"; Jednotlivé prvky sú prístupné pomocou indexu v hranatých zátvorkách: sub tlacprvedva { } print "Prvý parameter je $_[0]\n"; print "a $_[1] je druhý parameter\n"; Jedným zo spôsobov, ako s argumentmi pracovať, je aj priradenie do zoznamu vnútri funkcie a ďalej pracovať s týmto zoznamom, napríklad: sub scitanie { } [38] ($cisloa, $cislob) $vysledok = $cisloa + $cislob; print "Výsledok je: $vysledok\n";

39 Porovnanie programovacích jazykov 39 Ešte spomeniem aj lokálne premenné, ktoré sa vo vnútri funkcie definujú pomocou funkcie my() a local(). Funkcia my() vytvorí premennú, ktorá je viditeľná iba v aktuálnej funkcii. Local() funkcia vytvorí premennú, viditeľnú vnútri aktuálnej funkcie a v akejkoľvek funkcii, ktorá sa volá z aktuálnej funkcie [39]. V jazyku Pascal sa funkcia, ktorá nič nevracia, nazýva procedúra. Týmto slovom začne aj definícia funkcie, za ňou nasleduje jej názov a v guľatých zátvorkách zoznam argumentov. Ak však funkcia parametre nemá, guľaté zátvorky sa písať nemusia. Formálny popis podprogramu teda pozostáva z dvoch častí: hlavičky a tela funkcie. Telom funkcie je blok, ktorý popisuje algoritmus a nachádza sa v príkazových zátvorkách begin - end. Hlavička má tvar: procedure <nazov>(zoznam formálnych parametrov); label <zoznam návestí> const <zoznam konštánt> type <zoznam údajových typov> var <zoznam lokálnych premenných> <deklarácia vlastných procedúr a funkcií> Po hlavičke nasleduje telo funkcie. [11] Uvediem príklad procedúry v Pascale: procedure Vypis(s: String); var begin end; i: Integer; for i := 1 to 3 do Writeln(s); Toto boli opísané funkcie v určitých jazykoch, ktoré nič nevracali. Teraz popíšeme rozdiely vo funkciách, ktoré niečo vracajú.

40 40 Porovnanie programovacích jazykov Tab. 14 Rozdiely v zápise funkcií, ktoré vracajú hodnotu funkcie vracajúce hodnotu C type foo(«parameters») { instructions... return value; } C++ type foo(«parameters») { instructions... return value; } Java type foo(«parameters») { instructions... return value; } PHP function foo(«parameters») { instructions... return value; } sub foo { «my/local (parameters) Perl instructions... «return» value; } function foo«(parameters)»: return_type; «label label declarations» «const constant declarations» «type type declarations» Pascal «var variable declarations» «local function declarations» begin instructions; foo := value end; Informácie z tejto tabuľky som čerpala z literatúry [23, 33, 11, 19, 32], 2012 pri jazykoch C, C++ a Java sa na začiatku zadefinuje návratový typ funkcie a na konci tela funkcie sa zapíše príkaz return a hodnota, ktorú vracia príslušnému typu. int vratcislo(void){ int s=5; return s; } V jazyku PHP nemusí byť zapísaný návratový typ, ale funkcia musí taktiež pomocou príkazu return vrátiť hodnotu. Zápis funkcie sa inak nelíši od funkcie, ktorá nevracia hodnotu. V beztypových programovacích jazykoch ako PHP je zápis funkcie jednoduchší, pretože sa neuvádza typ argumentov, len názvy. function vratsucet($a,$b) { } return($b+$a); V Perli na vracanie hodnôt funkcií slúži príkaz return hodnota. Ak príkaz return nie je uvedený, tak ako návratovú hodnotu berieme hodnotu posledného uvedeného výrazu.

41 Porovnanie programovacích jazykov 41 Oproti tomu v Pascale je to opäť trošku inak. Funkcia, ktorá má takmer rovnakú štruktúru ako procedúra s jedným rozdielom, že navyše definujeme, akú premennú nám bude dávať. V tele funkcie sa názov funkcie správa ako premenná, takže do nej môžeme zapisovať výsledok jednoduchým priradením. Štruktúra funkcie v Pascale vyzerá nasledovne: FUNCTION meno(definícia vstupných premenných):typ_výstupu; BEGIN END; CONST definovanie_konštánt_funckie; TYPE definovanie_nových_typov_premenných; VAR definovanie_lokálnych_premenných_pre_funkciu; príkazy;.. meno:=výsledok; Poukázali sme na rozdiely v zápisoch funkcií. Teraz sa budeme zaoberať rozdielmi pri volaní funkcií z hlavného programu. Tab. 15 Rozdiely volania funkcií funkcie vracajúce hodnotu C type foo(«parameters») { instructions... return value; } C++ type foo(«parameters») { instructions... return value; } Java type foo(«parameters») { instructions... return value; } PHP function foo(«parameters») { instructions... return value; } sub foo { «my/local (parameters) Perl instructions... «return» value; } function foo«(parameters)»: return_type; «label label declarations» «const constant declarations» «type type declarations» Pascal «var variable declarations» «local function declarations» begin instructions; foo := value end;

42 42 Porovnanie programovacích jazykov Informácie z tejto tabuľky som čerpala z literatúry [23, 33, 11, 19, 32], 2012 Ako vidíme z tabuľky, volanie samotných funkcií toľko odlišností nemá. V jazykoch C, C++, Java a PHP sa funkcie volajú jej názvom a v guľatých zátvorkách sa nachádzajú argumenty (ak funkcia nemá parametre, do zátvorky sa nič nepíše). Pri jazyku Perl je aj táto možnosť, ale ak funkcia parametre nemá, guľaté zátvorky sa nemusia písať, tak ako aj v Pascale. V jazyku Perl pri volaní funkcie pridávame na začiatok znak &. Príklad volania funkcie v Perle: &vypis; &vypis($_); &vypis(1+2, $_); # volanie procedúry bez parametrov # volanie procedúry s parametrom # volanie procedúry s dvoma parametrami Niektoré jazyky vyžadujú minimálne jednu funkciu, ktorú prekladač bude vykonávať ako prvú. V nasledujúcej tabuľke si ich porovnáme.

43 Porovnanie programovacích jazykov 43 Tab. 16 C C++ Java PHP Perl Pascal Rozdiely v jazykoch pri potrebe hlavnej funkcie potrebná hlavná funkcia «global declarations» int main(«int argc, char *argv[]») { instructions } «global declarations» int main(«int argc, char *argv[]») { instructions } public static void main(string[] args) { instructions } or public static void main(string... args) { instructions } NA NA program name; «uses unit declaration» «label label declarations» «const constant declarations» «type type declarations» «var variable declarations» «function declarations» begin instructions end. Informácie z tejto tabuľky som čerpala z literatúry [23, 33, 11, 19, 32], 2012 Pri jazykoch C a C++ sa hlavná funkcia nazýva main. Jazyk Java však nič ako "hlavný program" nemá, namiesto toho môžeme v ľubovoľnej triede vytvoriť metódu s názvom main(), ktorú potom zavolá program Java po uvedení názvu triedy ako parametru. Metóda main() musí byť definovaná vždy nasledujúcim spôsobom, aby ju behové prostredie jazyka Java rozpoznalo ako vstupný bod programu: public static void main(string[] args) {... } Parametrom metódy main() je pole reťazcov, obsahujúce argumenty z príkazového riadku pri spustení. Počet prvkov poľa args získame ako hodnotu args.length, na jednotlivé prvky poľa sa potom dostaneme pomocou indexu v hranatých zátvorkách. Hodnoty indexov v jazyku Java sa počítajú od nuly.

44 44 Porovnanie programovacích jazykov Každý C a C++ program obsahuje aspoň jednu funkciu, a to práve main(). ANSI C určuje návratovú hodnotu funkcie main() typu int. int main(int argc, char *argv[]) Je to úplný zápis funkcie main(). Argc and argv hodnoty sú odovzdané do vstupného bodu, keď sa aplikácia vykonáva v priebehu programu. Argc je skratka pre počet argumentov. Táto premenná obsahuje počet parametrov ktoré prídu do programu. Argv je skratka pre hodnoty parametrov. Je to pole reťazcov, ktoré obsahujú hodnoty vložené do programu. Argv[0] je vždy názov aplikácie. V Pascale definícia hlavnej funkcie začne slovom PROGRAM. Hlavička je prvý riadok programu. Začína slovom program a nasleduje názov programu. Za ním nasleduje deklaračná časť, ktorá obsahuje zoznam objektov, ktoré budú použité v programe (jednotky, konštanty, premenné, procedúry ) a určenie ich typov. Zoznam premenných oddeľujeme čiarkou a po dvojbodke uvádzame ich typ. PROGRAM obdzlnik; var A,B,OBVOD,OBSAH:integer; begin read(a,b); OBVOD:= 2*(A+B); OBSAH:= A*B; write(obvod); write(obsah); end. U Jazykov PHP a Perl nie je hlavná funkcia vyžadovaná. 3.4 Porovnanie jazykov z hľadiska ich využitia Každý programovací jazyk bol vytvorený za nejakým účelom. Niekedy sa samozrejme počas vývoja jazyka môže zmeniť aj pôvodné zameranie jazyka. Pascal bol vyvinutý ako vyšší programovací jazyk, určený najmä na výukové účely. Dnes je masovo rozšírený, ale výraznejšie nepoužívaný v profesionálnej sfére. To však Pascalu neuberá nič na dôležitosti môžem povedať, že každý programátor, hoci používa ktorýkoľvek jazyk, Pascal ovláda. Nejde totiž o jeho praktické využitie, ale o obrovskú schopnosť naučiť programovať a pevne zakoreniť určité zásady. Je všeobecne známe, že človek, ktorý zvládne Pascal, nemá potom problém s prechodom na iné programovacie jazyky. C++ je vhodný pre veľké projekty, pretože má objektovo orientovanú štruktúru. Ľudia môžu spolupracovať na jednom programe tým, že ho rozdelia do

45 Porovnanie programovacích jazykov 45 častí, na ktorých pracujú malé tímy, alebo sa týmto častiam môže venovať každý programátor individuálne. Objektovo orientovaná štruktúra tiež umožňuje kód, ktorý môže byť znovu použiteľný, čo môže znížiť čas vývoja. C++ je tiež veľmi efektívny jazyk. C je obľúbený jazyk predovšetkým v programovaní hier, pretože neobsahuje navyše balíčky objektovo orientovaného C++. Programátori používajú C, pretože robí programy o niečo rýchlejšími a menšími ako programy napísané v C + +. Možno ste prekvapený, či to stojí za to vzdať sa znovupoužitelnosti C + +, získať malý nárast výkonu s C, najmä keď C + + môže byť prípadne napísaný v štýle jazyka C. Java je multiplatformový jazyk, ktorý je obzvlášť užitočný v oblasti počítačových sietí. Samozrejme, najslávnejšie využitie Java je na webe, s Java appletov, ale jazyk Java je tiež použitý na vytváranie cross-platformových programov, ktoré fungujú samostatne. Vzhľadom na to, že sa podobá jazyku C ++ v syntaxi a štruktúrou, učenie Java je zvyčajne pomerne jednoduché pre väčšinu C++ programátorov. Java ponúka výhody objektového programovania, ako je napríklad opätovné použitie, na druhej strane môže byť ťažké napísať vysoko efektívny kód v Jave, jeho primárne užívateľské rozhranie je notoricky pomalé. Avšak Java v posledných rokoch zvýšila rýchlosť a verzia 1.5 ponúka niektoré nové funkcie pre jednoduchšie programovanie. Perl bol pôvodne pre správu súborov jazyka pre Unix, ale stal sa známy pre jeho použitie v programovaní CGI. CGI (Common Gateway Interface) je termín pre programy, ktoré webové servery môžu spúšťať, aby vo webových stránkach priniesli ďalšie možnosti. Perl je skvelý svojimi regulárnymi výrazmi, ktoré slúžia pre vyhľadávanie v texte. Perl môže byť použitý pre databázy a ďalšie užitočné funkcie servera, pričom je jednoduché ovládnuť základy, ak máte skúsenosti v ľubovoľnom inom jazyku. Webhostingové služby preferujú Perl pred C++ ako CGI jazyk, pretože web hostitelia môžu nazerať na perlové skripty, pretože sú to len textové súbory, zatiaľ čo C++ je zostavený, takže to nemôže byť kontrolované na potenciálne nebezpečný kód. Perl je však notoricky známy pre jeho Write Once štýl kódu - je veľmi jednoduché písať skripty v Perli a využívať partie skratiek, ktoré sa neskôr nemôžu pochopiť. PHP je všeobecný jazyk pre webové stránky, ktorý je niekedy využívaný ako skriptovací jazyk pre *nix. PHP je vytvorený pre rýchly vývoj webových miest, jeho súčasťou je jednoduché spojenie s databázou, generovanie http hlavičky atď. Ako skriptovací jazyk obsahuje relatívne jednoduchú sadu základných prvkov, umožňujúcich programátorom dosiahnuť rýchlosti, preto má premyslené objektovo orientované možnosti [30].

46 46 Porovnanie programovacích jazykov 3.5 Porovnanie programovacích jazykov z hľadiska popularity Posledné porovnanie jazykov patrí práve porovnaniu z hľadiska popularity jazykov. Síce som nepracovala svedeckým výskumom so zaručenými výsledkami, ale sú firmy, ktoré sa touto problematikou zaoberajú a zbierajú informácie z pomerne rozsiahlej komunity ľudí, ktorí sa programovaniu venujú. Takou spoločnosťou je i TIOBE. TIOBE sa špecializuje na hodnotenie a sledovanie kvality softvéru. Meria kvalitu softvérového systému pri použití všeobecne akceptovaných noriem TIOBE Programming Community Index za november 2012 TIOBE Programming Community Index je ukazovateľ popularity programovacích jazykov. Index sa obnovuje raz za mesiac. Hodnotenie je založené na počte kvalifikovaných inžinierov z celého sveta kurzov a tretej strany dodávateľov. Populárne vyhľadávače Google, Bing, Yahoo!, Wikipedia, Amazon, YouTube a Baidu sú použité pre výpočet hodnotenia. Index TIOBE nie je o najlepšom programovacom jazyku alebo o jazyku, v ktorom bolo napísaných najviac riadkov kódu. Hodnotenie Hodnotenie sa počíta pomocou vyhľadávaní v najpopulárnejších vyhľadávačoch. Vyhľadávací dotaz, ktorý sa používa, je + "<jazyk> programming" Tento vyhľadávací dotaz sa vykonáva pre najlepších 9 stránok podľa Alexy( ktoré spĺňajú tieto podmienky: vstupná strana web stránky obsahuje vyhľadávacie zariadenia, výsledok dotazu na stránky obsahuje údaje o počte návštev. Na základe týchto kritérií sa v súčasnosti využívajú tieto vyhľadávače: Google: 30 %, Blogger: 30 %, Wikipedia: 15 %, YouTube: 9 %, Baidu: 6 %,

47 Porovnanie programovacích jazykov 47 Yahoo!: 3 %, Bing: 3 %, Amazon: 3 %. Počet zobrazení určuje sledovanosť jazyka. Počítané zobrazenia sú normalizované pre každý vyhľadávač pre prvých 50 jazykov. Inými slovami, prvých 50 jazykov spolu dosahuje skóre 100 %. Definujme "hits50 (SE)" ako súčet počtu zobrazení pre prvých 50 jazykov pre vyhľadávače SE a "hits(pl, SE)" ako počet zobrazení pre programovací jazyk PL pre vyhľadávače SE. Možné falošné poplašné dotazy sú odfiltrované už v definícii "hits(pl, SE)". To sa vykonáva pomocou ručne stanoveného faktoru dôvery za dotaz. Dotaz ako "basic programming" tiež vráti stránky, ktoré obsahujú " Improve your basic programming skills in Java". Prvých 100 strán za vyhľadávače sú kontrolované z hľadiska možných falošných poplachov, a to sa používa na definovanie faktoru dôvery. Ak tento faktor je 90 %, potom len 90 % zo zobrazení sú používané pre "hits (PL, SE)". Tieto parametre sú vypočítané podľa nasledujúceho vzorca: ((hits (PL, SE1) / hits50 (SE1) hits (PL, SEn) / hits50 (SEn)) / n kde n je počet použitých vyhľadávacích strojov. V nasledujúcej tabuľke je hodnotenie programovacích jazykov, porovnanie obľúbenosti k novembru 2012 a údaj, ako sa zmenila ich obľúbenosť v porovnaní s novembrom 2011.

48 48 Porovnanie programovacích jazykov Tab. 17 Hodnotenie programovacích jazykov, porovnanie obľúbenosti k novembru 2012 Zdroj: Informácie z tejto tabuľky som čerpala z literatúry [40], 2012 Podľa TIOBE indexu je najobľúbenejší jazyk v novembri roku 2012 jazyk C, ktorý stúpol od minulého roka z 2. miesta a v hodnotení sa zlepšil v priemere o 1,9 %. Miesto v rebríčku popularity si vymenil s jazykom Java, ktorý minulý rok viedol a tento rok klesol o jedno miesto, a to o 0,42 %. Jazyk C++ taktiež klesol, a to z tretieho miesta na štvrté, i keď jeho priemerná obľúbenosť vzrástla o 1,61 % a jazyk Perl zase stúpol z deviateho miesta na desiate a prilepšil si o 0,10 %.

49 Porovnanie programovacích jazykov 49 Oproti tomu jazyk PHP a Pascal si držia svoju pozíciu napriek tomu, že ich hodnotenie kleslo. PHP je na piatom mieste, hodnotenie kleslo o 0,36 % a Pascal na štrnástom mieste s poklesom o 0,11 %. Na nasledujúcom obrázku sú zachytené dlhodobé trendy obľúbenosti desiatich programovacích jazykov od roku 2002 až do novembra roku Obr. 1 Dlhodobý trend obľúbenosti programovacích jazykov Zdroj: [40], V nasledujúcej časti si popíšeme popularitu mnou vybraných 5 programovacích jazykov, ktoré boli najobľúbenejšie, a celkový trend popularity od roku Popularita jazyka C Najvyššie hodnotenie (od roku 2001): % (2. pozícia, júl 2001) Najnižšie hodnotenie (od roku 2001): % (2. pozícia, december 2007) Paradigma: procedurálne Typový systém: staticky typované

50 50 Porovnanie programovacích jazykov Obr. 2 Dlhodobý trend obľúbenosti programovacieho jazyka C Zdroj: [40], Popularita jazyka C++ Najvyššie hodnotenie (od roku 2001): % (3. pozícia, august 2003) Najnižšie hodnotenie (od roku 2001): % (4. pozícia, február 2012) Paradigma: objektovo orientované Typový systém: staticky typované

51 Porovnanie programovacích jazykov 51 Obr. 3 Dlhodobý trend obľúbenosti programovacieho jazyka C++ Zdroj: [40], Popularita jazyka Java Najvyššie hodnotenie (od roku 2001): % (1. pozícia, jún 2001) Najnižšie hodnotenie (od roku 2001): % (2. pozícia, október 2004) Paradigma: objektovo orientované Typový systém: staticky typované

52 52 Porovnanie programovacích jazykov Obr. 4 Dlhodobý trend obľúbenosti programovacieho jazyka Java Zdroj: [40], Popularita jazyka PHP Najvyššie hodnotenie (od roku 2001): % (4. pozícia, november 2004) Najnižšie hodnotenie (od roku 2001): % (10. pozícia, júl 2001) Paradigma: objektovo orientované, procedurálne Typový systém: dynamicky typované

53 Porovnanie programovacích jazykov 53 Obr. 5 Dlhodobý trend obľúbenosti programovacieho jazyka PHP Zdroj: [40], Popularita jazyka Perl Najvyššie hodnotenie (od roku 2001): % (5. pozícia, apríl 2004) Najnižšie hodnotenie (od roku 2001): % (10. pozícia, február 2011) Paradigma: procedurálne Typový systém: dynamicky typované

54 54 Porovnanie programovacích jazykov Obr. 6 Dlhodobý trend obľúbenosti programovacieho jazyka Perl Zdroj: [40], Popularita jazyka Pascal Najvyššie hodnotenie (od roku 2001): % (14. pozícia, november 2011) Najnižšie hodnotenie (od roku 2001): % (18. pozícia, september 2008) Paradigma: procedurálne Typový systém: staticky typované

55 Porovnanie programovacích jazykov 55 Obr. 7 Dlhodobý trend obľúbenosti programovacieho jazyka Pascal Zdroj: [40], Zhodnotenie jazykov Základným kritérom pre porovnávanie jazykov môže byť ich vyjadrovacia schopnosť. Väčšina bežne používaných programovacích jazykov sú turingovsky úplné. Je možné hodnotiť určtité subjektívne až objektívne kritériá, napríklad ako: rozšírenosť, efektivita, vhodnosť pre danú úlohu, náchylnosť na vznik programátorských chýb a spôsoby ich predchádzania. Z vykonanej analýzy jazykov vyplýva, že stanovenie objektývnych kritérií je obtiažne a voľba programovacieho jazyka je silne subjektívna záležitosť závislá

56 56 Tvorba výukového jazyka na preferenciách programátora. Ďalším dôležitým kritériom je vhodnosť programovacieho jazyka pre daný konkrétny projekt. Priame zrovnávanie jazykov v kritériach ako je efektívnosť je veľmi ošemetné, keďže nemôžeme porovnávať kvality prekladačov, ale samotných jazykov.

57 Tvorba výukového jazyka 57 4 Tvorba výukového jazyka V mojom výukovom programe budem využívať mnou vytvorený programovací jazyk. Pre výber konštrukcií jazyka som využila predchádzajúcu analýzu jazykov a vybrala som z nich pre nás najvhodnejšie konštrukcie, ktoré mi pomohli k tvorbe vlastných konštrukcií. Riadila som sa hlavne tým, aby výber bol čo najvhodnejší pre výukové účely. Charakter jazyka bude rozšírená kalkulačka. Okrem klasických aritmetických operácii, ako je sčítanie, odčítanie, násobenie a delenie, pribudnú funkcie modulo (zvyšok po delení), logický súčet a logický súčin. Jazyk bude pracovať s dátovými typmi int celé čísla, real- reálne čísla, bool logické hodnoty, ale taktiež umožní prácu s vektormi a základné aritmetické operácie s nimi, ako aj s komplexnými číslami. Vektor nebude samotný dátový typ, ale bude mať túto štruktúru: dátový_typ [počet_zložiek_vektoru] identifikátor; Komplexné číslo bude zapísané nasledovne: complex identifikátor; identifikátor: = {reálne_číslo, reálne_číslo}; Priradzovanie hodnôt do vektoru s piatimi zložkami budeme zapisovať takto: int[5] identif; identif :=[3,45,5,0,1]; Je dôležité dodať, že zložky vektoru musia byť toho istého typu a aritmetické operácie sú povolené len s vektorom tej istej veľkosti a toho istého typu. To isté platí pre všetky premenné a operácie medzi nimi. Môj jazyk nepovoľuje pretypovanie ani implicitné, ani explicitné, preto je treba dávať pozor, aby sme operácie robili len medzi identifikátormi toho istého typu a takisto číslami toho istého typu. Pre začiatok a koniec programu, ako aj telo cyklu alebo podmienky som použila spojenie begin...end. Nepoužila som zátvorkovú notáciu ako je to napríklad v jazyku C, pretože v ňom bola notácia zavedená hlavne kvôli úspore kódu. Nám ide predovšetkým o názornosť a intuitívne používanie jazyka pri písaní kódu. begin end telo programu

58 58 Tvorba výukového jazyka Aby som ukázala sémantiku aj pre cykly, vybrala som si cyklus while a skladbou som sa inšpirovala v jazyku Pascal, pretože táto skladba pripomína takmer hovorovú reč. tým myslím, že je skoro celá vyjadrená slovne - pokiaľ je podmienka splnená, rob to, čo je v tele bloku, patriacemu k while. while podmienka do begin... end Pre podmienené vetvenie som vybrala konštrukciu if..else, kde som opäť prihliadala na blokovú schému a taktiež ako pri cykle while som sa rozhodla použiť rovnakú konštrukciu ako jazyk Pascal, a to: if podmienka then begin end... else begin End... Pri týchto dvoch konštrukciách je nutné dodať, že podmienka nemusí byť udávaná v zátvorkách. Pri konštrukcii while, ak máme v tele cyklu len jeden príkaz, nemusí byť nutne zadaný blok begin...end. Avšak pri konštrukcii if...else musia mať telá blok, aj keby sa v nich nachádzal len jeden príkaz. Pre ukončenie príkazu som používala bodkočiarku. Pre priradenie hodnoty do premennej som vybrala notáciu ako v Pascale, a to dvojbodku pre rovná sa :=. Na tomto spôsobe priradenia je presne vidieť, že je to priradenie a nestane sa tak, že by si niekto pomýlil priradenie s porovnávacím znamienkom, ako je to napríklad v jazyku C. V ňom sa pre priradenie používalo = a pre porovnanie rovnakých hodnôt ==. V tomto prípade vznikalo veľa omylov, a to takých, že namiesto dvoch rovná sa v podmienke ľudia zadávali len jedno. Takáto chyba sa veľmi ťažko odhaľuje, pretože program vo väčšine prípadov funguje dobre, len výsledok nie je taký, ako sa predpokladalo. Pre eliminovanie takýchto chýb som si vybrala pre priradenie := a pre porovnanie =. A keďže je oboje pascalovská notácia, nebudem z nej vybočovať ani pri porovnávacom znamienku je rôzne, a to <>. Priradenie: Premenná:=23;

59 Tvorba výukového jazyka 59 Porovnanie na zhodu: if(premenna=1) then begin end Porovnanie rôzne ako: while(premenna <> 0) do begin end V tomto jazyku nebudú musieť byť definície a deklarácie na začiatku programu, ale bude možné kdekoľvek v programe zadeklarovať a definovať nejakú premennú. Typ názov; //deklarácia a definícia názov := hodnota; // inicializácia premennej Ak by sme chceli v jednom riadku deklarovať a definovať viac premenných, premenné rovnakého typu oddeľujeme čiarkou a premenné, ktoré majú iný typ, zase bodkočiarkou. int A,B,X ; real [10]C; bool Z; complex [5] D; Funkcie, tak isto ako premenné, môžu byť deklarované v ľubovoľnom mieste v programe. Samozrejme, ich volanie by malo nasledovať až po deklarácii, ale to už bude riešiť sémantická analýza. Funkcie sa budú zapisovať v tvare: Návratový_typ function názov_funkcie <<(parametre)>> begin end - kde function je kľúčové slovo, ktoré udáva, že ide pri deklarácii o funkciu a nie o premennú. Funkcia môže aj nemusí mať parametre, teda premenné, ktoré do funkcie vstupujú. Takisto ani zátvorky nie sú povinné, ako je to u jazyku Pascal. Ale na rozdiel od Pascalu, ktorý má návratový typ až za parametrami funkcie, táto funkcia prevzala vlastnosti jazykov C, C++ a Javy a návratový typ funkcie je pred kľúčovým slovom function. Je to podľa môjho názoru prehľadnejšie. Neoddeliteľnou súčasťou programovacieho jazyka sú aj komentáre. Keďže náš jazyk je určený len na matematické výpočtym, rozhodla som sa pre prehľadnosť používať iba riadkový komentár. Ako označenie začiatku komentára som

60 60 Tvorba výukového jazyka použila # ako aj v jazyku Perl. Chcela som použiť jedinečný znak, ktorý v programe na nič iné nepoužívam. V ostatných skúmaných jazykoch sa používajú //, ale lomítko sa bude v tomto jazyku používať ako deleno. #toto je riadkový komentár Int premenná:=3; #táto premenná je typu int a má hodnotu Popis syntaxe Syntax programovacích jazykov býva v referenčných príručkách popísaná buď pomocou syntaktických diagramov, alebo pomocou rozšírenej BNF (EBNF). V tejto časti popíšeme jazyk pomocou syntaktických diagramov. Tieto syntaktické grafy sa nachádzajú v prílohe A. 4.2 Jazyk generovaný bezkontextovou gramatikou Bezkontextová gramatika je štvorica G= (N, T, P, S), kde N je konečná množina neterminálnych symbolov, T je konečná množina terminálnych symbolov ( N T = ø), P je konečná množina pravidiel zapisovaných v tvare A -> α, kde A N, α (N T)* a S je počiatočný štartovací symbol gramatiky. Ľavú stranu pravidla A-> α rozumieme ako neterminál A, pravú stranu ako reťazec α. Niekoľko pravidiel s rovnakou ľavou stranou zapisujeme skrátene A-> α1 α2... αn [36]. Návrh bezkontextovej gramatiky typu LL(1) pre náš jazyk je nasledovná: Gramatika G = (N, T, P, S) N= {block, par1, statements, variable, stat, elsevar, stat1, parameters_call, deklar, par_call1, command, simplexpress, idtypu, simplexpress1, druhdeklar, term, size, term1, deklar_funct, factor, deklarvariable, factor1, nextid, literal, index, variable, express, litvector, parameters, complexnumsym, type, litervector1} Tab. 18 Prehľad terminálov a neterminálov neterminál block statements stat stat1 deklar command idtypu druhdeklar size neterminál par1 variable elsevar parameters_call par_call1 simplexpress simplexpress1 term term1

61 Tvorba výukového jazyka 61 deklar_funct deklarvariable nextid index express parameters type Factor factor1 Literal Variable Litvector complexnumsym litervector1 T = { beginsym, endsym, semicsym, idsym, lbrsym, rbrsym, intnumsym, int, real, bool, complex,functionsym, lbsym,rbsym, commasym, assignsym, ifsym, thensym, whilesym, dosym, elsesym, eqsym, neqsym, ltsym, gtsym, lesym, gesym, plussym, minussym, orsym, modsym, divsym, atsym, mulsym, exponsym, notsym, realnumsym, falsesym, truesym, lcursym, rcursym} Tab. 19 Prehľad terminálov a čo predstavujú terminál čo predstavuje terminál čo predstavuje terminál čo predstavuje beginsym begin commasym, minussym - endsym end assignsym := orsym or semicsym ; ifsym if modsym % idsym identifikátor thensym then divsym / lbrsym [ whilesym while atsym & rbrsym ] dosym do mulsym * intnumsym celé číslo elsesym else exponsym ^ int int eqsym = notsym apostrof ' real real neqsym <> realnumsym reálne číslo bool bool ltsym < falsesym false complex complex gtsym > truesym true functionsym function lesym <= lcursym { lbsym ( gesym >= rcursym } rbsym ) plussym + P = (v prílohe C alebo na obrázku č.8)

62 62 Tvorba výukového jazyka Obr. 8 Syntaktická gramatika S = block

63 Implementácia 63 5 Implementácia V tejto časti opisujem, ako som navrhnutý jazyk a gramatiku použila pri výrobe programu, ktorý bude predstavovať prekladač, vykonávajúci lexikálnu a syntaktickú analýzu. Zameria sa na sémantickú analýzu. Výsledný program bude odhaľovať sémantické chyby v zapísanom programe. 5.1 Vývojové prostredie Microsoft Visual Studio Microsoft Visual Studio je vývojové prostredie (IDE) od Microsoftu. Môže byť použité pre vývoj konzolových aplikácií a aplikácií s grafickým rozhraním spolu s aplikáciami Windows Forms, webovými stránkami, webovými aplikáciami a webovými službami ako v strojovom kóde, tak v riadenom kóde na platformách Microsoft Windows, Windows Mobile, Windows CE,.NET,.NET Compact Framework a Microsoft Silverlight. Visual Studio podporuje jazyky prostredníctvom jazykových služieb, čo umožňuje, aby editor kódu a debugger podporoval akýkoľvek programovací jazyk. Medzi vstavané jazyky patrí C/C++ (použitím Visual C++), VB.NET (použitím Visual Basic.NET) a C# (použitím Visual C#). Microsoft Visual C++ Microsoft Visual C++ implementácia od Microsoftu prekladača C a C++ a ďalších jazykových služieb a špecifických nástrojov pre integráciu s Visual Studio IDE. Môže sa kompilovať v C alebo C++ móde. Pre C dodržiava ISO C štandard s časťami špecifikácie C99 spolu s doplnkami do knižníc špecifickými pre MS. Pre C++ dodržiava špecifikáciu ANSI C++ spolu s niektorými prvkami C++0x. Taktiež podporuje C++/CLI špecifikáciu pre písanie spravovaného kódu, rovnako ako kódu v kombinovanom móde (kombinácia strojového a spravovaného kódu). Microsoft používa Visual C++ pre vývoj v strojovom kóde alebo kóde, ktorý obsahuje strojové i spravované komponenty. Visual C++ podporuje COM rovnako ako MFC knižnicu. Pre vývoj MFC poskytuje sadu prieskumníkov pre vytváranie a prispôsobovanie štandardného MFC kódu a vytvárania GUI aplikácií pomocou MFC. Visual C++ môže taktiež používať designer formulárov Visual Studia pre grafický design UI. Visual C++ môže byť taktiež použité s Windows API. Tiež podporuje použitie vstavaných funkcií, čo sú funkcie rozpoznané priamo prekladačom a nie sú implementované ako knižnica. Vstavané funkcie sú použité pre použitie inštrukčnej sady SSE v moderných procesoroch. Visual C++ taktiež obsahuje špecifikáciu OpenMP (verzia 2.0) [42].

64 64 Implementácia MFC Microsoft Foundation Class Library (Microsoft Foundation Classes alebo MFC) je knižnica, ktorá zabaľuje časti Windows API do ucelených C++ tried, ktoré zaisťujú použitie a plnú kompatibilitu s väčšinou platforiem OS Windows. Triedy spravujú väčšinu objektov vo Windows a teda preddefinujú napríklad okná alebo kontrolné panely. Knižnica MFC je jednou z najrozšírenejších a najznámejších knižníc pre vytváranie grafického rozhrania v OS Windows. Písaná je jazykom C++ a implementuje veľa funkcií Windows 32 API. Keď sa na trhu objavila knižnica MFC, Microsoft tým rozšíril syntax C++ o veľa makier (napr. Message Maps) pre správu správ, pomocou ktorých OS Windows komunikuje s programami (aplikáciami). Je i mnoho výnimiek, pri ktorých je potreba uchýliť sa k funkciám Win32 API. Makrá sú navrhnuté pre maximalizáciu výkonu práce s pamäťou a pre poskytnutie čitateľných štruktúr, ktoré sú následne používané aj sprievodcami pre vytváranie základných partií programu. Práca s makrami správ nahrádza virtuálne funkcie, ktoré poskytuje C++. Avšak určite nastane situácia, kde použitie virtuálnych funkcií bude nevyhnutné a kde MFC neposkytuje prijateľný ekvivalent. [41, 43]. 5.2 Požiadavky na aplikáciu Požiadavky na aplikáciu sú jednoznačné. Prívetivé prostredie, jednoduché ovládanie, jasný výsledok. Preto som zvolila výzor dialógového okna, v ktorom na ľavej strane sa zapisuje do editačného okna programovací kód v mnou vytvorenom jazyku, ďalej je ako možnosť otvorenie tabuľky symbolov, ale táto časť má, samozrejme, zmysel, až keď vykonáme preklad zapísaného kódu pomocou tlačidla vykonať.

65 Implementácia 65 Obr. 9 Dialógové okno aplikácie Ako vidíme na obrázku č. 9, na ľavej strane sa nachádza editačné okno s naším kódom (č. 4). Po dopísaní kódu, aby sa previedla lexikálna, syntaktická a sémantická analýza, je potrebné stlačiť tlačidlo Vykonaj (č. 3). Ak sa všetko vykonlo v poriadku, môžete si pozrieť tabuľku symbolov po stlačení tlačidla Ukáž tabuľku symbolov (č. 1). Ak nastala pri preklade chyba, chybové hlásenie sa objaví na mieste č. 5. Ak by ste chceli zadať nový kód, stlačte tlačidlo Vymaž kód (č. 2). 5.3 Sémantická analýza Akonáhle syntaktický analyzátor nájde určitú konštrukciu symbolov, teda frázu, je potrebné tejto konštrukcii priradiť význam. Môže to byť modifikovaná tabuľka symbolov, pridaný údaj k internému kódu apod. Súčasťou syntaktického analyzátoru býva procedúra (alebo viac procedúr či funkcií), ktorá je postupne pre každú frázu volaná a jej úlohou je doplniť údaje do tabuľky symbolov alebo do interného kódu. Iná možnosť je spracovať nejskôr program syntaktickým analyzátorom a výsledok poslať zvlášť pracujúcemu sémantickému analyzátoru[26] Tabuľa symbolov Tabuľka symbolov je označenie pre dátovú štruktúru, ktoré používa prekladač alebo interpret pre uloženie všetkých identifikátorov nájdených v zdrojovom kóde programu, ktoré sú doplnené o ďalšie informácie. Tabuľku symbolov môže používať väčšina častí překladača. Vzhľadom k tomu, že je tu uvedená aj infor-

66 66 Implementácia mácia o veľkosti objektu, často sa to využíva pri statickej alebo dynamickej alokácii pamäte [45]. V našom prípade vyzerá tabuľka symbolov napríklad ako na obrázku č.10. Obr. 10 Tabuľka symbolov Prvý stĺpec tabuľky symbolov obsahuje názov premennej, premenná sa do tabuľky symbolov pridá po jej deklarácii a definícii. Do tabuľky sa zapíše typ premennej, dĺžka v bytoch. Dĺžka taktiež závisí od počtu položiek, ktoré premenná má. Napríklad vektor o 5 položkách zapíšeme ako int[5] vector, čiže jeho dĺžka v bajtoch bude 4*5. Predposledný stĺpec patrí kontrole, či bola premenná použitá alebo nie. Pposlednou položkou v tabuľke je hĺbka, ktorá označuje hĺbku zanorenia v blokoch. Ak je hĺbka zanorenia 3, znamená to, že blok s touto premennou má ešte 2 nadradené bloky Sémantické akcie Aby som dokázala odhalovať sémantické chyby, je treba vhodne si navrhnúť, kde v kóde sa tieto sémantické kontroly budú odohrávať. Táto časť je pre prácu dóležitá, pretože chybné zaradenie sémantickej akcie už nemusí odhaliť tie chyby, ktoré by malo, a naopak, môže odhaliť aj také, ktoré tam vôbec nie sú. Aby som lepšie priblížila, ako začleniť sémantické akcie do gramatiky, a ako potom odhaľujú chyby, ukážem to na názorných príkladoch. Na obrázku č. 11 (alebo v prílohe D) sú modrým vyznačené miesta, kde prebiehajú sémantické akcie. Čo si pod tým predstaviť? Je to funkcia, ktorá má na konkrétnom mieste určitú úlohu. Napríklad sémantická akcia deklarvar kontroluje, či novo deklarovaná a definovaná premenná sa už nenachádza v tabuľke symbolov, a teda či nenastala duplicita deklarácie a definície premennej. Ak sa v tabuľke symbolov nenachádza, tak ju tam zapíšeme. Do tabuľky symbolov zapíšeme jej typ (ten vieme zo sémantickej akcie intidtype, realidtype, boolidtype alebo complexidtype. Taktiež nastavíme použitie na false (ak bude premenná neskôr použitá, nastavíme na true). Veľkosť premennej sa odvíja od jej typu. Ak by išlo o vektor, aj to vieme ešte pred tým, ako poznáme názov premennej, a to zo sémantickej akcie addsize, ktorá zároveň zistí aj počet položiek vektora.

Spájanie tabuliek. Jaroslav Porubän, Miroslav Biňas, Milan Nosáľ (c)

Spájanie tabuliek. Jaroslav Porubän, Miroslav Biňas, Milan Nosáľ (c) Spájanie tabuliek Jaroslav Porubän, Miroslav Biňas, Milan Nosáľ (c) 2011-2016 Úvod pri normalizácii rozdeľujeme databázu na viacero tabuliek prepojených cudzími kľúčmi SQL umožňuje tabuľky opäť spojiť

More information

VYLEPŠOVANIE KONCEPTU TRIEDY

VYLEPŠOVANIE KONCEPTU TRIEDY VYLEPŠOVANIE KONCEPTU TRIEDY Typy tried class - definuje premenné a metódy (funkcie). Ak nie je špecifikovaná inak, viditeľnosť členov je private. struct - definuje premenné a metódy (funkcie). Ak nie

More information

Databázové systémy. SQL Window functions

Databázové systémy. SQL Window functions Databázové systémy SQL Window functions Scores Tabuľka s bodmi pre jednotlivých študentov id, name, score Chceme ku každému doplniť rozdiel voči priemeru 2 Demo data SELECT * FROM scores ORDER BY score

More information

Programovanie v jazyku Python. Michal Kvasnica

Programovanie v jazyku Python. Michal Kvasnica Programovanie v jazyku Python Michal Kvasnica Organizačné detaily Prednášky aj cvičenia v 638 Povinná účasť na cvičeniach Hodnotenie: priebežné odovzdávanie zadaní (40% známky) záverečný projekt na skúške

More information

Aplikačný dizajn manuál

Aplikačný dizajn manuál Aplikačný dizajn manuál Úvod Aplikačný dizajn manuál je súbor pravidiel vizuálnej komunikácie. Dodržiavaním jednotných štandardov, aplikácií loga, písma a farieb pri prezentácii sa vytvára jednotný dizajn,

More information

Registrácia účtu Hik-Connect

Registrácia účtu Hik-Connect Registrácia účtu Hik-Connect Tento návod popisuje postup registrácie účtu služby Hik-Connect prostredníctvom mobilnej aplikácie a webového rozhrania na stránke www.hik-connect.comg contents in this document

More information

Databázy (1) Prednáška 11. Alexander Šimko

Databázy (1) Prednáška 11. Alexander Šimko Databázy (1) Prednáška 11 Alexander Šimko simko@fmph.uniba.sk Contents I Aktualizovanie štruktúry databázy Section 1 Aktualizovanie štruktúry databázy Aktualizácia štruktúry databázy Štruktúra databázy

More information

kucharka exportu pro 9FFFIMU

kucharka exportu pro 9FFFIMU požiadavky na export kodek : Xvid 1.2.1 stable (MPEG-4 ASP) // výnimočne MPEG-2 bitrate : max. 10 Mbps pixely : štvorcové (Square pixels) rozlíšenie : 1920x1080, 768x432 pre 16:9 // výnimočne 1440x1080,

More information

POKROČILÉ C++ Marian Vittek

POKROČILÉ C++ Marian Vittek POKROČILÉ C++ Marian Vittek vittek@fmph.uniba.sk O predmete Pôvodne seminár Teraz normálna prednáška so skúškou/testom Predmetom kurzu je detailnejší pohľad na jazyk C++ a občasné porovnanie s inými programovacími

More information

1 Komplexný príklad využitia OOP

1 Komplexný príklad využitia OOP 1 Komplexný príklad využitia OOP Najčastejším využitím webových aplikácií je komunikácia s databázovým systémom. Komplexný príklad je preto orientovaný práve do tejto oblasti. Od verzie PHP 5 je jeho domovskou

More information

Jeden z variantov príkazu priradenia nám umožňuje zadať za sebou aj viacej vstupných hodnôt, ako napríklad

Jeden z variantov príkazu priradenia nám umožňuje zadať za sebou aj viacej vstupných hodnôt, ako napríklad Príkaz priradenia Príkaz priradenia slúži na priradenie hodnoty premennej. Má tvar premenná = výraz, kde premenná je identifikátor, znak = sa číta priraď a vyhodnotením výrazu sa získa hodnota určitého

More information

Anycast. Ľubor Jurena CEO Michal Kolárik System Administrator

Anycast. Ľubor Jurena CEO Michal Kolárik System Administrator Anycast Ľubor Jurena CEO jurena@skhosting.eu Michal Kolárik System Administrator kolarik@skhosting.eu O nás Registrátor Webhosting Serverové riešenia Správa infraštruktúry Všetko sa dá :-) Index Čo je

More information

Copyright 2016 by Martin Krug. All rights reserved.

Copyright 2016 by Martin Krug. All rights reserved. MS Managed Service Copyright 2016 by Martin Krug. All rights reserved. Reproduction, or translation of materials without the author's written permission is prohibited. No content may be reproduced without

More information

Jazyk SQL. Jaroslav Porubän, Miroslav Biňas, Milan Nosáľ (c)

Jazyk SQL. Jaroslav Porubän, Miroslav Biňas, Milan Nosáľ (c) Jazyk SQL Jaroslav Porubän, Miroslav Biňas, Milan Nosáľ (c) 2011-2016 Jazyk SQL - Structured Query Language SQL je počítačový jazyk určený na komunikáciu s relačným SRBD neprocedurálny (deklaratívny) jazyk

More information

Obsah. SOA REST REST princípy REST výhody prest. Otázky

Obsah. SOA REST REST princípy REST výhody prest. Otázky REST Peter Rybár Obsah SOA REST REST princípy REST výhody prest Otázky SOA implementácie WEB (1990) CORBA (1991) XML-RPC (1998) WS-* (1998) SOAP RPC/literal SOAP Document/literal (2001) REST (2000) SOA

More information

Databázy (1) Prednáška 08. Alexander Šimko

Databázy (1) Prednáška 08. Alexander Šimko Databázy (1) Prednáška 08 Alexander Šimko simko@fmph.uniba.sk Contents I Subqueries (poddopyty) konštrukcia WITH Section 1 Subqueries (poddopyty) Subquery (poddopyt) Použitie SELECTu na mieste, kde sme

More information

Databázy (2) Prednáška 08. Alexander Šimko

Databázy (2) Prednáška 08. Alexander Šimko Databázy (2) Prednáška 08 Alexander Šimko simko@fmph.uniba.sk Contents I Funkcie Zložené typy PL/pgSQL Agregačné funkcie Funkcie Section 1 Funkcie Funkcie PostgreSQL umožňuje vytvoriť si vlastné databázové

More information

Informatika 2. Generiká

Informatika 2. Generiká Informatika 2 Generiká Pojmy zavedené v 10. prednáške (1) štandardný vstup a výstup textové súbory binárne súbory objektové prúdy Informatika 2 1 Pojmy zavedené v 10. prednáške (2) objektové prúdy nečitateľné

More information

Riešenia a technológie pre jednotnú správu používateľov

Riešenia a technológie pre jednotnú správu používateľov Riešenia a technológie pre jednotnú správu používateľov Radovan Semančík Agenda Úvod: Identity Crisis Technológie správy používateľov Postup nasadenia Záver Súčasný stav IT Security Nekonzistentné bezpečnostné

More information

6. Riadenie chodu programu

6. Riadenie chodu programu 6. Riadenie chodu programu 6.1. Výrazový príkaz 6.2. Prázdny príkaz 6.3. Bloky. 6.4. Oblasť platnosti identifikátora 6.5. Podmienený príkaz if-else. 6.6. Prepínač 6.7. Cykly Cyklus while Cyklus for Cyklus

More information

Poradové a agregačné window funkcie. ROLLUP a CUBE

Poradové a agregačné window funkcie. ROLLUP a CUBE Poradové a agregačné window funkcie. ROLLUP a CUBE 1) Poradové a agregačné window funkcie 2) Extrémy pomocou DENSE_RANK(), TOP() - Príklady 3) Spriemernené poradia 4) Kumulatívne súčty 5) Group By a Datepart,

More information

Constraint satisfaction problems (problémy s obmedzujúcimi podmienkami)

Constraint satisfaction problems (problémy s obmedzujúcimi podmienkami) I2AI: Lecture 04 Constraint satisfaction problems (problémy s obmedzujúcimi podmienkami) Lubica Benuskova Reading: AIMA 3 rd ed. chap. 6 ending with 6.3.2 1 Constraint satisfaction problems (CSP) We w

More information

Ochrana koncových staníc pomocou Cisco Security Agent 6.0. Ľubomír Varga.

Ochrana koncových staníc pomocou Cisco Security Agent 6.0. Ľubomír Varga. Ochrana koncových staníc pomocou Cisco Security Agent 6.0 Ľubomír Varga lubomir.varga@lynx.sk Agenda CSA 6.0 refresh Vybrané vlastnosti CSA 6.0 Application Trust levels Notify User Rule Actions User Justifications

More information

TP-LINK 150Mbps Wireless AP/Client Router Model TL-WR743ND Rýchly inštalačný sprievodca

TP-LINK 150Mbps Wireless AP/Client Router Model TL-WR743ND Rýchly inštalačný sprievodca TP-LINK 150Mbps Wireless AP/Client Router Model TL-WR743ND Rýchly inštalačný sprievodca Obsah balenia TL-WR743ND Rýchly inštalačný sprievodca PoE injektor Napájací adaptér CD Ethernet kábel Systémové požiadavky

More information

REPORT DESIGNER 1 VYTVORENIE A ÚPRAVA FORMULÁRA. úprava formulárov v Money S4 / Money S Vytvorenie formulára

REPORT DESIGNER 1 VYTVORENIE A ÚPRAVA FORMULÁRA. úprava formulárov v Money S4 / Money S Vytvorenie formulára REPORT DESIGNER úprava formulárov v Money S4 / Money S5 Informačný systém Money S4/S5 umožňuje upraviť tlačové zostavy tak, aby plne vyhovovali potrebám používateľa. Na úpravu tlačových zostáv slúži doplnkový

More information

Textový formát na zasielanie údajov podľa 27 ods. 2 písm. f) zákona

Textový formát na zasielanie údajov podľa 27 ods. 2 písm. f) zákona Popis textového formátu a xsd schémy na zasielanie údajov podľa 27 ods. 2 písm. f) zákona (formu na zaslanie údajov si zvolí odosielateľ údajov) Textový formát na zasielanie údajov podľa 27 ods. 2 písm.

More information

Obrázok č. 1 Byte. Obrázok č. 2 Slovo

Obrázok č. 1 Byte. Obrázok č. 2 Slovo C++ pod lupou 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

More information

PRACOVNÝ ZOŠIT Z PROGRAMOVANIA 2

PRACOVNÝ ZOŠIT Z PROGRAMOVANIA 2 PRACOVNÝ ZOŠIT Z PROGRAMOVANIA 2 Ing. Igor Marko, 2011 PODPROGRAMY V PASCALE DEFINÍCIA, GLOBÁLNE A LOKÁLNE PREMENNÉ Podprogram v programovacom jazyku je postupnosť príkazov vystupujúcich pod jedným názvom,

More information

UNIVERZITA KOMENSKÉHO V BRATISLAVE FAKULTA MATEMATIKY, FYZIKY A INFORMATIKY VÝUKOVÁ WEBOVÁ APLIKÁCIA NA PROGRAMOVANIE GPU.

UNIVERZITA KOMENSKÉHO V BRATISLAVE FAKULTA MATEMATIKY, FYZIKY A INFORMATIKY VÝUKOVÁ WEBOVÁ APLIKÁCIA NA PROGRAMOVANIE GPU. UNIVERZITA KOMENSKÉHO V BRATISLAVE FAKULTA MATEMATIKY, FYZIKY A INFORMATIKY VÝUKOVÁ WEBOVÁ APLIKÁCIA NA PROGRAMOVANIE GPU Diplomová práca 2017 Bc. Denis Spišák UNIVERZITA KOMENSKÉHO V BRATISLAVE FAKULTA

More information

Tvorba informačných systémov. 4. prednáška: Návrh IS

Tvorba informačných systémov. 4. prednáška: Návrh IS Tvorba informačných systémov 4. prednáška: Návrh IS Návrh informačného systému: témy Ciele návrhu ERD DFD Princípy OOP Objektová normalizácia SDD Architektonické pohľady UML diagramy Architektonické štýly

More information

Spôsoby zistenia ID KEP

Spôsoby zistenia ID KEP Spôsoby zistenia ID KEP ID KEP (kvalifikovaný elektronický podpis) je možné zistiť pomocou napr. ovládacieho panela, prostredíctvom prehliadača Internet Expolrer, Google Chrome alebo Mozilla Firefox. Popstup

More information

Vzory, rámce a webové aplikácie

Vzory, rámce a webové aplikácie Vzory, rámce a webové aplikácie Jakub Šimko jakub.simko@stuba.sk Návrhové vzory (načo slúžia?) 1. Dobré zvyky v programovaní 2. Riešia často sa opakujúce problémy praxou overeným spôsobom 3. Pomôžu nám

More information

Manuál k programu FileZilla

Manuál k programu FileZilla Manuál k programu FileZilla EXO TECHNOLOGIES spol. s.r.o. Garbiarska 3 Stará Ľubovňa 064 01 IČO: 36 485 161 IČ DPH: SK2020004503 support@exohosting.sk www.exohosting.sk 1 Úvod EXO HOSTING tím pre Vás pripravil

More information

Mesačná kontrolná správa

Mesačná kontrolná správa Mesačná kontrolná správa Štrukturálna štúdia dec.16 nov.16 okt.16 sep.16 aug.16 júl.16 jún.16 máj.16 apr.16 mar.16 feb.16 jan.16 Internetová populácia SR 12+ 3 728 988 3 718 495 3 718 802 3 711 581 3 700

More information

VYSOKÉ UČENÍ TECHNICKÉ V BRNĚ

VYSOKÉ UČENÍ TECHNICKÉ V BRNĚ VYSOKÉ UČENÍ TECHNICKÉ V BRNĚ BRNO UNIVERSITY OF TECHNOLOGY FAKULTA INFORMAČNÍCH TECHNOLOGIÍ ÚSTAV POČÍTAČOVÉ GRAFIKY A MULITMÉDIÍ FACULTY OF INFORMATION TECHNOLOGY DEPARTMENT OF COMPUTER GRAPHICS AND

More information

TYPY, KONŠTANTY, PROCEDÚRY A FUNKCIE PRE PRÁCU S POĽOM

TYPY, KONŠTANTY, PROCEDÚRY A FUNKCIE PRE PRÁCU S POĽOM TYPY, KONŠTANTY, PROCEDÚRY A FUNKCIE PRE PRÁCU S POĽOM Doposiaľ sme si ukázali základné štruktúry a jednotky jazyka. Pracovali sme s premennými rôznych typov ako aj s konštantnými hodnotami. Používali

More information

1 Vytvorenie tabuľky

1 Vytvorenie tabuľky Základy jazyka SQL (Structured Query Language) - vyvinula IBM začiatkom 70-tych rokov - je to deklaratívny jazyk (popisuje čo urobiť, nie ako) - je súčasťou veľkých databázových systémov (Informix, Oracle,

More information

Recipient Configuration. Štefan Pataky MCP, MCTS, MCITP

Recipient Configuration. Štefan Pataky MCP, MCTS, MCITP Recipient Configuration Štefan Pataky MCP, MCTS, MCITP Agenda Mailbox Mail Contact Distribution Groups Disconnected Mailbox Mailbox (vytvorenie nového účtu) Exchange Management Console New User Exchange

More information

Mesačná kontrolná správa

Mesačná kontrolná správa Mesačná kontrolná správa Štrukturálna štúdia mar.18 feb.18 jan.18 dec.17 nov.17 okt.17 sep.17 aug.17 júl.17 jún.17 máj.17 apr.17 mar.17 Internetová populácia SR 12+ 3 904 509 3 802 048 3 870 654 3 830

More information

Univerzita Karlova v Praze Matematicko-fyzikální fakulta BAKALÁŘSKÁ PRÁCE. Peter Piják. Interpret redukovaného Pascalu

Univerzita Karlova v Praze Matematicko-fyzikální fakulta BAKALÁŘSKÁ PRÁCE. Peter Piják. Interpret redukovaného Pascalu Univerzita Karlova v Praze Matematicko-fyzikální fakulta BAKALÁŘSKÁ PRÁCE Peter Piják Interpret redukovaného Pascalu Katedra teoretické informatiky a matematické logiky Vedoucí bakalářské práce: RNDr.

More information

Mikroprocesor. Mikroprocesor. Program. Federico Faggin, tvorca prvého mikroprocesora i4004

Mikroprocesor. Mikroprocesor. Program. Federico Faggin, tvorca prvého mikroprocesora i4004 Mikroprocesor Federico Faggin, tvorca prvého mikroprocesora i4004 Mikroprocesor Program 1. Choď z D-110 do D0A1 2. Presuň obsah z adresy 33 do košíka 3. Prines obsah košíka do D-110 4. Spracuj obsah 5.

More information

Problém Big Data a ako ho riešiť pomocou NoSQL. Ján Zázrivec Softec

Problém Big Data a ako ho riešiť pomocou NoSQL. Ján Zázrivec Softec Problém Big Data a ako ho riešiť pomocou NoSQL Ján Zázrivec Softec Dáta dnešného sveta Oblasti kde sa spracováva veľké množstvo dát: Internet Web vyhľadávače, Sociálne siete Veda Large Hadron Collider,

More information

VLSM a CIDR. CCNA2 Kapitola Cisco Systems, Inc. All rights reserved. Cisco Public 1

VLSM a CIDR. CCNA2 Kapitola Cisco Systems, Inc. All rights reserved. Cisco Public 1 VLSM a CIDR CCNA2 Kapitola 6 1 Trošku histórie Pred rokom 1981 IP adresy používali na špecifikáciu siete len prvých 8 bitov Rok1981, RFC 791 Zaviedol adresný priestor s tromi triedami adries Polovica 90

More information

Základná(umelecká(škola(Jána(Albrechta Topoľčianska(15

Základná(umelecká(škola(Jána(Albrechta Topoľčianska(15 Základná(umelecká(škola(Jána(Albrechta Topoľčianska(15 851(01(Bra@slava Titl.: Ján(Hrčka Bohrova(11 851(01(Bra@slava V(Bra@slave(21.11.2013 Vec:(Odpoveď(na(informácie(ohľadom(mandátnej(zmluvy(na(základe(Zákona(č.(211/2000(Zb.

More information

Štruktúra údajov pre kontajner XML údajov 1. Dátové prvky pre kontajner XML údajov

Štruktúra údajov pre kontajner XML údajov 1. Dátové prvky pre kontajner XML údajov Štruktúra údajov pre kontajner XML údajov 1. Dátové prvky pre kontajner XML údajov D.4 Kontajner XML údajov (XMLDataContainer) Príloha č. 11 k výnosu č. 55/2014 Z. z. [pridaná novelou č. 275/2014 Z. z.,

More information

Triedy v C++ 1. Úvod do tried

Triedy v C++ 1. Úvod do tried 1. Úvod do tried Používanie nového dátového typu ktorý budeme oht class trieda nás dovedie k využívaniu objektových vlastností jazyka C++. Tento nový typ programov OOP objektovo orientované programovanie

More information

Výukové prostredie založené na jazyku Karel

Výukové prostredie založené na jazyku Karel Univerzita Komenského v Bratislave Fakulta matematiky, fyziky a informatiky Výukové prostredie založené na jazyku Karel Bakalárska práca 2017 Andrej Zbín Univerzita Komenského v Bratislave Fakulta matematiky,

More information

Vnorené SQL. Autor prezentácie: Peter Šípoš

Vnorené SQL. Autor prezentácie: Peter Šípoš Vnorené SQL Autor prezentácie: Peter Šípoš Literatúra Programmatic SQL od Pearson Ed Embedded SQL: http://download.oracle. com/docs/cd/b10501_01/appdev.920/a97269/pc_06sql.htm Oracle Dynamic SQL: http://download.oracle.

More information

Slovenská technická univerzita v Bratislave Fakulta informatiky a informačných technológií FIIT-XXXX-XXXXX

Slovenská technická univerzita v Bratislave Fakulta informatiky a informačných technológií FIIT-XXXX-XXXXX Toto je titulný list práce. Je súčasťou každej priebežnej či záverečnej správy (BP, DP) Slovenská technická univerzita v Bratislave Fakulta informatiky a informačných technológií FIIT-XXXX-XXXXX evidenčné

More information

Desatinné čísla #1a. Decimal numbers #1b. How much larger is 21,8 than 1,8? Desatinné čísla #2a. Decimal numbers #2b. 14 divided by 0,5 equals...

Desatinné čísla #1a. Decimal numbers #1b. How much larger is 21,8 than 1,8? Desatinné čísla #2a. Decimal numbers #2b. 14 divided by 0,5 equals... Desatinné čísla #1a Mravec išiel 5,5 cm presne na sever, potom 3,4 cm na východ, 1,8 cm na juh, 14,3 cm na západ, 1,3 cm na sever a 10,9 cm na východ. Najmenej koľko cm musí teraz prejsť, aby sa dostal

More information

Návrh kritérií pre habilitáciu docentov a vymenúvanie profesorov na Ekonomickej fakulte TU v Košiciach

Návrh kritérií pre habilitáciu docentov a vymenúvanie profesorov na Ekonomickej fakulte TU v Košiciach EKONOMICKÁ FAKULTA TU V KOŠICIACH MATERIÁL NA ROKOVANIE: Vedeckej rady, dňa: 16.11.20 Návrh kritérií pre habilitáciu docentov a vymenúvanie profesorov na Ekonomickej fakulte TU v Košiciach Predkladá: prof.

More information

Testovanie bieleho šumu

Testovanie bieleho šumu Beáta Stehlíková FMFI UK Bratislava Opakovanie z prednášky Vygenerujeme dáta Vygenerujeme dáta: N

More information

2. Týždeň MySQL - dátové typy a funkcie num. a reťazcové

2. Týždeň MySQL - dátové typy a funkcie num. a reťazcové 2. Týždeň MySQL - dátové typy a funkcie num. a reťazcové 1. Prvky jazyka MySQL http://dev.mysql.com/doc/refman/5.7/en/language-structure.html 2. Typy a pretypovanie http://dev.mysql.com/doc/refman/5.7/en/data-types.html

More information

XHTML1folie.doc XHTML Čo bolo predtým?

XHTML1folie.doc XHTML Čo bolo predtým? XHTML1folie.doc 1 1.1 XHTML 1.1.1 Čo bolo predtým? XHTML - nová definícia jazyka HTML vo forme XML. Vývoj HTML: r. 1995 HTML 2.0 (základné formátovanie a štruktúrovanie, obrázky, formuláre). V r. 1995

More information

Xamarin písanie Android a ios aplikácií v C#

Xamarin písanie Android a ios aplikácií v C# www.dotnetcollege.cz Xamarin písanie Android a ios aplikácií v C# Roman Jašek Software Architect, Riganti s.r.o. MSP, MCP roman.jasek@riganti.cz Xamarin vs. Xamarin Forms ios C# UI Android C# UI Windows

More information

systemove programovanie win32 programovanie

systemove programovanie win32 programovanie systemove programovanie win32 programovanie zakladny princip uzivatel interaguje so systemom klavesnicou, mysou tym generuje udalosti, ktore sa radia do,,message queue" (front sprav) aplikacia vytahuje

More information

Kategória školenia Programovanie.NET, C++ obsahuje kurzy:

Kategória školenia Programovanie.NET, C++ obsahuje kurzy: Kategória školenia Programovanie.NET, C++ obsahuje kurzy: Visual C/C++ - základy Kurz Visual C/C++ je zameraný na zvládnutie základných programátorských zručností. Nástroje vývojového prostredia Visual

More information

GeoGebra a JavaScript

GeoGebra a JavaScript GeoGebra a JavaScript GeoGebra and JavaScript Patrik Voštinár MESC: U70 Abstract The article deals with creating applets in mathematics software GeoGebra. GeoGebra contains a large number of tools that

More information

2. Konštanty, premenné a deklarácie.

2. Konštanty, premenné a deklarácie. 2. Konštanty, premenné a deklarácie. 2.1 Identifikátory, kľúčové slová a komentáre. 2.2 Základné typy dát 2.3 Konštanty a premenné. Konštanty Celočíselné konštanty Racionálne konštanty Znakové konštanty

More information

Softwarové inžinierstvo. martin timothy timko

Softwarové inžinierstvo. martin timothy timko J A V A S C R I P T Softwarové inžinierstvo martin timothy timko 7.9. 2017 11.9. 2017 1 úvod 2 1 úvod Kedysi dávnejšie bol jazyk JavaScript v pozadí hlavného programátorského prúdu, ale dnes je to jazyk

More information

Štruktúra APK súboru na OS Android

Štruktúra APK súboru na OS Android Masarykova univerzita Fakulta informatiky Ð Û Å«Æ ±²³ µ ¹º»¼½¾ Ý Štruktúra APK súboru na OS Android Bakalárska práca Ivo Hrádek Brno, jar 2015 Prehlásenie Prehlasujem, že táto bakalárska práca je mojím

More information

Tvorba webových stránok pre mobilné platformy

Tvorba webových stránok pre mobilné platformy Bankovní institut vysoká škola Praha zahraničná vysoká škola Banská Bystrica Tvorba webových stránok pre mobilné platformy Diplomová práca Bc. Andrej Ševčík Apríl 2014 Bankovní institut vysoká škola Praha

More information

VYSOKÉ UČENÍ TECHNICKÉ V BRNĚ BRNO UNIVERSITY OF TECHNOLOGY

VYSOKÉ UČENÍ TECHNICKÉ V BRNĚ BRNO UNIVERSITY OF TECHNOLOGY VYSOKÉ UČENÍ TECHNICKÉ V BRNĚ BRNO UNIVERSITY OF TECHNOLOGY FAKULTA INFORMAČNÍCH TECHNOLOGIÍ ÚSTAV INFORMAČNÍCH SYSTÉMŮ FACULTY OF INFORMATION TECHNOLOGY DEPARTMENT OF INFORMATION SYSTEMS IMPLEMENTACE

More information

Mgr. Martin Vesel M 114

Mgr. Martin Vesel M 114 Mgr. Martin Vesel martin.vesel@gmail.com M 114 Where 2 go W3C, CSS špecifikácia http://www.w3.org/standards/techs/css#w3c_all http://www.w3.org/tr/2011/rec-css2-20110607/ http://www.w3.org/tr/2012/rec-css3-mediaqueries-20120619/

More information

JAVA. Sieťové programovanie

JAVA. Sieťové programovanie JAVA Sieťové programovanie Sieťové programovanie Sieťová knižnica jazyka JAVA bola vytvorená podľa súborovej knižnice Zapúzdrovanie pripojení do streamov Multithreading Identifikácia počítača Každý počítač

More information

Podpora VBA v alternatívnych kancelárskych systémoch

Podpora VBA v alternatívnych kancelárskych systémoch Bankovní institut vysoká škola Praha zahraničná vysoká škola Banská Bystrica Katedra kvantitatívnych metód a informatiky Podpora VBA v alternatívnych kancelárskych systémoch VBA support in the alternative

More information

Portál pre odborné publikovanie ISSN

Portál pre odborné publikovanie ISSN 1 Portál pre odborné publikovanie ISSN 1338-0087 PRADO framework Liner Lukáš Informačné technológie, Študentské práce 08.02.2013 PRADO framework je objektovo orientovaný framework, určený na rýchly vývoj

More information

Rýchlosť Mbit/s (download/upload) 15 Mbit / 1 Mbit. 50 Mbit / 8 Mbit. 80 Mbit / 10 Mbit. 10 Mbit / 1 Mbit. 12 Mbit / 2 Mbit.

Rýchlosť Mbit/s (download/upload) 15 Mbit / 1 Mbit. 50 Mbit / 8 Mbit. 80 Mbit / 10 Mbit. 10 Mbit / 1 Mbit. 12 Mbit / 2 Mbit. Fiber 5 Mbit ** 5 Mbit / Mbit 5,90 Fiber 50 Mbit * 50 Mbit / 8 Mbit 9,90 Fiber 80 Mbit * 80 Mbit / Mbit 5,90 Mini Mbit* Mbit / Mbit 9,90 Klasik 2 Mbit* 2 Mbit / 2 Mbit Standard 8 Mbit* 8 Mbit / 3Mbit Expert

More information

obsahuje 5 príkladov, spolu 29>25 bodov skupina:

obsahuje 5 príkladov, spolu 29>25 bodov skupina: Midterm 2013, verzia A Meno a priezvisko: obsahuje 5 príkladov, spolu 29>25 bodov skupina: 1A) [8 bodov] Zistite, čo počíta nasledujúca rekurzívna funkcia foo pre n>=0. Hint: foo(2013) = 6. static long

More information

Ochrana proti DDoS za použitia open-source software. Katarína Ďurechová

Ochrana proti DDoS za použitia open-source software. Katarína Ďurechová Ochrana proti DDoS za použitia open-source software Katarína Ďurechová katarina.durechova@nic.cz 30.11.2013 Distributed Denial of Service odopretie služby dosiahnutím limitu pripojenia sieťovej karty CPU

More information

Automatizované vyhodnocovanie HDL modelov Bakalárska práca

Automatizované vyhodnocovanie HDL modelov Bakalárska práca Slovenská technická univerzita v Bratislave Fakulta informatiky a informačných technológií FIIT-5214-47956 Michal Behúň Automatizované vyhodnocovanie HDL modelov Bakalárska práca Študijný program: Počítačové

More information

Programovanie. Katedra počítačov a informatiky FEI TU v Košiciach. Programovanie - prednáška č.

Programovanie.  Katedra počítačov a informatiky FEI TU v Košiciach. Programovanie - prednáška č. Programovanie Zdeněk Havlice Marek Paralič Martin Tomášek Peter Václavík Zdenek.Havlice@tuke.sk Marek.Paralic@tuke.sk Martin.Tomasek@tuke.sk Peter.Vaclavik@tuke.sk Katedra počítačov a informatiky FEI TU

More information

Vyhodnocovanie výrazov relačnej algebry v odpovedníkoch IS

Vyhodnocovanie výrazov relačnej algebry v odpovedníkoch IS MASARYKOVA UNIVERZITA FAKULTA INFORMATIKY Vyhodnocovanie výrazov relačnej algebry v odpovedníkoch IS Bakalárska práca Brno 2012 Roman Mačor Prehlasujem, že táto práca je mojím pôvodným autorským dielom,

More information

BETA BASIC 3.0 (C) Betasoft 1985, 92 Oxford Road, Masley, Birmingham

BETA BASIC 3.0 (C) Betasoft 1985, 92 Oxford Road, Masley, Birmingham BETA BASIC 3.0 (C) Betasoft 1985, 92 Oxford Road, Masley, Birmingham PREHĽAD...2 PRÍKAZY:...2 FUNKCIE:...3 ÚVOD...4 EDITÁCIA...4 PROCEDÚRY A PARAMETRE...5 Referencie, alebo odovzdávanie parametra adresou:...7

More information

7. UKAZOVATELE, POLIA A REŤAZCE

7. UKAZOVATELE, POLIA A REŤAZCE 7. UKAZOVATELE, POLIA A REŤAZCE 7.1. Ukazovatele 7.2. Pole 7.3. Aritmetika ukazovateľov 7.4. Reťazce 7.5. Viacrozmerné pole, ukazovateľ na ukazovateľ 7.6. Ukazovateľ na ukazovateľ a pole ukazateľov 7.7.

More information

Interpreter UNITY DIPLOMOVÁ PRÁCA

Interpreter UNITY DIPLOMOVÁ PRÁCA Interpreter UNITY DIPLOMOVÁ PRÁCA Autor práce: Michal Šuster UNIVERZITA KOMENSKÉHO V BRATISLAVE FAKULTA MATEMATIKY FYZIKY A INFORMATIKY KATEDRA INFORMATIKY Vedúci záverečnej práce: RNDr. Damas Gruska,

More information

Automatizovanie navrhovania objektov v prostredí Autocad

Automatizovanie navrhovania objektov v prostredí Autocad SLOVENSKÁ TECHNICKÁ UNIVERZITA V BRATISLAVE STAVEBNÁ FAKULTA Automatizovanie navrhovania objektov v prostredí Autocad Bakalárska práca SvF- 5342-28794 Študijný program: matematicko-počítačové modelovanie

More information

Refaktorovanie jazyka JavaScript a DHTML

Refaktorovanie jazyka JavaScript a DHTML Univerzita Komenského Fakulta Matematiky, Fyziky a Informatiky Ústav Informatiky Marián Marcinčák Refaktorovanie jazyka JavaScript a DHTML Diplomová práca Školiteľ : RNDr. Marián Vittek, PhD. Bratislava

More information

WEBOVÝ MODUL NA SPRÁVU DOVOLENKY

WEBOVÝ MODUL NA SPRÁVU DOVOLENKY WEBOVÝ MODUL NA SPRÁVU DOVOLENKY Róbert Lanák Ústav informatizácie, automatizácie a matematiky Oddelenie informatizácie a riadenia procesov Fakulta chemickej a potravinárskej technológie Slovenská Technická

More information

2. prednáška ( )

2. prednáška ( ) 2. prednáška (24.9.2018) č 1 Na predošlej prednáške (1) Vytvorenie objektu triedy a premennej (napr. franklin), cez ktorú s vytvoreným objektom komunikujeme: Turtle franklin = new Turtle(); Volanie metód

More information

SLOVENSKÁ TECHNICKÁ UNIVERZITA V BRATISLAVE FAKULTA ELEKTROTECHNIKY A INFORMATIKY. Elektronická zbierka príkladov pre predmety Fyzika I a Fyzika II

SLOVENSKÁ TECHNICKÁ UNIVERZITA V BRATISLAVE FAKULTA ELEKTROTECHNIKY A INFORMATIKY. Elektronická zbierka príkladov pre predmety Fyzika I a Fyzika II SLOVENSKÁ TECHNICKÁ UNIVERZITA V BRATISLAVE FAKULTA ELEKTROTECHNIKY A INFORMATIKY Elektronická zbierka príkladov pre predmety Fyzika I a Fyzika II BAKALÁRSKA PRÁCA FEI-5382-17512 2011 Andrej FARAGA SLOVENSKÁ

More information

POROVNANIE GUI VYBRANÝCH SOFTVÉROVÝCH NÁSTROJOV

POROVNANIE GUI VYBRANÝCH SOFTVÉROVÝCH NÁSTROJOV UNIVERZITA KOMENSKÉHO V BRATISLAVE FAKULTA MATEMATIKY, FYZIKY A INFORMATIKY POROVNANIE GUI VYBRANÝCH SOFTVÉROVÝCH NÁSTROJOV Bakalárska práca Stanislav Párnický 2013 UNIVERZITA KOMENSKÉHO V BRATISLAVE FAKULTA

More information

UNIVERZITA KOMENSKÉHO V BRATISLAVE FAKULTA MATEMATIKY, FYZIKY A INFORMATIKY

UNIVERZITA KOMENSKÉHO V BRATISLAVE FAKULTA MATEMATIKY, FYZIKY A INFORMATIKY UNIVERZITA KOMENSKÉHO V BRATISLAVE FAKULTA MATEMATIKY, FYZIKY A INFORMATIKY PREVÁDZKA PORTÁLU PROJEKTOV VÝUKOVEJ ROBOTIKY CENTROBOT Bakalárska práca 2015 Denis Spišák UNIVERZITA KOMENSKÉHO V BRATISLAVE

More information

PROGRAMMING FUNDAMENTALS

PROGRAMMING FUNDAMENTALS PROGRAMMING FUNDAMENTALS Q1. Name any two Object Oriented Programming languages? Q2. Why is java called a platform independent language? Q3. Elaborate the java Compilation process. Q4. Why do we write

More information

Univerzita Komenského v Bratislave Fakulta matematiky, fyziky a informatiky. Interaktívna výuková webová aplikácia na riešenie úloh o pravdepodobnosti

Univerzita Komenského v Bratislave Fakulta matematiky, fyziky a informatiky. Interaktívna výuková webová aplikácia na riešenie úloh o pravdepodobnosti Univerzita Komenského v Bratislave Fakulta matematiky, fyziky a informatiky Interaktívna výuková webová aplikácia na riešenie úloh o pravdepodobnosti Bakalárska práca 2016 Zuzana Majeríková Univerzita

More information

Go networking. Peter Borovanský, KAI, I-18, borovan(a)ii.fmph.uniba.sk

Go networking. Peter Borovanský, KAI, I-18, borovan(a)ii.fmph.uniba.sk Go networking Peter Borovanský, KAI, I-18, borovan(a)ii.fmph.uniba.sk Prejdeme si v Go tri úrovne tzv. TCP Stacku, a naprogramujeme klient/server aplikáciu cez TCP/IP sockety, príklad chat sntp udp klient

More information

D.Signer prostriedok pre vytváranie zaručeného elektronického podpisu. Inštalačná príručka

D.Signer prostriedok pre vytváranie zaručeného elektronického podpisu. Inštalačná príručka D.Signer prostriedok pre vytváranie zaručeného elektronického podpisu Inštalačná príručka Obsah 1 Predpoklady pre inštaláciu D.Signer... 3 1.1 Inštalácia.NET Framework... 3 1.1.1 Windows 8, 8.1... 4 1.1.2

More information

Microsoft Azure platforma pre Cloud Computing. Juraj Šitina, Microsoft Slovakia

Microsoft Azure platforma pre Cloud Computing. Juraj Šitina, Microsoft Slovakia Microsoft Azure platforma pre Cloud Computing Juraj Šitina, Microsoft Slovakia m Agenda Cloud Computing Pohľad Microsoftu Predstavujeme platformu Microsoft Azure Benefity Cloud Computingu Microsoft je

More information

VYSOKÉ UČENÍ TECHNICKÉ V BRNĚ BRNO UNIVERSITY OF TECHNOLOGY

VYSOKÉ UČENÍ TECHNICKÉ V BRNĚ BRNO UNIVERSITY OF TECHNOLOGY VYSOKÉ UČENÍ TECHNICKÉ V BRNĚ BRNO UNIVERSITY OF TECHNOLOGY FAKULTA INFORMAČNÍCH TECHNOLOGIÍ ÚSTAV POČÍTAČOVÉ GRAFIKY A MULTIMÉDIÍ FACULTY OF INFORMATION TECHNOLOGY DEPARTMENT OF COMPUTER GRAPHICS AND

More information

package balik; public class TopLevel1 {... }

package balik; public class TopLevel1 {... } Seminář Java Speciální třídy, výčtový typ Radek Kočí Fakulta informačních technologií VUT Březen 2010 Radek Kočí Seminář Java Speciální třídy, výčtový typ 1/ 20 Téma přednášky Vnořené třídy Anonymní třídy

More information

MERANIE SOFTVÉRU. Jakub Šimko MSI

MERANIE SOFTVÉRU. Jakub Šimko MSI Slovenská Technická Univerzita v Bratislave Fakulta Informatiky a Informačných Technológií Jakub Šimko jsimko@fiit.stuba.sk MERANIE SOFTVÉRU 9.10.2012 MSI Meranie a metriky Kto by mal dávať pozor? Predsa

More information

/* toto je viacriadková poznámka */ ako v Delphi, len sa rozlišujú malé a veľké písmená!!!

/* toto je viacriadková poznámka */ ako v Delphi, len sa rozlišujú malé a veľké písmená!!! Organizácia programu #include using namespace std; int main() return 0; // jednoriadková poznámka Identifikátor Dátové typy int (long), unsigned, float (double), bool 0,1, char, trieda

More information

Programovanie v jazyku C - modularita

Programovanie v jazyku C - modularita CVIČENIE 11/13 (SW2) Programovanie v jazyku C - modularita About vkladanie suborov, modularne programovanie, prikaz make TODO: SOUBOR X STANDARDNÍ VSTUP-VÝSTUP - typická situace: čteme data a podle kontextu

More information

Knižnica pre výučbu programovania v Pythone

Knižnica pre výučbu programovania v Pythone Univerzita Komenského v Bratislave Fakulta matematiky, fyziky a informatiky Knižnica pre výučbu programovania v Pythone bakalárska práca 2015 Marián Horňák Univerzita Komenského v Bratislave Fakulta matematiky,

More information

DATABÁZOVÉ SYSTÉMY. Databázová technológia je pojem, ktorý sa zaoberá riadením veľkého množstva perzistentných (stály), spoľahlivých a zdieľaných dát.

DATABÁZOVÉ SYSTÉMY. Databázová technológia je pojem, ktorý sa zaoberá riadením veľkého množstva perzistentných (stály), spoľahlivých a zdieľaných dát. LITERATÚRA: Jaroslav Pokorný Databázová abeceda Všetky manuály: POSTGRE SQL 7.2 C.J.Date an introduction to database systems Someber A. databázové systémy, 1988 DATABÁZOVÉ SYSTÉMY Databáza súbor informácií,

More information

Programové vybavenie - softvér. Funkcie operačného systému

Programové vybavenie - softvér. Funkcie operačného systému Programové vybavenie - softvér Funkcie operačného systému Softvér Softvér (software) programové vybavenie počítača. Vzniká programovaním, pričom každý počítačový program obsahuje postupnosť inštrukcií,

More information

Entity Framework: Úvod

Entity Framework: Úvod Entity Framework: Úvod Martin Macák Fakulta informatiky, Masarykova univerzita, Brno 29. 9. 2016 Osnova prednášky 1. Základy Entity Frameworku 2. Návrh databázy (detailnejšie Code First prístup) 3. Migrácie

More information

BGP - duálne prepojenie AS. (primary + backup spoj), s IBGP, cez virtuální L2 linky

BGP - duálne prepojenie AS. (primary + backup spoj), s IBGP, cez virtuální L2 linky BGP - duálne prepojenie AS (primary + backup spoj), s IBGP, cez virtuální L2 linky Peter Jašica Abstrakt: Cieľom tohto projektu je zhotoviť a otestovať funkčnosť BGP s dvojitým prepojením Autonómnych systémov.

More information

Knižnica (framework) pre kreslenie grafov

Knižnica (framework) pre kreslenie grafov Univerzita Komenského v Bratislave Fakulta matematiky, fyziky a informatiky Katedra informatiky Knižnica (framework) pre kreslenie grafov Diplomová práca Bc. Tomáš DRIMAL Študijný odbor: 9.2.1 Informatika

More information

VYSOKÉ UČENÍ TECHNICKÉ V BRNĚ BRNO UNIVERSITY OF TECHNOLOGY

VYSOKÉ UČENÍ TECHNICKÉ V BRNĚ BRNO UNIVERSITY OF TECHNOLOGY VYSOKÉ UČENÍ TECHNICKÉ V BRNĚ BRNO UNIVERSITY OF TECHNOLOGY FAKULTA INFORMAČNÍCH TECHNOLOGIÍ FACULTY OF INFORMATION TECHNOLOGY ÚSTAV INFORMAČNÍCH SYSTÉMŮ DEPARTMENT OF INFORMATION SYSTEMS VYTVOŘENÍ MODELU

More information