Číselné soustavy. Binární číselná soustava



Podobné dokumenty
Číselné soustavy. Binární číselná soustava

Paměti a jejich organizace

V 70. letech výzkumy četnosti výskytu instrukcí ukázaly, že programátoři a

Kubatova Y36SAP procesor - control unit obvodový a mikroprogramový řadič RISC Y36SAP-control unit 1

Další aspekty architektur CISC a RISC Aktuálnost obsahu registru

LED_007.c Strana: 1/5 C:\Michal\AVR\Výukové programy\archiv\ Poslední změna: :01:48

Architektury CISC a RISC, uplatnění v personálních počítačích

PROCESOR. Typy procesorů

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

2 Základní funkce a operátory V této kapitole se seznámíme s použitím funkce printf, probereme základní operátory a uvedeme nejdůležitější funkce.

Matematika v programovacích

Architektura počítače

Implementace numerických metod v jazyce C a Python


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

Jak v Javě primitivní datové typy a jejich reprezentace. BD6B36PJV 002 Fakulta elektrotechnická České vysoké učení technické

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

8. Laboratoř: Aritmetika a řídicí struktury programu

8) Jaké jsou důvody pro použití víceprůchodového překladače Dříve hlavně kvůli úspoře paměti, dnes spíše z důvodu optimalizace

Seznámení s mikropočítačem. Architektura mikropočítače. Instrukce. Paměť. Čítače. Porovnání s AT89C2051

Opakování programování

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

Technické prostředky počítačové techniky

Principy operačních systémů. Lekce 3: Virtualizace paměti

Operační systémy a programování

Strojový kód. Instrukce počítače

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

int => unsigned int => long => unsigned long => float => double => long double - tj. bude-li:

Y36SAP - aritmetika. Osnova

Struktura a architektura počítačů (BI-SAP) 7

Tabulka symbolů. Vazba (binding) Vazba - příklad. Deklarace a definice. Miroslav Beneš Dušan Kolář

Kolekce ArrayList. Deklarace proměnných. Import. Vytvoření prázdné kolekce. napsal Pajclín

Základní deska (1) Parametry procesoru (2) Parametry procesoru (1) Označována také jako mainboard, motherboard

Intervalové stromy. Představme si, že máme posloupnost celých čísel p 0, p 1,... p N 1, se kterou budeme. 1. Změna jednoho čísla v posloupnosti.

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

Pohled do nitra mikroprocesoru Josef Horálek

Ing. Igor Kopetschke TUL, NTI

IUJCE 07/08 Přednáška č. 1

Operační systémy. Přednáška 8: Správa paměti II

Architektury počítačů a procesorů

Algoritmizace a programování

Procesor. Procesor FPU ALU. Řadič mikrokód

Procesor z pohledu programátora

C2115 Praktický úvod do superpočítání

DUM 01 téma: Obecné vlastnosti tabulkového editoru, rozsah, zápis do buňky, klávesové zkratky

5 Rekurze a zásobník. Rekurzivní volání metody

Úvod do architektur personálních počítačů

Reprezentace dat v informačních systémech. Jaroslav Šmarda

Mikrořadiče řady 8051.

Klíčové pojmy: Cyklus, řídící proměnná, inicializace, test podmínky, přerušení cyklu, vnořování cyklů.

Principy operačních systémů. Lekce 2: Správa paměti

Testování jednotky ALU a aplikace metody FMEA

Adresní mody procesoru

Technická Univerzita v Liberci, Fakulta Mechatroniky. Učební text k předmětu. Číslicové počítače

ZÁKLADY PROGRAMOVÁNÍ. Mgr. Vladislav BEDNÁŘ , 5.1 a 5.2 8/14

Office podrobný průvodce. Tomáš Šimek

PROGRAMOVÁNÍ MIKROPOČÍTAČŮ CVIČENÍ 10

Strojový kód k d a asembler procesoru MIPS SPIM. MIPS - prostředí NMS NMS. 32 ks 32bitových registrů ( adresa registru = 5 bitů).

Teoretické minimum z PJV

PES lib (C + PASCAL) KNIHOVNY KOMUNIKAÈNÍCH FUNKCÍ 03/ PESlib KOMUNIKAČNÍ KNIHOVNY C, PASCAL 03/ stran 1

Programování. Debugging a testování. Martin Urza

Princip funkce počítače

Programování v C++ Úplnej úvod. Peta (maj@arcig.cz, SPR AG )

Činnost CPU. IMTEE Přednáška č. 2. Několik úrovní abstrakce od obvodů CPU: Hodinový cyklus fáze strojový cyklus instrukční cyklus

Algoritmizace I. Ak. rok 2015/2016 vbp 1. ze 132

VYUŽITÍ KNIHOVNY SWING PROGRAMOVACÍHO JAZYKU JAVA PŘI TVORBĚ UŽIVATELSKÉHO ROZHRANÍ SYSTÉMU "HOST PC - TARGET PC" PRO ŘÍZENÍ POLOVODIČOVÝCH MĚNIČŮ

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

Programování v Javě I. Leden 2008

III/2 Inovace a zkvalitnění výuky prostřednictvím ICT EU-OVK-VZ-III/2-ZÁ-312

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

Programovací jazyk C++ Hodina 1

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

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

TECHNICKÁ UNIVERZITA V LIBERCI EKONOMICKÁ FAKULTA. VZOR PŘIJÍMACÍ ZKOUŠKY DO NAVAZUJÍCÍHO STUDIA Obor: Manažerská informatika

Kubatova Y36SAP 8. Strojový kód Jazyk symbolických instrukcí asembler JSA pro ADOP a AVR Kubátová Y36SAP-strojový kód 1

Jazyk C# a platforma.net

1. Programování PLC. Programovatelné automaty II - 1 -

Algoritmy I. Číselné soustavy přečíst!!! ALGI 2018/19

Fz =a z + a z +...+a z +a z =

Maturitní témata - PRT 4M

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

Semestrální projekt. Předmět: Programování v jazyce C. Zadání: Operace s maticemi. Uživatelský manuál. ver. 1.0

Programování v Javě I. Únor 2009

Distanční opora předmětu: Programování v jazyce C Tématický blok č. 8: Dynamické datové struktury, ladění programů Autor: RNDr. Jan Lánský, Ph.D.

Sběrnicová struktura PC Procesory PC funkce, vlastnosti Interní počítačové paměti PC

Cílem kapitoly je seznámit studenta s pamětmi. Jejich minulostí, současností a hlavnímu parametry.

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

3. ZÁKLADNÍ INSTRUKCE JAZYKA TECHNOL

Vysoká škola chemicko-technologická v Praze Fakulta chemicko-inženýrská Ústav počítačové a řídicí techniky. Aplikace mikroprocesorů.

Mikroprocesor Intel 8051

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

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

PREPROCESOR POKRAČOVÁNÍ

Číselné soustavy v mikroprocesorové technice Mikroprocesorová technika a embedded systémy

Cílem kapitoly je seznámit studenta s pamětmi. Jejich minulostí, současností, budoucností a hlavními parametry.

Tabulkové processory MS Excel (OpenOffice Calc)

MSP 430F1611. Jiří Kašpar. Charakteristika

Řídicí struktury. alg3 1


3 Jednoduché datové typy Interpretace čísel v paměti počítače Problémy s matematickými operacemi 5

Transkript:

