type Obdelnik = array [1..3, 1..4] of integer; var M: Obdelnik;

Podobné dokumenty
Vyučovací hodina. 1vyučovací hodina: 2vyučovací hodiny: Opakování z minulé hodiny. Procvičení nové látky

Programovací jazyk. - norma PASCAL (1974) - implementace Turbo Pascal, Borland Pascal FreePascal Object Pascal (Delphi)

dovolují dělení velkých úloh na menší = dekompozice

NPRG030 Programování I, 2015/16 1 / :25:32

Čtvrtek 8. prosince. Pascal - opakování základů. Struktura programu:

Programovací jazyk Pascal

Rekurze. Pavel Töpfer, 2017 Programování 1-8 1

Pascal. Katedra aplikované kybernetiky. Ing. Miroslav Vavroušek. Verze 7

PODPROGRAMY PROCEDURY A FUNKCE

Struktura programu v době běhu

Sada 1 - Základy programování

Maturitní otázky z předmětu PROGRAMOVÁNÍ

Test prvočíselnosti. Úkol: otestovat dané číslo N, zda je prvočíslem

- znakové konstanty v apostrofech, např. a, +, (znak mezera) - proměnná zabírá 1 byte, obsahuje kód příslušného znaku

Pseudonáhodná čísla = algoritmicky generovaná náhrada za náhodná čísla

Příklady: (y + (sin(2*x) + 1)*2)/ /2 * 5 = 8.5 (1+3)/2 * 5 = /(2 * 5) = 1.3. Pavel Töpfer, 2017 Programování 1-3 1

2) Napište algoritmus pro vložení položky na konec dvousměrného seznamu. 3) Napište algoritmus pro vyhledání položky v binárním stromu.

NMIN102 Programování /2 Z, Zk

VÝUKOVÝ MATERIÁL. Bratislavská 2166, Varnsdorf, IČO: tel Číslo projektu

Sdílení dat mezi podprogramy

Řídicí struktury. alg3 1

EVROPSKÝ SOCIÁLNÍ FOND. Úvod do PHP PRAHA & EU INVESTUJEME DO VAŠÍ BUDOUCNOSTI

2.1 Podmínka typu case Cykly Cyklus s podmínkou na začátku Cyklus s podmínkou na konci... 5

PROMĚNNÉ, KONSTANTY A DATOVÉ TYPY TEORIE DATUM VYTVOŘENÍ: KLÍČOVÁ AKTIVITA: 02 PROGRAMOVÁNÍ 2. ROČNÍK (PRG2) HODINOVÁ DOTACE: 1

Úvod do programování

1.1 Struktura programu v Pascalu Vstup a výstup Operátory a některé matematické funkce 5

Ukazatel (Pointer) jako datový typ - proměnné jsou umístěny v paměti na určitém místě (adrese) a zabírají určitý prostor (počet bytů), který je daný

Binární soubory (datové, typované)

Tematický celek Proměnné. Proměnné slouží k dočasnému uchovávání hodnot během provádění aplikace Deklarace proměnných

ALGORITMIZACE A PROGRAMOVÁNÍ

Skripta ke školení. Základy VBA. vypracoval: Tomáš Herout. tel:

Aplikovaná informatika. Podklady předmětu Aplikovaná informatika pro akademický rok 2006/2007 Radim Farana. Obsah. Obsah předmětu

NPRG030 Programování I, 2016/17 1 / :58:13

NPRG030 Programování I, 2017/18 1 / :22:16

Identifikátory označují objekty v programu používané (proměnné, typy, podprogramy).

Obsah přednášky. programovacího jazyka. Motivace. Princip denotační sémantiky Sémantické funkce Výrazy Příkazy Vstup a výstup Kontinuace Program

8 Třídy, objekty, metody, předávání argumentů metod

1. D Y N A M I C K É DAT O V É STRUKTUR Y

NPRG030 Programování I, 2010/11

Více o konstruktorech a destruktorech

Reprezentace aritmetického výrazu - binární strom reprezentující aritmetický výraz

V každém kroku se a + b zmenší o min(a, b), tedy vždy alespoň o 1. Jestliže jsme na začátku dostali 2

První kapitola úvod do problematiky

Programování v C++ 1, 1. cvičení

Obsah přednášky 7. Základy programování (IZAPR) Přednáška 7. Parametry metod. Parametry, argumenty. Parametry metod.

Obsah. Předmluva 13 Zpětná vazba od čtenářů 14 Zdrojové kódy ke knize 15 Errata 15

O datových typech a jejich kontrole

Třídění čísel v poli = vnitřní třídění (řazení)

