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

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

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

Sada 1 - Základy programování

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

Programovací jazyk Pascal

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

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

Základy programovacího jazyka Turbo Pascal

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

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

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

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

Sada 1 - Základy programování

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

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

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

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

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

Několik příkladů v Turbo Pascalu

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

Jednotky (unity) Struktura programu v Pascalu

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

Sada 1 - Základy programování

ALGORITMIZACE A PROGRAMOVÁNÍ

Algoritmizace a programování

Paměť počítače. alg2 1

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

Algoritmizace a programování. Ak. rok 2012/2013 vbp 1. ze 44

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

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

Anotace. Jednotky (tvorba a využití), struktury (typ record),

6 Příkazy řízení toku

NPRG030 Programování I, 2010/11

Algoritmizace a programování

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

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

6. Příkazy a řídící struktury v Javě

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

Strukturované typy a ukazatele. Úvod do programování 1 Tomáš Kühr

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

MS Excel Základy maker. Operační program Vzdělávání pro konkurenceschopnost. Projekt Zvyšování IT gramotnosti zaměstnanců vybraných fakult MU

VISUAL BASIC. Práce se soubory

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

O datových typech a jejich kontrole

1. lekce. do souboru main.c uložíme následující kód a pomocí F9 ho zkompilujeme a spustíme:

Řídicí struktury. alg3 1

VISUAL BASIC. Přehled témat

Object Pascal je přísně typový procedurální jazyk, který umožňuje jak strukturované, tak objektově orientované programování.

Datové typy a struktury

PODPROGRAMY PROCEDURY A FUNKCE

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

Sada 1 - Základy programování

Implementace LL(1) překladů

Úvod do programovacích jazyků (Java)

Programování v jazyce C pro chemiky (C2160) 3. Příkaz switch, příkaz cyklu for, operátory ++ a --, pole

