Konstanty a promnn Konstanta nco co se nemn

  • Slides: 27
Download presentation
Konstanty a proměnné Konstanta = něco, co se nemění, je konstantní. (constant) Př. konstant:

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 1

Název proměnné • • V Perlu začíná znakem $. Je utvořen z alfanumerických znaků

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 ! 2

Název proměnné - příklady Správně • • • $pi $pozdrav $Pozdrav_z_Prahy $b 20 Špatně

Název proměnné - příklady Správně • • • $pi $pozdrav $Pozdrav_z_Prahy $b 20 Špatně • • $10_j $proměnná x $jiná-proměnná $jina-promenna 3

Obsah proměnné Skalární veličina, tedy číslo nebo řetězec • $pi = -3. 14 •

Obsah proměnné Skalární veličina, tedy číslo nebo řetězec • $pi = -3. 14 • $pozdrav = "Dobrý den" Řetězec je v uvozovkách ! 4

Typy čísel • Integer (celé číslo) • Floating point (racionální číslo) Integer • Lze

Typy čísel • Integer (celé číslo) • Floating point (racionální číslo) Integer • Lze oddělovat tisíce podtržítky (jen pro čitelnost programu): (10 milionů = 10_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. 5

Typy čísel Floating point (tzv. reálné číslo) • čísla s desetinnou čárkou • výsledky

Typy čísel Floating point (tzv. reálné číslo) • čísla s desetinnou čárkou • výsledky aritmetických operací s necelým výsledkem • odmocniny ( 2), další iracionální čísla ( ) • Zaokrouhlování !POZOR! 6

Numerické operátory 1. 2. 3. 4. ** unární minus */% +- mocnina obracení znaménka

Numerické operátory 1. 2. 3. 4. ** unární minus */% +- mocnina 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 7

Přiřazovací operátor = • Není to rovnítko ! • $pi = 3. 14; $pozdrav

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); • $x = 5 * 6; $y = $x - 6; $z = $y / 8; výsledek: a je 10, c je 2 - nehezké 8

Autoinkrement, autodekrement • Autoinkrement ++ – zvětší hodnotu proměnné o 1 • Autodekrement -–

Autoinkrement, autodekrement • Autoinkrement ++ – zvětší hodnotu proměnné o 1 • Autodekrement -– zmenší hodnotu proměnné o 1 • Využití v cyklech • $a++; $b--; ++$a; $a = 0; $b = $a++ + 5; $c = ++$a + 5; --$b; $b je 5, $a je 1 $c je 6, $a je 1 9

Řetězce • Řetězec = (libovolně dlouhá) posloupnost libovolných znaků ohraničená z obou stran uvozovacími

Řetězce • Řetězec = (libovolně dlouhá) posloupnost libovolných znaků ohraničená z obou stran uvozovacími znaky Př. : "Dobrý den, agente 007" "Dobrý denn" písmenka, číslice, i řídící znaky • Uvozovací znaky (delimiters) = většinou uvozovky 10

Typy uvozovek • Dvojité uvozovky ("řetězec") stejné • interpolation: • je-li v řetězci proměnná,

Typy uvozovek • Dvojité uvozovky ("řetězec") stejné • interpolation: • je-li v řetězci proměnná, nahrazuje se svým obsahem • interpretují se tzv. "escape sequences", např. n (konec řádku), t (tabulátor) • Jednoduché uvozovky ('řetězec') stejné – proměnné se nenahrazují svým obsahem, řetězec se bere doslova - no interpolation 11

Interpolace #!/usr/bin/perl use warnings; $pozdrav = "Ahoj"; print "$pozdrav , Pepku !n"; print '$pozdrav

Interpolace #!/usr/bin/perl use warnings; $pozdrav = "Ahoj"; print "$pozdrav , Pepku !n"; print '$pozdrav , Pepku !n'; Ahoj , Pepku ! $pozdrav , Pepku !n . . . odskok na nový řádek. . . bez odskoku • Chceme-li vytisknout znak těsně za jméno proměnné, užijeme složené závorky: print "${pozdrav}, Pepku !n"; Ahoj, Pepku ! Tady není mezera 12

Escaping • Jak vytisknout znaky  " ' ? print "\"; print "'"; print

Escaping • Jak vytisknout znaky " ' ? print "\"; print "'"; print '"'; print """; ' " " zpětné lomítko apostrof uvozovky • Je třeba rozmyslet, jaké oddělovače použít • Lze použít vlastní oddělovače ! 13

Vlastní oddělovače • Hodí se, když chceme pracovat se složitějším textem, který obsahuje víc