12. Číselné soustavy, binární číselná soustava. Kódování informací, binární váhový kód, kódování záporných čísel. Standardní jednoduché datové typy s pevnou a s pohyblivou řádovou tečkou. Základní strukturované datové typy (pole, rekord apod.). Paměť počítače, adresa, uložení základních datových typů v paměti počítače. Číselné soustavy Každou hodnotu lze reprezentovat různými způsoby. V historii se používali jako počítadla ruce a proto první číselné soustavy měli základ pět a deset. Dnes se v běžném životě nejvíce používá soustava o základu deset, takzvaná Arabská (vymyšlena ale byla v Indii). Tato soustava používá číslice 0..9, přičemž poloha číslice určuje jeho váhu - tím je možné vyjádřit i čísla větší než deset. Číslo v desítkové soustavě můžeme obecně rozepsat takto: Příklad: 156,2 = 1 x 100 + 5 x 10 + 6 x 1 + 2 x 0,1 Počítače mohou z principu pracovat s libovolnou číselnou soustavou. Protože je však nejjednodušší a nejspolehlivější rozlišovat pouze dva stavy nějaké fyzikální veličiny, používá soustava o základu dva. Tyto dva stavy se mohou nazývat různě: 0 1 lež pravda logická 0 logická 1 V reálném světě se pracuje nejčastěji s napětím. Buňce, která nese takovou informaci, říkáme jeden bit. Protože zápis čísel v soustavě o základu dva je pro člověka nepřehledný, používají se ve výpočetní technice ještě soustavy o základu osm a šestnáct. Mezi těmito soustavami a dvojkovou soustavou lze totiž snadno převádět a pro člověka jsou čísla v těchto soustavách mnohem představitelnější. Pro některé speciální případy lze používat i jiné typy číselných systémů. Např. pomocí číselné soustavy s faktoriály, kde každá pozice má váhu n!, lze velmi přesně pracovat s racionálními čísly. V určitých případech potřebujeme předem vědět, kolik platných míst (N) budeme potřebovat k vyjádření nějaké hodnoty (X) v různých číselných soustavách. Výpočet provedeme pomocí logaritmu o základu, který odpovídá základu soustavy: Pro dekadickou soustavu: N = [ log10 X ] + 1 Pro binární soustavu: N = [ log2 X ] + 1 Pro hexadecimální soustavu: N = [ log16 X ] + 1 Výsledek zaokrouhlujeme na celé číslo směrem dolů. Binární číselná soustava používá pouze dva symboly: 0 a 1 nejjednodušší soustava

Převod z dvojkové soustavy do dekadické číslo ve dvojkové soustavě: př: tedy: Tento postup je velmi rychlý a lze ho provádět pro malý počet míst i přímo z hlavy. Stačí si pamatovat mocniny dvojky (= váhy pozic). Převod z dekadické soustavy do dvojkové Matematické odvození postupu: Napíšeme si rovnici, kde na levé straně je zadaná hodnota v desítkové soustavě a na pravé straně je obecně rozepsané číslo ve dvojkové soustavě. Př: Toto je jedna rovnice o mnoha neznámých. Abychom jí mohli vyřešit, musíme jí rozdělit na rovnice pro jednotlivé proměnné. To provedeme tak, že celou rovnici vydělíme číslem 2: Výsledek poté rozdělíme na celou část a část za desetinou čárkou. Desetinná část: V tomto okamžiku již můžeme přímo napsat, že koeficient a0 = 0. Celá část: Se zbytkem rovnice opakujeme tento postup až do doby, kdy na levé straně zůstane 0. V tomto okamžiku máme vypočteny všechny koeficienty. Tento postup je poněkud zdlouhavý, proto se používá jeho rychlejší varianta. Dělíme desítkové číslo

celočíselně dvěma a opisujeme zbytky. Příklad: 132 : 2 = 66 : 2 = 33 : 2 = 16 : 2 = 8 : 2 = 4 : 2 = 2 : 2 = 1 : 2 = 0 zbytek: 0 0 1 0 0 0 0 1 a0 a1 a2 a3 a4 a5 a6 a7 Dělíme do té doby, dokud výsledek není nula a zbytky opisujeme křížem (od a7 do a0). Desetinou část čísla převádíme obdobně. Pouze používáme pro řešení rovnice místo dělení násobení. Př: Stejně jako u převodu celé části lze postup zrychlit. Př: 0,25 x 2 = 0,5 x 2 = 1 (-1) 0 x 2 = 0 0 1 a-1 a-2 Jako výsledek opisujeme celé části výsledku po násobení dvěma. V našem případě je tedy výsledek po zaokrouhlení: 0,25 = 0,012 Rozvoj necelé části může být i neukončený (periodický nebo neperiodický). V tomto případě musíme rozvoj zkrátit (zaokrouhlit) a dochází tak k zaokrouhlovací chybě. Př: 0,22 x 2 = 0,44 x 2 = 0,88 x 2 = 1,76 (-1) 0,76 x 2 = 1,52 (-1) 0,52 x 2 = 1,04 (-1) 0,04 x 2 = 0,08 0 0 1 1 1 0 0,22 = 0,001110002 S čísly ve dvojkové soustavě lze přímo počítat obdobně, jako s čísly v desítkové soustavě. Binární váhový kód Binární kód je způsob uložení informace v počítači definovaný jako konečný počet bitů, z nichž každý může nabývat právě jednu ze dvou hodnot (obvykle označených 0 nebo 1). Pro snadnější zápis uložených hodnot (čísel) se dnes převážně používá byte (bajt) s délkou slova osm bitů. Pro výpočet hodnoty binárního zápisu se používá binární soustava. Kódování záporných čísel Pro zápis záporných čísel ve dvojkové soustavě můžeme použít znaménko mínus stejně, jako v desítkové soustavě. Pro kódování znaménka v počítačích se proto používají tyto metody: Vyhrazení jednoho bitu pro znaménko, další bity zůstávají pro binární váhový kód absolutní hodnoty (např. mantisa u typů s pohyblivou řádovou čárkou) Přičtení konstanty (např. exponent u typů s pohyblivou řádovou čárkou) Pomocí dvojkového doplňku (např. celočíselné typy ve vyšších programovacích jazycích)

Dvojkový doplněk Doplňkem se rozumí rozdíl kapacity soustavy (tj. 2 n, kde n je počet bitů v binárním vyjádření) a absolutní hodnoty čísla. Rozsah čísel, které tímto způsobem lze vyjádřit, je pak ( - 2 n-1 ) až ( 2 n-1 1 ). Např. Pomocí osmi bitů tak lze vyjádřit čísla v rozsahu 128.. +127. Interpretace záporných čísel pomocí dvojkového doplňku umožňuje, na rozdíl od ostatních způsobů, přímo provádět sčítání a odečítání. Zároveň lze také přímo zjistit znaménko, protože nejvyšší bit u záporných čísel je vždy jedna. Postup pro převod absolutní hodnoty na záporné číslo pomocí dvojkového doplňku je následující: doplníme dvojkové vyjádření absolutní hodnoty zleva nulami na požadovaný počet bitů provedeme negaci všech bitů k výsledné hodnotě přičteme binárně hodnotu jedna Alternativní postup: doplníme dvojkové vyjádření absolutní hodnoty zleva nulami na požadovaný počet bitů zprava opíšeme všechny nuly až k první jedničce (včetně), další bity negujeme př: -46 46 = 001011102 Nejprve převedeme desítkovou absolutní hodnotu a doplníme nulami zleva na osm bitů 110100012 Znegujeme výsledek 110100102 Přičteme k výsledku jedničku Výsledek: -46 = 110100102

Standardní jednoduché datové typy byte (8b) word (16b) Dword (32b) s pevnou řádovou tečkou neznaménkové Char (8b) znaménkové shortint (8b) integer (16b) longint (32b) s plovoucí řádovou tečkou single (32b) double, real (64b) extended (80b) Datové typy s pevnou řádovou tečkou Jsou to nejjednodušší celočíselné typy, pomocí kterých lze vyjadřovat celá čísla. Můžeme je dále rozdělit na znaménkové a neznaménkové. Rozsah hodnot, které pomocí nich lze vyjádřit je dán jejich velikostí v pamětí (počtem bitů). Typ Rozsah Byte 0.. 255 Word 0.. 65535 Dword 0.. 2 32 1 ShortInt -128.. 127 Integer -32768.. 32767 LongInt -2 32.. 2 32-1 Char 0..255 odkaz do ASCII tabulky Datové typy s plovoucí řádovou tečkou Abychom mohli pracovat s reálnými čísly ve dvojkové soustavě, můžeme využít stejný přístup, jako v desítkové. To znamená, že si číslo převedeme do dvojkové soustavy a případně ještě do normalizovaného tvaru. Př: Převeďte číslo 2,1345 x 10 2 do dvojkové soustavy v normalizovaném tvaru. Řešení: Nejprve si převedeme desítkové číslo z normalizovaného tvaru do tvaru, který je vhodný pro převod do dvojkové soustavy (to je tvar bez exponentu). Provedeme převod celé i desetinné části a nakonec přepíšeme výsledek do normalizovaného tvaru ve dvojkové soustavě (přidáme exponent tak, aby před desetinou čárkou bylo pouze číslo 1). 2,1234 x 10 3 = 2123,4 = 100001001011,0110011002 = 1,000010010110110011002 x 2 11 Pokud už máme reálné číslo ve dvojkové soustavě v normalizovaném tvaru, můžeme se zabývat problémem jak ho uložit do paměti počítače. Ve skutečnosti totiž musíme uložit tři různé informace znaménko, absolutní hodnotu a exponent. Musíme si zvolit způsob kódování znaménka u exponentu, počet bitů u exponentu a počet bitů na vlastní číslo (mantisu). Tím určíme rozsah a přesnost čísel, která můžeme takto kódovat. Je zřejmé, že možností je velmi mnoho. Ve vyšších programovacích jazycích se používají hlavně tyto tři datové typy: Single, Double (někdy se označuje jako Real), Extended. Datový typ Single Pro zápis reálného čísla v tomto datovém typu se využívá celkem 32 bitů. Jeden bit je znaménko, osm bitů je vyhrazeno pro exponent a 23 bitů pro mantisu. Mantisa je absolutní hodnota reálného čísla v normalizovaném tvaru, ale zapisuje se bez první jedničky. V normalizovaném tvaru totiž