for (i = 0, j = 5; i < 10; i++) { // tělo cyklu }

VY_32_INOVACE_08_2_04_PR

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

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

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

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

Bitové operátory a bitová pole. Úvod do programování 2 Tomáš Kühr

1. Téma 03 - Rozhodování

Podprogramy; procedury a funkce

Ing. Igor Kopetschke TUL, NTI

Zápis programu v jazyce C#

Další možnosti inicializace proměnných

Úvod do jazyka C. Ing. Jan Fikejz (KST, FEI) Fakulta elektrotechniky a informatiky Katedra softwarových technologií

3. přednáška. Obsah: Řídící struktury sekvence, if-else, switch, for, while, do-while. Zpracování posloupnosti

PROGRAMOVÁNÍ V SHELLU

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

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

Zadání: TÉMA: Zápis algoritmu, čtení textového souboru, porovnání řetězců.

Obsah přednášky. Příkaz for neúplný. Příkaz for příklady. Cyklus for each (enhanced for loop) Příkaz for příklady

8. lekce Úvod do jazyka C 3. část Základní příkazy jazyka C Miroslav Jílek

PROGRAMOVACÍ JAZYKY A PŘEKLADAČE LEXIKÁLNÍ ANALÝZA

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

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

Algoritmizace prostorových úloh

Digitální učební materiál

PCKEYB JEDNOTKA PRO OBSLUHU KLÁVESNICE TYPU PC AT. Příručka uživatele a programátora

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

Programy v prostředí operačního systému

1. lekce. do souboru main.c uložíme následující kód a pomocí F9 ho zkompilujeme a spustíme:

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

Programovací jazyk PASCAL Turbo

Úvod do programování

Assembler - 5.část. poslední změna této stránky: Zpět

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

Algoritmizace prostorových úloh

Správné vytvoření a otevření textového souboru pro čtení a zápis představuje

NPRG030 Programování I, 2018/19 1 / :25:37

Uplatnění metod na zvolený jazyk

Ahoj mami. Uložení dat v počítači. Příklady kódování dat. IAJCE Přednáška č. 4

8 Makra Příklad 4 Excel 2007

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

Základní pojmy. Úvod do programování. Základní pojmy. Zápis algoritmu. Výraz. Základní pojmy

Sada 1 - Základy programování

PHP - úvod. Kapitola seznamuje se základy jazyka PHP a jeho začleněním do HTML stránky.

Data v počítači. Informační data. Logické hodnoty. Znakové hodnoty

Transkript:

CRT = knihovna prostředků pro lepší práci s textovou obrazovkou, klávesnicí a generátorem zvuků Dosud obrazovka = textový soubor, sekvenční zápis po řádcích. Při použití CRT možnost adresace na obrazovce, barvy, atd. Použití v programu: uses CRT; bezprostředně za hlavičkou programu Adresace na obrazovce: (X, Y) X je sloupec, číslování od 1 do 80 zleva doprava Y je řádek, číslování od 1 do 25/50 shora dolů Pavel Töpfer, 2016 Programování 1-12 1

Konstanty barev: Black = 0 DarkGray = 8 Blue = 1 LightBlue = 9 Green = 2 LightGreen = 10 Cyan = 3 LightCyan = 11 Red = 4 LightRed = 12 Magenta = 5 LightMagenta = 13 Brown = 6 Yellow = 14 LightGray = 7 White = 15 Blink = 128 Pavel Töpfer, 2016 Programování 1-12 2

Proměnné: CheckBreak: boolean - citlivost na Ctrl+Break (přerušení výpočtu) default hodnota true CheckEOF: boolean - citlivost na Ctrl+Z (příznak EOF input) default hodnota false (!) TextAttr: byte - aktuální atributy zobrazování textu bity 76543210 - blikání pozadí popředí (znak) Procedury a funkce: TextColor(Color: 0..15) - barva písma TextBackground(Color: 0..7) - barva pozadí nastavují hodnotu TextAttr, lze i přímo dosadit např. TextAttr := Yellow + Blue*16 + Blink; GotoXY(X, Y) - umístění kursoru na pozici (X, Y) WhereX - funkce vrací X-ovou souřadnici kursoru WhereY - funkce vrací Y-ovou souřadnici kursoru Pavel Töpfer, 2016 Programování 1-12 3

ClrScr - smaže obrazovku (barvou pozadí), kursor na (1,1) ClrEol - smaže od kursoru do konce řádku DelLine - vynechá řádek s kursorem InsLine - vloží prázdný řádek TextMode(mode) TextMode(C80) TextMode(C80+Font8x8) 25 řádků 50 řádků Window(X1, Y1, X2, Y2) - definice okna = výřezu obrazovky, s nímž se bude dále pracovat - (X1, Y1) levý horní roh, (X2, Y2) pravý dolní roh - dále adresace relativně v okně levý horní roh okna je (1,1) - default celá obrazovka (1, 1, 80, 25) Pavel Töpfer, 2016 Programování 1-12 4

Klávesnice KeyPressed boolean - byla stisknuta nějaká klávesa? - znak je ponechán v klávesnicovém bufferu pro následné čtení - nereaguje na samotné přeřaďovače (Shift, Alt, Ctrl, CapsLock, NumLock) ReadKey char - čte jeden znak z klávesnice (nečeká na Enter, bez echa na obrazovku) - KeyPressed = true čte okamžitě, false čeká na znak - reaguje i na speciální klávesy (na rozdíl od read) Speciální klávesy na PC (ne ASCII) rozšířené kódy: ReadKey čte nejprve znak #0 a následně kód speciální klávesy Pavel Töpfer, 2016 Programování 1-12 5

Generátor zvuků Sound(Hz: word) NoSound - spuštění zvuku s frekvencí Hz - vypnutí generátoru zvuku Měření času Delay(ms: word) - pozdržení výpočtu o ms milisekund (přibližně) - použití pro zvuky (sekvence Sound Delay NoSound), pro chvilkové zobrazení informace apod. Pavel Töpfer, 2016 Programování 1-12 6

Pseudonáhodná čísla = algoritmicky generovaná náhrada za náhodná čísla Použití: - náhodnost při rozhodování např. ve hrách (výběr z více možných stejně dobrých tahů v dané pozici, házecí kostka) - generování rozsáhlých testovacích dat - výpočetní metody typu Monte Carlo Generátor pseudonáhodných čísel - algoritmus, který na základě předchozí hodnoty určí další náhodné číslo v posloupnosti - existuje teorie, jak je vytvářet, my využijeme standardní generátor - při volání generátoru lze zvolit, zda chceme číslo celé či reálné a z jakého rozmezí hodnot Pavel Töpfer, 2016 Programování 1-12 7

Generátor pseudonáhodných čísel v TP RandSeed standardní proměnná typu longint = semínko generátoru, výchozí hodnota pro algoritmus Random funkce volání generátoru - spočítá výslednou hodnotu na základě RandSeed, zároveň nadefinuje novu hodnotu RandSeed pro další volání. Dvě možnosti volání: - volání bez parametru hodnota typu real z intervalu <0,1) - volání Random(N) hodnota typu word z intervalu <0,N-1> Randomize procedura pro inicializaci RandSeed na základě aktuální hodnoty systémového času Pavel Töpfer, 2016 Programování 1-12 8