Implementace seznamů do prostředí DELPHI pomocí lineárního seznamu

Sada 1 - Základy programování

2 Strukturované datové typy Pole Záznam Množina... 4

VY_32_INOVACE_08_2_04_PR

Základní způsoby: -Statické (přidělění paměti v čase překladu) -Dynamické (přiděleno v run time) v zásobníku na haldě

DUM 06 téma: Tvorba makra pomocí VBA

IAJCE Přednáška č. 8. double tprumer = (t1 + t2 + t3 + t4 + t5 + t6 + t7) / 7; Console.Write("\nPrumerna teplota je {0}", tprumer);

Logické operace. Datový typ bool. Relační operátory. Logické operátory. IAJCE Přednáška č. 3. může nabýt hodnot: o true o false

Dynamické datové typy a struktury

Programování 2 (NMIN102) Soubory. RNDr. Michal Žemlička, Ph.D.

Funkce, intuitivní chápání složitosti

Lokální definice (1) plocha-kruhu

NPRG031 Programování II --- 2/2 Z, Zk

Pokročilé programování v jazyce C pro chemiky (C3220) Třídy v C++

Podprogramy; procedury a funkce

Pole a Funkce. Úvod do programování 1 Tomáš Kühr

Stručný návod k programu Octave

Konstruktory a destruktory

Anotace. Soubory a práce s nimi, rekurze podruhé, struktury (datový typ record), Martin Pergel,

6 Příkazy řízení toku

Implementace LL(1) překladů

Úvod do programování - Java. Cvičení č.4

Viditelnost (práva přístupu) Tomáš Pitner, upravil Marek Šabo

Základní způsoby: -Statické (přidělění paměti v čase překladu) -Dynamické (přiděleno v run time) v zásobníku na haldě

Úvod do programovacích jazyků (Java)

5a. Makra Visual Basic pro Microsoft Escel. Vytvořil Institut biostatistiky a analýz, Masarykova univerzita J. Kalina

= knihovna prostředků pro lepší práci s textovou obrazovkou, klávesnicí a generátorem zvuků

Úvod Třídy Rozhraní Pole Konec. Programování v C# Hodnotové datové typy, řídící struktury. Petr Vaněček 1 / 39

konstruktory a destruktory (o)

Funkce pokročilé možnosti. Úvod do programování 2 Tomáš Kühr

- speciální symboly + - * / =., < > <> <= >= a další. Klíčová slova jsou chráněnými útvary, které nelze použít ve významu identifikátorů.

int ii char [16] double dd název adresa / proměnná N = nevyužito xxx xxx xxx N xxx xxx N xxx N

IAJCE Přednáška č. 7. řízení semaforu na křižovatce = přepínání červená/oranžová/zelená

Činnost: 1) Vyhodnotí se výraz E. 2) Jeho hodnota se uloží do proměnné V.

NPRG031 Programování II 1 / :25:46

NMIN201 Objektově orientované programování 1 / :36:09

