Základy programování a algoritmizace Publikace vznikla v rámci projektu OPVK „Vyškolený pedagog – záruka kvalitní výuky“ na Střední odborné škole veterinární, mechanizační a zahradnické a Jazykové škole s právem státní jazykové zkoušky v Českých Budějovicích, reg. č. CZ.1.07/1.3.40/01.0007. Ing. Roman Blábolil České Budějovice, 2013
76
Embed
Základy programování a algoritmizaceZáklady programování a algoritmizace Publikace vznikla v rámci projektu OPVK „Vyškolený pedagog – záruka kvalitní výuky“ na Střední
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Základy programování a algoritmizace
Publikace vznikla v rámci projektu OPVK „Vyškolený pedagog – záruka kvalitní výuky“ na
Střední odborné škole veterinární, mechanizační a zahradnické a Jazykové škole s právem
státní jazykové zkoušky v Českých Budějovicích, reg. č. CZ.1.07/1.3.40/01.0007.
OBSAH 1 Úvod ............................................................................................................................................................................. 5
2 Základy algoritmizace a programování ......................................................................................................... 6
5 Základy programování v PHP ......................................................................................................................... 30
5.8 Proměnná typu Pole ................................................................................................................................. 47
5.13 Příkazy break a continue ........................................................................................................................ 55
5.14 Funkce (procedury) .................................................................................................................................. 57
5.18 Datum a čas .................................................................................................................................................. 72
- 5 -
1 ÚVOD
Tato publikace vznikla v rámci projektu OPVK „Vyškolený pedagog – záruka kvalitní výuky“.
Cílem publikace je zpracovat základní poznatky ze základů programování a algoritmizace.
Publikace se bude zabývat těmito tématy:
Základní pojmy
Program/Algoritmus
Proces vývoje
Kompilace
Debugging
Data a datové struktury
Proměnná
Datový typ
Pole
Práce s výrazy
Výrazy a operátory
Práce s čísly
Práce s textovými řetězci
Logické výrazy (AND, OR, XOR)
Algoritmizace
Analýza problému
Sekvence, selekce, iterace
Diagram toku
Modularizace (předdefinované procesy)
- 6 -
Programovací jazyky
Přehled programovacích jazyků
Obecný zápis syntaxe
2 ZÁKLADY ALGORITMIZACE A PROGRAMOVÁNÍ
2.1 ALGORITMUS
Algoritmus je posloupnost operací, která řeší daný úkol v konečném počtu kroků. Je to
přesný postup, který je potřeba k vykonání určité činnosti. Jinak řečeno - algoritmus je
jednoznačný a přesný popis řešení problému.
Každý algoritmus musí mít tyto vlastnosti:
Rezultativnost (konečnost) – algoritmus musí mít začátek a konec. Musí proběhnout
v konečném počtu kroků
Determinovanost (předurčenost) – algoritmus musí být jednoznačný. Všechny
operace i jejich návaznosti musí být jednoznačně určeny (definovány) a nic nesmí být
náhodné. Činnost algoritmu nesmí záviset na libovůli osoby ani na vlastnostech
zařízení, které ho realizují.
Obecnost (hromadnost) – algoritmus musí řešit úlohu pro různé vstupní hodnoty.
Opakovatelnost – při stejných vstupních hodnotách musíme dostat vždy stejný
výsledek.
Správnost – algoritmus musí být věcně správný.
Srozumitelnost – algoritmus musí být srozumitelný i pro uživatele, který daný
algoritmus nevytvářel.
- 7 -
2.1.1 MOŽNOSTI ZÁPISU ALGORITMŮ
Slovní vyjádření
Používá se pro skupinu lidí, která nemá programátorské vzdělání návody k obsluze, recepty,
postup práce. Výhodou je, že se lze domluvit i s laikem. Nevýhodou je malá přehlednost a
absence nástrojů k dodržení vlastností algoritmu.
Příklad: Algoritmus přípravy polévky ze sáčku
Formulace problému: Uvař polévku ze sáčku.
Analýza úlohy
Vstupní údaje: polévka, voda, hrnec, lžíce, vařič
Výstupní údaje: uvařená polévka
Analýza: Polévku nesmíme převařit ani vyvařit
Sestavení algoritmu
Slovní popis:
- vyber požadovanou polévku
- do hrnce napusť studenou vodu
- rozmíchej polévku ve studené vodě lžící
- zapni vařič
- vař polévku 10 minut
- Vypni vařič
- 8 -
Matematické vyjádření
Používá se tam, kde je možné daný problém popsat matematickým vyjádřením.
Výhodou je, že jednoznačný. Nevýhodou může být, že při neošetření vstupních podmínek
nemusí být věcně správný
Vývojový diagram
Je to symbolický, algoritmický jazyk, který se používá pro názorné zobrazení algoritmu.
Je to jednoznačný komunikační prostředek při týmové práci, je přehledný a má nástroje
k dodržení algoritmu. Výborně se hodí k dokumentačním účelům, kde je přehlednější než
výpis programu. Nevýhodou může být, že mu laik nemusí rozumět.
Rozhodovací tabulka
Tento zápis se používá v případě, kdy se v dané úloze vyskytuje několik možností a vlastní
řešení je pro každou možnost jednoznačně popsatelné (rozvrh, tabulka logického součinu..)
Výhodou jednoznačný a přehledný zápis. Je výhodný zejména při větším počtu možností
řešení. Bývá srozumitelný i laikům. Nevýhodou může být u velkých tabulek ztráta
přehlednosti a nemusí se hodit pro každý typ úlohy.
Počítačový program
Používá se pro zápis instrukcí z vytvořeného algoritmu, kterému počítač rozumí a umí z něho
vytvořit strojový kód. Výhodou je forma zápisu, které rozumí člověk i počítač (pokud je
vybaven příslušným překladačem). Nevýhodou je, že zápisu rozumí pouze programátor, který
umí daný programovací jazyk. Výpis počítačového programu může být málo názorný a
nepřehledný.
- 9 -
Objektová analýza
Tato metoda se používá v objektově orientovaném programování.
Výhodou je forma zápisu, které rozumí člověk i počítač (pokud je vybaven příslušným
překladačem). Nevýhodou je, že zápisu rozumí pouze programátor, který umí daný
programovací jazyk. Výpis počítačového programu může být málo názorný a nepřehledný.
2.2 ALGORITMIZACE
Algoritmizace je postup při tvorbě programu pro počítač, kterým lze prostřednictvím
algoritmu řešit nějaký problém.
Algoritmizaci lze rozdělit do několika částí
- formulace problému
- analýza úlohy
- vytvoření algoritmu
- sestavení programu
- odladění programu
Formulace problému
V této části je třeba přesně formulovat požadavky, určit výchozí hodnoty, požadované
výsledky, jejich formu a přesnost řešení.
- 10 -
Analýza úlohy
Při analýze úlohy si ověříme, zda je úloha řešitelná a uděláme si první představu o jejím
řešení. Dále zjistíme, zda výchozí hodnoty jsou k řešení postačující a zda má úloha více
řešení. Podle charakteru úlohy vybereme nejvhodnější řešení.
Vytvoření algoritmu úlohy
Provádí se při tvorbě jakéhokoliv programu. Sestavíme jednoznačný sled jednotlivých
operací, které je třeba provést, aby byla úloha správně vyřešena. Algoritmus přesně popisuje
postup zpracování daného úkolu, nedává však odpověď na daný problém, ale pouze postup,
jak ji získat.
Sestavení programu
Na základě algoritmu řešené úlohy sestavíme program (zdrojový text) v konkrétním
programovacím jazyce. Ze zdrojového textu se pomocí překladače do strojového kódu
vytvoří spustitelný program. Dá se tedy říci, že dobře provedená analýza úlohy a
algoritmizace daného problému je základním předpokladem sestavení programu pro počítač.
Odladění programu
Cílem odladění je odstranění chyb z programu. Chyby se nejčastěji projeví nesprávnou
činností programu nebo špatnými výsledky.
Chyby v programech mohou být syntaktické nebo logické.
Syntaktické - špatně zapsaný nějaký příkaz. Překlad programu se zastaví a zobrazí se hlášení
o chybě. Tyto chyby jsou snadno opravitelné.
- 11 -
Logické - program je funkční, ale nedělá co má. Může skončit v nekonečném cyklu. Pro ladění
se vždy používá několik kontrolních příkladů. Při odstraňování těchto chyb může pomoci
ladící program (debugger) umožňující sledování aktuálního stavu proměnných a krokování.
Teprve po odstranění všech druhů chyb můžeme program použít k praktickému řešení úloh.
Tyto chyby se velmi špatně identifikují.
Důležité pojmy v rámci algoritmizace a programování
Proměnná - je to místo v paměti počítače, ve kterém se nachází určitá hodnota
Identifikátor - je název proměnné
Datový typ - je to určitý typ proměnné
char - znak
integer - celé číslo
real - reálné číslo
boolean - logická proměnná
Deklarace – stanovení proměnných jakého jsou typu. Provádí se vždy na začátku programu.
Syntaxe – přesné určení, jak se mají jednotlivé příkazy a části programu zapisovat
Strojový kód – je to programový kód, který jediný dokáže počítač přímo zpracovávat.
- 12 -
3 ROZDĚLENÍ PROGRAMOVACÍCH JAZYKŮ
Strojově orientované
- strojový jazyk (jazyk fyzického procesoru)
- asembler (jazyk symbolických adres)
Vyšší programovací jazyk – je to programovací jazyk, jehož příkazy jsou tvořeny pomocí
klíčových slov, jejichž význam musí být převeden do strojového kódu, aby mohl program
napsaný ve vyšším programovacím jazyce být spuštěn.
- obecné - (C, C++, C#, Objekt Pascal, Visual Basic, .NET Framework, Java)
- databázové (MS Fox Pro, Oracle)
- pro webové klienty (Java, JavaScript, ActiveX)
- specializované (makrojazyky, simulační jazyky)
Aby mohl procesor napsaný program zpracovat musí být před zpracování přeložen do
strojového kódu. To zajistí tzv. překladače. Rozeznáváme dva druhy těchto překladačů.
- Překladač neboli kompilátor je program, který ze zdrojového kódu vytvoří
spustitelný soubor. Vytvoří instrukce pro procesor.
- Interpreter načítá program v textovém zápisu a okamžitě jednotlivé příkazy
vykonává. Program tedy není předem přeložený. Používá se například u skriptů ve
webových stránkách
- 13 -
Strukturované programování
Je to soubor doporučení, jak by měl dobře napsaný program vypadat. Tato doporučení
vytvářejí jakési „mantinely“ pro programátory. Strukturované programování je založeno na
dvou principech.
- Složitou úlohu rozdělíme na dílčí úkoly, které řešíme samostatně a metodou shora
dolů propojíme úlohu v jeden celek.
- Při návrhu řešení dílčích úloh použijeme pouze povolené řídící struktury
- sekvence
- větvení
- cykly
- přepínače
Objektové programování
Je to soubor doporučení, jak by měl dobře napsaný program vypadat. Přínosem objektového
programování je také větší strukturovanost a modularita vytvářeného programu.
Objektově orientovaný přístup tvorby programu je charakterizován třemi základními
vlastnostmi.
Obalení (zapouzdření) - je realizováno novým datovým typem – objekt. Obsahuje
kromě datových položek také řídící struktury – metody. Oním obalením tedy můžete
rozumět obalení datových položek řídícími strukturami – metodami, které zajišťují
přístup k datovým položkám.
Dědičnost – inheritance - umožňuje vytvářet nové objekty jako potomky již
existujících objektů – předků, přebírat od nich datové položky a metody a
modifikovat je či upřesňovat.
- 14 -
Polymorfismus (mnohotvarost) - polymorfismus je vlastnost objektové
programování, která umožňuje pojmenovat metodu jedním jménem a tato metoda
může být společná pro různé objekty ve stromové hierarchii, i když pro každý objekt v
této hierarchii se bude chovat různě.
Při objektovém přístupu k tvorbě programu nezkoumáme způsob funkce programu, ale
způsob změn dat. Objektový program je řízem tokem událostí.
Vizuální programování
Vizuální programování je dnes většinou objektové a současně strukturované. Spočívá v tom,
že velké množství standardně používaných objektů (tlačítka, políčka, práci se soubory) je již
připraveno a jen je myší přetahujeme do vytvářeného programu.
Vývojové prostředí
Je to komplexní nástroj na tvorbu programů.
Obsahuje:
- překladač pro určený programovací jazyk
- nástroje na vizuální tvorbu programu
- hotové komponenty programů
- nástroje pro ladění a odstraňování chyb
- 15 -
4 VÝVOJOVÝ DIAGRAM
Vývojový diagram je grafické vyjádření požadovaného algoritmu (znázornění jednotlivých
příkazů, ze kterých se algoritmus skládá).
Pro vývojový diagram se používají stanovené značky, které nelze měnit.
Spojnice
- orientované
- neorientované
Obr. 1
Mezní značky
Obr. 2
ZAČÁTEK KONEC RETURN
- 16 -
Ruční zadání vstupních dat
Obr. 3
Zpracování
Obr. 4
Výstup
Obr. 5
Vstup
Obr. 6
R= A
VÝPOČET C=A+B
TISK
ČTI: A, B
- 17 -
Spojka
Obr. 7
Podmínka (rozhodování)
Obr. 8
Přepínání
Obr. 9
3
A>20 ANO
NE
k= 1 12
30
k=
- 18 -
Cyklus
Obr. 10
Podprogram
Obr. 11
4.1 CHYBY V ALGORITMECH
Při psaní programů musíte dbát na správný zápis matematických vzorců. V programech nelze
použít zlomkové čáry. Místo zlomkové čáry se používá lomítko /.
Rovnici musíme zapsat takto:
X:=(A+B)/(C+D)
V programech nelze dále použít √ (odmocninu) a . (násobení). Místo znaku √ používáme
výraz SQRT a místo znaku . používáme znak *. Místo znaku používáme výraz PI.
I= 2,8,15
těl
o
Konec I
I= 2,8,15
těl
o
Konec I
6200
- 19 -
Porušení rezultativnosti
Obr. 12
Špatný algoritmus, protože byla porušena podmínka rezultativnosti - konečnosti - algoritmus
musí proběhnout v konečném počtu kroků. Písnička se bude zpívat pořád dokola a nikdy
neskončí. Došlo k zacyklení programu.
Správné řešení
Obr. 13
- 20 -
Porušení rezultativnosti
Obr. 14
Špatný algoritmus, protože byla porušena podmínka rezultativnosti - konečnosti - algoritmus
musí proběhnout v konečném počtu kroků. Co když hned ze začátku je I větší než 10? Došlo k
zacyklení programu.
Správné řešení
Obr. 15
- 21 -
Porušení věcné správnosti
Obr. 16
Špatný algoritmus, protože byla porušena podmínka věcné správnosti. Algoritmus je funkční,
ale dostanete nesprávný výsledek
Porušení determinovanosti
Obr. 17
- 22 -
Špatný algoritmus, protože byla porušena podmínka jednoznačnosti – (determinovanost -
podmíněnost) - všechny operace i jejich návaznosti musí být jednoznačně určeny
(definovány) a nic nesmí být náhodné.
Správné řešení
Obr. 18
Porušení determinovanosti
Obr. 19
- 23 -
Špatný algoritmus, protože byla porušena podmínka jednoznačnosti – (determinovanost -
podmíněnost) - všechny operace i jejich návaznosti musí být jednoznačně určeny
(definovány) a nic nesmí být náhodné. Co když ve jmenovateli bude 0? Musíme ošetřit
hodnoty, které se blíží k nekonečnu. Pokud je řešení v oboru reálných čísel, nesmí být výraz
pod odmocninou záporný
Jsou to nejzávažnější chyby v programech.
Správné řešení
Obr. 20
Porušení obecnosti
Obr. 21
- 24 -
Špatný algoritmus, protože byla porušena podmínka obecnosti – (hromadnosti) - algoritmus
musí řešit úlohu pro různé vstupní hodnoty.
Správné řešení
Obr. 22
Porušení opakovatelnosti
Obr. 23
- 25 -
Špatný algoritmus, protože byla porušena podmínka opakovatelnosti - při stejných vstupních
hodnotách musíme dostat vždy stejný výsledek. Proměnná I je neznámá.
Správné řešení
Obr. 24
- 26 -
4.2 UKÁZKY ALGORITMŮ
4.2.1 SEKVENCE
Sekvence je nejjednodušším typem algoritmu, který se skládá (kromě mezních značek) pouze
ze sekvenčních bloků. Během sekvence nesmí docházet k větvení algoritmu ani k návratu
zpět.
Obr. 25
4.2.2 VĚTVENÍ
Nejčastějším důvodem větvení je ošetření nežádoucích důsledků. Musí být ošetřeny všechny
možnosti, které mohou nastat. Situace se musí nejdříve vyhodnotit. Teprve poté se provede
činnost.
- dělení - výpočet výrazů s odmocninou - další funkce (goniometrické)
- 27 -
Obr. 26
Obr. 27
- 28 -
4.2.3 CYKLY
Cykly jsou jedním z nejsilnějších nástrojů algoritmů. Podstatou je opakování určité části
algoritmu.
Cyklus musí být konečný.
- cykly s pevným počtem opakování
- cykly řízené podmínkou s podmínkou na začátku cyklu
- cykly řízené podmínkou s podmínkou na konci cyklu
Cyklus s pevným počtem opakování
Obr. 28
- 29 -
Cyklus řízený podmínkou - podmínka je na začátku
Obr. 29
Cyklus řízený podmínkou - podmínka je na konci
Obr. 30
- 30 -
Čekací smyčka
Obr. 31
5 ZÁKLADY PROGRAMOVÁNÍ V PHP
Programovací jazyk PHP (Hypertext preprocessor) je skriptovací jazyk, který běží na straně
serveru. Server posílá do vašeho počítače pouze výsledky. Používá se pro tvorbu webových
aplikací – dynamických stránek. Je postaven na základech jazyka C. Skriptovací jazyk PHP je
neustále velmi rychle vyvíjen. Je to nejčastěji používaný modul na internetových serverech.
Výhody jazyka PHP:
PHP je jazyk, který je relativně jednoduchý na pochopení
PHP má syntaxi velmi podobnou jazyku C a je tedy většině vývojářů dost blízký
PHP podporuje širokou řadu souvisejících technologií, formátů a standardů
Je to otevřený projekt s rozsáhlou podporou komunity
Dá se najít velké množství již hotového kódu k okamžitému použití nebo funkční
PHP aplikace
Podstatná část z hotového kódu je šířena pod nějakou svobodnou licencí a dá se
použít ve vlastních projektech
- 31 -
PHP si dobře rozumí s webovým serverem Apache i IIS
PHP snadno komunikuje s databázemi, jako je MySQL, PostgreSQL atd.
PHP je multiplatformní a lze jej provozovat s většinou webových serverů a na
většině dnes existujících operačních systémů
PHP podporuje mnoho existujících poskytovatelů webhostingových služeb
Nevýhody jazyka PHP:
PHP je interpretovaný, ne kompilovaný jazyk
Interpretovaný jazyk je překládán až za běhu programu. Je pomalejší, ale nemá tak
velké formální požadavky. Překládají se interpretrem, ten instrukce zároveň při
překladu provádí a to vše na straně serveru.
Kompilovaný jazyk je nejdříve celý přeložen a až potom může být spuštěn. Je
rychlejší než jazyk interpretovaný, má však vyšší nároky na formální správnost kódu.
Překládá se kompilátorem, výsledkem překladu je (většinou) .exe soubor.
Kdokoli má přímý přístup k serveru, může nahlédnout do vašich PHP skriptů
Podpora objektového programování není v PHP na moc dobré úrovni.
Protože je PHP aktivně vyvíjen, v budoucích verzích jazyka se mohou některé
funkce změnit nebo se mohou chovat jinak než dosud.
Mezi nejčastější aplikace psané v PHP patří například:
- diskusní fóra - chaty - internetové obchody - informační systémy - redakční systémy -firemní prezentace - dynamické osobní stránky - vyhledávače a katalogy - drobnosti typu počitadla, ankety a mnoho dalších
- 32 -
5.1 PRINCIP PHP
PHP skriptovací jazyk, který běží na serveru. Typický PHP skript obsahuje jednak kusy
normálního HTML (XHTML) kódu, a jednak kusy programového kódu PHP. Když webový
server obdrží požadavek na zpracování takového skriptu, všechny kusy HTML kódu přeskočí a
zpracuje pouze PHP programový kód. Výsledky ze zpracování programového kódu vloží do
HTML kódu.
Všechny příklady musí být pro svou funkčnost vloženy na internetový server.
Příklad:
Kód bez PHP
<?//xml version="1.0" encoding="utf-8"?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="cs" lang="cs"> <head> <meta http-equiv="content-type" content="text/html; charset=utf-8" /> <meta name="description" content="... obsah dokumentu.." /> <meta name="Author" content="vaše jméno" /> <title>Úvod do PHP</title> <link rel="stylesheet" href="styl.css" type="text/css" /> </head> <body> <p>Stránka bez PHP. Nevím kolik je hodin.</p> </body> </html>
U prvního řádku vložte před značku xml dvě lomítka. Tím zajistíte, že se tento řádek nebude
zpracovávat v interpreteru PHP. Použitá sekvence znaků <? značí začátek xml kódu, ale také
to může být začátek PHP kódu. Dvě lomítka pro PHP znamenají poznámku a tento řádek
přeskočí.
- 33 -
Obr. 32
Obr. 33
Pokud si zobrazíte v prohlížeči zdrojový kód stránky (pomocí pravého tlačítka myši a volby
zobrazit zdrojový kód), uvidíte, co přesně do vašeho prohlížeče server poslal.
<title>Úvod do PHP</title> <link rel="stylesheet" href="styl.css" type="text/css" /> </head> <body> <p>Stránka s PHP. Vím, že právě je <?echo Date("G:i")?> hodin.</p> </body> </html>
Obr. 34
Obr. 35
Při kontrole poslaného kódu serverem, si všimněte, že server z PHP příkazu vložil do HTML
pouze výsledek – 13:26. Prohlížeč nemá sebemenší tušení, co všechno se na serveru dělo než
mu byl výstup odeslán, vidí jen samotný výsledek.
- 35 -
Části PHP kódu se do skriptů vkládají pomocí speciálních značek:
<? a ?> nebo <?php a ?>
Celý soubor může být jeden dlouhý PHP kód. Pak začíná a končí znaky <? a ?>. V souboru
může být kód PHP jen na jednom určitém místě nebo na více místech. V souboru také žádný
PHP kód být nemusí. Může se tvářit jako php skript, ale ve skutečnosti je to normální HTML
soubor a PHP kód v něm vůbec není.
Při uložení PHP souboru musí mít soubor příponu php (nebo další povolené přípony na
serveru).
Každý programový řádek (ukončená funkce) musí končit znakem středník (;).
Programový kód můžete psát v libovolném editoru bez formátování. Naprosto nevhodný je
například Word. Jeden z nejlepších programů je český program PSPad (neplacený). Je to
program pro tvorbu souborů v různých formátech.
Výhody použití programu PSPad:
Pomocí protokolu FTP možnost práce přímo na internetovém serveru
Velmi jednoduchá a intuitivní práce
Neomezená délka editovaného textu
Možnost otevření více dokumentů současně
Záznam maker s možností uložení na disk a ruční editace
Práce s projekty
Hledání a nahrazování v souborech
Nalezení rozdílů v textových souborech (porovnání verzí)
Zvýraznění syntaxe
Automatické rozpoznání syntaxe podle typu souboru s možností manuální
změny
Volitelné zobrazení čísel řádků, podbarvení aktuálního řádku, pravítko
Převody velikosti písmen (malá, velká, první písmena velká)
- 36 -
Program velice dobře zvýrazňuje syntaxi různých jazyků. Po spuštění si nastavte syntaxi pro
PHP.
Obr. 36
Pokud vytvořený PHP soubor uložíte na lokální a potřebujete vyzkoušet jeho funkčnost,
musíte ho nahrát na internetový server. To můžete provést například pomocí programu
dvojice /* a */ (lomítko+hvězdička a hvězdička+lomítko) – víceřádkový kometář
<?
// skriptu je jedno, co tady napíšu
# skriptu je úplně jedno, co tu bude
?>
<?
/*
Nevím, jestli to, co napsáno v tomto skriptu bude fungovat.
Ještě se na to budu muset podívat.
*/
?>
- 40 -
Víceřádkovým komentářem můžete zakomentovat celý blok textu velice rychle, a také velice
špatně. Pamatujte, že víceřádkové komentáře nelze vnořovat. První sekvence ’*/’ totiž celý
komentář ukončí. Následující kód tedy skončí chybou:
<?
/*
Chci to zakomentovat.
To by přece nemělo vadit.
/*
Ale díky "vnořenému" víceřádkovému komentáři
... už to vadí
*/
*/
?>
5.3 PŘÍKAZ ECHO
Příkaz echo vytiskne jeden nebo více řetězců.
<?
echo "Dnes svítí sluníčko";
?>
<?
echo "Dnes svítí sluníčko ", "Zítra bude pršet ", "Pozítří bude oblačno";
?>
Víceřádkový řetězec
Budete-li chtít vytisknout víceřádkový řetězec, můžete provést něco jako:
- 41 -
<?
echo "Tohle bude první řádek
Tohle bude druhý řádek
Tohle bude třetí řádek"
?>
Rovnocenný zápis bude i zápis s tzv. speciální sekvencí znaků – \n.
<? echo "Tohle bude první řádek\nTohle bude druhý řádek\nTohle bude třetí řádek" ?>
\n je jednou z tzv. escape sekvencí.
5.4 ESCAPE SEKVENCE
Pomocí speciálních zápisů můžeme zobrazit znaky, které by jinak PHP zpracoval jako součást
příkazu.
Sekvence Význam
\n Nový řádek \" Uvozovky \r Přechod na začátek řádku \t Tabelátor \\ Zpětné lomítko \$ Dolar
Takže, budete-li chtít donutit příkaz echo, aby ve výstupu zobrazil skutečnou uvozovku,
můžete napsat něco jako:
- 42 -
<? echo "PHP už \"běžně\" programuji" ; ?>
Pokud jste si zkoušeli uvedený příklad s řádky a máte pocit, že tam cosi nehraje, máte
pravdu. V prohlížeči totiž budou všechny údaje na jednom řádku. Musíte si uvědomit, jak
prohlížeč předané informace zobrazuje.
Když pošlete prohlížeči požadavek na skript uvedený výše a necháte si zobrazit zdrojový kód
stránky která dorazí, zjistíte, že tam ty konce řádku opravdu jsou. HTML ale nezalamuje
řádek tehdy, když je znak konce řádku v kódu, HTML má k tomu značku <br />. Je
samozřejmě možné vložit značku HTML do řetězce v PHP, třeba takto:
<?
echo "Tohle bude první řádek<br />Tohle bude druhý řádek<br />Tohle bude třetí řádek" ;
?>
Prohlížeč obdrží následující kód:
Tohle bude první řádek<br />Tohle bude druhý řádek<br />Tohle bude třetí řádek" ;
Pokud budete chtít být bezchybní a mít validní kód, můžete napsat kód i takto:
<?
echo "Tohle bude první řádek<br />\nTohle bude druhý řádek<br />\nTohle bude třetí řádek" ;
?>
Prohlížeč obdrží následující kód:
Tohle bude první řádek<br /> Tohle bude druhý řádek<br /> Tohle bude třetí řádek" ;
- 43 -
5.5 SPOJOVÁNÍ ŘETĚZCŮ
Spojování řetězců se prování pomocí operátoru . (tečka).
<? echo "Klidně si spojím jméno " ."s příjmením"; ?>
Tečka zde vede ke spojení, zřetězení řetězců. Je rovněž možné spojit více než dva řetězce.
5.6 PROMĚNNÉ V PHP
Každý programovací jazyk pracuje s nějakými hodnotami. To, do čeho se tyto hodnoty
ukládají, se nazývá proměnné.
Každá proměnná má:
- název (někdy se mu říká identifikátor)
- hodnotu (někdy se označuje termínem literál)
V každém okamžiku je hodnota proměnné v programu jednoznačně daná, během programu
se však může měnit
Typy proměnných
Typ Název v PHP Popis
- 44 -
Logický typ Boolean Uchovává hodnotu "pravda" nebo
"nepravda". Zapisuje se jako TRUE a FALSE
Celočíselný typ Integer Uchovává celá kladná i záporná čísla (a
nulu) (-2 bilióny až + 2 bilióny)
Desetinné číslo Float nebo Real Uchovává desetinná čísla s přesností
obyčejně na 14 desetinných míst (velikost čísla má
308 nul).
Řetězec String Uchovává texty neboli řetězce. Řetězec je
znak nebo sada znaků, v PHP prakticky
neomezené délky.
- Každá proměnná musí mít jednoznačný název. Ten v PHP začíná znakem dolaru ($) a
následuje (bez mezery) nějakým pojmenováním.
- První znak toho pojmenování musí být buď písmeno a-z nebo podtržítko. Nesmí to být číslo
ani nic jiného.
- Názvy proměnných v PHP rozlišují mezi malými a velkými písmeny, takže pozor na to. Praxe
bývá většinou taková, že se proměnné píší malými písmeny.
- Desetinná čísla se zadávají s tečkou, ne s čárkou.
- Řetězce se uzavírají do uvozovek nebo do apostrofů.
Ukázky proměnných
<?
//logický typ
$mam_malo_penez = TRUE;
- 45 -
//celočíselný typ
$plat = 10000;
//desetinné číslo
$disketa = 3.5;
//řetězec
$prohlaseni = "Příští měsíc budou prázdniny." ;
//Proměnné vypíšete opět příkazem echo.
echo $mam_malo_penez."<br />";
echo $plat."<br />";
echo $disketa."<br />";
echo $prohlaseni."<br />";
?>
Běžné chyby v proměnných
<? // tohle bude špatně. Proměnná nesmí začínat číslem $3sestry = "tři sestry" ; // tohle sice projde, ale nic to nevypíše (velikost písmen v názvu) $rok = 2004; echo $Rok; ?>
- 46 -
5.7 OPERÁTORY
Operátor se používá k zjištění hodnoty pomocí provedení procedury.
OPERÁTOR OPERACE PŘÍKLAD POPIS
+ Sčítání 1 + 2 součet 1 a 2 = 3
- Odečítání 2 – 1 rozdíl 2 a 1 = 1
* Násobení 2 * 1 součin 2 a 1 = 2
/ dělení 3 / 2 podíl 3 a 2 = 1.5
% zbytek (modulo) 3 % 2 počítá zbytek celočíselného
dělení = 1
== Rovnost $a == $b $a a $b mají stejnou
hodnotu
< Menší $a < $b $a je menší než $b
> Větší $a > $b $a je větší než $b
<= menší nebo rovno $a <= $b $a je menší nebo rovno $b
=> větší nebo rovno $a => $b $a je větší nebo rovno $b
!= Nerovnost $a != $b $a se nerovná $b
<> Nerovnost $a <> $b $a se nerovná $b
- 47 -
5.8 PROMĚNNÁ TYPU POLE
V PHP je kromě základních datových typů (celá čísla, desetinná čísla, logické hodnoty a
řetězce) k dispozici i datový typ pole. To je speciální struktura, která může v jedné proměnné
obsahovat sadu hodnot. Pole má prvky; každý prvek má index nebo klíč a hodnotu.
Definice pole
<?
$jmeno[1]="Petr";
$jmeno[2]="Pavel";
$jmeno[3]="Maruška" ;
$jmeno[4]="Eva";
$jmeno[5]="Roman";
?>
Tímto zápisem vznikne proměnná $jmeno (pole), která obsahuje pět prvků, z nichž každý má
svůj index (například trojku) a hodnotu (Maruška). Z toho vidíte, že pole se v PHP zapisují
jako každá jiná proměnná, pouze za názvem mají v hranatých závorkách index. Toto pole je
indexované.
Někdy může ale být šikovnější rozlišit od sebe prvky pole řetězcem, čímž vznikne tzv.
asociativní pole.
<?
$pocet_lidi["Praha"]=1000000;
$pocet_lidi ["Ústí nad Labem"]=100000;
$pocet_lidi ["Horní Lhota"] = 350;
?>
Obecně může být asociativní pole užitečné v případě, kdy budete chtít rozlišovat prvky podle
něčeho jiného než podle čísel.
Index pole můžeme vynechat a PHP jej dosadí za nás. Také můžete zadat první hodnotu, od
které se bude index odvíjet. Další možnost je použít v PHP funkci array, která provede totéž.
- 48 -
<?
$jmeno[]="Petr";
$jmeno[]="Pavel";
$jmeno[]="Maruška" ;
$jmeno[]="Eva";
$jmeno[]="Roman";
?>
nebo pomocí funkce array, což je ještě kratší a je to naprosto rovnocenný zápis:
Při preinkrementaci se v tomto příkladu nejdříve inkrementuje proměnná a. Následně je
výraz ++$a vyhodnocen - jeho hodnota přiřazena proměnné b.
Proměnná a má hodnotu 11 a proměnná b má hodnotu 11.
5.11 PŘÍKAZY
Příkazy jsou kostrou celého programu. Udělují programům základní schopnost rozhodování,
která je zapotřebí pro většinu početních úloh.
PŘÍKAZY PRO VĚTVENÍ PROGRAMŮ
Tyto příkazy rozhodují o tom jaký blok kódu se provede a za jakých podmínek.
V PHP jsou dvě podmíněné konstrukce. První je if...elseif...else a druhá switch...case.
- 52 -
Příkaz if
<? // Jan se vypíše, jen pokud bude $jmeno Jan if ($jmeno == "Jan") echo ("Jan"); ?>
<? // Jméno a příjmení se vypíše pouze tehdy, pokud jméno bude Jan a příjmení Novák if ($jmeno == "Jan" AND $prijemni == "Novák") { echo ("Jan"); echo ("Novák"); } ?>
PHP také umožňuje používat rozvětvené podmínky. Pomocí klíčového slova else můžete určit
blok kódu, který se provede, pokud je daná podmínka nepravdivá. Také máte klíčové slovo
elseif, který vám v případě nesplnění hlavní podmínky umožňuje testovat alternativní
podmínky.
<? //testuje se zadané číslo v proměnné $i $i=0; if ($i < 0) { echo ("Záporné"); } elseif ($i == "0") { echo ("Nula"); } else { echo ("Kladné"); } ?>
- 53 -
Příkaz switch
Příkaz switch se používá, pokud testujeme jednu proměnnou s více možnými hodnotami.
<?php //testuje se jaký řetězec je v proměnné $stat $stat="sk"; switch ($stat) { case "cz": echo "Česká republika"; break; case "sk": echo "Slovenská republika"; break; default: echo "Odjinud"; } ?>
Příkaz switch porovnává hodnotu proměnné $stat s každou hodnotou klauzule case. Pokud
nalezne odpovídající hodnotu, provede příkazy spojené s touto volbou až do příkazu break.
5.12 CYKLY
Cykly nám umožňují provádět určitou část kódu opakovaně až do nastaveného počtu nebo
splnění podmínky. V PHP jsou dva typy cyklů.
While - provede znovu daný kód jen v případě že je splněna daná podmínka.
For – tomuto cyklu dopředu zadáte, kolikrát má daný kód provést.
<table> <? for ($radek=1; $radek<=10; $radek++): echo "<tr>"; for ($sloupec=1; $sloupec<=10; $sloupec++): echo "<td>".$radek*$sloupec."</td>"; endfor; echo "</tr>"; endfor; ?> </table>
5.13 PŘÍKAZY BREAK A CONTINUE
Smyčky nemusejí probíhat vždy řádně celým cyklem. Někdy může být výhodné provádění
cyklu přerušit. K tomu slouží příkaz break.
break
Úprava předchozího příkladu tak, aby vracel pouze čísla do padesáti.
- 56 -
<table> <? for ($radek=1; $radek<=10; $radek++): echo "<tr>"; for ($sloupec=1; $sloupec<=10; $sloupec++): if ($radek * $sloupec>50) break; // to je ten přidaný řádek echo "<td>".$radek*$sloupec."</td>"; endfor; echo "</tr>"; endfor; ?> </table>
Continue
Úprava předchozího příkladu tak, aby vracel pouze čísla větší než padesát.
<table> <? for ($radek=1; $radek<=10; $radek++): echo "<tr>"; for ($sloupec=1; $sloupec<=10; $sloupec++): if ($radek * $sloupec<50) continue; // to je ten přidaný řádek echo "<td>".$radek*$sloupec."</td>"; endfor; echo "</tr>"; endfor; ?> </table>
- 57 -
5.14 FUNKCE (PROCEDURY)
Funkce jsou v PHP nezbytným programovacím prostředkem. Procedury i funkce se v PHP
definují klíčovým slovem function.
Procedura
Procedura je jednoduše řečeno kus kódu, který se může volat samostatně. Většinou se do
procedury umisťují ty části kódu, které se v programu opakují nebo se procedury používají
pro větší přehlednost.
<? function tabulka() { ?> <table> <tr><td>1</td><td>2</td></tr> <tr><td>3</td><td>4</td></tr> </table> <? } ?> Použití procedury tabulka
<? echo "Toto je první tabulka"; tabulka(); echo "Toto je druhá tabulka"; tabulka(); ?>
Funkce
<? function dvaplusdva() {
- 58 -
return 2+2; } ?>
Výraz, který je uveden za return se vrátí jako výsledná hodnota a provádění funkce tím končí.
cokoli, co je uvedeno jako příkaz za klíčovým slovem return už se neprovede.
Funkce může mít více vstupních parametrů. Ty se pak oddělují čárkou. Funkce v PHP mohou
být rekurzivní. To znamená, že funkce může volat sebe samu. Funkce nemůže vracet více než
jeden výstupní parametr. Ale může vracet pole, takže se to dá obejít. Jedna uživatelská
funkce může volat jinou. Na pořadí, v jakém jsou uvedeny ve skriptu, přitom nezáleží.
5.15 VKLÁDÁNÍ SOUBORŮ
Funkce pro vkládání souborů použijete při vkládání částí kódu do webové stránky - záhlaví,
zápatí, kontaktní informace, vložení počítadla, vložení často používaných částí kódu apod.
Výhodou je úspora místa ne serveru a daleko snazší úprava určité funkce nebo části
opakujícího se kódu.
K tomuto účelu se používají příkazy require a include. Příkaz zadaný soubor vloží na místo,
kde se tento příkaz nachází.
require "soubor.php"; // požadovat
require ("soubor.php"); // volání ve tvaru fce
include "soubor.php"; // vložit
include ("soubor.php"); // volání ve tvaru fce
- 59 -
require - při neexistenci souboru se skript ukončí s fatální chybou
include - při neexistenci souboru zahlásí varování a pokračuje dále
U vkládaných souborů můžeme použít libovolnou příponu. Často se používá přípona .inc. Tím
lze bezpečně poznat, že daný soubor je určen pro vložení do jiného souboru a ne pro přímé
volání.
Tento způsob znamená však velké bezpečnostní riziko. Soubory s příponou .inc nejsou
zpracovány serverem, takže kdokoliv, kdo zná jeho jméno si může zobrazit celý text.
Používejte standardní přípony pro php.
Ukázka webové stránky
Obr. 38
- 60 -
HTML tvořící webovou stránku
<!-- začátek hlavičky --> <?//xml version="1.0" encoding="utf-8"?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="cs" lang="cs"> <head> <meta http-equiv="content-type" content="text/html; charset=utf-8" /> <meta name="description" content="... obsah dokumentu.." /> <meta name="Author" content="vaše jméno" /> <title>Úvod do PHP</title> <link rel="stylesheet" href="styl.css" type="text/css" /> </head> <!-- konec hlavičky --> <!-- začátek úvodu --> <body> <div style="background-color: #FFFF00"> <h2 align="center">Střední odborná škola veterinární a mechanizační a zahradnická<br />a Jazyková škola s právem státní jazykové zkoušky</h2> </div> <div><p>Rudolfovská 92, 372 16 České Budějovice, telefon: 387 924 111, e-mail: <a href="mailto:[email protected]">[email protected]</a></p><br /><hr /> </div> <!-- konec úvodu --> <!-- začátek obsahu --> <p><b><a href="http://www.soscb.cz/mech.htm">Obor: MECHANIZACE A SLUŽBY</a></b></p> <p><b><a href="http://www.soscb.cz/vet.htm">Obor: VETERINÁŘSTVÍ</a></b> <p><b><a href="http://www.soscb.cz/zah.htm">Obor: ZAHRADNICTVÍ</a></b> <!-- konec obsahu --> <!-- začátek patičky --> <p> </p><hr /><p><b>IČ:</b> 60075911<br /><b>DIČ:</b> CZ60075911</p> </body> </html> <!-- konec patičky -->
- 61 -
PHP tvořící tu samou stránku jako v předchozí ukázce. K tomuto souboru náleží další tři
soubory – hlavicka_inc.php, uvod_inc.php a paticka_inc.php.
<? include "hlavicka_inc.php"; include "uvod_inc.php"; ?> <!-- konec úvodu --> <!-- začátek obsahu --> <p><b><a href="http://www.soscb.cz/mech.htm">Obor: MECHANIZACE A SLUŽBY</a></b></p> <p><b><a href="http://www.soscb.cz/vet.htm">Obor: VETERINÁŘSTVÍ</a></b> <p><b><a href="http://www.soscb.cz/zah.htm">Obor: ZAHRADNICTVÍ</a></b> <!-- konec obsahu --> <? include "paticka_inc.php"; ?>
(\. Vyhovuje libovolný řetězec obsahující alespoň jednu tečku)
Množiny a třídy znaků
[a-z] - množina povolených znaků
[aeiouy] - množina povolených znaků
- 71 -
[a-zA-Z] - množina povolených znaků (velká i malá písmena)
[^a-z] - množina nepovolených znaků
Příklad:
Chceme zjistit, zda je zadaná e-mailová adresa ve správném tvaru a korektní.
jméno@doména.národní_doména
jméno - může obsahovat velká i malá písmena, číslice, podtržítko, pomlčku a tečku,
minimálně jeden znak
@ - povinný znak
doména - může obsahovat velká i malá písmena, číslice a pomlčku, minimálně jeden znak
. - povinný znak
národní_doména - může obsahovat velká i malá písmena, číslice, pomlčku a tečku,
minimálně jeden znak
^[a-zA-Z0-9_.-]+@[a-zA-Z0-9\-]+\.[a-zA-Z0-9.-]+$
Pomlčka a tečka musí být "ocejchovaná" obráceným lomítkem, aby nebyla chápána
například jako spojovník.
- 72 -
Vyhledávání řetězce pomocí regulárních výrazů
ereg(podřetězec, řetězec, pole) - prochází řetězec a pátrá po zadaném podřetězci. Nalezený
řetězec se může uložit do pole
eregi(podřetězec, řetězec, pole) - nerozlišuje velikost písmen
Otestování e-mailové adresy
<? $email = "[email protected]"; if (eregi("^[a-zA-Z0-9_.-]+@[a-zA-Z0-9\-]+\.[a-zA-Z0-9.-]+$", $email)) { echo "Adresa ". $email. " je platná"; exit; } echo "Adresa ". $email. " není platná. Zadejte ji zvovu"; ?>
5.18 DATUM A ČAS
date() - funkce k získání a naformátování data a času
echo date ("j. m. Y");
Formátovací kódy pro funkci date
a - am, pm A - AM, PM B - univerzální formát času d - den v měsíci (01-31) D - den v týdnu (Mon - Sun) F - celé jméno daného měsíce
- 73 -
g - hodina (1-12) G - hodina (0-23) h - hodina (01-12) H - hodina (00-23) i - minuty (00-59) j - den v měsícu (1-31) l - den v týdnu (Monday - Sunday) m - číslo měsíce (01-12) M - jméno měsíce (Jan - Dec) n - číslo měsíce (1-12) s - vteřiny (00-59) U - celkový počet vteřin od 1. ledna 1970 - UNIXová časová známka w - den v týdnu jako číslo (0-6) y - rok jako doumístné číslo Y - rok jako čtyřmístné číslo z - číslo dne v roce (0-365)
UNIXová časová známka
Druhým parametrem funkce date() je unixová časová známka. Je to číslo obsahující počet
vteřin od 1. ledna 1970.
Tato známka je používána jako formát pro práci s časem.
Pro převod datumu a času na časovou známku, můžeme použít funkci mktime().
mktime (hodiny, minuty, sekundy, měsíc, den, rok)
1- nastavujeme pokud je, 0 - nastavujeme pokud není
<? echo date ("j. m. Y"). "<br />"; $casovaznamka = mktime(); echo $casovaznamka; ?>
- 74 -
Výpočet věku uživatele
<? $den = 13; $mesic = 10; $rok = 1965; $znamkanarozeni = mktime (0, 0, 0, $mesic, $den, $rok); $znamkadnesek = mktime(); $vekvteriny = $znamkadnesek - $znamkanarozeni; //výsledek je ve vteřinách, musíme to převést na roky $vek = ($vekvteriny / (60*60*24*365)); echo $vek; ?>
Výpočet věku uživatele se zadávacím formulářem a přepočtem na dny a měsíce
(v příkladu je použita matematická funkce – floor pro zaokrouhlování)