Inicializace generátoru - provádí se jen jednou na začátku programu. Dvě možnosti: 1. Randomize; při každém běhu programu jiná série náhodných čísel (většinou požadovaný cílový stav) 2. RandSeed := VýchozíHodnota; pokaždé stejná série náhodných čísel použití: dočasně při ladění programu, trvale při šifrování dat apod. Pseudonáhodná čísla z jiného rozmezí - vynásobením změnit rozsah u typu real, přičtením posunout rozsah Příklady: Random(6) + 1 běžná házecí kostka Random * 20-10 reálná čísla z rozmezí od -10 do 10 Pavel Töpfer, 2016 Programování 1-12 9

Příkaz CASE - výběr z více variant podle hodnoty výrazu case Výraz of Hodnota1: Příkaz1; Hodnota2: Příkaz2; HodnotaN: PříkazN end Výraz uvedený za case může být libovolného celočíselného typu, hodnoty musí být konstanty téhož typu. Sémantika: if Výraz = Hodnota1 then Příkaz1 else if Výraz = Hodnota2 then Příkaz2 else if Výraz = HodnotaN then PříkazN Pokud se tedy Výraz nerovná žádné z uvedených hodnot, nevykoná se žádný z příkazů. Pavel Töpfer, 2016 Programování 1-12 10

Rozšíření příkazu case Možnost doplnit implicitní variantu pokud se Výraz nerovná žádné z uvedených hodnot, vykoná se Příkaz z větve else. case Výraz of Hodnota1: Příkaz1; Hodnota2: Příkaz2; HodnotaN: PříkazN; else Příkaz end Přípustné tvary hodnot uváděných u variant: - konstanta 20: - několik konstant oddělených čárkami 20, 22, 24: - interval hodnot 30..40: - kombinace výše uvedených možností 1, 3..7, 9..15, 40: Hodnoty u variant nemusí být navzájem disjunktní vykoná se příkaz z první větve, u které dojde ke shodě hodnoty s výrazem. Pavel Töpfer, 2016 Programování 1-12 11

Příklad: case N of {N je proměnná typu integer} 1: writeln(n); {jedna akce} 2: begin inc(a); dec(b) end; {více akcí složený příkaz} 0..9: {jiné jednociferné číslo nedělej nic} else writeln( CHYBA ) {víceciferné číslo je chyba} end. Příklad praktického použití: Program potřebuje reagovat podle toho, jaká klávesa byla stisknuta na klávesnici rozhoduje se podle hodnoty proměnné obsahující hodnotu stisknuté klávesy (každá klávesa má nějaký celočíselný kód), je mnoho možností, pro některé klávesy bude stejná reakce. case StisknutaKlavesa of SipkaNahoru: SipkaDolu: SipkaVlevo, SipkaVpravo: Cifra0..Cifra9: else end akce pro šipku nahoru; akce pro šipku dolů; akce pro jinou šipku akce pro dekadickou číslici; akce pro všechny ostatní klávesy Pavel Töpfer, 2016 Programování 1-12 12

Příkaz skoku = předání řízení na určité místo v programu Syntaxe: goto Návěští - Návěští = celé číslo bez znaménka, v TP může být i identifikátor - Návěští se musí deklarovat label Návěští; - cíl skoku (příkaz) v programu se označí Návěští: Ve strukturovaném programování se užívají strukturované příkazy a příkaz skoku prakticky nepotřebujeme. Může být zdrojem mnoha nebezpečí (např. skok dovnitř cyklu) používat skok jen v mimořádných případech! Rozumné strukturované skoky pomocí standardních procedur: break - předčasné ukončení cyklu exit - předčasné ukončení procedury nebo funkce (příp. programu) halt - předčasné ukončení programu Pavel Töpfer, 2016 Programování 1-12 13