binární číslo vždy začíná jedničkou, pak je desetinná čárka a pak následuje zbytek absolutní hodnoty. Proto je zbytečné první jedničku před desetinou čárkou zapisovat. S znaménko, 1=mínus E exponent, kóduje se přičtením konstanty 127, takže rozsah exponentů je 127 až +128 M mantisa, absolutní hodnota čísla, zapisuje se bez první jedničky Zpětně pak dostaneme reálné číslo dosazením do vzorce: (-1) S x 2 E - 127 x ( 1,M ) Postup pro vytvoření 32-bitové konstrukce: 1. Vyjádřit absolutní hodnotu daného čísla X v binární soustavě (odděleně zjistit binární vyjádření celé a necelé části, potom obě části oddělit řádovou tečkou) 2. Řádovou tečku posunout za první jedničku zleva. Z počtu pozic, o které se tečka v zápisu posouvá, určit hodnotu EXPONENTU: Žádný posun e = 0 Posun vpravo e <0 Posun vlevo e > 0 3. Určit obsah pole S: X >=0 S=0 X < 0 S=1 4. Určit obsah pole E: Vyjádřit hodnotu e+127 binárním váhovým kódováním (jako typ Byte) 5. Určit obsah pole M: bity, které zůstaly po posunutí řádové tečky vpravo od ní. Příklad: Uložte do paměti číslo 0,0625 ve formátu datového typu Single. Řešení: Nejprve převedeme absolutní hodnotu do dvojkové soustavy. 0,0625 = 0,00012 Poté přepíšeme výsledek do normalizovaného tvaru posunem desetinné čárky. 0,00012 = 1,02x 2-4 Obsah pole S je 1, protože číslo je záporné. Obsah pole E je binárně vyjádřený exponent, ke kterému přičteme konstantu 127. E = -4 + 127 = 124 = 011110112 Mantisu získáme opsáním absolutní hodnoty bez první jedničky, takže to jsou v tomto případě samé nuly. Rekonstrukce číselné hodnoty: 1. 32-bitovou strukturu rozdělit na pole S (1 bit), E (8), M (23) 2. Sestavit zápis. 1...., ve kterém za řádovou tečkou jsou bity z pole M. 3. Číselně interpretovat obsah pole E (binární váhový kód). Zmenšením získané hodnoty o 127 určit hodnotu e. V zápisu posunout řádovou tečku o e pozic. (Pro e>0 se tečka posouvá směrem vlevo). 4. Zápis v binární soustavě převést do dekadické soustavy (binární váhový kód) 5. Doplnit znaménko podle bitu v poli S. (S=1. číslo je záporné) př: S = 0 E = 100000102 = 129 M = 10010012

Výsledek je pak: 2 130-127 x 1,10010012 = 2 3 x 1,10010012 = 1100,10012 = 12,5625 vyjímky: (0,M) Pokud S = 0, E = 0 a M = 0 : hodnota čísla je nula Pokud E = -127 : EXP se bere jako 126 a absolutní hodnota se nebere ve tvaru (1,M) ale Pokud E = 128 : hodnota čísla je nekonečno, M musí být 0. Jiné hodnoty M jsou neplatné. Exponent Mantisa Velikost MIN MAX Přesnost Single 8b 23b 32b 1,4E-45 3,4E38 6-7 míst Double 11b 52b 64b 5,0E-324 17,E308 15-16 míst Extended 15b 63b 80b 3,4E-4932 1,1E4932 18-19 míst Strukturované datové typy Datový typ obsahuje jeden nebo více prvků. Říkáme, že je homogenní, jsou-li prvky stejného typu. Pole sdružuje daný počet prvků (čísel, textových řetězců, ) o stejné velikosti. K jednotlivým prvkům pole se přistupuje pomocí jejich indexu (celého čísla, označujícího pořadí prvku). Velikost pole zůstavá při běhu programu neměnná (některé programovací jazyky toto omezení nekladou, zvětšení pole je ale časově náročná operace). Řetězec Počet znaků řetězce definuje délku textového řetězce. Textový řetězec může být prázdný (obsahuje 0 znaků řetězce). Typy konstantní neměnný obsah (generovaný při překladu programu) staticky alokovaný pamětový prostor pro řetězec řetězec má omezenou max. Délku dynamicky alokovaný pamětový prostor pro řetězec řetězec má max. délku omezenou jen velikostí volné paměti Záznam Tento datový typ se skládá z určitého počtu položek, které mohou být různého typu. každá položka má přiděleno jméno, neboli identifikátor položky, pomocí něhož se provádí výběr položky. Výčtový typ (enum) programátorem definovaný typ, např. pro barvu karet. Paměť Společná pro data i program (viz. Von Neumann) Slouží k uchování dat je potřeba prostor pro uložení dat (paměťové buňky) nástroj na přístup (adresa, sběrnice) každá buňka má svou adresu Operační paměť je volatilní (nestálá) vnitřní elektronická paměť číslicového počítače typu RWM- RAM, určená pro dočasné uložení zpracovávaných dat a spouštěného programového kódu. Tato paměť má obvykle rychlejší přístup než vnější paměť (např. pevný disk). Tuto paměť může procesor adresovat přímo, pomocí podpory ve své instrukční síti. Strojové instrukce jsou

adresovány pomocí instrukčního ukazatele a k datům se obvykle přistupuje pomocí adresace prvku paměti hodnotou uloženou v registru procesoru nebo je adresa dat součástí strojové instrukce. Operační paměť je spojena s procesorem pomocí sběrnice, obvykle se mezi procesor a operační paměť vkládá rychlá vyrovnávací paměť typu cache, neboli paměť, která je přímo přístupná procesoru. Jedná se o nepostradatelný fyzický prostředek, který je spravován jednou z hlavních části operačního systému. Operační paměť je určená pro uchovávání kódu programů respektive procesů spolu s mezivýsledky a výsledky jejich činnosti. Zrovna tak je v operační paměti uchováván stav dalších prostředků a základní datové struktury jádra. Vezmeme-li v potaz adresování operační paměti, lze zjednodušeně paměť chápat jako souvislý prostor paměťových buněk o nějaké velikosti. Tyto buňky jsou pak lineárně adresovány adresami pevné délky. Je-li operační paměť reprezentována pamětí s přímým přístupem, označujeme adresový prostor jako fyzický adresový prostor (FAP). Velikost tohoto prostoru je omezena buď fyzickou velikostí paměťových modulů a nebo velikostí adresy tj. adresa o velikosti n bitů umožňuje adresovat 2 na n- tou paměťových míst. Jednodušší procesory podporují adresovat pouze paměť s přímým přístupem, tedy adresovat pouze fyzický adresový prostor. V dnešní době velká část procesorů umožňuje adresovat i logické adresové prostory. Jedná se o tzv. virtualizaci paměti respektive jde o neomezený počet logických adresových prostorů. Adresa Adresa = číslo, pořadí paměťové buňky Udává se nejčastěji v šestnáctkové soustavě (např. adresa 2F9 je buňka na 761. pozici) Adresový prostor = rozsah adres Adresový prostor procesoru: rozsah adres, na které dokáže přistupovat procesor Např. 8bitový procesor neumí pracovat s 16bit. Adresou Paměti většího rozsahu (disky apod.): Děleny do segmentů; stránek a dalších celků Adresa je kombinací určení segmentu a adresy buňky Uložení základních datových typů v paměti počítače Pro zjednodušení budeme o paměti uvažovat jako tabulce, která má na každém řádku osmibitové číslo. Adresa 0 je nahoře a každý další řádek má adresu o 1 vyšší. Překladače vyšších programovacích jazyků ukládají proměnně postupně do paměti v pořadí, jak jsou deklarovány. Proměnné, které mají velikost jeden bajt (Byte, Char) je situace jednoduchá. Více bajtové proměnné se ukládají do paměti postupně od nejméně významného bajtu. Př typ single:

