DISCORD https discord ggXE 3 Z 5 sg

  • Slides: 38
Download presentation
DISCORD https: //discord. gg/XE 3 Z 5 sg

DISCORD https: //discord. gg/XE 3 Z 5 sg

Bootcamp den 2. otázky na https: //sli. do/BC 20

Bootcamp den 2. otázky na https: //sli. do/BC 20

Počítač je stroj • umí mechanicky vykonávat operace • jednoúčelové počítače • například kalkulačka

Počítač je stroj • umí mechanicky vykonávat operace • jednoúčelové počítače • například kalkulačka • programovatelné počítače • umožňují uložit a spouštět instrukce 3 / 35 Jacquardův stroj (foto: Edal Anton Lefterov - wiki)

Programovatelný počítač • posloupnost instrukcí uložena v počítači • předem daná množina instrukcí •

Programovatelný počítač • posloupnost instrukcí uložena v počítači • předem daná množina instrukcí • aritmeticko-logické • jednoduché testy • operace s pamětí • instrukce se spouští v pořadí • možnost posouvat se v seznamu instrukcí • zastavit, když program dojde na konec 4 / 35

Základní struktura počítače instrukce Řadič řídí zpracování instrukcí Vstup 5 / 35 Paměť data

Základní struktura počítače instrukce Řadič řídí zpracování instrukcí Vstup 5 / 35 Paměť data Aritmeticko-logická jednotka vykonává instrukce Výstup

Přepis algoritmu do počítače • zápis pomocí programovacího jazyka • více či méně dobře

Přepis algoritmu do počítače • zápis pomocí programovacího jazyka • více či méně dobře čitelného pro člověka • překlad jazyka na instrukce počítače int na. Druhou(int cislo) { return cislo * cislo; } 6 / 35 na. Druhou(int): imul edi, edi mov eax, edi ret 111110101111111000100111 111000011

Podobnost s přirozeným jazykem • Jazyk se skládá ze základních stavebních kamenů (primitiv) •

Podobnost s přirozeným jazykem • Jazyk se skládá ze základních stavebních kamenů (primitiv) • podstatná jména, slovesa. . . • Programovací jazyk obsahuje také primitiva • čísla, znaky (řetězce), pravdivostní hodnoty, operátory. . . • Pro vyjádření myšlenky je nutné poskládat primitiva k sobě • věty, výrazy 7 / 35

Podobnost s přirozeným jazykem • syntax(e) • popisuje stavbu věty/výrazu či složitější celky •

Podobnost s přirozeným jazykem • syntax(e) • popisuje stavbu věty/výrazu či složitější celky • čeština • „meloun chuť já“ – nesprávná syntax • „já máš hlad“ – správná syntax • programovací jazyk • 5 “a“ – nesprávná syntaxe • 5 * “a“ – správná syntaxe 8 / 35

Podobnost s přirozeným jazykem • sémantika • rozhoduje, zda syntakticky správný výraz má význam

Podobnost s přirozeným jazykem • sémantika • rozhoduje, zda syntakticky správný výraz má význam • čeština • „já máš hlad“ – správná syntax, ale věta smysl nedává • programovací jazyk • 5 * “a“ – správná syntaxe, ale sémantická chyba • 5 * 3 – správná syntaxe i sémantika 9 / 35

Podobnost s přirozeným jazykem • logika • význam syntakticky správného výrazu bez sémantických chyb

Podobnost s přirozeným jazykem • logika • význam syntakticky správného výrazu bez sémantických chyb • čeština – může mít více významů • „Ženu holí stroj. “ • programovací jazyk – pouze jeden význam • ale ne nutně takový, který zamýšlel programátor 10 / 35

Co se může pokazit • syntaktické chyby • snadno odhalitelné při překladu • statické

Co se může pokazit • syntaktické chyby • snadno odhalitelné při překladu • statické sémantické chyby • některé jazyky kontrolují při překladu • mohou způsobovat nepředvídatelné chování • jiný význam, než byl zamýšlen • pád programu • nekonečný běh programu • program vrátí nesprávný výsledek 11 / 35