Použití příkazu goto výskok z více vnořených cyklů (break ukončuje pouze jeden cyklus) Příklad: vyhledávání dané hodnoty X v matici čísel A label Konec; const N = 10; M = 15; var X: integer; {hledaná hodnota} A: array[1..n, 1..M] of integer; I, J: integer; for I:=1 to N do for J:=1 to M do if A[I,J] = X then begin {zpracování výsledku} goto Konec end; Konec: {pokračování výpočtu} Pavel Töpfer, 2016 Programování 1-12 14

Jiné řešení téhož úkolu bez použití příkazu goto, pomocí break: const N = 10; M = 15; var X: integer; {hledaná hodnota} A: array[1..n, 1..M] of integer; I, J: integer; Konec: boolean; Konec := false; for I:=1 to N do begin for J:=1 to M do if A[I,J] = X then begin {zpracování výsledku} Konec := true; break end; if Konec then break end; {pokračování výpočtu} Pavel Töpfer, 2016 Programování 1-12 15

Záznam - strukturovaný datový typ - co patří logicky k sobě, ať je u sebe i deklarováno - jednotlivé položky záznamu mohou být různých typů (libovolných, třeba i strukturovaných) - nedají se indexovat jako v poli, mají svá vlastní jména (identifikátory) - jména jednoznačná v rámci záznamu, ale ne vůči okolnímu světu type JménoTypu = record Položka1: TypPoložky1; Položka2: TypPoložky2; PoložkaN: TypPoložkyN end; - popis položek se řídí stejnými syntaktickými pravidly jako deklarace proměnných Pavel Töpfer, 2016 Programování 1-12 16

type Datum = record Den, Mesic, Rok: word end; var Dnes, Zitra: Datum; type Zamestnanec = record Jmeno: string[20]; Plat: word; Narozen: Datum; Deti: array[1..10] of string[20]; end; var Alois: Zamestnanec; Z: array[1..1000] of Zamestnanec; Pavel Töpfer, 2016 Programování 1-12 17

Operace S proměnnou typu záznam lze jako s celkem provádět jedinou operaci, a to dosazení mezi dvěma proměnnými téhož typu: Dnes:=Zitra; Z[3]:=Alois; Přístup ke složkám pomocí tečkové notace: JménoZáznamu.JménoPoložky - se složkou záznamu se pak manipuluje stejně jako s každou jinou proměnnou příslušného typu. Dnes.Den:=31; Dnes.Mesic:=12; read(alois.jmeno); Suma:=Suma + Alois.Plat * 2; Z[3].Narozen.Rok:=1945; Z[3].Deti[1]:= Pepicek ; Pavel Töpfer, 2016 Programování 1-12 18

Příklad: reprezentace polynomu a n x n + a n-1 x n-1 + a n-2 x n-2 + a 1 x + a 0 Dvě varianty: 1. ukládáme všechny členy polynomu včetně nulových, exponent slouží jako index v poli ( snadná manipulace) 2. ukládáme pouze nenulové členy, exponent se ukládá do pole společně s koeficientem (vhodné pro řídké polynomy) type Polynom1 = record Stupen: word; {stupeň polynomu} Koeficient: array[0..maxstupen] of real end; type Polynom2 = record Pocet: word; {počet nenulových členů} Clen: array[0..maxpocet] of record Koef: real; Exp: word end; end; Pavel Töpfer, 2016 Programování 1-12 19

Inicializovaná proměnná typu záznam const LetosniPrvniMaj: Datum = (Den: 1; Mesic: 5; Rok: 2004); type Complex = record X, Y: real end; const Z: Complex = (X: 2.0; Y: 3.5); Pavel Töpfer, 2016 Programování 1-12 20

Příkaz WITH - použití: pro snadnější přístup k více položkám téhož záznamu - syntaxe: with JménoZáznamu do Příkaz - sémantika: v rámci Příkazu se před každý identifikátor, kde to má syntaktický smysl, jakoby přidá tečkou oddělené JménoZáznamu with Z[1] do read(jmeno, Plat, Narozen.Den, Narozen.Mesic, Narozen.Rok); with Alois do begin Jmeno:= Alois Jirasek ; Plat:= 10000; Deti[1]:= Kaspar ; Deti[2]:= Melichar ; Deti[3]:= Baltazar end; Pavel Töpfer, 2016 Programování 1-12 21