13. Programátorský model procesoru, instrukce, instrukční soubor, symbolická adresa, operace v registrech, s pamětí, I/O operace. Sekvence instrukcí, algoritmizace základních úloh v jazyku symbolických adres. Časování programu, podprogramy, přerušení. Programátorský model procesoru Uvnitř procesoru se nachází: řadič instrukcí dekóduje instrukci na vstupu a provede potřebné operace ALU Aritmeticko-logická jednotka, ta provádí vlastní výpočty Univerzální použitelné registry R0..R7 slouží jako rychlá paměť pro výpočty Akumulátor = registr A speciální registr, jediný možný operand některých instrukcí Registr PSW (Program State Word) tento registr obsahuje stav procesoru používat z tohoto registru pouze dva bity, a to bit C (Carry) který je v jedničce pokud poslední matematická operace skončila přetečením a bit Z (Zero) který je v jedničce pokud aktuální obsah akumulátoru je 0 Registr DPTR (Data Pointer) slouží pro nepřímé adresování v datové paměti, je šestnáctibitový ale přistupujeme k němu osmibitově pomocí registrů DPL a DPH Registr SP (Stack Pointer) slouží jako ukazatel na vrchol zásobníku Registr PC (Program Counter) tento registr obsahuje adresu aktuálně vykonávané instrukce

Instrukce Strojová instrukce je v informatice označení elementární operace procesoru, který je součástí počítače. Strojová instrukce je základní jednotkou strojového kódu. Každý typ procesoru má vlastní sadu strojových instrukcí, kterou je schopen přímo vykonávat. Jednotlivé instrukce jsou uloženy za sebou v programové paměti. Každá instrukce se v paměti skládá z operačního kódu a operandů. V reálném mikroprocesoru může zápis instrukce v paměti zabírat různé množství paměťových buněk. Instrukce, která nemá žádné operandy, zabere pouze jednu buňku. Naopak instrukce, která například ukládá konstantu do nějakého registru, zabere tři buňky. Typy instrukcí : Přesunové - Přesunové slouží ke kopírování dat v paměti. Tyto instrukce mají typicky mnemoniku MOV (z angl. move - přesun), případně LD nebo ST (load, store). Prakticky vždy mají dva operandy - zdrojový a cílový, kdy hodnota uložená ve zdrojovém operandu je uložena do cílového operandu. MOV A, R0 přesune do A hodnotu v R0 Aritmeticko-logické - Aritmeticko-logické instrukce slouží k vykonávání aritmetických nebo logických operací. V podstatě jde o to, že se zdrojovými operandy se provede určitá matematická operace, jejíž výsledek je uložen do cílového operandu. Velmi častý je případ, kdy jeden ze zdrojových operandů slouží současně jako cílový. To znamená, že např. instrukce add r0, r1 nejprve sečte hodnoty registrů r0 a r1, přičemž výsledek uloží do registru r0. Typickými funkcemi aritmetickou-logických instrukcí jsou sčítání (ADD), odečítání (SUB), porovnávání (CMP), bitové logické součty (OR) a logické součiny (AND), bitové posuny a rotace. ANL A, R0 provede logický součin akumulátoru s obsahem registru R0 Řídící - Tyto instrukce mění buď tok programu, nebo způsob, jakým procesor funguje. Základní řídící instrukcí je instrukce skoku (typicky má mnemoniku JMP), která říká, že vykonávání programu nepokračuje následující instrukcí, ale instrukcí která je uložena na adrese definované operandem instrukce JMP. LOOP: INC A OUT 0AAH JMP LOOP

Přehled instrukcí: Instrukční soubor Další rozdělení mikrokontrolérů je podle použitého instrukčního souboru. V oblasti jednočipových počítačů se běžně používají instrukční soubory typu CISC, RISC. CISC označuje procesor s komplexním instrukčním souborem. Procesor podporuje mnoho formátů a druhů instrukcí. Na jednu stranu to znamená úsporu místa v programové paměti (vyšší hustotu kódu), na druhé straně to však znamená komplikovanější dekodér instrukcí ve vlastním mikrokontroléru a pomalejší zpracování instrukcí. RISC označuje procesor s redukovaným instrukčním souborem. Základní myšlenkou je omezení počtu a zjednodušení kódování instrukcí, což vede ke zjednodušení instrukčního dekodéru. Hlavní výhodou tohto přístupu je rychlost a jednoduchost, na stejné ploše čipu může být místo 16bitového procesoru CISC 32bitový procesor RISC. Nevýhodou je, že pro zakódování instrukce je potřeba více místa, někdy musíme použít dvě instrukce místo jedné, takže klesá hustota kódu. (ARM, ATMEL) Symbolická adresa

Operační kód instrukce je v paměti samozřejmě uložen jako číslo. Instrukcí sice procesor nemá mnoho (jednočipové mikroprocesory mají řádově okolo 100 různých instrukcí), ale stejně je pro člověka nepředstavitelné, že by znal všechny jejich operační kódy zpaměti a pamatoval si jejich význam. Navíc by si musel pamatovat i kódy jednotlivých operandů a v případě skoků by musel při každé změně programu přepočítat adresy instrukcí v paměti. Takový program by se nejen obtížně psal, ale i četl a ladil. Proto se procesory neprogramují přímo ve strojovém kódu ale v takzvaném jazyce symbolických adres (JSA), který se někdy (nesprávně) označuje jako assembler. V tomto jazyce je každé instrukci přiřazena tzv. mnemonická zkratka. Stejně tak jsou zavedeny jednoduchá jména pro registry procesoru místo jejich čísel. Také je možné používat v takovém programu symbolická návěstí pro označení místa, kam ukazuje instrukce skoku. Program napsaný v jazyce symbolických adres je pak nutné přeložit pomocí překladače assembleru do strojového kódu. Překladač nahradí jména instrukcí, registrů a návěstí konkrétními čísly a poskládá instrukce za sebe do paměti procesoru. Toto je triviální úloha, která nám ale přináší obrovský komfort při psaní programů na úrovni jednotlivých instrukcí. Operace v registrech Výměna obsahů mezi registry R0 a R1: mov A, R0 mov R2, A mov A, R1 mov R0, A mov A, R2 mov R1, A K tomuto je potřeba využít pomocný registr R2, protože výměna je realizována přes zásobník. Oprace v paměti Do paměti na adresu AAh vložit hodnotu 123: mov A, #123 mov 0AAh, A Do paměti na adresu AAAAh vložit hodnotu 123: mov A, #123 mov DPTR, #0AAAAH mov @DPTR, A

I/O operace IN in A, Adresa8 instrukce zkopíruje data s adresou vstupního portu do akumulátoru Vstupní porty nemají vlastnost registru. Jejich obsah je v každém okamžiku dán děním mimo počítač. Instrukce in jednorázově zkopíruje obsah portu do akumulátoru. OUT out Adresa8, A instrukce zkopíruje osmibitová data z akumulátoru na vybraný port Výstupní porty mají vlastnost registru. Jejich obsah je dán posledním provedením instrukce out. Algoritmizace

Časování (z PHS x51) Časovač (Timer) - počítá strojové takty Čítač počítá impulzy vnějšího signálu (měří jeho kmitočet). Časovač čítá pevný kmitočet, který je obvykle odvozen od hodinového signálu mikropočítače. 8051 obsahuje dva čítače/časovače, které mohou mít délku až 16 bitů. Obsah čítačů časovačů je dostupný pomocí registrů THx nebo Tlx. X je konkrétní číslo časovače/čítače. THx je horní bajt a TLx je dolní bajt. Každý čítač nebo časovač s dá nastavit do 4 režimů. Pro řízení časovačů/čítačů se používají registry TMOD a TCON. TMOD Tento registr umožňuje volit režim obou časovačů/čítačů a není bitově adresovatelný. bit 7 bit 6 bit 5 bit 4 bit 3 bit 2 bit 1 bit 0 G C/T M1 M0 G C/T M1 M0