Programovací jazyk Pascal • procedurální jazyk • strukturovaný, umožňuje vytvářet a volat podprogramy •

Programovací jazyk Pascal • procedurální jazyk • strukturovaný, umožňuje vytvářet a volat podprogramy • kompilovaný jazyk • překladač - převede zdrojový kód do instrukcí procesoru • silně staticky typovaný • zná všechny použité datové typy • Není case sensitive • nerozlišuje malá a velká písmena WRITE je stejné jako write 12 / 35

Základní struktura programu • jméno programu • přidání knihoven • deklarace typů • deklarace

Základní struktura programu • jméno programu • přidání knihoven • deklarace typů • deklarace konstant • deklarace globálních proměnných • deklarace funkcí a procedur • hlavní program 13 / 35 program { jméno }; uses { knihovny, oddělené čárkou }; type { deklarace typu } const { deklarace konstant } var { deklarace globálních proměnných } procedure/function { deklarace procedury/funkce }; var { deklarace lokálních proměnných } begin { blok příkazů } end; begin { blok příkazů havního programu } end.

Základní struktura programu • blok příkazů tvoří tělo programu • skládá se z •

Základní struktura programu • blok příkazů tvoří tělo programu • skládá se z • začátku (begin) • příkazů • výrazů begin příkaz; výraz; proměnná : = výraz; begin příkaz; end; • mají nějakou hodnotu, lze je přiřadit do proměnné přiřazovacím příkazem : = • vnořených bloků (begin. . . end) • řídících struktur (podmínky, cykly) • konce (end) • každý blok je vhodné odsadit (2 znaky, tabulátor apod. ) 14 / 35

Základní struktura programu • program může být doplněn komentáři • části zdrojového kódu, které

Základní struktura programu • program může být doplněn komentáři • části zdrojového kódu, které překladač ignoruje • slouží jako dokumentace • umožňují vyřadit nepoužívanou část kódu kód; // jednořádkový komentář až do konce řádky { blokový komentář od otevírací k uzavírací, může být i na více řádek } 15 / 35

Náš první program Ahoj. Svete; uses Sys. Utils; var text : string; begin text

Náš první program Ahoj. Svete; uses Sys. Utils; var text : string; begin text : = ‘Ahoj svete’; Write(text); end. 16 / 35 // // hlavička programu knihovny proměnné začátek implementace // každý příkaz ukončený ; // konec implementace

Data • program manipuluje s daty • data mají přesně daný typ • typ

Data • program manipuluje s daty • data mají přesně daný typ • typ definuje operace, které jde nad daty provádět • typy jsou • skalární (jednoduché, které nelze dále dělit) • neskalární (mají vnitřní strukturu) • mohou být zapsána buď přímo v kódu nebo získána za běhu programu 17 / 35

Skalární typy • integer • reprezentuje celé číslo (např. 42) • real • reprezentuje

Skalární typy • integer • reprezentuje celé číslo (např. 42) • real • reprezentuje desetinné číslo (např. 3. 14) • desetinná čísla se často označují jako floating point numbers (zkráceně float) • boolean • reprezentuje pravdivostní hodnotu (TRUE/FALSE – pravda/nepravda) • char • reprezentuje jeden znak, zapisuje se v apostrofech (např. ‘a’) 18 / 35

Aritmetické operátory • pro celá a desetinná čísla • • • i i i

Aritmetické operátory • pro celá a desetinná čísla • • • i i i + j: součet – j: rozdíl * j: násobek / j: podíl - vždy desetinné číslo ** j: mocnina • pouze pro celá čísla • i div j: celočíselný podíl • i mod j: zbytek po celočíselném dělení 19 / 35

Matematické funkce • některé jsou přímo součástí Pascalu • sqrt(), sin(), round(), trunc(). .

