Doporučená literatura P.Töpfer: Algoritmy a programovací techniky, Prometheus Praha 1995. ISBN 80-85849-83-6 Wall, L., Christiansen, T. and R. L. Schwartz: Programming PERL. O'Reilly. 1996. ISBN 1-56592-149-6. Vyšla i česky. Pavel Satrapa: Perl pro zelenáče, Neokortex, s.r.o. ISBN 80-86330-02-8 http://www.perl.org/docs.html
Programování Přesné vyjádření našeho přání Rozmyšlení všech možných alternativ Dekompozice na elementární úlohy Zápis v příslušném jazyce Příklad: Smazat všechny soubory z počítače, kde se vyskytuje jméno zradivšího kamaráda.
Tabulkové kalkulátory Software programové vybavení počítače operační systémy aplikační programy Technické vybavení počítače Hardware Operační systémy MS DOS WINDOWS 9x, ME, Windows XP WINDOWS NT UNIX Aplikace Textové editory Tabulkové kalkulátory Kreslící programy Databáze WINDOWS 2000
Překlad do strojového kódu (machine code) pomocí překladače Zápisu v programovacím jazyce (source code = zdrojový kód = zdroják) počítač nerozumí Překlad do strojového kódu (machine code) pomocí překladače Výsledkem je spustitelný program ve zvláštním souboru, který lze kdykoli později spustit jen v operační paměti počítače, spouští se hned a po dokončení se zapomene -- interpret
Interpret Strojový kód v souboru Pomalejší provádění kvůli počátečnímu překladu Je třeba program překládat pro každý nový stroj Nevýhody Snadná přenositelnost na jiné počítače, operační systémy Snadná modifikovatelnost Není třeba program pokaždé překládat - je to rychlejší Skrytý zdrojový kód Výhody Interpret Strojový kód v souboru
There's more than one way to do it ! Perl je interpret perlovský program == skript (někdy) Potřeba překladače Překladač je volně šiřitelný Snadnost a přístupnost lidskému myšlení má své stinné stránky! Perlovské motto: There's more than one way to do it !
Program se skládá z příkazů (statement) Příkazy se mohou řadit do bloků (block) pomocí složených závorek { ... } Příkaz obsahuje klíčové slovo (keyword) obsahující název funkce (a argument(y)) Program je dobré komentovat, abychom se v něm později vyznali. print "Ahoóój !"; # napřed všechny pozdravím
Příkaz v Perlu musí být zakončen středníkem (jsou výjimky, ale nebudeme se je učit). Příkazy mohou být zapsané těsně za sebou, ale nesluší se to Každý příkaz na nový řádek. Odsazovat bloky Komentář je cokoli za znakem # až do konce řádky a je překladačem ignorován.
Spuštění programu v Perlu Na příkazovou řádku napíšeme perl [jméno souboru] perl –w [jméno souboru] Volba –w buď na příkazovou řádku nebo na první řádku programu
Spuštění programu v Perlu První řádka programu: #!/usr/bin/perl, případně #!/usr/local/bin/perl Doporučuje se zapínat varovný přepínač, překladač potom upozorní nejen na chyby, ale i na nezvyklá užití #!/usr/bin/perl -w nebo přímo jménem #!/usr/bin/perl use warnings;
Ladění programu Málokdy se povede napsat program hned napoprvé dobře Odstraňování chyb = debugging (bug = štěnice nebo i jakýkoli hmyz) Nástroj na odstraňování chyb = debugger Kontrolní tisky
Algoritmus Algoritmus = postup práce To není algoritmus Příklad: Smazat všechny soubory z počítače, kde se vyskytuje jméno zradivšího kamaráda. To není algoritmus Jak by asi vypadal příslušný algoritmus?
Znakové sady, kódování vnitřní reprezentace všech znaků v paměti počítače ASCII - American Standard Code for Information Interchange - viz např. http://www.asciitable.com/ jen 7 bitů Kolik znaků lze zakódovat pomocí 7 bitů?
ASCII řídicí znaky písmena anglické abecedy znaménka (<>;:"/, apod.) 7 bitů je málo ==> rozšíření na 8 bitů - znakové sady pro různé jazyky Čeština: ISO Latin2, Windows 1250, Kamenických později 16 - Unicode 32 - ISO 10646 (International Organization for Standardization), Unicode 4 294 967 296 znaků
UNICODE a jeho kódování UTF-8 ASCII znaky mají stejný kód nejčastější znaky jen v 1 bytu, ostatní ve 2 až 4 UTF-16 kompromis mezi úsporností a kompaktností nejčastější znaky ve 2 bytech, ostatní ve 4 UTF-32 všechny znaky ve 4 bytech
UNICODE Standard Zodpovědný za interpretaci znaků Nedefinuje grafickou podobu znaků Prvních 128 znaků je ASCII Prvních 256 znaků ze sady ISO Latin 1 Jednoznačné pojmenování každého znaku Znaky se mohou (jenom) přidávat - stabilita
Číselné soustavy Dvojková soustava – Binary numbers bit = binary digit (dvojková číslice) 8 bitů = 1 byte - stačí k zakódování 255 znaků Pro odlišení - začínají 0b Osmičková soustava - Octal numbers = základ 8 Pro odlišení - začínají vždy nulou (0). Šestnáctková soustava - Hexadecimal numbers = základ 16 Číslice 0 – 9, pak písmenka A (10), B (11), ..., F (15) Pro odlišení - začínají 0x.
Číselné soustavy - příklady 01101 je v desítkové soustavě 577 0b1101 je v desítkové soustavě 13 1101 je normální desítkové číslo 1 101 ? Co je 1101 v šestnáctkové soustavě?
Konstanty a proměnné Konstanta = něco, co se nemění, je konstantní. (constant) Př. konstant: 4, -23, "pepř", "Ať žije král!" Proměnná = něco, co se mění, obsahuje data. (variable) krabička, jejíž obsah lze měnit dočasné uchování nějaké hodnoty
Název proměnné V Perlu začíná znakem $. Je utvořen z alfanumerických znaků a podtržítka. První znak za $ nesmí být číslice. Maximální délka 251 znaků Záleží na velikosti písmen ! Nesmí obsahovat mezery. Nepoužívat znaky s diakritikou !
Název proměnné - příklady Správně $pi $pozdrav $Pozdrav $Pozdrav_z_Prahy $b20 Špatně $10_j $proměnná x $jiná-proměnná $jina-promenna
Obsah proměnné Skalární veličina, tedy číslo nebo řetězec $pi = -3.14 $pozdrav = "Dobrý den" Řetězec je v uvozovkách !
Typy čísel Integer (celé číslo) Floating point (racionální číslo) Lze oddělovat tisíce podtržítky (jen pro čitelnost programu): (10 milionů = 10_000_000) Maximální číslo uložitelné v počítači: 32 bitů, tj. 4 294 967 295 Pro větší čísla je třeba použít zvl. modul.
Typy čísel Floating point (tzv. reálné číslo) čísla s desetinnou tečkou výsledky aritmetických operací s necelým výsledkem odmocniny (2), další iracionální čísla () Zaokrouhlování !POZOR!
Numerické operátory ** mocnina unární minus obracení znaménka * / % násobení, dělení, zbytek + - sčítání, násobení Červená čísla vyjadřují přednosti (precedence). Chceme-li to jinak, použijeme závorky 3 + 5 * 4 je něco jiného než (3 + 5) * 4
Přiřazovací operátor = Není to rovnítko ! $pi = 3.14; $pozdrav = "Ahoj"; Vícenásobné přiřazení $f = $g = $k = 8; nebo dokonce $a = 5 * ($c = 2); výsledek: a je 10, c je 2 - nehezké $x = 5 * 6; $y = $x - 6; $z = $y / 8;
Řetězce Řetězec = (libovolně dlouhá) posloupnost libovolných znaků ohraničená z obou stran uvozovacími znaky Př.: "Dobrý den, agente 007" "Dobrý den\n" písmenka, číslice, i řídící znaky Uvozovací znaky (delimiters) = většinou uvozovky
Řetězcové operátory Zřetězení = konkatenace (concatenation) přilepení jednoho řetězce na konec druhého je-li třeba, číslo se převede na řetězec print "hrad"."u"; hradu $koncovka = "em"; $kmen = "hrad"; $tvar = $kmen . $koncovka"; print "$tvar\n"; print "Dvakrát pět je ".2*5.".\n"; Dvakrát pět je 10.
Vstup a výstup - jen pro začátek Vstup - data, která zadáváme programu, aby je zpracoval diamantový operátor < > Výstup - data, která program vyprodukuje, výsledky print Standardní vstup - klávesnice Standardní výstup - obrazovka
Standardní vstup Diamantový operátor přečte jednu řádku ze vstupu $vstup = <STDIN>; v proměnné $vstup je to, co zapíše uživatel na klávesnici, včetně znaku konce řádku Konec řádku: UNIX : "\n" line feed (LF) - chr(10) Windows : "\r\n" carriage return - chr(13) (CR LF) chomp($vstup); odstranění konce řádku z obsahu proměnné
Standardní výstup Soubor lze otevřít i pro výstup, ale to necháme na později Standardní výstup se otevře automaticky vždy print [seznam čísel a/nebo řetězců, oddělených čárkami] print "Dnes je krásně\n"; print "Dnes" , " ", "je k", "rásn", "ě\n"; # totéž
Unixová odbočka - přesměrování standardního vstupu a výstupu Standardní vstup / výstup lze přesměrovat ze /do souboru Přesměrování vstupu < Přesměrování výstupu > vytvoření souboru >> přidání na konec existujícího souboru ./tisk.perl > vystup.txt Výstup programu tisk.perl se zapíše do souboru vystup.txt. Pokud soubor už existoval, přepíše se.