G - volí způsob hradlování čítače (tedy kdy jsou impulzy čítačem uvažovány) G=0 čítač/časovač je řízen pouze programově (bitem TRx v registru TCON) G=1 čítač/časovač je řízen programově i obvodově (vstupem) C/T - (Counter/Timer) volí, zda čítač/časovač pracuje jako čítač nebo časovač. C/ =0 pracuje jako časovač, v tom případě jsou brány hodiny z vnitřního zdroje odvozeny jako 1/12 hodinového kmitočtu mikrořadiče C/ =1 pracuje jako čítač, hodinový vstup je na vývodu Tx. Maximální kmitočet je 1/24 hodinového kmitočtu mikrořadiče. TCON Bity registru TCON slouží pro programové spouštění časovačů nebo pro indikaci přetečí a jsou bitově adresovatelné. bit 7 bit 6 bit 5 bit 4 bit 3 bit 2 bit 1 bit 0 TF1 TR1 TF0 TR0 IE1 IT1 IE0 IT0 TF1 indikace přetečení čítače/časovače 1, při přetečení je automaticky nastaven, po vstupu do obsluhy přerušení je automaticky vynulován. TF0 to samé jako ^ akorát pro čítač/časovač 0 TR1 spuštění čítače/časovače 1 TR0 - spuštění čítače/časovače 0 Podprogramy Podobně jako při skoku se při volání podprogramu předává řízení instrukci na jiném místě programu. Na rozdíl od skoku se ale předpokládá návrat do místa, odkud byl podprogram

volán. Proto je nutné nejprve uložit adresu aktuální instrukce (registr PC Program Counter) a pak teprve provést skok. Na konci podprogramu se tato adresa opět vyzvedne a program pokračuje na původním místě, odkud byl podprogram volán. K tomuto slouží instrukce CALL a RET. Přerušení Přerušení je v informatice metoda pro asynchronní obsluhu událostí, kdy procesor přeruší vykonávání sledu instrukcí, vykoná obsluhu přerušení a pak pokračuje v předchozí činnosti. Původně přerušení sloužilo k obsluze hardwarových zařízení, které tak signalizovaly potřebu obsloužit Později byla přidána vnitřní přerušení, která vyvolává sám procesor, který tak oznamuje chyby vzniklé při provádění strojových instrukcí a synchronní softwarová přerušení vyvolávaná speciální strojovou instrukcí, která se obvykle používají pro vyvolání služeb operačního systému. Obsluha přerušení : Přijde-li do procesoru signalizace přerušení, je v případě, že obsluha přerušení je povolena, nejprve dokončena právě rozpracovaná strojová instrukce. Pak je na zásobník uložena adresa následující strojové instrukce, která by měla být zpracována, kdyby k přerušení nedošlo. Pak je podle tabulky přerušení vyvolána obsluha přerušení, která obslouží

událost, kterou přerušení vyvolalo. Obsluha přerušení je zodpovědná za to, aby na jeho konci byl uveden stav procesoru do stavu jako na jejím začátku, aby výpočet přerušené úlohy nebyl ovlivněn, což se z důvodu vyšší rychlosti obvykle dělá softwarově (některé procesory umožňují uložit svůj stav pomocí speciální strojové instrukce). Na konci obsluhy přerušení je umístěna instrukce návratu (RET, někdy speciální IRET), která vyzvedne ze zásobníku návratovou adresu a tak způsobí, že z této adresy bude vyzvednuta následující strojová instrukce. Přerušená úloha tak až na zpoždění nepozná, že proběhla obsluha přerušení. Tabulka přerušení umožňuje, aby procesor mohl rozlišit více různých přerušení (rozlišených čísly), ke každému vyvolat odpovídající obsluhu přerušení (podprogram) a aby šlo jednotlivé obsluhy umístit na libovolná místa v paměti. Obsluha přerušení je obvykle uložena v ovladači, který spolu s novým hardwarovým zařízením do operačního systému instalujeme. Vnější přerušení Typy: Vnější přerušení (též hardwarové přerušení) je označováno podle toho, že přichází ze vstupněvýstupních zařízení (tj. z pohledu procesoru přicházejí z vnějšku). Vstupně-výstupní zařízení tak má možnost si asynchronně vyžádat pozornost procesoru a zajistit tak svoji obsluhu ve chvíli, kdy to právě potřebuje bez ohledu na právě zpracovávanou úlohu. Vnější přerušení jsou do procesoru doručována prostřednictvím řadiče přerušení, což je specializovaný obvod, který umožňuje stanovit prioritu jednotlivým přerušením, rozdělovat je mezi různé procesory a další související akce. Vnitřní přerušení Vnitřní přerušení vyvolává sám procesor, který tak signalizuje problémy při zpracování strojových instrukcí a umožňuje operačnímu systému na tyto události nejvhodnějším způsobem zareagovat. Jedná se například o pokus dělení nulou, porušení ochrany paměti, nepřítomnost matematického koprocesoru, výpadek stránky a podobně. Softwarové přerušení Softwarové přerušení je speciální strojová instrukce (obvykle je jich v procesoru k dispozici několik, procesory Intel mapují všechna přerušení na softwarová přerušení). Tento typ přerušení je na rozdíl od druhých dvou typů synchronní, je tedy vyvoláno zcela záměrně umístěním příslušné strojové instrukce přímo do prováděného programu. Jedná se o podobný způsob, jako vyvolání klasickému podprogramu (podprogramem je zde ISR uvnitř operačního systému), avšak procesor se může zachovat jinak. Instrukce softwarového přerušení se proto využívá pro vyvolání služeb operačního systému z běžícího procesu (tzv. systémové volání).

Uživatelská úloha tak sice nemůže skočit do prostoru jádra operačního systému, ale může k tomu využít softwarové přerušení (kterých je omezené množství a vstupní body lze snadno kontrolovat). Při využití privilegovaného režimu může softwarové přerušení aktivovat privilegovaný stav.

