Úvod Opakování Činnost počítače, algoritmy
Počítač matematický stroj, který zpracovává programy a data pracuje na určitém fyzikálním principu, např.: mechanické počítače Vinci, Pascal elektronické počítače období 2. světové války počítač zpracovává: programy systémové a aplikační data původně jen numerická matematické úlohy numerickéřešení diferenciálních rovnic (Difference Engine) výpočet dráhy střely pro vojenské účely texty, obrázky, zvuk,
Počítač počítač zpracovává data, tj. transformuje vstupní data na výstupní vstupní data Počítač výstupní data
Počítač počítač je stroj data je potřebné reprezentovat (zobrazovat) pomocí určitých fyzikálních veličin příklady reprezentace: mechanické: natočení kolečka (úhel natočení) elektrické: napětí, proud
Zobrazení dat dva základní principy zobrazení dat: 1. spojité zobrazení (analogové) fyzikální veličina může nabývat libovolných hodnot, zpravidla z určitého intervalu 2. diskrétní zobrazení (číslicové) fyzikální veličina může nabývat diskrétních (izolovaných, oddělených) hodnot, zpravidla z určitého rozsahu
Příklady zobrazení dat Jaké je toto zobrazení? Spojité (analogové)
A toto? zakázané pásmo Diskrétní (číslicové)
říkáme také, že u číslicového zobrazení je hodnota zobrazena určitým stavem; při změně hodnoty dochází ke skokové změně stavu změna musí být dostatečně rychlá výhody číslicového zobrazení odolnost proti rušení odolnost změnám parametrů systému
Analogové a digitální zobrazeníčasu
Zajímavost: elektromechanický číslicový počítač: programátor v automatické pračce typový váleček (typové kolečko) se zářezy, které se otáčí a spíná/rozpíná kontakty mechanický číslicový záznam zvuku hrací strojky 0 a 1 nezatlučené/zatlučené skobičky ve válci digitální záznam zvuku 19. století ( CD 19. stol.)
v číslicových počítačích se data zobrazují pomocí dvojkové soustavy, tj. čísel 0,1 číslice 0,1 se také označují jako logické hodnoty (nepravda, pravda, no, yes, false, true), protože se jimi v matematické logice ohodnocuje pravdivost výroků Proč dvojková soustava? první číslicový počítač byl reléový, které dokáže rozlišit 2 stavy (rozepnuto, sepnuto 0,1)
matematický aparát pro práci s 0 a 1 existuje již od 19. století 1848: anglický matematik George Bool: Booleova algebra
informace o velikosti 0 nebo 1 se nazývá 1 bit bit = binary digit (dvojková číslice) ale 1 bit (1b) není jednotkou informace, je to shannon, který je pro dvoustavovou logiku totožný s bitem
Zobrazení dat v počítači - jednotky 8 bitů = 1 Byte (bajt), 1B, správněčesky slabika 16 bitů = 1 Word (slovo) 32 bitů = 1 DoubleWord (dvojslovo)
Násobky: 1 KB = 1 KiloByte 1 KB = 1024 B 1 MB = 1 MegaByte 1 MB = 1024 KB Proč 1KB = 1024 B? 2 10 = 1024 (nejblíže hodnotě 1000)
Historie 17. 20. století mechanické počítání Pascal sčítání/odčítání Leibnitz sčítání/odčítání/násobení Jacquard řízení tkalcovských strojů pomocí děrných štítků Babbage koncepce počítače řízeného programem Hollerith 1890 sčítání lidu v USA děrnoštítkový stroj
Historie 2. světová válka: analogové počítače 1944 Mark 1 elektronkový, návrh: Howard Aiken 1946 MANIAC elektronkový, návrh: John von Neumann 1952 EDVAC elektronkový, dokončen též podle projektu J.von Neumanna v Bellových laboratořích jeho koncepce se mimo jiné používá dodnes
Historie Československo 1952 M1 reléový, VÚMS, Doc. Svoboda 1957 SAPO SAPO - SAmočinný POčítač reléový a elektronkový, VÚMS, Doc. Svoboda VÚMS Výzkumný ústav matematických strojů
Historie mechanický počítač Pascaline (1642) Blaise Pascal sčítání a odčítání zdroj: http://www.cs.uakron.edu/~margush/465/01_intro.html
Historie Leibnitzův kalkulátor (1673-1694) Gottfried Leibniz násobení a dělení
Historie Difference Engine (1822) Charles Babbage výpočet tabulek logaritmů
Historie Analytical Engine (1834) Charles Babbage výpočet hodnot výrazů řízen programem na děrném štítku
Analytical Engine Historie
Historie Z1 (1936) Konrad Zuse mechanický počítač, dvojková soustava, 22 bitů program na papírové pásce
Mark1 (1944) Historie Howard Aiken elektromechanický počítač program na papírové pásce, data na děrných štítkách
Historie 1. generace elektronky (1945 1955) ENIAC (1945-1946) John Mauchley a J. Presper Eckert Electronic Numerical Integrator and Calculator programován přepínači a propojkami
ENIAC Historie
EDVAC (1952) Historie J. von Neumann, John Mauchley a J. Presper Eckert Electronic Discrete Variable Automatic Computer
EDVAC Historie
SAPO V roce 1957 byl dokončen vývoj 1. Československého samočinného počítače nazvaného SAPO ve Výzkumném ústavu matematických strojů. Byl zkonstruován ze 7000 relé a 400 elektronek. Byl vybaven magnetickou bubnovou pamětí o kapacitě 1024 slov a slovo mělo délku 32 bitů (4 byty). Pracoval s pohyblivou řádovou čárkou rychlostí 3 operace za vteřinu. Instrukce byly pětiadresové. Samočinně opravoval nahodilé chyby ve výsledcích operací bez přerušení výpočtů. Aritmetická jednotka (ALU) byla 3x zálohována a každá jednotka prováděla stejné aritmetické operace nezávisle na druhých jednotkách ALU. Dále obsahoval tzv. prověřovací (diagnostické) obvody v řadiči, které kontrolovaly svou vlastníčinnost počítače.
Historie 2. generace tranzistory (1955 1965) DEC PDP-1 (1960) Programmed Data Processor-1 zpracovával 18 bitová slova první textový editor další počítače: IBM 7090, 1401, CDC 6600 (Seymour Cray)
Historie 3. generace integrované obvody (1965 1980) IBM 360 (1965) 32 bitová architektura max. 16 MB naše ekvivalenty EC 1024/1027
Historie DEC PDP-11 (1970) 16 bitová architektura na PDP-11 první implementace UNIXu a překladače C
Historie DEC PDP-11 na snímku Dennis Ritchie a Kenneth Thompson, tvůrci UNIXu
DEC VAX (1976) 32-bitový mini počítač operační systém VMS Historie jeden z nejspolehlivějších OS
Historie 4. generace obvody VLSI (1980 - ) éra domácích a osobních (stolních) počítačů Altair, Sinclair ZX Spectrum, Atari, Commodore, Apple, IBM PC,... pracovní stanice (WorkStation) pro profesionální práci HP, SunSparc, DEC Alpha
Historie Altair založen na 8-bitovém procesoru Intel 8080A
Historie Atari 800 Commodore PET Sinclair ZX Spectrum
Historie IBM PC - 1981 Apple Macintosh
Historie Sun Sparc 2 pracovní stanice s operačním systémem Solaris (UNIX)
Odbočka Analogové počítače analogový počítač pro řešení diferenciální rovnice y + 3y = f(x) upravíme y = f(x) 3y y = ( f ( x) 3y) dx
funkce f(x) bude reprezentována průběhem el. napětí analogový počítač sestavíme přesně podle rovnice z prvků: sčítací zesilovač invertor (měnič polarity napětí) zesilovač signálu 3x integrátor prvky jsou sestaveny z rezistorů, kondenzátorů a operačních zesilovačů budete se učit v elektronice
f(x) zesilovač 3x invertor sčítací zesilovač integrátor y výstupní napětí y v závislosti na vstupním napětí f(x) je řešením rovnice analogové počítače se programovaly zapojením
Číslicové počítače 1946 americký matematik maďarského původu John von Neumann navrhl architekturu číslicového počítače, která se používá dodnes
Von Neumannova architektura
Číslicový počítač se skládá z bloků: Ř řadič (controller) načítá a zpracovává instrukce, řídí ostatní bloky AJ aritmeticko-logická jednotka (arithmetical and logical unit) provádí aritmetické a logické operace HP hlavní paměť (main memory) slouží k uložení programu a dat (operační paměť)
VST vstupní jednotka (input device) - zajišťuje vstup dat VÝST výstupní jednotka (output device) - zajišťuje výstup dat vstupní a výstupní jednotky = periferní zařízení řadič + AJ = procesor procesorů může být i více - multiprocesorový (paralelní) počítač
Základní znaky architektury: 1. Architektura je nezávislá na zpracovávané úloze, činnost je řízena obsahem paměti - programem (tokem instrukcí). 2. Paměť je společná pro program i zpracovávaná data; data ani program nejsou nijak odděleny ani explicitně označeny. 3. Paměť je rozdělena na buňky (lineární organizace); k obsahu buňky se přistupuje pomocí jejího pořadového čísla (adresy). 4. Pro reprezentaci instrukcí, adres, dat i řízení se používají dvojkové signály (dvojková soustava)
5. Instrukce se vykonávají sekvenčně v pořadí, jak jsou zapsány v paměti (zpravidla od nižších k vyšším adresám); pořadí lze změnit speciální instrukcí skoku. 6. V instrukci není zpravidla uveden operand (co se zpracovává), ale jeho adresa.
Jak je to u PC? vnitřní a vnější paměti mají různou přístupovou dobu, rovněž různé periférie hierarhický systém sběrnic obvody periférií a obvody styku s perifériemi (i ty z hlediska Neumannovy architektury patří do periférií) integrovány do čipové sady stavebnicový systém: základní deska, procesor, paměti, zásuvné karty
Procesor grafická karta AGP lokální (procesorová) sběrnice Severní most Operační paměť USB disky - IDE Jižní most sběrnice PCI (PCI Expres) klávesnice paralelní rozhraní COM zvuk
Základní cyklus počítače vykonává jej procesor (konkrétně řadič) jde vlastně o zpracování programu
přerušení asynchronní událost, např. stisk klávesy
Programové vybavení BIOS (Basic Input Output System základní funkce ovládání hardware (vstupu a výstupu), např.: čtení/zápis bloku dat na disk ovládání videokarty operační systém základní programové vybavení (lépe: správce prostředků) poskytuje uživatelům rozhraní pro ovládání počítače (grafické GUI, příkazový řádek)
zpřístupňuje programům a uživatelům přístup k sw a hw prostředkům např. přístup k souborům aplikační programové vybavení textové editory, tabulkové kalkulátory
Programování ještě jednou činnost číslicového počítače je řízena programem program je posloupnost elementárních příkazů (instrukcí), zakódovaných číselně ve dvojkové soustavě, je uložen v hlavní paměti instrukce vykonává procesor množina instrukcí určitého procesoru se nazývá instrukční sada, určuje ji konstruktér procesoru (typy instrukcí a jejich číselné zakódování)
Instrukce obsahuje: 1. operační znak číselné zakódování operace, která se má vykonat (sečti, vynásob) 2. operandy s čím se operace provádí přímý - konstanta nepřímý - adresa buňky v paměti, kde se operand nachází
Příklady instrukcí aritmetické sečti dvěčísla v paměťových buňkách na adresách x a y, vynásob dvěčísla porovnej dvěčísla v paměťových buňkách na adresách x a y skoky nepodmíněné skoč na adresu x (tj. začni provádět instrukce od adresy x) podmíněné skoč na adresu x, je-li výsledek předchozího porovnání shodný,
přesunu dat přesuň data z paměťové buňky s adresou x na periferní zařízení z adresou y přesuň data z paměťové buňky s adresou x do buňky uvnitř procesoru a další uvnitř procesoru jsou zvláštní paměťové buňky pro ukládání mezivýsledků, tzv. registry; důvod: rychlý přístup k datům
program je tedy posloupnost čísel (zakódovaných instrukcí) takový program se nazývá program ve strojovém kódu v počátcích programování (50. léta) tvořili programátoři program tak, že psali program přímo jako posloupnost čísel ve str. kódu existovali superprogramátoři, kteří znali zpaměti instrukční kód procesoru (v číselném zakódování) a dokázali psát programy ve strojovém kódu zpaměti pan S. Cray dokázal takto napsat celý operační systém zpaměti a při výpadku jej naťukat do počítače
pro běžného programátora je toto velmi nepohodlné a pomalé proto byl vymyšlen assembler, tj. mnemonický zápis instrukcí v textové podobě (zkratky), např. ADD sčítání, CMP (compare porovnání), JZ (jump zero) podmíněný skok program se zapisoval jako text posloupnost instrukcí zapsaných těmito zkratkami
text se předal jako vstup jinému programu, tzv. překladači, který z textového zápisu vytvořil program ve strojovém kódu (provádí se tzv. překlad) příklad: ADD AX, BX // přičti k registru AX obsah BX CMP AX,0 // porovnej AX s nulou JZ chyba // skoč na adresu chyba, je-li výsledek porovnání takový, že v AX je 0
co to přineslo: částečné usnadnění tvorby programů ale: programátor musí přesto znát instrukce daného procesoru, pro který program píše; při přenosu na jiný počítač je třeba program kompletně přepsat další pokrok: od 60. let: vyšší programovací jazyky (Fortran, Cobol, Pascal, Basic, C, Java) zápis programů je podobný přirozenému jazyku odvozenému z angličtiny (strukturovaný jazyk) a matematickému zápisu
opět se textový zápis programu překládá do strojového kódu při přenosu na jiný počítač není potřebné provádět tolik změn, stačí program přeložit překladačem na daném počítači (přenositelnost programů portabilita) Perlička: Superprogramátoři typu S. Craye považovali programátory ve vyšších programovacích jazycích za pojídače koláčů my budeme pojídači koláčů
Algoritmy
Algoritmus algoritmus postup (předpis) pro řešení nějakého problému, formálně (strukturovaně) zapsaný jde o posloupnost nějakých elementárních kroků všichni jej znáte: postup pro výpočet kořenů kvadratické rovnic kuchařka: recepty ten, kdo vykonává (provádí) algoritmus, je procesor, určuje, jaké budou el. kroky
příklad: recept na bábovku procesorem je kuchař, elementární kroky jsou instrukce typu např. odvaž 0,5 kg hladké mouky algoritmus pro počítač pro výpočet kořenů kvadratické rovnice procesorem je procesor počítače, elementární kroky jsou instrukce daného procesoru napsat program znamená vymyslet algoritmus (tj. postup, jak problém řešit) a zapsat jej v nějakém programovacím jazyce
Příklad: Algoritmus pro výpočet kořenů kv. rovnice 1. je-li a=0, krok 8 2. D = b 2-4ac 3. je-li D < 0 krok 6 4. Rovnice má dva reálné kořeny 5. Konec 6. Rovnice má dva komplexní kořeny 7. Konec 8. atd.
Vlastnosti algoritmů elementární skládá se z konečného počtu jednoduchých kroků deterministický po každém kroku lze rozhodnout, zda proces skončil konečný počet kroků algoritmu je konečný hromadný lze jej použít pro řešení více podobných úloh
Základní komponenty algoritmu: algoritmus tvoříme jen ze tří komponent : 1. posloupnost (sekvence) příkazů kroky v daném pořadí 2. větvení (podmínka) výběr dalších prováděných kroků závisí na splnění/nesplnění nějaké podmínky 3. cyklus opakované provádění kroků s pevným počtem opakování s podmínkou (na konci/na počátku) - provádění kroků se opakuje, dokud je/není splněna podmínka
Zápis algoritmu vývojové diagramy (grafický zápis) jednotlivé kroky jsou vyjádřeny graf. symboly dle typu operace, posloupnost vykonávání kroků je vyjádřena orientovanou hranou de facto orientovaný graf
začátek/konec ZAČÁTEK akce (příkaz) s = a * b podmínka a < b ano ne
Existují i speciální značky pro cyklus s pevným počtem opakování, pro vstup/ výstup dat (výpis textů, výsledků), práci se soubory vstup/výstup Tiskni: Obvod kruhu je r
cyklus s pevným počtem opakování pomocí značky příprava i = 1 až 10 Tiskni: 3*i Konec i
cyklus s podmínkou na konci/na začátku budeme zapisovat pomocí podmínky a příkazu i = 1 i<=10 ano zvyš i o 1 ne
Příklad: algoritmus pro výpočet obvodu kruhu ZAČÁTEK Tisk: Zadej poloměr Čti: r ne r < 0 o = 2 * 3.14 * r ano Tisk: Chyba, poloměr je záporný Tisk: Obvod je o KONEC
strukturovaný přirozený jazyk 1. Tiskni: Zadej poloměr 2. Cti: r 3. jestliže je r < 0, krok 7 4. o = 2*3,14*r 5. Tiskni: Obvod je o 6. Konec 7. Tisk: Chyba: Polomer je záporný 8. Konec
pseudojazyk využíváme konstruktů nějakého programovacího jazyka, ale příkazy píšeme česky, často volnou formou Tiskni: Zadej poloměr Cti: r if r < 0 then Tiskni: Chyba: Poloměr je záporný else begin o = 2*3,14*r Tiskni: Obvod je o end
Konečně (motivace): Jak bude vypadat algoritmus zapsaný v jazyce C? printf("zadej polomer: "); scanf("%f",&r); if (r<0) printf("chyba: Polomer je zaporny"); else { o = 2*3.14*r; printf("obvod je %f",o); }
Úkol Napište algoritmus vaření čaje. Napište algoritmus pro výpočet kořenu lineární rovnice ax + b = c Domácí úkol: Dokončete algoritmus pro výpočet kořenů kvadratické rovnice (i s podmínkou, je-li a=0)