Vlastní oddělovače • Hodí se, když chceme pracovat se složitějším textem, který obsahuje víc znaků • Je třeba vybrat takové oddělovače, které se v textu nevyskytují q/ totéž jako ' qq/ totéž jako " print q/Ahoj, Pepku!/; print qq/${pozdrav}, Pepku/; Místo / lze použít libovolný nealfanumerický znak, tedy např. # | + _, nebo dvojici (), {}, <>, [] 14

Čísla a řetězce • Převody mezi čísly a řetězci - automatické • Př. $deset="10".

Čísla a řetězce • Převody mezi čísly a řetězci - automatické • Př. $deset="10". . . to je řetězec, ale vyskytne-li se mezi čísly, převede se taky na číslo. • Automatické převody neplatí pro osmičková ani hexadecimální čísla, ta se musí explicitně převést pomocí funkcí oct a hex. 15

Řetězcové operátory • Zřetězení = konkatenace (concatenation) – přilepení jednoho řetězce na konec druhého

Řetězcové operátory • Zřetězení = konkatenace (concatenation) – přilepení jednoho řetězce na konec druhého print "hrad". "u"; hradu $koncovka = "em"; $kmen = "hrad"; $tvar = $kmen. $koncovka"; print "$tvarn"; – je-li třeba, číslo se převede na řetězec print "Dvakrát pět je ". 2*5. ". n"; Dvakrát pět je 10. 16

Ještě přiřazování • = není rovnítko, takže lze i: • $x = $x -

Ještě přiřazování • = není rovnítko, takže lze i: • $x = $x - 6; $slovo = $slovo. " ". $slovo; • Další možný zápis: • $x -= 6; totéž jako $x = $x - 6; • $x += -6; totéž jako $x = $x + (-6); • $x *= 6; totéž jako $x = $x * 6; • $x /= 6; totéž jako $x = $x / 6; • $slovo. = " "; $slovo = $slovo. " "; 17

Globální a lokální proměnná • Globální proměnnou (global variable) lze používat (tzn. i měnit)

Globální a lokální proměnná • Globální proměnnou (global variable) lze používat (tzn. i měnit) v celém programu • Lokální proměnná (local / lexical variable) je definovaná jen pro blok, ve kterém je deklarovaná a v případných podblocích – Je třeba ji deklarovat : – my $promenna; – Zvykneme si deklarovat všechny proměnné 18

Lokální proměnné $w = 8; print $w; { my $w; $w = 19; print

Lokální proměnné $w = 8; print $w; { my $w; $w = 19; print $w; } print $w; # globální proměnná # vytiskne 8 # lokální proměnná uvnitř bloku # vytiskne 19 # vytiskne 8 Použití v podprogramech 19

Hlídání proměnných • Globální proměnné není třeba deklarovat, ale je to vhodné • our

Hlídání proměnných • Globální proměnné není třeba deklarovat, ale je to vhodné • our $glob_promenna; • Kontrola, aby byly všechny proměnné deklarovány - use strict; • Při opomenutí – varování při překladu • Globální proměnné se používají málo 20

Příklad #!/usr/bin/perl # skládání slov use warnings; use strict; my $kmen, $koncovka; $kmen =

Příklad #!/usr/bin/perl # skládání slov use warnings; use strict; my $kmen, $koncovka; $kmen = <STDIN>; # uživatel zadá kmen z klávesnice $koncovka = <STDIN>; # totéž pro koncovku print "Celé slovo je: ". $kmen. $koncovka. ". n"; 21

Vstup a výstup - jen pro začátek • Vstup - data, která zadáváme programu,

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>;

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 : "rn" 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 • 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

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.

Ještě o číslech 42; # integer 42 12. 5; # floating point number 101873.

Ještě o číslech 42; # integer 42 12. 5; # floating point number 101873. 000; # 101 873. 005 # 0. 005 5 E-3; # stejné číslo jako na předchozím řádku 23 e-100; # zápis velmi malých čísel (23 krát 10 na minus 100 2. 3 E-99; # stejné číslo jako na předchozím řádku 23 e 6; # 23 milionů 23_000; # stejné číslo jako na předchozím řádku

Formátování výstupu • Příkaz print vypíše řetězec přesně tak, jak mu ho zadáme •

Formátování výstupu • Příkaz print vypíše řetězec přesně tak, jak mu ho zadáme • Čísla ale upraví do co nejjednoduššího tvaru print 4. 000, ' ', . 0000033, ' ', 2 E-4, ' ', 9. 77 E-5, " ", 10_181_973, ' ', 9. 87 E 9, " ", 86. 7 E 14, "n"; Výsledek bude: 4 3. 3 e-10 0. 0002 9. 77 e-05 10181973 9870000000 8. 67 e+15 Můžeme si ho ale naformátovat podle svých představ - funkce printf my $x = 9. 1234567890123456; printf "%. 5 fn", $x; # tisk čísla na 5 desetinných míst, tedy 9. 12346