14. Vyšší programovací jazyky (Java, C, C# apod.). Struktura programu, implementace příkazů a datových typů. Práce se soubory, operace vstupu a výstupu. Algoritmizace základních úloh, třídění, vyhledávání, porovnání algoritmů. (Perutka) Je to programovací jazyk s větší mírou abstrakce. Vyšší abstrakcí je míněno přiblížení zápisu zdrojového kódu programu v daném programovacím jazyce k tomu, jak problémy zpracovává svým myšlením člově!k. Nižší programovací jazyk se naopak svým zápisem přibližuje tomu, jak po technické stránce pracuje počítač (resp. jeho procesor). Vyšší programovací jazyky by měly být člověku lépe srozumitelné, než nižší programovací jazyky, čímž by měl být jednodušší vlastní vývoj programů. Programy zapsané ve vyšších jazycích jsou obvykle kratší a lépe čitelné, než zápis v nižších programovacích jazycích. Tím by měly šetřit čas programátora a zmenšit pravděpodobnost výskytu programátorských chyb. Ve vyšších programovacích jazycích je možné používat prvky přirozeného jazyka. Struktura zdrojového kódu je u vyšších programovacích jazyků logická. Další výhodou vyšších programovacích jazyků je jejich přenositelnost. Programy po malých (někdy i žádných) úpravách mohou běžet na různých počítačových platformách. Nevýhodou vyšších programovacích jazyků je fakt, že počítače umí přímo zpracovávat kód zapsaný v nejnižších programovacích jazycích (tzv. Jazyk symbolických adres). Proto musejí být programy zapsané ve vyšších programovacích jazycích překládány překladačem (kompilátorem) do nižších jazyků. Do skupiny vyšších programovacích jazyků patří v podstatě všechny programovací jazyky kromě Jazyka symbolických adres (často nesprávně označován jako Assembler) a strojového kódu. Java Objektově orientovaný programovací jazyk. Jeden z nejpoužívanějších programovacích jazyků na světě. Díky své přenositelnosti je používán pro programy, které mají pracovat na různých systémech počínaje čipovými kartami (platforma JavaCard), přes mobilní telefony a různá zabudovaná zařízení (platforma Java ME), aplikace pro desktopové počítače (platforma Java SE) až po rozsáhlé distribuované systémy pracující na řadě spolupracujících počítačů rozprostřené po celém světě (platforma Java EE). Tyto technologie se jako celek nazývají platforma Java. Dne 8. května 2007 Sun uvolnil zdrojové kódy Javy (cca 2,5 miliónů řádků kódu) a Java bude dále vyvíjena jako open source. Vlastnosti: jednoduchý jeho syntaxe je zjednodušenou (a drobně upravenou) verzí syntaxe jazyka C a C++. Odpadla většina konstrukcí, které způsobovaly programátorům problémy a na druhou stranu přibyla řada užitečných rozšíření. objektově orientovaný s výjimkou osmi primitivních datových typů jsou všechny ostatní datové typy objektové.

distribuovaný je navržen pro podporu aplikací v síti (podporuje různé úrovně síťového spojení, práce se vzdálenými soubory, umožňuje vytvářet distribuované klientské aplikace a servery). interpretovaný místo skutečného strojového kódu se vytváří pouze tzv. mezikód (bajtkód). Tento formát je nezávislý na architektuře počítače nebo zařízení. Program pak může pracovat na libovolném počítači nebo zařízení, který má k dispozici interpret Javy, tzv. virtuální stroj Javy - Java Virtual Machine (JVM). V pozdějších verzích Javy nebyl mezikód přímo interpretován, ale před prvním svým provedením dynamicky zkompilován do strojového kódu daného počítače (tzv. just in time compilation - JIT). Tato vlastnost zásadním způsobem zrychlila provádění programů v Javě ale výrazně zpomalila start programů. V současnosti se převážně používají technologie zvané HotSpot compiler, které mezikód zpočátku interpretují a na základě statistik získaných z této interpretace později provedou překlad často používaných částí do strojového kódu včetně dalších dynamických optimalizací (jako je např. inlining krátkých metod atp.). robustní je určen pro psaní vysoce spolehlivého softwaru z tohoto důvodu neumožňuje některé programátorské konstrukce, které bývají častou příčinou chyb (např. správa paměti, příkaz goto, používání ukazatelů). Používá tzv. silnou typovou kontrolu veškeré používané proměnné musí mít definovaný svůj datový typ. generační správa paměti správa paměti je realizována pomocí automatického Garbage collectoru který automaticky vyhledává již nepoužívané části paměti a uvolňuje je pro další použití. To bylo v prvních verzích opět příčinou pomalejšího běhu programů. V posledních verzích běhových prostředí je díky novým algoritmům pro garbage collection a tzv. generační správě paměti (paměť je rozdělena na více částí, v každé se používá jiný algoritmus pro garbage collection a objekty jsou mezi těmito částmi přesunovány podle délky svého života) tento problém ze značné části eliminován. bezpečný má vlastnosti, které chrání počítač v síťovém prostředí, na kterém je program zpracováván, před nebezpečnými operacemi nebo napadením vlastního operačního systému nepřátelským kódem. nezávislý na architektuře vytvořená aplikace běží na libovolném operačním systému nebo libovolné architektuře. Ke spuštění programu je potřeba pouze to, aby byl na dané platformě instalován správný virtuální stroj. Podle konkrétní platformy se může přizpůsobit vzhled a chování aplikace. přenositelný vedle zmíněné nezávislosti na architektuře je jazyk nezávislý i co se týká vlastností základních datových typů (je například explicitně určena vlastnost a velikost každého z primitivních datových typů). Přenositelností se však myslí pouze přenášení v rámci jedné platformy Javy (např. J2SE). Při přenášení mezi platformami Javy je třeba dát pozor na to, že platforma určená pro jednodušší zařízení nemusí podporovat všechny funkce dostupné na platformě pro složitější zařízení a kromě toho může definovat některé vlastní třídy doplňující nějakou speciální funkčnost nebo nahrazující třídy vyšší platformy, které jsou pro nižší platformu příliš komplikované. výkonný přestože se jedná o jazyk interpretovaný, není ztráta výkonu významná, neboť překladače pracují v režimu právě včas a do strojového kódu se překládá jen ten kód, který je opravdu zapotřebí.

víceúlohový podporuje zpracování vícevláknových aplikací dynamický Java byla navržena pro nasazení ve vyvíjejícím se prostředí. Knihovna může být dynamicky za chodu rozšiřována o nové třídy a funkce, a to jak z externích zdrojů, tak vlastním programem. elegantní velice pěkně se v něm pracuje, je snadno čitelný (např. i pro publikaci algoritmů), přímo vyžaduje ošetření výjimek a typovou kontrolu. C Počátkem 70. let 20. století jej vyvinuli Ken Thompson a Dennis Ritchie pro potřeby operačního systému Unix. V současné době je to jeden z nejpopulárnějších jazyků, zřejmě nejčastější pro psaní systémového softwaru, ale velmi rozšířený i pro aplikace. C je nízkoúrovňový, kompilovaný, relativně minimalistický programovací jazyk. Je dostatečně mocný na většinu systémového programování (ovladače a jádro OS), přičemž zbytek lze dořešit tzv. inline assemblerem, tedy metodou zápisu assembleru přímo do kódu. Zdrojový kód C je přitom mnohem čitelnější než assembler, je jednodušší ho zapsat a navíc je snáze přenositelný na jiné architektury. Proto jsou často operační systémy, překladače, knihovny a interpretry vysokoúrovňových jazyků implementovány právě v C. Mnoho dalších moderních programovacích jazyků přebírá způsob zápisu (neboli syntaxi) z jazyka C, například Java, Perl a PHP. Ukládání dat je v C řešeno třemi základními způsoby: statickou alokací paměti (při překladu), automatickou alokací paměti na zásobníku a dynamickou alokací na haldě (heap) pomocí knihovních funkcí. Jazyk disponuje jen minimální abstrakcí nad alokací: s pamětí se pracuje přes datový typ zvaný ukazatel, který drží odkaz na paměťový prostor daného typu proměnné, ale je na něm možné provádět aritmetické operace (tyto operace ale neoperují s ukazateli přímo na úrovni jednotlivých bajtů, nýbrž přihlíží k velikosti datového typu, na který ukazují existují ale také ukazatele typu void *, které mohou odkazovat na jakýkoliv typ dat uložený v paměti.). Ukazatele tedy existují nezávisle na proměnných, na které odkazují, a je na odpovědnosti programátora, aby neukazovaly na paměť nealokovanou. Ukazatele jsou velmi mocným nástrojem, protože C jazyk povoluje ukazatele nejen na data, ale i na funkce. Současně jsou ukazatele z hlediska přenositelnosti a rizika zhroucení programu při jejich nesprávném použití Achillovou patou jazyka. Na druhou stranu programátor má plnou zodpovědnost za alokaci paměti, není zde tedy závislost na automatickém dealokátoru paměti (garbage collector). Jazyky Java a C#, oba odvozené od C, používají méně univerzální způsob odkazování alokovaných proměnných, který snižuje pravděpodobnost chyby v programu. Jazyk C++, původně rozšíření jazyka C, ovšem zodpovědnost programátora za alokaci zachoval. Datové typy: char - Používá se pro znaky int - Používá se pro celá čísla float - Používá se pro desetinné číslo s plovoucí řádovou čárkou double - Používá se pro desetinné číslo s plovoucí řádovou čárkou s dvojnásobnou přesností void - Používá se pokud nepotřebujeme žádnou hodnotu (např. u funkcí) Řídící příkazy Řídící příkazy určují průběh zpracovávání programu. Jako takové tvoří páteř programů.

if - Příkaz if je jedním z příkazů jazyka C pro větvení programu (někdy nazývané také jako podmíněné příkazy). Jeho činnost je určena výsledkem testu podmínky, která je vyhodnocena jako pravdivá, nebo nepravdivá. Jednoduše řečeno, podmíněné činí rozhodnutí na základě vyhodnocení nějaké podmínky. if - else - K příkazu if můžete přidat else. Pokud tak učiníte, tak programu řeknete, co má dělat, i pokud bude podmínka nepravdivá. switch - Příkaz switch slouží k výběru jedné z několika větví programu, která se má provést v závislosti na nějaké celočíselné hodnotě. Podle hodnoty celočíselného výrazu se vybere jedna z větví case. Příkaz break na konci každé větve není povinný, ale pokud tam není, začne se po skončení větve provádět další větev v pořadí bez ohledu na hodnotu výrazu. Chceme-li tedy pro každou hodnotu provádět jedinou větev, je break nutný na konci každé větve kromě poslední. Větev default (je-li přítomna) se vykoná v případě, že hodnota výrazu není rovna ani jedné z hodnot uvedených za příkazy case. for - Příkaz cyklu for je jedním ze tří příkazů cyklu v jazyku C. Umožňuje opakovat jeden, nebo více příkazů. Cyklus for je mnohými programátory v jazyku C považován za jeho nejpružnější příkaz. Cyklus for se používá pro zadaný počet opakování příkazu, nebo bloku příkazu. while - Cyklus while je cyklus s podmínkou na začátku. Napřed se testuje podmínka, je-li platná, pak se provede tělo cyklu a znovu se testuje podmínka. Není-li platná, program pokračuje za cyklem. Není-li tedy podmínka platná při prvním příchodu na cyklus, neprovede se cyklus ani jednou. do-while - Cyklus do-while je cyklus s podmínkou na konci. Napřed se provede tělo cyklu, pak se testuje podmínka. Je-li platná, cyklus se provede znovu. Není-li platná, program pokračuje za cyklem. Tento cyklus se tedy provede vždy nejméně jednou. break a continue - Příkaz break slouží k okamžitému opuštění cyklu, bez ohledu na platnost podmínky. Příkaz continue slouží ke skoku na konec cyklu a znovu testování podmínky (v cyklu for skočí na inkrementaci, pak se znovu testuje podmínka, v cyklech while a do-while skočí na test podmínky). C++ xc++ je objektově orientovaný programovací jazyk, který vyvinul Bjarne Stroustrup a další v Bellových laboratořích AT&T rozšířením jazyka C. C++ podporuje několik programovacích stylů (paradigmat) jako je procedurální programování, objektově orientované programování a generické programování, není tedy jazykem čistě objektovým. V současné době patří C++ mezi nejrozšířenější programovací jazyky. Jazyk C je až na několik jasně definovaných výjimek podmnožinou C++. Jak uvádí Bjarne Stroustrup, všechny programy uvedené ve slavné učebnici jazyka C The C Programming Language od Briana W. Kernighana a Dennise M. Ritchieho jsou zároveň programy v C++. C# vysokoúrovňový objektově orientovaný programovací jazyk vyvinutý firmou Microsoft zároveň s platformou.net Framework, později schválený standardizačními komisemi ECMA (ECMA-334) a ISO (ISO/IEC 23270). Microsoft založil C# na jazycích C++ a Java (a je tedy nepřímým potomkem jazyka C, ze kterého čerpá syntaxi). Vlastnosti:

V C# neexistuje vícenásobná dědičnost - to znamená, že každá třída může být potomkem pouze jedné třídy. Toto rozhodnutí bylo přijato, aby se předešlo komplikacím a přílišné složitosti, která je spojena s vícenásobnou dědičností. Třída může implementovat libovolný počet rozhraní. Neexistují žádné globální proměnné a metody. Všechny funkce a metody musí být deklarovány uvnitř tříd. Náhradou za ně jsou statické metody a proměnné veřejných tříd. V Objektově orientovaném programování se z důvodu dodržení principu zapouzdření často používá vzor, kdy k datovým atributům třídy lze zvenčí přistupovat pouze nepřímo a to pomocí dvou metod get (accessor) a set (mutator). V C# lze místo toho definovat tzv. Property, která zvenčí stále funguje jako datový atribut, ale uvnitř Property si můžeme definovat get a set metody. Výhodou je jednodušší práce s datovým atributem při zachování principu zapouzdření. C# je typově bezpečnější než C++. Jediné výchozí implicitní konverze jsou takové, které jsou považovány za bezpečné jako rozšiřování Integerů (např. z 32 bitového na 64 bitový) nebo konverze z odvozeného typu na typ rodičovský. Neexistuje implicitní konverze z typu Integer na Boolean, ani mezi výčtovým typem enum a typem Integer. C# neobsahuje a ani nepotřebuje dopřednou deklaraci - není důležité pořadí deklarace metod. Jazyk C# je case sensitive - to znamená, že rozlišuje mezi velkými a malými písmeny. Identifikátory "hodnota" a "Hodnota" tedy nejsou na rozdíl od VB.NET ekvivalentní. Common Type System je unifikovaný typový systém, používaný všemi jazyky pod.net Framework, tedy i jazykem C# (dále například VB.NET). Všechny typy, včetně primitivních datových typů jako je Integer, jsou potomky třídy System.Object a dědí od ní i všechny její metody jako například ToString().

Vstup a výstup C Vstup a výstup v jazyce C je v informatice řešen souborem knihovních funkcí ze standardní knihovny jazyka C (libc, glibc a podobně), jejíž prototypy jsou deklarovány v hlavičkovém souboru <stdio.h>. Programovací jazyk C při operacích vstupu a výstupu využívá proudy bytů a nerozlišuje mezi vstupními a výstupními zařízeními, rourami a soubory, přičemž definuje standardní proudy (stdin, stdout a stderr). Proudy Na rozdíl od některých dřívějších programovacích jazyků, nemá jazyk C přímou podporu pro přímý přístup k datům souborů. Pro čtení uprostřed souboru musí programátor nejprve vytvořit proud, ve kterém pak pomocí funkce fseek nastaví ukazatel do místa v souboru, ze kterého následně bude číst nebo zapisovat. Použití proudů pro práci se soubory bylo zpopularizováno operačním systémem UNIX, který byl vyvíjen ve stejné době, jako programovací jazyk C. Celá řada moderních operačních systémů proudy z unixových systémů zdědila stejně, jako je mnoho programovacích jazyků zdědilo z jazyka C (např. PHP). Též do standardních knihoven jazyka C++ se promítají proudy (tzv. iostream). Otevírání souboru Soubor je otevírán použitím funkce fopen, která vrací I/O proud. Ten je připojen k danému souboru nebo jinému blokovému zařízení umožňujícímu operace čtení a zápis. V případě, že funkce selže, vrací nulový ukazatel (NULL). Související knihovní funkce freopen vykonává stejnou operaci, avšak nejprve zavře otevřený proud, který je uveden jako doplňující parametr. I/O proud je definován takto: Funkce fopen je wrapper, který na vyšší úrovni obaluje jednoduché systémové volání open jádra unixového operačního systému. Stejným způsobem jako fopen pracuje i funkce fclose, která poskytuje obálku pro systémové volání jádra close. Struktura FILE jazyka C se velmi často shoduje se souborovými deskriptory používanými v unixových systémech. V POSIXu je definována funkce fdopen, která inicializuje I/O proud z existujícího deskriptoru, přestože deskriptory jsou čistě unixová záležitost a nejsou obsaženy ve standardech jazyka C. Parametr mode, který využívají funkce fopen nebo freopen, musí být řetězec začínající jednou z následujících sekvencí či jejich kombinací:

Označení b znamená binární. Standardy jazyka C poskytují dva typy souborů textové a binární, ačkoli operační systém nemusí být schopen je rozlišovat. Textový soubor V režimu textového souboru je text uspořádán v řádcích, jejichž konce jsou označeny znakem nového řádku (zkratka EOL). Unixové systémy označují nový řádek znakem LF, zatímco DOS a Microsoft Windows používají kombinaci CR/LF. Při čtení z textového souboru je obvykle mapována sekvence EOL na znak LF, což slouží ke zjednodušení zpracování v programu. V případě, že je textový soubor zapisován, převádí se před vlastním zápisem EOL automaticky na znaky, které daný operační systém používá. Binární soubor V režimu binárního souboru je obsah souboru čten a zapisován operačním systémem bez úprav (obsah je doručen programu bez automatického převodu, tzv. přímý přístup, anglicky raw). Znak + (režim aktualizace) Když je soubor otevřen v režimu aktualizace (znak + na druhé nebo třetí pozici), může být na daném proudu použito čtení i zápis, avšak je-li po operaci zápisu nemůže být volána funkce čtení bez toho, aby mezi nimi byla volána funkce fflush nebo funkce pro změnu pozice ukazatele (fseek, fsetpos nebo rewind). Stejně tak čtení nemůže být následováno zápisem bez toho, aby mezi nimi byla též volána funkce pro změnu pozice ukazatele. Automatické vytvoření souboru Pokud při volání funkce otevření souboru v režimu zápisu nebo připojení za konec souboru požadované jméno neexistuje, pokusí se funkce soubor požadovaného jména vytvořit. Pokud operace selže, vrací se hodnotu NULL. Uzavření proudu Funkce fclose pracuje pouze s jedním argumentem, a to s ukazatelem na souborovou strukturu proudu určeného k zavření. Po zavření se uvolní paměť vyhrazená pro strukturu FILE * a vyprázdní se vyrovnávací paměť. Bez opětovného otevření proudu již není práce se souborem možná. Počet otevřených souborů je omezen, proto jestliže se souborem nebudeme již

pracovat, měli bychom jej uzavřít. Pokud proud neuzavřeme pomocí příkazu, uzavře se sám po ukončení programu. Ostatní jazyky Všechny ostatní, dnes používané jazyky vycházejí z C takže to je přibližně stejné. V jazyce java je např třída File atd.

Algoritmizace základních úloh Řadící algorytmy Selection sort (zkráceně Selectsort) je jednoduchý algoritmus uspořádávání s časovou složitostí O(N^2). Pro svou jednoduchou implementaci a nízký overhead bývá často používán pro uspořádávání malých množství dat. Princip 1. Najdeme prvek s nejmenší hodnotou v posloupnosti dat 2. Zaměníme ho s prvkem na první pozici 3. Na první pozici se nyní nachází správný prvek, zbytek posloupnosti se uspořádá opakováním těchto kroků pro zbylých n-1 prvků, dokud je n > 1 Implementace C:

Diagram

Insertion sort je jednoduchý řadicí algoritmus založený na porovnávání. Algoritmus Insert Sort pracuje tak, že prochází prvky postupně a každý další nesetříděný prvek zařadí na správné místo do již setříděné posloupnosti. Je to jeden z nejrychlejších algoritmů s kvadratickou časovou složitostí. Je asymptoticky pomalejší než pokročilé algoritmy jako třeba quicksort nebo mergesort, ale zato má jiné výhody: - jednoduchá implementace - efektivní na malých množinách - efektivní na částečně seřazených množinách (běží v čase O(N + d), kde d je počet transpozic prvků množiny) - efektivnější než většina ostatních O(N^2) algoritmů (selection sort, bubble sort), průměrný čas je N^2/4 a v nejlepším případě je dokonce lineární - řadí stabilně (nemění vzájemné pořadí prvků se stejnými klíči) - vyžaduje pouze O(1) paměti (kromě vlastního vstupu) - je to online algoritmus, dokáže řadit data tak, jak přicházejí na vstupu Ipmlementace:

Diagram

Bubble sort (též řazení záměnou) je implementačně jednoduchý řadicí algoritmus. Algoritmus opakovaně prochází seznam, přičemž porovnává každé dva sousedící prvky, a pokud nejsou ve správném pořadí, prohodí je. Porovnávání prvků běží do té doby, dokud není seznam seřazený. Pro praktické účely je neefektivní, využívá se hlavně pro výukové účely či v nenáročných aplikacích. Algoritmus je univerzální (pracuje na základě porovnávání dvojic prvků), pracuje lokálně (nevyžaduje pomocnou paměť), je stabilní (prvkům se stejným klíčem nemění vzájemnou polohu), patří mezi přirozené řadicí algoritmy (částečně seřazený seznam zpracuje rychleji než neseřazený). Průměrná i nejhorší asymptotická složitost bubble sortu je O(n^2). Tento algoritmus řazení je jedním z nejpomalejších, oproti jiným algoritmům se stejnou složitostí vyžaduje velké množství zápisů do paměti a tím neefektivně pracuje s cache procesoru. Výhody X nevýhody Bublinkové řazení je z hlediska naprogramování nejjednodušším algoritmem pro třídění. Výhodou rovněž je, že je stabilní, tzn. nemění pozici prvků které při porovnávání vyhodnoceny jako ekvivalentní. Bublinkové třídění je jeden z mála třídících algoritmů, kterému stačí sekvenční přístup k datům (algoritmus nepotřebuje ve tříděné posloupnosti provádět žádné skoky). V minulosti se proto používal ke třídění dat na páskových médiích, dnes jej lze s výhodou použít například při třídění jednosměrně zřetězeného spojového seznamu. Bublinkové třídění se používá například pro výuku programování, nebo pro třídění malých polí, nebo polí která jsou již částečně setříděna. Vzhledem k vysokému výkonu současných počítačů může mít "malé" pole i několik tisíc prvků, avšak pro třídění opravdu velkých polí je "bubblesort" naprosto nevhodný. Pokud trvá setřídění např. 10 prvků dlouhého pole jednotku času, pak při bublinkovém třídění 1000 prvků spotřebujeme 10000 jednotek času, zatímco při použití kvalitního algoritmu pouze 200 jednotek času. Implementace: Diagram:

Quicksort neboli rychlé (rekurzivní) řazení do tříd je jeden z nejrychlejších známých algoritmů řazení založených na porovnávání prvků. Jeho průměrná časová složitost je pro algoritmy této skupiny nejlepší možná (O(N log N)), v nejhorším případě (kterému se ale v praxi jde obvykle vyhnout) je však jeho časová náročnost O(N²). Další výhodou algoritmu je jeho jednoduchost. Základní myšlenkou quicksortu je rozdělení řazené posloupnosti čísel na dvě přibližně stejné části (quicksort patří mezi algoritmy typu rozděl a panuj). V jedné části jsou čísla větší a ve druhé menší, než nějaká zvolená hodnota (nazývaná pivot). Pokud je tato hodnota zvolena dobře, jsou obě části přibližně stejně velké. Pokud budou obě části samostatně seřazeny, je seřazené i celé pole. Obě části se pak rekurzivně řadí stejným postupem. Největším problémem celého algoritmu je volba pivota. Pokud se daří volit číslo blízké mediánu řazené části pole, je algoritmus skutečně velmi rychlý. V opačném případě se jeho časová složitost blíží O(N^2). Přirozenou metodou na získání pivota se pak jeví volit za pivot medián. Hledání mediánu (a obecně k-tého prvku) v posloupnosti běží v lineárním čase k počtu prvků, tím dostaneme složitost O(Nlog2N) v nejhorším případě. Nicméně tato implementace není příliš rychlá z důvodu vysokých konstant schovaných v O notaci. Proto existuje velké množství alternativních způsobů, které se snaží efektivně vybrat pivota co nejbližšího mediánu. Zde je seznam některých metod: První prvek popřípadě kterákoli jiná fixní pozice. Velmi nevýkonná především na částečně seřazených množinách. Náhodný prvek často používaná metoda. Lze dokázat, že pokud je pozice pivotu skutečně náhodná, algoritmus poběží v O(N log N)). Skutečně náhodná čísla generují ale pouze hardwarové generátory, které nemusí dodávat data dostatečně rychle. V praxi mnohdy stačí použít pseudonáhodný algoritmus. Metoda mediánu tří případně pěti, či libovolné jiné konstanty. Pomocí pseudonáhodného algoritmu (používají se i fixní pozice) se vybere X prvků z množiny, ze kterých se použitím některého primitivního řadicího algoritmu najde medián a ten je zvolen za pivota. Přestože Quicksort nemá zaručenou časovou složitost O(N log2 N)), reálné aplikace a testy ukazují, že na pseudonáhodných datech je vůbec nejrychlejší ze všech obecných řadicích algoritmů (tedy i rychlejší než Heapsort a Mergesort, které jsou formálně rychlejší). Maximální časová náročnost O(N²) ho však diskvalifikuje pro použití v kritických aplikacích. Výhody X nevýhody: Jak již bylo zmíněno, tento algoritmus je ve většině běžných případů nejrychlejší, což může být při řazení rozsáhlých posloupností hlavním požadavkem. Obecně je nestabilní. Může být upraven tak, aby byl stabilní, avšak na to je potřeba dodatečná paměť. Rychlost výpočtu je většinou vynikající, avšak tento algoritmus vyžaduje více než jiné pečlivou implementaci. Zde uvedená základní rekurzivní verze algoritmu (tj. bez sofistikovanějšího výběru pivota a bez modifikace proti přetečení zásobníku), může být pro nasazení v praxi naprosto nevhodná. Základní quicksort je nejpomaleší při třídění již setříděných nebo převážně setříděných polí. Vzhledem k tomu že nejde o stabilní řadící algoritmus a vzhledem k nutnosti obcházet jeho nedostatky mohou být knihovní funkce pro quicksort na různých systémech a v různých knihovnách implementovány různým způsobem. To znamená, že při zavolání knihovní