Matematické funkce • některé jsou přímo součástí Pascalu • sqrt(), sin(), round(), trunc(). . . • jiné v knihovnách uses Math; • k dispozici mnoho funkcí 20 / 35

Porovnávací operátory • pro celá a desetinná čísla i a j, výsledkem je logická

Porovnávací operátory • pro celá a desetinná čísla i a j, výsledkem je logická hodnota (bool) • i > j • i >= j • i <= j • i = j: test na rovnost • pozor na desetinná čísla a zaokrouhlování: 0. 1 + 0. 2 = 0. 3 • i <> j: test na nerovnost 21 / 35

Logické operátory • pro booleovské hodnoty • not i: negace – True, pokud je

Logické operátory • pro booleovské hodnoty • not i: negace – True, pokud je i False, pokud je i True • i and j: logický součin – True, pokud je i a j True • i or j: logický součet – True, pokud je i nebo j True • výroková logika (střední škola) • not (i and j) = (not i) or (not j) • not i and not j = not (i or j) 22 / 35

Priorita operátorů • priorita (precedence) operátorů, podobná jako v matematice 1. 2. 3. 4.

Priorita operátorů • priorita (precedence) operátorů, podobná jako v matematice 1. 2. 3. 4. not *, /, div, mod, and + , –, or =, <>, <, >, <=, >= • vyhodnocují se z leva doprava • možnost upravit prioritu pomocí závorek • 2*4+1=9 • 2 * (4 + 1) = 10 23 / 35

Řetězce • string • neskalární data • posloupnost písmen, číslic, mezer a dalších speciálních

Řetězce • string • neskalární data • posloupnost písmen, číslic, mezer a dalších speciálních znaků • uzavřená do apostrofů • ‘Ahoj’ • řetězce lze sčítat • var jmeno : string = ‘Jan’; . . . ‘Ahoj’ + ‘ ’ + jmeno • lze přistupovat k jednotlivým znakům pomocí indexu (pořadí) • ‘Ahoj’[2] • jmeno[3] 24 / 35

Převod typů • někdy potřebujeme převádět jeden typ na jiný • převod z řetězce:

Převod typů • někdy potřebujeme převádět jeden typ na jiný • převod z řetězce: • Str. To. Int(’ 42’) • Str. To. Float(‘ 3, 5’) – pozor na národní prostředí • převod na řetězec • Int. To. Str(42) • Float. To. Str(3. 5) • převod mezi čísly • z celého na desetinné automaticky • z desetinného na celé zaokrouhlením (round), či uříznutím desetinné části (trunc) 25 / 35

Výpis na obrazovku • procedura Write() vypíše na obrazovku číslo nebo řetězec • i

Výpis na obrazovku • procedura Write() vypíše na obrazovku číslo nebo řetězec • i více údajů oddělených čárkou Write(3); Write(‘Ahoj’); Write(‘Odpověď na základní otázku života je ‘, 42); • pro výpis s odřádkování procedura Write. Ln() 26 / 35

Čtení z klávesnice • procedura Read. Ln(proměnná)načte z klávesnice hodnotu do proměnné odpovídajícího typu

Čtení z klávesnice • procedura Read. Ln(proměnná)načte z klávesnice hodnotu do proměnné odpovídajícího typu • pokud typ nesouhlasí, program se ukončí s chybou Read. Ln(promenna); 27 / 35

Větvení programu false true • umožňuje řídit tok programu • na základě ne/splění podmínky

Větvení programu false true • umožňuje řídit tok programu • na základě ne/splění podmínky se provede jedna z větví • test (výraz typu boolean) • může být libovolně složitý • blok, který se spustí v případě splnění • true • blok, který se spustí v případě nesplnění • false • alespoň jeden blok musí existovat 28 / 35

Větvení programu program Suda. Licha; var cislo : integer; begin Write(’Zadej celé číslo: ’);