DSL manuál. Ing. Jan Hranáč. 27. října V této kapitole je stručný průvodce k tvorbě v systému DrdSim a (v

Přednáška 8. Proměnné. Psaní a ladění skriptů. Parametry skriptu. Vstup a výstup. Konfigurační soubory shellu. Úvod do Operačních Systémů Přednáška 8

1 PRVOCISLA: KRATKY UKAZKOVY PRIKLAD NA DEMONSTRACI BALIKU WEB 1

Odvozené a strukturované typy dat

Syntaktická analýza. Implementace LL(1) překladů. Šárka Vavrečková. Ústav informatiky, FPF SU Opava

Martin Flusser. Faculty of Nuclear Sciences and Physical Engineering Czech Technical University in Prague. October 17, 2016

PB161 Programování v jazyce C++ Přednáška 4

Programování. Psaní čistého kódu. Martin Urza

IUJCE Přednáška č. 11. další prvky globální proměnné, řízení viditelnosti proměnných, funkcí

Algoritmizace a programování

Program a životní cyklus programu

LZ77 KNIHOVNA PRO KOMPRESI A DEKOMPRESI DAT POMOCÍ ALGORITMU LZ77. Příručka uživatele a programátora

Unity a Objekty (NMIN102) RNDr. Michal Žemlička, Ph.D.

Jazyk C# a platforma.net

Cvičení 9 - Monitory. monitor m; var proměnné... procedure p; begin... end; begin inicializace; end;

Algoritmizace a programování

Transkript:

Vícerozměrné pole type Obdelnik = array [1..3, 1..4] of integer; var M: Obdelnik; M[2,3] := 3145; - počet indexů není omezen (v praxi obvykle nejvýše tři) - více indexů pomalejší přístup k prvku (počítá se jeho adresa) - zkratka za pole polí type Obdelnik = array [1..3] of array [1..4] of integer; M[2][3] := 3145; {toto je rovněž povolený korektní zápis, ekvivalentní význam} Pavel Töpfer, 2018 Programování 1-5 1

Příklad: součin čtvercových matic const N = 10; type Matice = array [1..N, 1..N] of real; var A, B, C: Matice; {počítáme součin A*B, výsledek uložit do C} for I:=1 to N do for J:=1 to N do X:=0; for K:=1 to N do X:=X + A[I,K] * B[K,J]; C[I,J]:=X end; Pavel Töpfer, 2018 Programování 1-5 2

Dekompozice problému rozdělení problému na logicky ucelené, relativně samostatné části, každé části řešeného problému odpovídá samostatná část programu (realizace: procedura, funkce, modul, objekt). Návrh rozhraní způsob komunikace jednotlivých částí programu se svým okolím, s ostatními součástmi programu (např. v případě procedur a funkcí jaké mají parametry). Pavel Töpfer, 2018 Programování 1-5 3

Programujeme vždy proti rozhraní, bez znalosti (resp. bez využívání znalosti) toho, co je za ním. Přístup k rozhraní shora: v zápisu programu voláme procedury a funkce, o nichž víme, jak se volají a co dělají, ale nevíme, jak to dělají a pokud to náhodou víme, tak tuto znalost nevyužíváme (v budoucnu je možná změna implementace těchto procedur a funkcí) Přístup k rozhraní zdola: píšeme procedury a funkce, o nichž víme, jak se budou volat a co mají dělat, ale nevíme, kdo a v jakém kontextu je bude používat a pokud to náhodou víme, tak tuto znalost nevyužíváme (v budoucnu je možná bude chtít volat také někdo další) Pavel Töpfer, 2018 Programování 1-5 4

Idea dekompozice a programování proti rozhraní se využívá opakovaně: - strukturované programování použití procedur a funkcí, rozhraním je hlavička procedury resp. funkce (název, parametry, typ) - modulární programování modul má definováno své rozhraní, uživateli jsou přístupné pouze složky výslovně uvedené v rozhraní, ostatní nejsou dostupné a slouží pouze pro implementaci (pro vnitřní potřeby modulu) - objektové programování rozhraní třídy určuje ochranu přístupu ke složkám objektu resp. třídy zvenčí jsou vidět pouze veřejné složky objektu (public), soukromé složky slouží pouze pro implementaci a nejsou zvenčí přístupné (private) v některých jazycích existuje více úrovní ochrany (protected, internal, ) Pavel Töpfer, 2018 Programování 1-5 5

Procedury Deklarace procedury: procedure JménoProcedury; <lokální deklarace> stejné jako oblast deklarací v programu <tělo = složený příkaz> stejné jako tělo programu end; procedure Cara; {vypíše čáru z 50 hvězdiček} const N = 50; var I: integer; for I:=1 to N do write( * ); writeln end; Pavel Töpfer, 2018 Programování 1-5 6

Volání procedury: jednoduchý příkaz ; Cara; ; Cara; ; end Sémantika: - odskok na provedení příkazů uvedených v těle procedury - poté návrat za místo volání (podle uložené návratové adresy) Použití: - určitá činnost se vykonává v programu opakovaně vícekrát - dekompozice programu na menší logické celky Pavel Töpfer, 2018 Programování 1-5 7

Lokální deklarace - v maximální míře využívat (jinak strukturování kódu do procedur ztrácí smysl) - není viditelná vně procedury (v hlavním programu ani třeba v jiné proceduře) - procedura je samostatný prostor jmen (nevadí jiné použití stejného identifikátoru mimo proceduru) - zastiňuje stejnojmennou globální deklaraci (ta je pak v proceduře nedostupná) - nezastíněné globální identifikátory lze v proceduře používat (ale děláme to jen tehdy, když k tomu máme dobrý důvod) - lokálně v proceduře lze deklarovat nejen proměnné, typy, konstanty a návěstí, ale také další procedury a funkce (ty pak lze volat jen vnitř této procedury) - proměnné deklarované lokálně v proceduře nemají definovanou počáteční hodnotu (nejsou automaticky vynulovány ani si nezachovávají hodnotu z předchozího volání téže procedury) Pavel Töpfer, 2018 Programování 1-5 8

Parametry - nástroj pro předávání vstupních hodnot do procedury a výstupních, tzn. výsledků, ven z procedury (jinak by procedura dělala pořád úplně stejnou akci) - deklarace procedury: v hlavičce seznam formálních parametrů - parametry mohou být libovolného typu (i strukturovaného) - volání procedury: seznam skutečných parametrů musí být stejný počet a stejného typu (v pořadí)! procedure Cara(N: byte; Z: char); {vypíše čáru z N znaků Z} var I: integer; for I:=1 to N do write(z); writeln end; Volání: Cara(40, = ); Cara(60,. ); Pavel Töpfer, 2018 Programování 1-5 9

Upřesnění syntaxe: - formální parametry se oddělují středníkem - více formálních parametrů téhož typu lze oddělit čárkami a typ zapsat jen jednou (podobně jako v deklaracích proměnných), např.: procedure P(A, B, C: real; M, N: integer); - je nutné uvést vždy jméno typu (identifikátor), nikoli jeho definici je-li parametrem např. pole, musí být příslušný typ předem definován a pojmenován pomocí type, nelze psát např.: procedure P(X: array[1..10] of integer); - skutečné parametry se oddělují čárkami - na místě skutečných parametrů nemusí být jen konstanty, ale mohou to být jakékoliv výrazy příslušného typu Pavel Töpfer, 2018 Programování 1-5 10

Upřesnění sémantiky: - výrazy zapsané na místě skutečných parametrů se vyhodnotí a jejich hodnota se dosadí do odpovídajících formálních parametrů - formální parametry jsou tedy vlastně další lokální proměnné jejichž počáteční hodnota je stanovena v okamžiku volání (dále se mohou v proceduře libovolně měnit, navenek se to nijak neprojeví, po skončení výpočtu procedury zaniknou) předávání parametrů HODNOTOU - pouze vstupní! Pavel Töpfer, 2018 Programování 1-5 11

Ještě potřebujeme nějaký mechanismus, jak předávat výsledky výpočtu z procedury ven předávání parametrů ODKAZEM - vstupní i výstupní Syntaxe: - v deklaraci procedury jsou formální parametry předávané odkazem označeny klíčovým slovem var (platí vždy do nejbližšího středníku), např.: procedure P(A: real; var B, C: real; M: integer; var N: integer); {parametry A, M jsou předávány hodnotou, parametry B, C, N odkazem} - při volání procedury na místě skutečných parametrů musí být proměnné Pavel Töpfer, 2018 Programování 1-5 12

Sémantika: - vyhodnotí se adresy skutečných parametrů a předají se do odpovídajících formálních parametrů - formální parametry jsou tedy vlastně dočasné lokální odkazy na globálně existující proměnné - jakékoliv manipulace s formálním parametrem v těle procedury se prostřednictvím odkazu fakticky provádějí s příslušnou globální proměnnou procedura v parametru dostane vstupní hodnotu, může ho měnit a může v něm zanechat výstupní hodnotu (po skončení výpočtu procedury sice parametr zanikne ale to je jen ten lokální odkaz, nikoli vlastní proměnná!) Použití: - má-li parametr sloužit jako výstupní (nebo vstupní i výstupní) - je-li parametr rozsáhlou strukturou (vytváření lokální kopie při předávání parametru hodnotou by bylo náročné paměťově i časově) Pavel Töpfer, 2018 Programování 1-5 13

Příklady: program R; var Pole: array[1..2] of char; I: integer; procedure P (var C: char); I:=2; writeln(c) end; Pole[1]:= A ; Pole[2]:= B ; I:=1; P(Pole[I]) end. procedure Z (var A, B: integer); A:=5; B:=13; write(a) end; Co vypíše? Co vypíše? Pavel Töpfer, 2018 Programování 1-5 14

Funkce Deklarace funkce: function JménoFunkce (formální parametry): TypVýsledku; <lokální deklarace> stejné jako oblast deklarací v programu <tělo = složený příkaz> stejné jako tělo programu end; - mezi příkazy v těle funkce definování návratové hodnoty ve tvaru: JménoFunkce := Výraz - JménoFunkce se v těle funkce jeví jako lokální proměnná typu TypVýsledku, do níž lze pouze dosazovat a tím se definuje návratová hodnota (výsledek) - dosazovat lze i opakovaně - platí poslední dosazená hodnota. - TypVýsledku může být (alespoň v TP) číselný, znakový, string, boolean (nebo ukazatel - později), nesmí být strukturovaný Pavel Töpfer, 2018 Programování 1-5 15

Jinak pro funkce platí vše jako pro procedury lokalita identifikátorů, viditelnost, způsoby předávání parametrů. Je poměrně obvyklé, že funkce nepoužívají parametry předávané odkazem výsledek práce se předává ven jako funkční hodnota. Volání funkce: JménoFunkce (skutečné parametry) - výraz (může být součástí většího výrazu) Příklad: function Max3 (A, B, C: integer): integer; {vybírá maximum ze tří zadaných celých čísel} var D: integer; if A > B then D:=A else D:=B; if C > D then D:=C; Max3:=D end; Pavel Töpfer, 2018 Programování 1-5 16

Pozor na chybu: function Max3 (A, B, C: integer): integer; {vybírá maximum ze tří zadaných celých čísel} if A > B then Max3:=A else Max3:=B; if C > Max3 then Max3:=C; end; Max3 v pořádku (lze dosazovat opakovaně) Max3 chyba překladač chápe jako rekurzivní volání funkce (s chybným počtem parametrů)! V některých implementacích je toto ale povoleno a uvedená funkce funguje správně. Pavel Töpfer, 2018 Programování 1-5 17

Příklad: přestupný rok function Prestupny (Rok: integer): boolean; {zjištění, zda je rok přestupný podle Gregoriánského kalendáře platného od roku 1582} Prestupny := (Rok mod 4 = 0) and (Rok mod 100 <> 0) or (Rok mod 400 = 0) end; var R: integer; if Prestupny(R) then Pavel Töpfer, 2018 Programování 1-5 18

Způsoby komunikace podprogramu s okolím 1. parametry předávané hodnotou pouze vstupní 2. parametry předávané odkazem vstupní i výstupní 3. návratová hodnota funkce pouze výstupní (jen jedna hodnota jednoduchého typu) 4. globální proměnné vstupní i výstupní (používat jen ve výjimečných a odůvodněných případech) Příklad: určení NSD Eukleidovým algoritmem procedure NSD (A, B: integer; var C: integer); while A <> B do if A > B then A:=A-B else B:=B-A; C:=A end; Volání: NSD(33,15,X); Pavel Töpfer, 2018 Programování 1-5 19

function NSD (A, B: integer): integer; while A <> B do if A > B then A:=A-B else B:=B-A; NSD:=A end; Volání: X:=NSD(33,15); procedure NSD (A, B: integer); while A <> B do if A > B then A:=A-B else B:=B-A; X:=A end; Volání: NSD(33,15); Poslední uvedený případ nepoužívat! procedura vkládá výsledek výpočtu do pevně zvolené globální proměnné. Pavel Töpfer, 2018 Programování 1-5 20

Viditelnost identifikátorů program A; procedure B; procedure C; {C} lze volat B (globální) a C (rekurzívně) end; {C} procedure D; {D} lze volat B (globální), C (předcházející) a D (rekurzívně) end; {D} {B} lze volat C a D (lokální) a B (rekurzívně sama sebe) end; {B} {A} lze volat B, není viditelná C ani D end. {A} Pavel Töpfer, 2018 Programování 1-5 21

Ukončení výpočtu podprogramu - přechodem přes koncové end - předčasné ukončení procedury nebo funkce provede příkaz (volání standardní procedury) exit - v případě funkce pamatujte, aby před provedením příkazu exit byla definována návratová hodnota (dosazena do identifikátoru funkce) - řízení výpočtu se vrátí za místo volání podprogramu - provedení příkazu exit v hlavním programu způsobí ukončení výpočtu celého programu - předčasné ukončení výpočtu celého programu (i v proceduře nebo ve funkci) provede příkaz halt Pavel Töpfer, 2018 Programování 1-5 22

Alokace paměti na zásobníku - při zavolání procedury: vytvoření aktivačního záznamu na systémovém zásobníku - obsahuje návratovou adresu a lokální deklarace včetně parametrů (a ještě jiné technické údaje) - při ukončení procedury: skok podle uložené návratové adresy za místo volání procedury a zrušení aktivačního záznamu ( lokální proměnné zaniknou) - při druhém zavolání téže procedury může být její aktivační záznam umístěn jinde nebo paměť mohla mezitím využívat jiná procedura nezachovají se hodnoty lokálních proměnných mezi dvěma voláními procedury Pavel Töpfer, 2018 Programování 1-5 23

Inicializované proměnné deklarované v proceduře - jsou to lokální identifikátory viditelné pouze v rámci procedury - alokují se však staticky nezanikají po skončení výpočtu procedury, udržují si svou poslední hodnotu do příštího volání - inicializace se provádí jen jednou na začátku výpočtu programu program P; procedure S; const I: byte = 1; inc(i); write(i) end; S; S; S end. Co vypíše? 234 Pavel Töpfer, 2018 Programování 1-5 24