Větvení programu program Suda. Licha; var cislo : integer; begin Write(’Zadej celé číslo: ’); Read. Ln(cislo); if cislo mod 2 = 0 then begin false Write. Ln(’je sudé’) end else begin Write. Ln(’je liché’) Output “je liché“ end; end. 29 / 35 SudáLichá Integer cislo Output “Zadej celé číslo: ” Input cislo % 2 == 0 true Output “je sudé “ End

Větvení programu • obecná struktura if { podmínka } then { příkaz } else

Větvení programu • obecná struktura if { podmínka } then { příkaz } else { příkaz } ; 30 / 35 • příkazem může být i blok if { podmínka } then begin { příkazy } end else begin { příkazy } end;

Neúplné větvení • nemusí existovat oba bloky Read. Ln(cislo); if cislo mod 2 =

Neúplné větvení • nemusí existovat oba bloky Read. Ln(cislo); if cislo mod 2 = 0 then Write(‘je sudé’); false 31 / 35 true Read. Ln(cislo); if cislo mod 2 = 0 then else Write(’je liché’); false true

Větvení programu Read. Ln(cislo); if cislo < 0 then cislo : = -cislo; Write(cislo);

Větvení programu Read. Ln(cislo); if cislo < 0 then cislo : = -cislo; Write(cislo); • co se vypíše pro vstup 3? • -3; 3; 0; nic 32 / 35 https: //sli. do/BC 20

Větvení programu Read. Ln(cislo); if cislo < 0 then cislo = -cislo; Write(cislo); •

Větvení programu Read. Ln(cislo); if cislo < 0 then cislo = -cislo; Write(cislo); • co se vypíše pro vstup 3? • -3; 3; 0; nic • pozor na správné odsazování! • co se vypíše pro vstup -5? 33 / 35

Zřetězené a vnořené podmínky • někdy je třeba testovat více věcí • vnořování bloků

Zřetězené a vnořené podmínky • někdy je třeba testovat více věcí • vnořování bloků do sebe false 34 / 35 true Read. Ln(cislo); if cislo mod 2 = 0 then begin if cislo mod 3 = 0 then Write(‘dělitelné 6’) else Write(‘dělitelné 2’); end else begin if cislo mod 3 = 0 then Write(‘dělitelné 3’) else Write(‘nedělitelné 2 ani 3’); end;

Zřetězené a vnořené podmínky • někdy je třeba testovat více věcí • zřetězení podmínek

Zřetězené a vnořené podmínky • někdy je třeba testovat více věcí • zřetězení podmínek pomocí else if false 35 / 35 true Read. Ln(cislo); if cislo mod 6 = 0 then Write(‘dělitelné 6’); else if cislo mod 3 = 0 then Write(‘dělitelné 3’); else if cislo mod 2 = 0 then Write(‘dělitelné 2’); else Write(‘nedělitelné 2 ani 3’);

Složené podmínky • v některých případech je přehlednější spojit podmínky do jedné Write(’Zadej celé

Složené podmínky • v některých případech je přehlednější spojit podmínky do jedné Write(’Zadej celé číslo 0. . 9’); Read. Ln(cislo); if (0 <= cislo) and (cislo < 10) then Write(’výborně’) else Write(’psanému textu moc nerozumíš, viď? ’); 36 / 35

Složené podmínky • pro jaký vstup se vypíše slovo „výborně“? Read. Ln(a); Read. Ln(b);

Složené podmínky • pro jaký vstup se vypíše slovo „výborně“? Read. Ln(a); Read. Ln(b); if (not(b>3) or (a<0)) and 0 <= a then Write(’výborně’) else Write(’chybně’); 37 / 35 https: //sli. do/BC 20

Co jsme se naučili • jak rámcově pracuje počítač • jak vypadá základ jazyka

Co jsme se naučili • jak rámcově pracuje počítač • jak vypadá základ jazyka Pascal • jakým způsobem řídit tok programu otázky na https: //sli. do/BC 20 38 / 35