Teoretické základy informatiky pro ekonomy (pracovní materiál)

Podobné dokumenty
Identifikátor materiálu: ICT-1-05

VY_32_INOVACE_INF.15. Dějiny počítačů II.

1 DĚJINY POČÍTAČŮ PŘEDCHŮDCI POČÍTAČŮ NULTÁ GENERACE PRVNÍ GENERACE (1945 AŽ 1951) DRUHÁ GENERACE (1951 AŽ 1965)...

1 DĚJINY POČÍTAČŮ PŘEDCHŮDCI POČÍTAČŮ ABAKUS LOGARITMICKÉ TABULKY MECHANICKÉ KALKULÁTORY NULTÁ GENERACE...

Historie výpočetních pomůcek

(12) Historie počítačů. Vznik před 5000 lety Usnadňoval počítání s čísly Dřevěná / hliněná destička, do níž se vkládali kamínky (tzv.

1 Historie výpočetní techniky

2.1 Historie a vývoj počítačů

Jak to celé vlastně začalo

Masarykova střední škola zemědělská a Vyšší odborná škola, Opava, příspěvková organizace

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

Trocha obrázků na začátek..

Historie výpočetní techniky. Autor: Ing. Jan Nožička SOŠ a SOU Česká Lípa VY_32_INOVACE_1121_Histrorie výpočetní techniky_pwp

Martin Hejtmánek hejtmmar

HISTORIE. Principy počítačů I. Literatura. Počátky historie počítačů. Počátky historie počítačů. Dnešní chápání počítače

NULTÁ GENERACE reléové obvody 30. a 40. let minulého století Harvard Mark I Harvard Mark II Konráda Zuseho Z2 SAPO

1. Historie počítacích strojů Předchůdci počítačů. 2. Vývoj mikropočítačů Osmibitové mikropočítače Šestnácti a dvaatřicetibitové počítače IBM

Historie výpočetní techniky

Lekce 01 Úvod do algoritmizace

Historie počítačů. 0.generace. (prototypy)

Úvod SISD. Sekvenční výpočty SIMD MIMD

Architektura počítačů

První počítače mechanické kalkulátory Nejstarší počítač: Abakus

Práce v textovém editoru

Historie počítačů 1. Předchůdci počítačů Počítače 0. a 1. generace

Algoritmizace prostorových úloh

ZÁKLADY PROGRAMOVÁNÍ. Mgr. Vladislav BEDNÁŘ /14

Popis výukového materiálu

Hardware - komponenty počítačů Von Neumannova koncepce počítače. Von Neumannova koncepce počítače

VÝUKOVÝ MATERIÁL. 3. ročník učebního oboru Elektrikář Přílohy. bez příloh. Identifikační údaje školy

Stručná historie výpočetní techniky část 1

Jak do počítače. aneb. Co je vlastně uvnitř

Architektury počítačů a procesorů

Přednášky o výpočetní technice. Hardware teoreticky. Adam Dominec 2010

0. Nultá generace. Historie počítačů

Princip funkce počítače

Základy algoritmizace

Pohled do nitra mikroprocesoru Josef Horálek

Logické řízení. Náplň výuky

1 Osobní počítač Obecně o počítačích Technické a programové vybavení... 4

Osnova. Základy informatiky. 1. Přednáška Historie. Úvod. Kategorie počítačů z pohledu hardware

Algoritmus. Přesné znění definice algoritmu zní: Algoritmus je procedura proveditelná Turingovým strojem.

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

1 Strukturované programování

HISTORIE VÝPOČETNÍ TECHNIKY. Od abakusu k PC

Úvod do informačních technologií

VÝUKOVÝ MATERIÁL. 3. ročník učebního oboru Elektrikář Přílohy. bez příloh. Identifikační údaje školy

Střední průmyslová škola Zlín

Algoritmy a algoritmizace

Vlastnosti algoritmu. elementárnost. determinovanost. rezultativnost. konečnost. hromadnost. efektivnost

Z{kladní struktura počítače


Programování. řídících systémů v reálném čase. Střední odborná škola a Střední odborné učiliště - - Centrum Odborné přípravy Sezimovo Ústí

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

Inovace výuky prostřednictvím ICT v SPŠ Zlín, CZ.1.07/1.5.00/ Vzdělávání v informačních a komunikačních technologií

Integrovaná střední škola, Sokolnice 496

Gymnázium a Střední odborná škola, Rokycany, Mládežníků 1115

Základní pojmy. Program: Algoritmus zapsaný v programovacím jazyce, který řeší nějaký konkrétní úkol. Jedná se o posloupnost instrukcí.

Gymnázium Vysoké Mýto nám. Vaňorného 163, Vysoké Mýto

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

Vývojové diagramy 1/7

Informační a komunikační technologie

Historie, současnost a budoucnost výpočetní techniky

Úvod do informačních technologií

INFORMATIKA. Jindřich Kaluža. Ludmila Kalužová

Osobní počítač. Zpracoval: ict Aktualizace:

Algoritmus. Cílem kapitoly je seznámit žáky se základy algoritmu, s jeho tvorbou a způsoby zápisu.

Počítací stroje. David Horák. Škomam

Popis výukového materiálu

Profilová část maturitní zkoušky 2013/2014

Historie výpočetní techniky 1. část. PRVOHORY Staré výpočetní pomůcky

Algoritmizace- úvod. Ing. Tomáš Otáhal

OPS Paralelní systémy, seznam pojmů, klasifikace

Klasifikace počítačů a technologické trendy Modifikace von Neumanova schématu pro PC

Základní pojmy a historie výpočetní techniky

5. Umělé neuronové sítě. Neuronové sítě

3. Maturitní otázka PC komponenty 1. Počítačová skříň 2. Základní deska

ALGORITMIZACE A PROGRAMOVÁNÍ

Algoritmizace. Obrázek 1: Přeložení programu překladačem

5. Historie výpočetní techniky Druhy počítačů

Profilová část maturitní zkoušky 2017/2018

Matematika - 6. ročník Vzdělávací obsah

Abakus Antikythérský mechanismus

1. Informace a informatika

Profilová část maturitní zkoušky 2014/2015

Tabulkový procesor. Základní rysy

Počítač jako elektronické, Číslicové zařízení

ALGORITMIZACE Příklady ze života, větvení, cykly

ANOTACE vytvořených/inovovaných materiálů

ZŠ a MŠ Strunkovice nad Blanicí

Architektura počítačů

M - 2. stupeň. Matematika a její aplikace Školní výstupy Žák by měl

Počítač jako prostředek řízení. Struktura a organizace počítače

Reálná čísla a výrazy. Početní operace s reálnými čísly. Složitější úlohy se závorkami. Slovní úlohy. Číselné výrazy. Výrazy a mnohočleny

VISUAL BASIC. Přehled témat

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

Historie počítacích strojů a počítačů. Mgr. David Frýbert

Principy počítačů. Historie. Martin Urza

Transkript:

D:\Iva\Prace\Skripta\tzi\TZI_pro_ekonomy_12.doc - 1 - Evropský polytechnický institut, s.r.o. 1. soukromá vysoká škola na Moravě Kunovice Teoretické základy informatiky pro ekonomy (pracovní materiál) Oldřich Kratochvíl Jindřich Petrucha Robert Jurča Dan Slováček 2012 Naposledy vytištěno 5.3.2013 8:55:00 1

D:\Iva\Prace\Skripta\tzi\TZI_pro_ekonomy_12.doc - 2 - Obsah OBSAH... 2 ÚVOD... 5 1 ÚVOD DO PROBLEMATIKY... 7 1.1 JAK PRACUJE MOZEK ČLOVĚKA... 7 1.2 HISTORIE STROJŮ NA ZPRACOVÁNÍ DAT... 9 1.3 ARCHITEKTURA POČÍTAČŮ... 15 1.3.1 Harwardská koncepce... 15 1.3.2 Von Neumannovo schéma počítače... 15 1.3.3 Sběrnicová struktura současné pojetí PC... 16 1.4 UMĚLÁ INTELIGENCE... 17 1.5 SHRNUTÍ... 18 1.6 OTÁZKY... 19 2 ALGORITMIZACE EKONOMICKÝCH ÚLOH... 21 2.1 ALGORITMUS A VÝVOJOVÝ DIAGRAM... 21 Algoritmus, který má řešit nějakou úlohu je třeba ověřit (verifikovat jeho správnou funkci).... 21 2.2 VYBRANÉ ÚLOHY NA PROCVIČENÍ ZÁKLADŮ ALGORITMŮ... 23 2.3 UKÁZKA VYUŽITÍ TECHNOLOGIÍ ALGORITMŮ V PRÁCI MANAŽERA A ÚČETNÍHO... 26 2.4 CYKLUS... 34 2.4.1 Cyklus s podmínkou na začátku cyklu... 34 2.4.2 Cyklus s podmínkou na konci cyklu... 36 2.4.3 Cyklus s předem známým počtem opakování... 37 2.5 HARDWARE A SOFTWAROVÉ VYBAVENÍ PC... 38 2.6 OCHRANNÝ SYSTÉM PROTI VIRŮM... 41 2.7 SHRNUTÍ... 41 2.8 OTÁZKY... 42 3 PŘEPIS VÝVOJOVÉHO DIAGRAMU DO PROGRAMOVACÍHO JAZYKA C... 43 3.1 STRUKTURA PROGRAMU V JAZYCE C... 43 3.2 JAK NAPSAT PROGRAM V PROSTŘEDÍ DEV-C++... 44 3.3 ÚVOD DO SYNTAXE JAZYKA C... 47 3.4 VĚTVENÍ PROGRAMU... 64 3.4.1 if (výraz) příkaz; je příkaz pro větvení programu (tzv. podmíněný příkaz).... 64 3.4.2 if (výraz) příkaz 1 else příkaz 2;... 64 3.4.3 Blok příkazů... 65 3.4.4 Aritmetické operátory... 65 3.4.5 Relační operátory, které můžeme v jazyce C použít:... 67 3.4.6 Relační operátory mají nižší prioritu než aritmetické operátory.... 67 3.4.7 Aplikace algoritmů větvení... 67 3.4.8 Verifikace vývojového diagramu... 76 3.4.9 Přehled struktury programu s využitím podprogramů:... 79 3.4.10 Pole... 81 3.4.11 Cyklus... 82 3.4.12 Aplikace programu C do práce ekonoma... 100 3.5 SHRNUTÍ... 105 3.6 SLOVNÍ ZÁSOBA V JAZYCE ANGLICKÉM:... 108 3.7 OTÁZKY... 111 4 KÓDOVÁNÍ INFORMACE V POČÍTAČI... 115 4.1 PRINCIPY ASCII KÓDU... 115 4.2 ASCII TABULKA A JEJÍ POUŽITÍ... 116 4.3 ČESKÝ JAZYK A JEHO KÓDOVÁNÍ NA POČÍTAČI... 120 4.4 PRINCIPY ŠIFROVÁNÍ DAT NA POČÍTAČI... 124 4.5 PRINCIPY ZABEZPEČENÍ PŘENOSU DAT NA INTERNETU... 126 5 INTERNET A PRÁCE S INFORMACEMI... 129 5.1 CÍLOVÉ ZNALOSTI A DOVEDNOSTI... 129 5.2 KLÍČOVÁ SLOVA... 129 5.3 VYMEZENÍ ZÁKLADNÍCH POJMŮ... 129 5.4 ZÍSKÁVÁNÍ INFORMACÍ V PROSTŘEDÍ INTERNETU, INTERNETOVÉ VYHLEDÁVAČE... 131 Naposledy 2 vytištěno 5.3.2013 8:55:00

D:\Iva\Prace\Skripta\tzi\TZI_pro_ekonomy_12.doc - 3-5.4.1 INTERNETOVÉ VYHLEDÁVAČE... 131 5.5 DIGITÁLNÍ SPOLEČNOST, ORGANIZACE VĚDOMOSTÍ A JEJICH ZÍSKÁVÁNÍ... 136 5.5.1 ZÍSKÁVÁNÍ INFORMACÍ... 138 5.6 KONTROLNÍ OTÁZKY... 140 5.7 NÁMĚTY K ZAMYŠLENÍ... 140 5.8 LITERATURA... 140 LITERATURA... 142 Naposledy vytištěno 5.3.2013 8:55:00 3

D:\Iva\Prace\Skripta\tzi\TZI_pro_ekonomy_12.doc - 4 - Naposledy 4 vytištěno 5.3.2013 8:55:00

D:\Iva\Prace\Skripta\tzi\TZI_pro_ekonomy_12.doc - 5 - Úvod Úkolem tohoto studijního textu je vybudovat u posluchačů teoretické základy informatiky ve specializaci pro správce informačních systémů, podnikové ekonomiky a manažery. Předmět vytváří základ pro studium dalších předmětů. Jeho obsahem je teoretický základ k problematice realizace informačních systémů. Vymezuje pojem algoritmus a způsob popisu algoritmů. Studenti jsou seznámeni s datovými strukturami a metodou návrhu algoritmů. Jsou jim vysvětleny základní pojmy z teorie množin a s metodami využití teorie grafů při řešení problémů. Dále se studenti seznámí s algoritmizací na bázi strukturovaného jazyka nebo jiného objektového jazyka, s jednotlivými základními a strukturovanými typy jejich implementací a využití při vědeckotechnických výpočtech. Jsou jim vysvětleny úlohy hromadného zpracování dat a práce se soubory na bázi tohoto jazyka. Pochopí význam a použití rekurzivních algoritmů. Praktické využití dovedností vyústí v aplikaci programu na bázi objektového jazyka pro zpracování dat na disku v oblasti jednoduché databáze nebo zpracování výpočtů měření s jejich grafickým znázorněním. Jako informační zdroje budou sloužit ukázkové programy na disku a sbírky úloh z programování se zdrojovými texty v objektovém jazyce. Předmět bude sloužit jako základ pro další nadstavbu v oblasti složitějších algoritmů, které mohou být implementovány v odlišném jazyce. Součástí práce studenta je vypracování semestrálního projektu ve spolupráci se specialistou z oboru. Studijní text je profesně orientovaný a člení se do 7 kapitol: Naposledy vytištěno 5.3.2013 8:55:00 5

D:\Iva\Prace\Skripta\tzi\TZI_pro_ekonomy_12.doc - 6 - Naposledy 6 vytištěno 5.3.2013 8:55:00

D:\Iva\Prace\Skripta\tzi\TZI_pro_ekonomy_12.doc - 7-1 Úvod do problematiky Co bude posluchač po prostudování kapitoly znát: 1. Vývoj technologií pro automatizaci výpočtů. 2. Způsob práce mozku a paměti při zpracování informací. 3. Definovat počítač, příkaz a program 4. Popsat hardwarské a von Neumannovo schéma počítače a jejich rozdíl v pojetí. 5. Popsat sběrnicové pojetí PC. 1.1 Jak pracuje mozek člověka Mozek člověka se skládá ze dvou částí tzv. levé a pravé hemisféry. Každá z nich má svoji specifickou funkci: Výzkumy ukazují, že levá hemisféra ovládá pravou polovinu těla, je sídlem logiky, řeči a vůle jedince. Zabezpečuje naše schopnosti práce s daty, fakty, schopnost posuzovat váhy a míry, provádět matematické operace. Je sídlem analytického myšlení, přístupů k systematickému myšlení, sídlem citu pro řád. Hlavní funkcí levé hemisféry je lineární zpracování informací, logika, postupný analytický proces a nepřetržité spojení s našimi minulými zkušenostmi uloženými v paměti. Je určená pro vnímání a plánování času. Levá hemisféra se specializuje na vědu, matematiku a zpracování řeči. [1] Obr. č. 1: Struktura mozku Zdroj: [1] Pravá hemisféra ovládá levou polovinu těla, zapojuje fantazii a tvořivost, vnímání obrázků, schémat, barev, grafických prvků, emocí (pocity úzkosti, radosti, vegetativní nervový systém), chutí, vůní, hudby a rytmu. Pravá hemisféra se pak, jak uvádí, podílí převážně na zpracování vizuálních a prostorových informací, vytváří analogie. Chce dospět k syntéze a mít přehled. Umělecké, hudební a tvořivé schopnosti jsou na pravé hemisféře silně závislé. Pravá hemisféra je sídlem intuice, spontánnosti, hravosti, nadšení, představivosti a podvědomí. Pravá hemisféra se specializuje na vnímání melodie, tónů, barvy zvuku a harmonie, zatímco levé hemisféře náleží vnímání rytmu, vysvětluje dále. Pravá hemisféra dokáže pojmout všechny informace najednou, levá hemisféra informace analyzuje postupně, po malých částech. Právě proto má pravá hemisféra přístup k neviditelnému moři informací, je s touto inteligentní energií v kontaktu převážně podvědomě. Vědomě se s ní můžeme spojit pouze tehdy, když jsou obě hemisféry harmonicky synchronizované. [3] Lidé se liší právě tím, jak jsou schopní využívat obě poloviny mozku. Je třeba naučit se využívat obou částí mozku. Naposledy vytištěno 5.3.2013 8:55:00 7

D:\Iva\Prace\Skripta\tzi\TZI_pro_ekonomy_12.doc - 8 - Člověk, který zatěžuje levou hemisféru, myslí ve slovech, analyzuje věci, dostává se od velkých celků k detailům. Ale vždy musí postupovat krok za krokem, musí se tedy na svou činnost hodně soustředit, stojí ho to hodně síly. Vypracovává pravidla a má zájem je dodržovat. Je tedy zaměřen konzervativně. Znejistí, když něco neodpovídá jeho představě na základě dřívějších zkušeností. Někdy může bezohledně prosazovat své myšlenky a přiklání se k autoritářskému způsobu vedení. Pracuje přesně, soustředěně, detailně, ale může se takto stát malým dříčem. Nemá rád pokusy, u nichž není zaručený předem očekávaný výsledek, nenávidí rizika a nejistotu, tím ale může blokovat kreativitu ostatních a využití všech schopností jeho spolupracovníků. Stále hledá odpovědi, ne vždy však hledá důležité otázky. Vůbec nemá rád otázky, které nemůže zodpovědět. Jeho potřeba jistoty vyvolává také přehnaný pocit sebehodnocení a neustálé kontroly, což vyvolává nervózní napětí v okolí, v komunikaci a vede ke stresu. Naopak člověk, který využívá více pravou hemisféru, myslí v obrazech. Má rád přehled, pravidla, zákonitosti ho nezajímají. Může tedy neustále inovovat a tvořit nová pravidla. V týmu je otevřený pro příjem nových informací a je vždy připravený své stanovisko znovu zvážit. Dovede pochopit osobité vlastnosti různých lidí a k tomu je třeba mít pozorovací nadání a schopnost empatie. Jedná spontánně, intuitivně, rád experimentuje. [4] Všichni bychom měli vědět, jak náš mozek pracuje s daty, která snímají jeho čidla oči, uši, sluch, hmat atd. Je zcela jisté, že mozek musí mít možnost odfiltrovat informace, které mají podprahový význam pro naše chování v daný okamžik a naopak musí uchovat a následně vystavit podle potřeby ty informace, které pro nás v následujícím čase mají smysl. Tyto funkce zabezpečují tři typy paměti: 1. senzorická, 2. krátkodobá a 3. dlouhodobá. P Senzorická (ultrakrátká) paměť je vědomá část paměti, která uchovává informace přicházející ze smyslů. Ty jsou podrženy po dobu nezbytně nutnou ke zpracování a rozhodnutí, zda jsou informace důležité, tedy vhodné k dalšímu zpracování či nikoliv. Pokud ano, postupují dále do krátkodobé či dlouhodobé paměti. Krátkodobá paměť, (nebo také paměť pracovní, operativní) je vědomá aktivní část paměti, ve které se odehrává většina psychických procesů (např. řešení aktuálních problémů). Zpracovávají se v ní informace dodané senzorickou pamětí a informace vyvolané z paměti dlouhodobé, která není dostupná vědomě. Krátkodobá paměť dokáže uchovat vjemy smyslových orgánů a emoce pomocí přeměny (kódování) v mentální reprezentace. Ty může paměť dále zpracovávat a uchovávat. Krátkodobá paměť je omezena na 5-9 prvků (tzv. magické číslo 7±2 ), které při zamezení opakování, uchová na 15-20 sekund. Kapacitu lze zvýšit spojováním prvků do logických celků. Pro zachování informace v krátkodobé paměti, je třeba si informaci opakovat, jinak je paměťová stopa nenávratně ztracena. P Dlouhodobá paměť je relativně pasivní část paměti uchovávaná v nevědomí. Její kapacita je hypoteticky neomezená. Ukládá významné zkušenosti, např. poznatky nutné k vykonávání nějaké činnosti či poznatky životně důležité. Vštěpování informace do dlouhodobé paměti trvá přibližně 30 minut, a může probíhat buďto záměrně (např. mechanickým opakováním - memorováním), nebo bezděčně. Lépe zapamatovatelné jsou smysluplné obsahy a logické celky což může vést ke zkreslování vzpomínek. Při začleňování nových informací se totiž proměňují i stávající znalosti. Lépe se také pamatují poznatky, které mají citový nádech a které jsou často vybavovány. Takové informace paměť považuje za důležité a tudíž i nutné k dlouhodobému uchování. Biologicky staví dlouhodobá paměť na strukturální nebo molekulární změně dendritů (části neuronu). Počítač je externí zařízení mozku. Chcete-li komunikovat s Angličanem, potřebujete mluvit anglicky. Chcete-li komunikovat s počítačem, potřebujete znát jeho jazyk. Moderní manažer, ekonom nebo účetní používá počítače ve své práci on-line. Naposledy 8 vytištěno 5.3.2013 8:55:00

D:\Iva\Prace\Skripta\tzi\TZI_pro_ekonomy_12.doc - 9 - Jak řeší mozek problém - sekvenčně krok po kroku, algoritmem. Např.: Vypočítej si odvody ze své hrubé mzdy 1 Z MC 2 Načti hrubou mzdu Hrubá mzda 3 Vypočítej odvod Odvod 4 Vypiš hodnotu na papír 5 K Obr. č. : Příklad restrukturalizace problému Mozek si problém restrukturizuje rozloží do posloupnosti kroků tak, aby jej postupně vyřešil. Takovému postupu říkáme algoritmizace a lze jej popsat algoritmem. K řešení problému mozek potřebuje: Vstupní zařízení: oko, ucho, Výstupní zařízení: hlasivky, ruka ke psaní, atd. Řadič který řídí posloupnost kroků V našem případě.podle výše uvedeného algoritmu v krocích 1 až 5. 1 2 3 4 5 Zahájení programu Načtení hrubé mzdy očima z papíru a uložení do paměti Výpočet výše odvodů a hrubé mzdy a uložení do paměti Vypsání hodnoty odvodů na papír Ukončení práce Mimo algoritmované úlohy řeší mozek i problémy, které nelze algoritmovat lásku, cit, úctu, atd. I když je kapacita mozku veliká, nelze do ní vložit všechny poznatky lidstva. Proto mozek mimo interní knihovny znalostí využívá i knihovny externí vědecké knihovny, informace na internetu, informace z databází, atd. Podobně je na tom i počítač. 1.2 Historie strojů na zpracování dat Cílem lidí bylo postavit stroj, který by měl vlastnosti lidského mozku. Mluvíme o počítači. První zařízení, která se později vyvinula v dnešní počítače, byla velmi jednoduchá a byla založena na mechanických principech. Naposledy vytištěno 5.3.2013 8:55:00 9

D:\Iva\Prace\Skripta\tzi\TZI_pro_ekonomy_12.doc - 10 - Abakus vznikl přibližně před 5000 lety. Je prvním známým nástrojem, který usnadňoval počítání s čísly. Původně šlo jen o zaprášený kámen (starohebrejské slovo abaq znamená prach ), který se používal v Babylonii již od poloviny třetího tisíciletí př. n. l. Nejstarším dochovaným exemplářem je salamiská tabulka, která pochází zhruba z roku 300 př. n. l., avšak historik Hérodotos popsal příklady pro tabulku tohoto typu již o více než století dříve. Ve starověkém Řecku a Římě se používala dřevěná nebo hliněná destička, do které se vkládaly kamínky ( calculli ) odtud název kalkulačka. Obr. č. 2: Abakus Zdroj: [5] První mechanický kalkulátor vznikl někdy mezi roky 150 až 100 před Kristem se objevil první stroj, označovaný jako mechanický počítač, pojmenovaný Mechanismus z Antikythéry (podle řeckého ostrova Antikythera, kde byl objeven vrak lodi). Podle dnešních poznatků sloužil k výpočtu polohy vesmírných těles. Mechanizmus se skládal se z více než třiceti ozubených koleček seřazených v rovnostranných trojúhelnících a na svou dobu byl skutečně miniaturní. Zajímavé je, že mechanizmus je nejspíš založen na heliocentrickém principu (tedy Země obíhá kolem Slunce), kterému se v Evropě začalo dařit až o osmnáct století později. Roku 1614 objevil John Napier novou matematickou metodu, umožňující realizovat násobení a dělení pomocí sčítání a odčítání s využitím logaritmů. Následně byly v Anglii sestaveny první logaritmické tabulky. Po nich následovalo logaritmické pravítko, kde byla reálná čísla reprezentována vzdáleností na ose. Logaritmické pravítko bylo prakticky beze změny používáno dalších 200 let, dokonce bylo používáno i k provádění výpočtů v rámci programu Apollo. Obr. č. 3:Logaritmické pravítko Zdroj: [6] Další známý mechanický kalkulátor sestavil roku 1623 Wilhelm Schickard. Byl sestaven z ozubených koleček z hodinových strojků (proto bývá nazýván počítací hodiny ), uměl sčítat a odčítat šesticiferná čísla a měl být prakticky použit Johannem Keplerem při astronomických výpočtech. Známý francouzský matematik, fyzik a teolog Blaise Pascal vyrobil ve svých 19 letech v roce 1642 počítací stroj, který uměl sčítat a odčítat (Pascaline). Obr. č. 4: Mechanický kalkulátor z ozubených koleček Zdroj: [7] Obr. č. 5: Mechanický kalkulátor Zdroj: [8] V roce 1725 použil Basile Bouchon děrovaný papír pro řízení tkalcovského stavu. O rok později v roce 1726 vylepšil Jean-Baptiste Falcon funkci spojením jednotlivých papírových karet, čím zjednodušil úpravy a změny programu. V roce1801 použil francouzský vynálezce Joseph Marie Jacquard v tkalcovském stavu děrné štítky, které bylo možné vyměnit beze změny v mechanice samotného stavu. Tento okamžik je považován za milník v programovatelnosti strojů. Naposledy 10 vytištěno 5.3.2013 8:55:00

D:\Iva\Prace\Skripta\tzi\TZI_pro_ekonomy_12.doc - 11 - Roku 1820 si dal patentovat francouzs Thomas de Colman mechanický potíačová stroj tzv. Arithmometr. Ten pracoval na principu Lebnizova ozubeného válce a sady ozubených kol. Posun kol byl realizován kličkou. Měl sečítat, odečíta, násobit a dělit. Obr. č. 6: Thomasův Arithmometr Zdroj: [8] Nápad použít děrné štítky k programování mechanického kalkulátoru uplatnil v roce 1835 Charles Babbage. Děrný štítek obsahoval znaky ve formě kombinace dírek a umožňoval obsah opakovaně použít. Obr. č. 7: Řídící jednotka Ch. Babbage Zdroj: [8] Obr. č. 8: Děrný štítek Zdroj: [10] K uchovávání dat a jejich pozdějšímu dalšímu využití použil poprvé děrné štítky Herman Hollerith, který se svou metodou vyhrál v roce 1890 v USA konkurz na sčítání lidu (to předchozí totiž trvalo plných 7 let). Jeho firma se později stala základem slavné počítačové společnosti IBM a tento charakter zpracování dat se udržel dalších 100 let. Pro analýzu a další zpracování dat na děrných štítcích byly vyvíjeny specializované stroje děrovače, tabelátory a třídiče. Technologie děrných štítků o něco později umožnila návrhy prvních programovatelných strojů. Programování spočívalo v tom, že programátor předal své děrné štítky ke zpracování do výpočetního střediska a čekal, jestli získá výsledky nebo výpis chybových hlášení. Pokud došlo k chybě, musel zpětně zapracovat opravu do svého programu, který mezi tím již dále vylepšil. Poté znovu odeslal štítky do výpočetního střediska a celý cyklus se opakoval. Za počítače nulté generace jsou považovány elektromechanické počítače využívající většinou relé. Pracovaly většinou na kmitočtu okolo 100 Hz. Hybnou silou vývoje nulté generace se stala druhá světová válka, kdy došlo paralelně k velkému pokroku v různých částech světa. První, komu se podařilo sestrojit fungující počítací stroj, byl německý inženýr Konrad Zuse. V roce 1934 začal pracovat na konstrukci mechanické výpočetní pomůcky a po řadě různých zdokonalení dokončil v roce 1936 základní návrh stroje pracujícího v dvojkové soustavě s aritmetikou v plovoucí čárce a programem na děrné pásce (jako nosič byl použit kinofilm). Neznalost prací Babbageho a jeho následovníků však měla za následek, že Zuse do svého projektu nezahrnul podmíněné skoky. Přes tento nedostatek však můžeme tvrdit, že roku 1938 spatřil světlo světa první počítač nazvaný Z1. Byl ještě elektromechanický s kolíčkovou pamětí na 16 čísel a byl velmi poruchový, pro praktické použití nevhodný. Naposledy vytištěno 5.3.2013 8:55:00 11

D:\Iva\Prace\Skripta\tzi\TZI_pro_ekonomy_12.doc - 12 - Obr. č. 9: Počítač Z1 Zdroj: [11] Zuse proto přistoupil ke stavbě počítače Z2, který již obsahoval asi 200 relé. Paměť však byla stále ještě mechanická, převzatá ze Z1. Potom se Konrád Zuse spojil s Helmutem Schreyrem a společně se pustili do vývoje ještě výkonnějšího počítače Z3, který dokončil v roce 1941. Tento první prakticky použitelný počítač na světě obsahoval 2600 elektromagnetických relé a byl užíván též k výpočtům charakteristik balistických raket V2. Pracoval ve dvojkové soustavě a prováděl až 50 aritmetických operací s čísly v pohyblivé řádové čárce za minutu (ani ne jedna za sekundu). Paměť byla na tehdejší dobu velká, 64 čísel po 22 bitech. Údaje se ručně zadávaly pomocí klávesnice. Počítač byl v roce 1944 zničen při náletu. Obr. č. 10: Relé Zdroj: [13] Obr. č. 11: Relé Zdroj: [12] oku 1943 zkonstruoval v Bletchley Park anglický inženýr Tomáš H. Flowers (1905-1998) prototyp počítače určeného k lámání německých šifer, vytvářených šifrovacími stroji Enigma a armádními dálnopisy (Schlüsselzusatz 40; SZ 40, pak T52; ve spojeneckém kódu FISH Sturgeon a Tunny), který se nazýval Colossus Mark I. Používal vakuové elektronky a v následujícím roce byl zprovozněn vylepšený Colossus Mark 2. [38] Obr. č. 12: Počítač Z2 Zdroj: [14] Obr. č. 13: Elektronka Zdroj: [15] Obr. č. 14: MARK1 Zdroj: [16] Naposledy 12 vytištěno 5.3.2013 8:55:00

D:\Iva\Prace\Skripta\tzi\TZI_pro_ekonomy_12.doc - 13 - Obr. č. 15: Kódovací stroj Enigma Zdroj: [17] Obr. č. 16: Mark 2 Zdroj: [18] Prvním počítačem vyrobeným v Československu byl SAPO (SAmočinný POčítač), který byl uveden do provozu v roce 1957. Obsahoval 7000 relé a 400 elektronek. Měl magnetickou bubnovou paměť o kapacitě 1024 dvaatřicetibitových slov. Pracoval ve dvojkové soustavě s pohyblivou řádovou čárkou. Tento počítač měl dvě zvláštnosti: první bylo, že byl pětiadresový neboli součástí každé instrukce bylo 5 adres (2 operandy, výsledek a adresy skoků v případě kladného a záporného výsledku) a druhou bylo, že se vlastně jednalo o tři shodné procesory, které pracovaly paralelně. Výsledek každé operace z jednotlivých procesorů se mezi sebou porovnal a o výsledku se rozhodovalo hlasováním. Pokud byl Obr. č. 17: SAPO Zdroj: [19] shodný alespoň ve dvou případech, byl považován za správný. Pokud se ve všech třech případech lišil, operace se opakovala. Počítač SAPO byl zkonstruován prof. A. Svobodou, Dr. Oblonským a jejich spolupracovníky v Ústavu matematických strojů (pozdější Výzkumný ústav matematických strojů) a byl instalován v budově ústavu na Loretánském náměstí. Tři roky po jeho spuštění, v roce 1960, počítač SAPO shořel. Z jiskřících releových kontaktů se vzňala loužička oleje, kterým se relé promazávala. První generace je charakteristická použitím elektronek a v menší míře též ještě relé (elektromechanika). Počítače byly poměrně neefektivní, velmi drahé, měly vysoký příkon, velkou poruchovost a velmi nízkou výpočetní rychlost. Zpočátku byl program vytvářen na propojovacích deskách, později byly využity děrné štítky a děrné pásky, které též sloužily spolu s řádkovými tiskárnami k uchování výsledků. V té době neexistovaly ani operační systémy ani programovací jazyky ani assemblery. Počítač se ovládal ze systémové konzole. Jeden tým lidí pracoval jako konstruktéři, operátoři i technici, jejichž úspěchem bylo ukončit výpočet bez poruchy počítače. V roce 1944 byl na univerzitě v Pensylvánii uveden do provozu elektronkový počítač ENIAC, který byl prvním počítačem, který pracoval podobně jako dnešní počítače. Na rozdíl od Z3 umožňoval vytvoření smyčky i podmíněné skoky. Prováděl až 5000 součtů za sekundu, ale byl energeticky velmi náročný, poruchový a jeho provoz byl drahý. Jeho provoz byl ukončen v roce 1955. ENIAC byl přímou inspirací pro počítač MANIAC (Mathematical Analyser Numerical Integrator And Computer), který byl sestaven roku 1945 a uveden do provozu John von Neumannem. V laboratořích Los Alamos National Laboratory byl použit k matematickým výpočtům popisujícím fyzikální děje a byl využit i k vývoji jaderné bomby. Počítače druhé generace charakterizuje použití tranzistorů, které dovolily zlepšit všechny parametry počítačů (zmenšení rozměrů, zvýšení rychlosti a spolehlivosti, snížení energetických nároků). Díky počátku obchodu s počítači byla snaha o co nejlepší využití počítače, proto vznikají první dávkové systémy, které byly zaváděny do počítače pomocí děrné pásky, štítků nebo magnetické pásky a které Naposledy vytištěno 5.3.2013 8:55:00 13

D:\Iva\Prace\Skripta\tzi\TZI_pro_ekonomy_12.doc - 14 - se využívaly při prodeji strojového času počítače (pronájem počítače po dobu vykonání programu). Počátek využívání operačních systémů, jazyka symbolických adres, první programovací jazyky (COBOL, FORTRAN, ALGOL). Roku 1960 byl ve Výzkumném ústavu matematických strojů (VÚMS) spuštěn elektronický počítač EPOS 1, zkonstruovaný pod vedením prof. A. Svobody, ale už v roce 1962 upravený typ EPOS 2, osazený tranzistory. Počítač pracoval v desítkové aritmetice, v kódu, který umožňoval automatickou opravu jedné chyby (délka slova 12 číslic), vykonával přes 30 tisíc operací za sec. a měl feritovou paměť s kapacitou 40 tisíc slov. Zvláštností počítače bylo hardwarové zařízení pro sdílení času mezi až pěti nezávislými programy. V 60. a 70. letech se vyráběl jako ZPA 600 a ZPA 601 i v mobilní verzi a byl vybaven poměrně bohatým software (operační systém, assembler, překladače). Třetí generace je charakteristická použitím integrovaných obvodů. S postupem času roste počet tranzistorů v integrovaném obvodu (zvyšuje se integrace). V této době byl výkon počítače úměrný druhé mocnině jeho ceny, takže se vyplatilo koupit co nejvýkonnější počítač a poté prodávat jeho strojový čas. Majitelé požadovali maximalizaci využití počítače, proto se objevilo multiprogramování zatímco jeden program čeká na dokončení I/O operace, je procesorem zpracovávána druhá úloha. S tím úzce souvisí zavedení pojmu proces, který označuje prováděný program a zahrnuje kromě něj i dynamicky se měnící data. Objevuje se první podpora multitaskingu, kdy se programy vykonávané procesorem střídají, takže jsou zdánlivě zpracovávány najednou. Tento pokrok umožňuje zavedení interaktivních systémů (počítač v reálném čase reaguje na požadavky uživatele). Kromě velkých střediskových počítačů (mainframe, tzv. sálový počítač) se objevují i první minipočítače a mikropočítače. Obr. č. 18: EPOS1 Zdroj: [20] Obr. č. 19: Tranzistor Zdroj: [21] Obr. č. 20: Tranzistory Zdroj: [22] Čtvrtá generace je charakteristická mikroprocesory a osobními počítači. Mikroprocesory v jednom pouzdře obsahují celý procesor (dřívější procesory se skládaly z více obvodů) a jsou to integrované obvody s vysokou integrací, které umožnily snížit počet obvodů na základní desce počítače, zvýšila se spolehlivost, zmenšily rozměry, zvýšila rychlost a kapacita pamětí. Nastává ústup střediskových počítačů (mainframe) ve prospěch pracovních stanic a v roce 1981uvedeného osobního počítače IBM PC. Počítač shodné konstrukce vyrábějí i jiní výrobci jako tzv. IBM PC kompatibilní počítače. Přichází éra systémů DOS a vznikají grafická uživatelská rozhraní. Poměr cena/výkon je nejlepší u nejvíce prodávaných počítačů, vyšší výkon je vykoupen exponenciálním růstem ceny, proto se již nevyplatí koupit nejvýkonnější počítač na trhu a z mnoha běžných a laciných počítačů vznikají clustery. S rozvojem počítačových sítí vzniká Internet, distribuované systémy. Výkon počítačů se zvyšuje použitím několika procesorů (multiprocesory). Naposledy 14 vytištěno 5.3.2013 8:55:00

D:\Iva\Prace\Skripta\tzi\TZI_pro_ekonomy_12.doc - 15 - Obr. č. 21: Mikroprocesor Zdroj: [23] Obr. č. 22.: Mikroprocesory Zdroj: [24] 1.3 Architektura počítačů Pro vývoj moderních počítačů byly významné tři následující koncepce: 1.3.1 Harwardská koncepce Harvardská koncepce předpokládá existenci dvou oddělených pamětí. V první paměti jsou uloženy instrukce (programy) a ve druhé jsou uložena proměnná data. Tato koncepce se využívá např. v jednoúčelových programovatelných automatech nebo kapesních kalkulátorech. Hlavním rysem harvardské architektury je fyzické oddělení dat a instrukcí. Proto Harvardská architektura umožňuje, aby data i instrukce měly různou reprezentaci a implementaci. Paměť obsahující instrukce se často realizuje jako ROM 1, tedy paměť určená pouze pro čtení. Data a uživatelské programy se ukládají do paměti typu RAM 2, do níž lze zapisovat a číst. Výhodou této architektury je možnost přistupovat do obou paměti současně. Harvardská architektura se používá hlavně tam, kde se program téměř nikdy nemění (např. malá vestavěná zařízení). Obr. č. 23: Harvardská architektura Zdroj: 1.3.2 Von Neumannovo schéma počítače Von Neumannovská (někdy také Stanfordská) architektura je pojmenovaná podle slavného Američana maďarského původu Johna von Neumanna. V této architektuře jsou instrukce i data uloženy v téže paměti a nejsou nijak explicitně rozlišeny. Paměť je organizována lineárně na buňky stejné velikosti, které jsou adresovatelné celými čísly. Data jsou reprezentována binárně a jejich datové typy se implicitně nerozlišují. Instrukce se 1 ROM - Read-Only Memory 2 RAM - Random-Access Memory Obr. č. 24: Von Neumannovo schéma počítače Zdroj: Naposledy vytištěno 5.3.2013 8:55:00 15

D:\Iva\Prace\Skripta\tzi\TZI_pro_ekonomy_12.doc - 16 - provádí jednotlivě a to postupně tak, jak jsou zapsány v paměti, dokud není toto pořadí ovlivněno speciální instrukcí (např. skoky). Von Neumannovská architektura najde využití všude tam, kde je požadována univerzálnost a jednoduchost. Von Neumannova architektura je model architektury počítače využívající společnou paměť pro data i instrukce. Počítač má obsahovat procesor, řadič, ALU, operační paměť, vstupní a výstupní zařízení. Je základem současných počítačů. Aritmetickologická jednotka: jednotka provádějící veškeré aritmetické výpočty a logické operace. Obsahuje sčítačky, násobičky (pro aritmetické výpočty) a komparátory (pro porovnávání). Řadič: řídící jednotka, která řídí činnost všech částí počítače. Toto řízení je prováděno pomocí řídících signálů, které jsou zasílány jednotlivým modulům. Reakce na řídící signály, stavy jednotlivých modulů jsou naopak zasílány zpět řadiči pomocí stavových hlášení. Operační paměť: Slouží k uchování zpracovávaného programu, zpracovávaných dat a výsledku výpočtu. Vstupní zařízení: zařízení určená pro vstup programu a dat. Výstupní zařízení: zařízení určená pro výstup výsledku, které program zpracoval. Základním rozdílem mezi von Neumannovou a Harvardskou architekturou je, že Harvardská architektura má oddělenou paměť pro data a instrukce (každá zvlášť), kdežto u von Neumannovy architektury jsou instrukce a data v jedné paměti a mezi nimi se vybírá pomocí různé adresy. 1.3.3 Sběrnicová struktura současné pojetí PC procesor hodiny paměti adresová datová Počítače typu PC jsou konstruovány na bázi sběrnic (adresová, datová, řídící), které propojují procesor, paměti (interní a externí) a přidaná zařízení. řídící sběrnice Obr. č. 25: Sběrnicové pojetí PC Zdroj: vlastní přídavná zařízení paměť RAM procesor připojení HDD a CD ROM napájení základní desky sběrnice Obr. č. 26: Základní deska PC Zdroj: vlastní Naposledy 16 vytištěno 5.3.2013 8:55:00

D:\Iva\Prace\Skripta\tzi\TZI_pro_ekonomy_12.doc - 17-5000 př. n. l. Abakus 150 100 př. n.l. Mechanický kalkulátor - Mechanismus z Antikythéry 1623 Mechanický kalkulátor z ozubených kol (Wilhelm Schickard) 1801 Využití stroje na děrné štítky v tkalcovském stavu - Joseph Marie Jacquard 1820 G. W. Lebniz 1890 Herman Hollerith sčítání lidu v USA 1938 Z1 K. Zuse počítač nulté generace (relé) 1944 ENIAC počítač první generace (elektronka) 1960 VÚMS EPOS 1 počítač druhé generace (tranzistor) 1970 IBM 370 počítač třetí generace (integrované obvody) sálové počítače 1981 PC čtvrtá generace počítačů (mikroprocesory), IBM 5157, INTEL x 86, osobní počítače Tabulka č. 1: Vývoj strojů na zpracování dat Zdroj: vlastní 1.4 Umělá inteligence Viděli jsme, že mozek člověka má úžasné schopnosti paměti, řešení situací, vnímání krásna, citu atd. Po staletí se člověk snaží vytvořit stroj, který by měl schopnosti našeho mozku. Potřebuje k tomu vytvořit technické řešení hardware 3 a tomuto technickému řešení vdechnout život příslušným software 4. Lidé vyvíjí mocné systémy paralelně pracujících procesorů, nové technologie pamětí. Zkoumají procesy rozhodování člověka, způsob jeho komunikace se svým okolím, reakce na své okolí. Snaží se vytvořit stroje, které by řídily výrobní linky identicky s jednáním člověka. Snaží se vytvořit umělou bytost, která by měla stejné rozhodovací postupy jako člověk, stejný pohyb, mimiku, komunikaci. Přirozenou inteligenci mozku se snaží vědci imitovat tzv. umělou inteligencí, která je založena na matematickém popisu inteligence člověka. Umělá inteligence (artificial intelligence) je člověkem vytvořený model inteligence vrozené. Nazývá se tak i vědecká disciplína spojující psychologii, matematiku a informatiku, která přirozenou inteligenci studuje a snaží se jí napodobovat pomocí formálních modelů a algoritmů. Je celkem obtížné definovat, co to vlastně inteligence je. Můžeme o ní hovořit jako o souboru těchto dovedností: 1. plánování následujících akcí s ohledem na maximální možný prospěch jednotlivce či skupiny 2. řešení neznámých problémů na základě podobných situací v minulosti 3. schopnost indukce, dedukce, abstrakce a klasifikace 4. rozpoznávání opakujících se vzorů 5. hledání podobností mezi věcmi a událostmi vzdálenými v čase i prostoru 6. schopnost vyjadřování a komunikace 7. schopnost učení a třídění nových poznatků Disciplíny umělé inteligence 1. řešení problémů (např. vyhledávání cesty ve stavovém prostoru) 2. reprezentace znalostí (např. inferenční stroje) 3. plánování 4. komunikace (např. multiagentní systémy) 5. učení se (např. neuronové sítě) 6. pohyb (např. robotika) 3 Hardware - veškeré fyzicky existující technické vybavenípočítače 4 Software programové vybavení, sada počítačových programů používaných v počítači, které provádějí nějakou činnost Naposledy vytištěno 5.3.2013 8:55:00 17

D:\Iva\Prace\Skripta\tzi\TZI_pro_ekonomy_12.doc - 18-7. vnímání (např. rozpoznávání vzorů), atd. I když se zatím nepodařilo sestrojit plně samostatnou a univerzální umělou inteligenci, s jakou se setkáváme ve sci-fi filmech, pronikla už spousta praktických aplikací i do našeho každodenního života. Algoritmy umělé inteligence jsou všude kolem nás digitální fotoaparáty, které rozpoznávají obličeje a úsměvy, lékařské expertní systémy, řízení dopravních prostředků, optimalizace návrhu a výrobních procesů, automatické varovné systémy, dopravní regulační systémy Spolu s rychlým vývojem tohoto oboru vyvstávají filozofické a etické otázky: 1. Bude etické inteligentní stroj zničit? 2. Může někomu patřit? 3. Neovládnou inteligentní stroje planetu, jak to známe z katastrofických filmů? Jde o stejně složité otázky, jako tomu je v případě problematiky klonování lidské bytosti. Touha lidstva po poznání náš žene k novým výzkumům. Nedostalo však lidstvo do rukou nástroje, na které ještě nedozrálo? Odpovědi na tyto otázky můžeme hledat už dnes, ale na skutečnou potřebu tyto problémy řešit si (naštěstí) ještě počkáme. 1.5 Shrnutí Od starověku se lidé snaží automatizovat výpočty. Vývoj technologií na zpracování dat a informací, které byly schopné plnit tento úkol ve své době odpovídal úrovni technologického poznání své doby: zařízení na mechanických principech (Abakus 5000 př. n. l., logaritmické pravítko) mechanický kalkulátor (Blaice Pascal - 1942, Lebniz - 1820) děrnoštítková zařízení (1835 Charles Babbage) releové technologie (Z1, Z2, Z3 1938-1941) první generace počítačů - počítače na bázi elektronek (1944 ENIAC) druhá generace počítačů počítače na bázi tranzistorů (1960 EPOS1) třetí generace počítačů počítače na bázi integrovaných obvodů (1970) čtvrtá generace počítačů počítače na bázi mikroprocesorů (1980) Při řešení tohoto problému se lidé snaží vycházet z toho, jak funguje lidský mozek v takových případech. Mozek člověka využívá pro zpracování informací ze svého okolí tři paměti: 1. Senzorickou (ultrakrátká) - uchovává informace přicházející ze smyslů jen do okamžiku rozhodnutí o užitečnosti informace. 2. Krátkodobá (pracovní, operativní) srovnává informace ze senzorické paměti s vybavenými informacemi z dlouhodobé paměti. Informace udržuje 15 20 s. 3. Dlouhodobou implikace informace do dlouhodobé paměti trvá přibližně 30 s. a může probíhat buď záměrně, nebo bezděčně. Mozek člověka se skládá z levé a pravé hemisféry. Levá hemisféra je sídlem logiky, řeči a vůle jedince, zpracovává informace lineárně a úzce spolupracuje s informacemi v dlouhodobé paměti. Pravá hemisféra vytváří analogie, realizuje syntézy, je sídlem intuice, představivosti, atd. Paměť člověka má své algoritmy na uložení dat a na jejich vybavení a zpracování. Vývoj techniky v této oblasti prošel od jednoúčelových mechanismů ve starověku a středověku k víceúčelovým programovatelným zařízením v současnosti, k počítačům. Činnost současných počítačů je řízena posloupností příkazů instrukcí. Posloupnost příkazů, která umí vyřešit určitý Naposledy 18 vytištěno 5.3.2013 8:55:00

D:\Iva\Prace\Skripta\tzi\TZI_pro_ekonomy_12.doc - 19 - problém, nazýváme program. Program je umístěn v paměti počítače MC (Memory Centrále) ve formě nul a jedniček. Uživatel jej píše v tzv. vyšších jazycích, například http, PHP atd., které jsou blízké myšlení a logice člověka. Moderní pojetí počítačů nabídl von Neumann, který umístil data i program do centrální paměti. S rozvojem technologií byly vyvinuty mocné technologie pro vstup a výstup dat z počítače, a pro jejich uchování (různé druhy pamětí), vybavení a zpracování. 1.6 Otázky 1. Jaké funkce plní pravá hemisféra lidského mozku? 2. Jaké funkce plní levá hemisféra lidského mozku? 3. Jaké znáte druhy paměti? 4. Jak lze charakterizovat dlouhodobou paměť? 5. Kdy byly vyrobeny první číslicové počítače? 6. Čím je charakteristická první generace počítačů? 7. Čím je charakteristická druhá generace počítačů? 8. Čím je charakteristická třetí generace počítačů? 9. Čím je charakteristická čtvrtá generace počítačů? 10. Jaký je rozdíl mezi von Neumannovou a Harvardskou architekturou? 11. Charakterizujte sběrnicovou strukturu PC. Naposledy vytištěno 5.3.2013 8:55:00 19

D:\Iva\Prace\Skripta\tzi\TZI_pro_ekonomy_12.doc - 20 - Naposledy 20 vytištěno 5.3.2013 8:55:00

D:\Iva\Prace\Skripta\tzi\TZI_pro_ekonomy_12.doc - 21-2 Algoritmizace ekonomických úloh Co bude posluchač po prostudování kapitoly znát: 1. Definovat vývojový diagram, jeho značky a nakreslit jej pro jednoduché matematické a 2. ekonomické aplikace. 3. Popsat vstup, zpracování a výstup dat z počítače. 4. Na praktických příkladech popsat vstup, zpracování a výstup dat z počítače, práci MC, funkci proměnné v tomto případě. 5. Použít VD pro organizaci práce manažera a jeho útvaru. 2.1 Algoritmus a vývojový diagram Konstatovali jsme již, že při řešení jakéhokoliv problému mozek snaží se jeho řešení rozčlenit do sekvence navazujících jednoduchých dílčích kroků. Mluvíme o algoritmizaci a algoritmech. Algoritmy vznikaly už dávno před zkonstruováním prvních počítačů. Samotné slovo "algoritmus" vzniklo ze jména perského matematika, který žil v 9. století a jmenoval se Mohammed al-khowarizmí (v latinském přepise Algoritmus). Zabýval se především pravidly pro aritmetické operace s čísly. Například Eukleidův algoritmus pro výpočet největšího společného dělitele dvou přirozených čísel pochází už ze 4. až 3. století před naším letopočtem. [25] Vhodně sestavené algoritmy lze převedením do programovacího jazyka řešit na počítačích, např. na tzv. Turingově stroji. Turingův stroj je jednoduché abstraktní výpočetní zařízení, které se používá ke studiu vypočitatelnosti tedy ke zjištění, které problémy s jeho použitím vyřešit lze a které ne. V roce 1937 jej definoval původem anglický filozof, matematik a kryptograf Alan Mathison Turing. [25] Algoritmus můžeme definovat jako jednoznačně určenou posloupnost konečného počtu elementárních kroků vedoucí k řešení daného problému, přičemž musí být splněny základní vlastnosti každého algoritmu: 1. Hromadnost a univerzálnost - algoritmus musí vést k řešení celé třídy úloh, vzájemně se lišících pouze vstupními údaji. Musí řešit úlohu pro libovolnou přípustnou kombinaci vstupních dat a musí pokrývat všechny situace, které mohou při výpočtu nastat. 2. Determinovanost (jednoznačnost) - v každém kroku algoritmem popsaného postupu musí být jednoznačně určeno, co je výsledkem tohoto kroku a jak má algoritmus dále pokračovat. Pro stejná vstupní data vydá algoritmus vždy stejný výsledek. 3. Konečnost - algoritmus v konečné době skončí. 4. Rezultativnost - algoritmus při zadání vstupních dat vždy vrátí nějaký výsledek. 5. Správnost - výsledek vydaný algoritmem musí být správný. 6. Výsledek - lze při provádění algoritmu získat zcela mechanicky. Algoritmus, který má řešit nějakou úlohu je třeba ověřit (verifikovat jeho správnou funkci). Vývojové diagramy [26] Vývojový diagram je druh diagramu, který slouží ke grafickému znázornění jednotlivých kroků algoritmu nebo obecného procesu. Vývojový diagram používá pro znázornění jednotlivých kroků algoritmu pomocí symbolů, které jsou navzájem propojeny pomocí orientovaných šipek. Naposledy vytištěno 5.3.2013 8:55:00 21

D:\Iva\Prace\Skripta\tzi\TZI_pro_ekonomy_12.doc - 22 - Symboly reprezentují jednotlivé procesy, šipky tok řízení. Vývojové diagramy jsou často využívány v informatice během programování pro analýzu, návrh, dokumentaci nebo řízení procesu. Klasický vývojový diagram se skládá s následujících druhů symbolů: Úsečka (spojnice) či množina navazujících úseček končící šipkou určuje směr zpracování algoritmu Svislé nebo vodorovné čáry - mohou se křížit nebo spojovat. - směr dolů a doprava je prioritní. Startovací a ukončovací symboly - jsou znázorněny pomocí kruhů, oválů či zaoblených obdélníků, obvykle obsahují nápis Start nebo Konec, či podobnou frázi určující začátek a konec procesu (např. Zaslání požadavku nebo Odebrání produktu ). Začátek Konec Šipky - zobrazují řídící tok. Šipka směřující z jednoho symbolu a končící u druhého naznačuje, že řídící tok přechází z jednoho symbolu na druhý. Obdélník s popisem definuje dílčí krok zpracování algoritmu Výpočet faktury Kosočtverec větvení postupu v algoritmu v závislosti na splnění podmínky, viz skok A = B ne ano Podprogramy - jsou zobrazovány pomocí obdélníku se svislými čarami po stranách. Používají se k zobrazení skupiny kroků procesu pomocí jednoho symbolu. Podprogramy jsou takové části algoritmu, které se mohou opakovat a mohly by být tvořeny samostatným vývojovým diagramem. Kontrola Vstup/Výstup - k jejich zobrazení se používá rovnoběžníku, v případě uživatelského vstupu se zobrazuje pomocí lichoběžníku. Příklad: Získej proměnnou X od uživatele; zobraz proměnnou X. Čti A Tisk A Naposledy 22 vytištěno 5.3.2013 8:55:00

D:\Iva\Prace\Skripta\tzi\TZI_pro_ekonomy_12.doc - 23 - Podmíněný cyklus - zobrazen pomocí šestiúhelníku. Cyklus probíhá, dokud vyhovuje podmínce, poté přejde k dalšímu kroku algoritmu. I = 1.. N Spojovací značka - pro její značení se obvykle používá kruh. Používá se tam, kde je třeba spojit více toků procesu do jednoho toku. 2.2 Vybrané úlohy na procvičení základů algoritmů V následujícím textu se naučíme používat značky v reálných vývojových diagramech pro řešení úloh z praxe k využití na počítači. Je dobré si udělat analogii mezi řešením takových úloh v našem mozku a množství řešení na hardware a software současných počítačů. Analyzujeme, jak by náš mozek řešil následující úlohu (Úloha č. 1): Máš načíst pět čísel, která jsou napsána na listu papíru a součet napsat zpět na tento papír. 1 + 3 + 12 + 4 + 7 = 27 Mozek v takovém případě vyvolá aktivitu, která sejme první číslo očima, v oku jej převede na elektrické signály a tyto odešle do té oblasti paměti, v níž má místo pro uložení takového čísla. Počítač získá první číslo z klávesnice, vyvolá tzv. knihovnu input/output (dále jen I/O), spustí v ní program na přenos čísla a jeho uložení do paměti do místa, které nazýváme proměnná. Tuto oblast paměti (proměnnou) musíme pojmenovat, abychom s jejím obsahem mohli dále pracovat. Počítač však potřebuje vědět, co bude do dané proměnné uloženo (celé číslo, číslo s desetinným místem, znak, řetězec), jak velký prostor si má vyhradit a jaké operace budeme pomoci ALU s těmito proměnnými realizovat. Mluvíme o deklaraci proměnných. Když mozek načte všechna čísla, sečte je a výsledek uloží opět do paměti, spustí procesy k přenosu součtu na ovládání ruky, která výsledek napíše na papír. Počítač postupuje při výstupu dat stejně. Nejprve sečte hodnoty čísel, které jsme uložili do proměnných a, b, c, d, e, a výsledek uloží do proměnné "f". Následně spustí knihovnu I/O a v ní program, který vystaví hodnotu proměnné "f" na obrazovku. V úkolu č.1napíšeme vývojový diagram a popisujeme vytvoření proměnných v paměti. Plnění jednotlivých bloků (příkazů, které v programu C zapíšeme pomocí tzv. klíčových slov) postupně řadí tzv. řadič, viz von Neumannovo schéma v kapitole 1.3.2. Naposledy vytištěno 5.3.2013 8:55:00 23

D:\Iva\Prace\Skripta\tzi\TZI_pro_ekonomy_12.doc - 24 - Úkol č. 1: Zadání: 1 2 Nakreslete vývojový diagram pro řešení následující úlohy: Načtěte pět čísel z klávesnice, sečtěte je a vytiskněte výsledek. Číslo se musí zadat. 3 4 Metodický pokyn: Nejprve si promyslíme, jaké činnosti musíme udělat, abychom problém vyřešili. Mluvíme o algoritmizaci úlohy. Potřebujeme vědět, jakého typu budou proměnné, abychom jim mohli přidělit rozsah paměti na jejich uložení. Data čteme z klávesnice. Dále budeme muset sečíst proměnné a uložit do proměnné, v níž bude součet (f); nakonec potřebujete tentýž součet vytisknout na obrazovku počítače. Řešení: Nyní můžeme nakreslit vývojový diagram a práci proměnných v paměti. Realizaci kroků 1 2 3 4 provádí řadič. Nejprve se naučíme číst zadání. V textu je uloženo, abychom realizovali kroky. 1 2 3 4 Vývojový diagram: Paměť - MC Z řadič Deklarace proměnných Do proměnné a, b, c, d, e, a f budeme vkládat celá čísla. 2 Vstup dat z klávesnice a, b, c, d, e a Proměnné v paměti a, b, c, d, e, f ALU b c Načtení dat z klávesnice do proměnných 1 d 3 e Realizace f = a + b + c + d + e f f = + + + + + Uložení součtu všech proměnných do proměnné f 4 Tisk f = ; f (obrazovka) Tento příkaz vytiskne na obrazovku vše, co je v uvozovkách f =, v našem případě f = a dále vytiskne obsah proměnné, která stojí za středníkem K Pozn.: Místa v paměti označená jako a, b, c, d, e, f nazýváme proměnná. Naposledy 24 vytištěno 5.3.2013 8:55:00

D:\Iva\Prace\Skripta\tzi\TZI_pro_ekonomy_12.doc - 25 - Test umístěný mezi apostrofy v příkazu Tisk se zobrazí na obrazovce počítače. Při popisu počítače von Neumannovy koncepce (viz kapitola kapitole 1.3.2.) jsme konstatovali, že má tzv. aritmeticko logickou jednotku. V úkolech č. 2 a 3 vidíme její využití pro řešení úkolu. V úkolu č. 1 pracovala ALU v bloku Realizace f = a + b + c + d + e. Jejím úkolkem je sečíst hodnoty v proměnných a, b, c, d, e, a součet uložit do f. Úkol č. 2 Vytvořte algoritmus, který načte dvě čísla z klávesnice, určí, které ze dvou zadaných čísel je větší a toto zobrazí na obrazovce. Čísla se nesmí rovnat. Proveďte verifikaci algoritmu. Řešení: 1 4 2 3 Z Z Deklarace a, b Deklarace a, b PAMĚŤ 2 3 Načtení dvou čísel knihovna I/O ALU a b a b Načtěte hodnotu do proměnné a (pracuje knihovna I/O). Načtěte hodnotu do proměnné a (pracuje knihovna I/O). 1 Najdi větší z obou čísel a > b NE Porovnej obsah proměnné a a proměnné b. 4 Vytiskni větší číslo knihovna I/O ANO Větší číslo je a Větší číslo je b Vytiskni větší číslo. (pracuje knihovna I/O) K K Úkol č. 3 Najděte největší číslo ze tří čísel, které vstupují z klávesnice a proveďte verifikaci vývojového diagramu. Čísla se nesmí rovnat. Řešení: Při řešení této úlohy si musíme uvědomit, že budeme potřebovat v paměti tři místa na uložení zadávaných čísel z klávesnice tři proměnné. Pojmenujeme je a, b, c. Viděli jsme již, že již v počátcích řešení algoritmu musíme vědět, co budeme do daných proměnných vkládat. V tomto případě to bude celé číslo, číslo s desetinným místem, znak nebo řetězec znaků. Jejich načtení realizujeme s využitím knihovny I/O. Znamená to, že potřebujeme při řešení úkolu vyvolat specializované programy, které jsou schopny převést data z klávesnice do proměnných a z proměnných na obrazovku. Do vývojového diagramu potřebujeme doplnit příkaz vyvolání knihovny I/O: Vyvolání knihovny I/O Naposledy vytištěno 5.3.2013 8:55:00 25

D:\Iva\Prace\Skripta\tzi\TZI_pro_ekonomy_12.doc - 26 - Verifikace programu znamená prověření správnosti jeho činnosti pro vstupní data. Nejjednodušší verifikace tedy znamená, že vytvoříme takové soustavy vstupních dat, abychom pokud možno prověřili všechny větve a varianty činnosti vývojového diagramu. Posloupnost řešení příkazů od po realizuje řadič. Z K Po jejich načtení se spustí aritmeticko logická jednotka (ALU ve von Neumannově schématu) tak, že postupně porovnává obsah dvojic proměnných a, b, c a v každé větvi, uloží jejich největší hodnotu pro vstupní kombinaci čísel do proměnné max, a nakonec obsah této proměnné vytiskne na obrazovku. Z Z PAMĚŤ Vyvolání knihovny i/0 Budeme tedy potřebovat čtyři proměnné! Deklarace proměnných a a b max Deklarace proměnných b c Načtení tří čísel ALU Najdi z těchto tří čísel největší ANO c a > b NE ALU ANO a > c NE NE b > c ANO MAX = a MAX = c MAX = c MAX = b Vytiskni maximum K Vytiskni maximum K Verifikujte pro data: a = 4, b = 3, c = 5 a = 5, b = 3, c = 2 a = 3, b = 5, c = 2 2.3 Ukázka využití technologií algoritmů v práci manažera a účetního Následující úkol presentuje možnosti použití počítače mzdovou účetní při hrubém odhadu objemu hrubých mezd a odvodů v příslušném měsíci. Před zahájením řešení této úlohy je třeba si ujasnit, jak má vypadat výstupní sestava, které proměnné budeme potřebovat a co do nich budeme zapisovat (čísla, texty příjmení, měsíc, atd.) a zda budeme potřebovat zapojit do činnosti knihovnu I/O. Označme si vstupní proměnné ty, do nichž načítáme data z klávesnice a výstupní proměnné ty, jejichž obsah vystavíme na obrazovku počítače. Naposledy 26 vytištěno 5.3.2013 8:55:00

D:\Iva\Prace\Skripta\tzi\TZI_pro_ekonomy_12.doc - 27 - Úkol č. 4 V podniku Eskaliber, s.r.o. pracují následující pracovníci: p. Koníček Aleš p. Tománek Petr p. Šula Jan p. Prát Antonín p. Koubek Karel p. Čujan Petr p. Forman Jiří Vaším úkolem je vytvořit vývojový diagram pro řešení, které dovolí v daném měsíci pro jednotlivé pracovníky zadat hrubé mzdy, vypočítat z hrubých mezd odvody a vytisknout níže uvedenou sestavu. Výstupní sestava Hrubé mzdy a odvody za měsíc: 1 K1 a 1 a 2 a 3 a 4 a 5 2 3 4 5 9 Pořadí Příjmení 1 Jméno Hrubá mzda Odvody 1 Koníček Aleš 23000 Součet hrubé mzdy: Součet odvodů: 10 11 V Kunovicích, dne 6 7 8 K2 K3 K4 Před zahájením řešení úkolu je třeba definovat, které proměnné budeme potřebovat a zda budeme potřebovat knihovnu I/O. vstupní proměnné 1-8 výstupní proměnné 9-11 Naposledy vytištěno 5.3.2013 8:55:00 27

D:\Iva\Prace\Skripta\tzi\TZI_pro_ekonomy_12.doc - 28 - Nyní již můžeme nakreslit vývojový diagram pro řešení tohoto problému: Cyklus se opakuje, dokud nejsou načtena data pro všechny pracovníky Z Zadání 1 6 7 8 Zadání 2 3 4 5 Výpočet 9 10 11 10 11 Výpočet a tisk výstupní sestavy Typy proměnných: 1 2 řetězec znaků celé čísla 3 4 5 řetězec znaků celé číslo 6 celé číslo den 7 celé číslo nebo řetězec znaků (leden) 8 celé číslo rok 9 číslo s desetinným místem 10 celé číslo 11 číslo s desetinným místem K Naposledy 28 vytištěno 5.3.2013 8:55:00

D:\Iva\Prace\Skripta\tzi\TZI_pro_ekonomy_12.doc - 29 - Z A Deklarace proměnných Hrubé mzdy a odvody za měsíc: K1 viz 1 měsíc Mezera K1 1 P2(a) den K2 6 Tisk a1 a2 a3 a4 a5 měsíc K3 7 P2 (b) Načtení vstupních rok pořadí a1 příjmení jméno hrubá mzda a2 a3 a4 K4 1 Koníček Aleš 23000 Výpočet odvodů a5 8 P1(a) Podprogramy 2 3 4 5 9 P2 (c) P2 (d) P2 (e) P2 (f) P2 (g) H = a4 + b4 + c4 + d4 + e4 + f4 + g4 Součet hrubé mzdy ; H 10 12 Tisk výstupní P1 (b) o = a5 + b5 + c5 + d5 + e5 + f5 + g5 11 P1 (c) P1 (d) P1 (e) Načtení vstupních dat (Z A), P1 (f) Součet odvodů ; o Mezera V Kunovicích, dne, K2, K3, K4 13 P1 (g) NE Konec A ANO Vymaž obrazovku K Nejprve tedy zadáme měsíc, za který chceme sestavu vypracovat. V položce reálné sestavy a ten se uloží v paměti do proměnné K1. 1 zadáme měsíc do Data načtená v 6 7 8 načtou den (př. 15), měsíc (př. 1, nebo řetězec znaků leden ) a rok (př. 2013). Den vypracování sestavy se uloží do proměnné K2, měsíc do proměnné K3 a rok do proměnné K4. Výstupem je: V Kunovicích dne K2, K3, K4 Nyní je třeba zadat údaje o jednotlivých pracovnících. V sestavě vidíme, že u každého pracovníka chceme zadat pořadí (pro prvního pracovníka je pořadí 1, uložená v proměnné a1), příjmení které Naposledy vytištěno 5.3.2013 8:55:00 29

D:\Iva\Prace\Skripta\tzi\TZI_pro_ekonomy_12.doc - 30 - uložíme po načtení do proměnné a2, jméno uložíme do proměnné a3, hrubou mzdu uložíme do proměnné a4 a dále ihned vypočítáme výši odvodů (a4 x 0,35) a uložíme do proměnné a5. Pro druhého pracovníka celý postup opakujeme s tím, že data ukládáme do proměnných označených b1, b2, b3, b4, b5. Další proměnné označujeme c, d, e, f, g. Podrobnou část vývojového diagramu, která naplní a1, a2, a3, a4, a5, označujeme podprogram P1(a), jeho opakování jen s jinak označenými proměnnými zakreslíme: P1 (b) Po dokončení realizace vývojového diagramu v rozmezí až jsme načetli vstupní data, Z A vypočítali odvody pro jednotlivé pracovníky a v paměti jsme vytvořili z proměnných jednoduchou databázi. Útvar v paměti, který obsahuje data, která mají navzájem souvislost, jako i v tomto případě, nazýváme databáze. Následující obrázek ukazuje jednoduchou databázi, kterou jsme výše uvedeným programem v paměti naplnili. Naše databáze má tedy strukturu: a1 a2 a3 a4 a5 b1 b2 b3 b4 b5 c1 c2 c3 c4 c5 d1 d2 d3 d4 d5 e1 e2 e3 e4 e5 f1 f2 f3 f4 f5 g1 g2 g3 g4 g5 MC 1 Koníček Aleš 23000 8050 2 Tománek Petr 11000 3850 3 Šula Jan 9700 3395 4 Prát Antonín 17000 5950 5 Koubek Karel 16800 5880 6 Čujan Petr 7600 2660 7 Forman Jiří 13000 4550 V praxi bývá databáze pojmenovaná a jednotlivé prvky databáze přímo přístupně (lze je zapisovat, číst, nebo přepisovat). Vývojové diagramy lze úspěšně využít také pro operativní plánování rozsáhlých činností manažera. Takové strukturované řešení rozsáhlých akcí zprůhledňuje harmonogram a koordinuje práci řešitelů. V následujícím textu uvádíme dvě ukázky využití této technologie. Tisk výstupní sestavy A až K. V následující části řešení naší úlohy potřebujeme ze získaných a v paměti uložených vstupních dat vypracovat a vytisknout výstupní sestavu. Nejprve tedy použijeme příkaz pro tisk nadpisu sestavy s tím, že jsme v měsíc, za který je sestava zpracována. 1 do K1 proměnné načetli V P2(a) a dalších podprogramech P2(b), P2(c), P2(d), P2(e), P2(f), P2(g) přenášíme obsah proměnných pro jednotlivé pracovníky, které jsme naplnili v 2 3 4 5 9 na obrazovku. Například P2 (a) vytiskne na obrazovku 1 Koníček Aleš 23000 8050 P2(b) vytiskne na obrazovku: 2 Tománek Petr 11000 3850 atd. V 10 uložíme do proměnné H součet hrubých mezd všech pracovníků (obsahy proměnných a4, b4, c4, d4, e4, f4, g4) a v 12 vytiskneme na obrazovku Součet hrubé mzdy H Totéž máme pro odvody v a a. Nakonec zobrazíme s využitím K1, K2, K3 na obrazovce text: V Kunovicích, dne 15. 1. 2013 Naposledy 30 vytištěno 5.3.2013 8:55:00 11 13

D:\Iva\Prace\Skripta\tzi\TZI_pro_ekonomy_12.doc - 31 - Následující příklad ukazuje aplikaci vývojových diagramů do práce manažera. Úkol č. 1 Student Petr Nedbálek studuje na EPI, s.r.o. třetí semestr studijního oboru Management a marketing zahraničního obchodu. Protože dostal v Praze nabídku pracovní pozice v oblasti daňového poradenství, požádal rektora dne 1. 9. 2012 o možnost přestoupení ze studijního oboru Management a marketing zahraničního obchodu na studijní obor Finance a daně. Rektor předal žádost k vyřízení prorektorovi pro pedagogickou činnost. Ten si zpracoval řešení problému formou vývojového diagramu: Z Zahájit správní řízení Pozvat studenta k projednání k prorektorovi pro ped. činnost Termín: 1. 9. 2012 Zodp: prorektor pro ped. činnost vedoucí studijního oddělení Termín: 7. 9. 2012 Kde: ředitelna (e-mail) Kdo: prorektor vedoucí studijního oddělení prorektor pro ped. Založení složky Termín: 2. 9. 2012 Uznání zkoušek + stanovení rozdílových zkoušek Termín: 2. 9. 2012 Kdo: ředitel ústavu vedoucí katedry Stanovení termínů, komisí a obsahu Termín: 2. 9. 2012 Kdo: ředitel ústavu Rozhodnutí Převedení studenta do kruhu 2FHi Termín: 3. 9. 2012 Projednat se členy komisí Vystavit jmenovací dekrety Termín: 3. 9. 2012 Kdo: prorektor pro ped. činnost Termín: 3. 9. 2012 Kdo: prorektor pro ped. činnost Co: 1. přidělit přístupová práva Po uplynutí času na složení zkoušek kontrola Termín: 31. 10. 2012 uspěl neuspěl student Plné zařazení studenta + založení indexu Termín: 1. 11. 2012 Zodp.: vedoucí studijního oddělení Rozhodnutí o ukončení Termín: 1. 11. 2012 Zodp.: prorektor pro ped. činnost Ukončení studia student K K Naposledy vytištěno 5.3.2013 8:55:00 31

D:\Iva\Prace\Skripta\tzi\TZI_pro_ekonomy_12.doc - 32 - Úkol č. 2 Obchodní ředitel firmy EKOSERVIS, s.r.o. si připravuje plán úkolů na týden od 17. 12. 2012 do 23. 12. 2012. V podniku je zvykem, že vedoucí útvarů (zásobování, odbyt, obchodní) dodají sekretariátu v pátek do 10.00 hodin hlavní úkoly svých útvarů tak, aby mohl sekretariát tyto úkoly zapracovat do plánu práce úseku obchodního ředitele a aby plnění úkolů mohlo být kontrolováno. V pátek ve 12.00 hodin předává sekretariát obchodnímu řediteli vypracovaný harmonogram týdne ke schválení. V průběhu týdne kontroluje sekretariát obchodního ředitele plnění harmonogramu úkolů jednotlivých útvarů. Pondělí Úkoly na období od 17. 2. 2012 do 20. 12. 2012 Z Obchodní ředitel 7.00 Sekretariát Provozní porada Rozbor pošty Zásobování Odbyt Obchodní útvar 1.. 2.. 3.. 4.. 5.. 6.. 1.. 2.. 3.. 4.. 5.. 6.. 1.. 2.. 3.. 4.. 5.. 6.. 1.. 2.. 3.. 4.. 5.. 6.. Obchodní ředitel 10.00 Porada u GŘ zápis Obchodní ředitel 13.00 JUDr. Šimek Porada s vedoucím právního oddělení příprava služební cesty - EKOSTAL Obchodní ředitel 14.00 Kontrola úkolů útvarů příprava na služební cestu EKOSTAL zápis dokumenty Konec Naposledy 32 vytištěno 5.3.2013 8:55:00

D:\Iva\Prace\Skripta\tzi\TZI_pro_ekonomy_12.doc - 33 - Úterý Z Obchodní ředitel 6.00 17. 00 Služební cesta Sekretariát Zásobování Odbyt Obchodní útvar EKOSTAL 1. Pošta 2.. 3.. 4.. 5.. 1.. 2.. 3.. 4.. 5.. 1.. 2.. 3.. 4.. 5.. 1.. 2.. 3.. 4.. 5.. Informovat obchodního ředitele o průběhu dne Hodnocení dne Úkoly na středu Hodnocení dne Úkoly na středu Hodnocení dne Úkoly na středu K Středa Samostatná práce studenta Nakreslete vývojový diagram pro řešení některé Vaší pracovní úlohy. V dalším textu se seznámíme se strukturou vývojových diagramů, které nám usnadní (zjednoduší) celou strukturu programu. V úkolu č. 4 jsme viděli použití cyklu při načtení údajů o pracovních a cyklus, pomocí něhož jsme tiskli data o pracovních na obrazovku. Naposledy vytištěno 5.3.2013 8:55:00 33

D:\Iva\Prace\Skripta\tzi\TZI_pro_ekonomy_12.doc - 34-2.4 CYKLUS V praxi se často vyskytují úlohy, v nichž se část algoritmu opakuje, jen s jinými parametry. Takové struktury vývojových diagramů významně zjednoduší struktura, kterou nazýváme cyklus. Cyklus obsahuje podmínku a výkonnou část tělo cyklu. Počet průchodů cyklem registruje tzv. počitadlo cyklu. Definice cyklu Cyklus zajišťuje opakování činnosti programu (viz blok A) tak dlouho, dokud je splněna zadávací podmínka B. Tato podmínka může stát na začátku nebo na koci cyklu viz a), b). Základní typy cyklů jsou cyklus s podmínkou na začátku cyklu, cyklus s podmínkou na konci cyklu a cyklus s předem známým počtem opakování. 2.4.1 Cyklus s podmínkou na začátku cyklu Pokud platí podmínka B vykonej A B + A - C A může být řetězec příkazů, navzájem oddělených středníkem a uložených mezi závorkami: { } Opakování s podmínkou před prvním vykonáním činnosti A Úkol č. 4 Vypracujte vývojový diagram, který načte pro 5 pracovníků - Karel Botek, Jan Fila, Milan Staněk, Jan Šebek, Petr Malý do proměnných v paměti hrubé mzdy. Popište činnost paměti a potřebné proměnné. Využijte cyklus s podmínkou na začátku cyklu. Řešení: Nejprve si musíme rozmyslet, jaké proměnné budeme potřebovat a co do nich budeme ukládat: V paměti se má vytvořit pro každého pracovníka následující záznam: příjmení jméno hrubá mzda n a n b n c n 1 Botek Karel 25000 n = 1 a 1 b 1 c 1 n. pořadí pracovníků (celé číslo) a 1 až a 5 příjmení pracovníků (řetězec znaků) b 1 až b 5 jméno pracovníků (řetězec znaků) c 1 až c 5 hrubé mzdy pracovníků (celé číslo) Tělo cyklu by mělo naplnit údaje postupně pro všechny pracovníky. Cyklus se bude tedy opakovat tolikrát, kolika pracovníkům potřebujeme data do proměnných naplnit. Obecně n krát. V našem případě 5 x pro 5 prvků. n je tedy počítadlo počtu průchodů cyklem, které se po každém průchodu cyklu zmenší o 1. Jakmile naplníme data posledního pracovníka, n nabude hodnoty 0, podmínka n 1 není splněna a proto odejdeme z cyklu na C. Naposledy 34 vytištěno 5.3.2013 8:55:00

D:\Iva\Prace\Skripta\tzi\TZI_pro_ekonomy_12.doc - 35 - V tomto případě máme opakovat 5 krát (zajistí počitadlo cyklu) naplnění dat do proměnných jednotlivých pracovníků. Z paměť Deklarace proměnných počítadlo cyklu Počet pracovníků n = 5 n 5 A Pracovník příjmení Pracovník jméno Hrubá mzda 5 1 2 3 4 n 1? ANO a n b n c n do n ulož n 1 NE a 5 b 5 c 5 5 > 1 Botek Karel 25000 a 4 b 4 c 4 4 > 1 Fila Jan 8400 a 3 b 3 c 3 3 > 1 Staněk Milan 17000 2 > 1 Šebek 4 = 5-1 3 = 4-1 2 = 3-1 1 = 2-1 0 = 1-1 n n n n n 4 > 1 3 > 1 2 > 1 1 = 1 0 < 1 a 2 b 2 c 2 Jan 10000 a 1 b 1 c 1 1 = 1 Malý Petr 9600 0 < 1 Konec cyklu A A Metodický pokyn: Podrobný popis činnosti vývojového diagramu a paměti: Po spuštění programu nastavíme do proměnné n počet pracovníků (n=5), tj. počet opakování cyklu. V podmínce 1 se ptáme, zda obsah počitadla cyklů n je větší, nebo rovné jedné. Protože n=5, což je větší než 1, postupně naplníme údaje o pracovníkovi č. 5 a5 2 Botek, b5 3 Karel, c5 4 25000 a v 5 nížíme hodnotu počitadla cyklů o 1. V n tedy bude hodnota 4. Budeme tedy plnit údaje o pracovníkovi č. 4. Vstupujeme opět do 1 a ptáme se, zda je počitadlo cyklu n větší, nebo rovné 1. Protože n = 4, je podmínka 1 splněna a projdeme opět tělo cyklu, nyní naplníme a4, b4, c4, snížíme n na 3 a jdeme na vyhodnocení podmínky 1, atd. V tomto případě počítač mění podle toho, kolik pracovníků máme ještě zpracovat. Jakmile jsme naplnili do počitadla cyklu n =1, data do proměnné a1, b1, c1 a snížili n o 1, máme v proměnné n zápornou hodnotu 1, takže nás podmínka 1 vyvede z cyklu na A. Naposledy vytištěno 5.3.2013 8:55:00 35

D:\Iva\Prace\Skripta\tzi\TZI_pro_ekonomy_12.doc - 36 - Otázka: Co se stane, když zadáme n = 0? Stejným způsobem si můžete popsat činnost cyklu s podmínkou na konci cyklu v kapitole 2.4.2. 2.4.2 Cyklus s podmínkou na konci cyklu Opakuj A, dokud platí B Vykonej příkaz (nebo blok příkazů) a pokud platí podmínka B, opakuj vykonání příkazu. Pokud podmínka B neplatí, odejdi z cyklu. A B + - Tělo cyklu (A) se tedy v tomto případě. realizuje alespoň jedenkrát. Opakování s podmínkou po skončení činnosti A Úkol č. 5 Vypracujte vývojový diagram, který načte pro 5 pracovníků - Karel Botek, Jan Fila, Milan Staněk, Jan Šebek, Petr Malý hrubé mzdy. Popište činnost paměti a potřebné proměnné. Využijte cyklus s podmínkou na konci cyklu. Řešení: Z Deklarace proměnných n, c n.. celé číslo a n, b n.. řetězec znaků Počet pracovníků n = 5 n 5 A Pracovník příjmení Pracovník jméno a n b n a 5 b 5 Botek Karel a 4 b 4 Fila Jan Staněk a 3 Milan b 3 a 2 b 2 Šebek Jan a 1 b 1 Malý Petr Hrubá mzda c n c 5 25000 c 4 8400 17000 c 3 c 2 10000 c 1 9600 do n ulož n - 1 n = 4 n = 3 n = 2 n = 1 n = 0 ALU ANO n > 0 1 NE 4 > 0 3 > 0 2 > 0 1 > 0 n = 0 1 Naposledy 36 vytištěno 5.3.2013 8:55:00

D:\Iva\Prace\Skripta\tzi\TZI_pro_ekonomy_12.doc - 37 - Samostatná práce studenta: 1. Vypracujte metodický popis podrobný popis činnosti vývojového diagramu a paměti viz předešlý příklad. 2. Modifikujte rozhodovací blok tak, aby byli načteni jen tři pracovníci n > 3? 3. K čemu nám slouží počítadlo cyklů? 2.4.3 Cyklus s předem známým počtem opakování V některých případech víme, kolikrát se bude cyklus opakovat. V takové situaci lze využít cyklus s předem známým počtem opakování. [1] Pro i := 1 až po N s krokem ( ) opakuj A Cyklus s předem známým počtem opakování Příklad: počáteční hodnota počítadla cyklu Začátek cyklu Podmínka na i := 1, N, horní mez Činnost A i := i + [2] krok Konec cyklu Tělo cyklu V tomto případě zadáváme na počátku cyklu počáteční hodnotu počitadla cyklu (v našem případě 1, horní mez, kterou když počitadlo dosáhne, cyklus skončí a krok, s nímž se počitadlo cyklu po průchodu cyklu změní. Pokud počítadlo cyklu nepřekročí horní mez (N), vykonávají se příkazy z těla cyklu (A) a připočítává se krok k počítadlu průchodů cyklů. Jakmile i překročí hodnotu horní meze N, cyklus končí a vývojový diagram pokračuje prvním příkazem za cyklem. Předešlé dva typy cyklů (s podmínkou na začátku a s podmínku na konci cyklu, začaly plnit od n=5, cyklus s podmínkou se známým počtem opakování plní počítadlo cyklů od n=1. Vypracujte vývojový diagram, který načte pro 5 pracovníků - Karel Botek, Jan Fila, Milan Staněk, Jan Šebek, Petr Malý hrubé mzdy. Popište činnost paměti a potřebné proměnné. Vytvořte cyklus s využitím cyklu s předem známým počtem opakování. Řešení: Z Deklarace proměnných n, c n, i.. celé číslo a n, b n.. řetězec znaků paměť počítadlo cyklu krok je +1 horní mez počítadla cyklů i dolní mez počítadla tělo cyklu n Pracovník příjmení Pracovník jméno Hrubá mzda Počet pracovníků i = 1 i = 1, n, 1 ANO Co by se stalo, kdybychom dali krok = 2. a i b i c i i = i + 1 A n i a 1 b 1 c 1 5 1 i i i i i 1 2 3 4 5 Botek Karel 25000 2 3 4 5 i (= i + 1) i i i i Naposledy vytištěno 5.3.2013 8:55:00 37 a 2 b 2 c 2 Nastavení dolní mez počítadla (1) Fila Jan 8400 Staněk a 3 b 3 c 3 Milan 17000 a 4 b 4 c 4 Šebek Jan 10000 a 5 b 5 c 5 Malý Petr 9600 6 A

D:\Iva\Prace\Skripta\tzi\TZI_pro_ekonomy_12.doc - 38 - Samostatná práce studenta 1. Vypracujte metodický popis podrobný popis činnosti vývojového diagramu a paměti viz předešlý příkaz. 2.5 Hardware a softwarové vybavení PC Údaje (data) můžeme tedy ukládat do proměnné, která je ve vnitřní paměti počítače. Na následujícím obrázku je ukázka elektronického prvku, paměti: Obr. č. : Operační paměť Zdroj: [27] Protože dnešní doba si žádá uložení ohromného množství dat (mluvíme o kapacitě paměti), můžeme k počítači připojit externí, výměnnou paměť. Ty se vyrábí ve formě a) harddisků Obr. č. : Hard disk Zdroj: [28] Obr. č. : Hard disk Zdroj: [29] b) Flesh disku Obr. č. : Flesh disk Zdroj: [31] Kapacitu těchto pamětí klasifikujeme podle počtu bytů v: Kilobitech Obr. č. : Flesh disk Zdroj: [30] Naposledy 38 vytištěno 5.3.2013 8:55:00

D:\Iva\Prace\Skripta\tzi\TZI_pro_ekonomy_12.doc - 39 - Megabytech Gigabytech Terabaytech Paměti členíme na paměti typu ROM a RAM. Paměti ROM: Obr. č. : Paměť ROM Zdroj: [32] Obr. č. : Paměť ROM Zdroj: [33] Paměti RAM: Obr. č. : Paměť RAM Zdroj: [34] Obr. č. : Paměť RAM Zdroj: [35] Ukázka U von Neumannovo schématu jsme si ukázali, že vnitřní paměť slouží k ukládání jak programů (posloupnost příkazů, které řeší náš vývojový diagram a zpracovává naše data), tak i dat. Kapacita vnitřní paměti je ovšem omezená. Moderní počítače jsou elektronické, digitální (jejich práce je určována tzv. hodinami) a jsou řízeny jedním, nebo více procesory. Procesor a hodiny jsou elektronické obvody, vyráběné ve formě elektronického prvku. Připojíme li elektronický prvek vnitřní paměť, vnější paměť ve formě CD disku, flopy disku, atd., mluvíme o hardware. Obr. č. : Procesor Zdroj: [36] Naposledy vytištěno 5.3.2013 8:55:00 39

D:\Iva\Prace\Skripta\tzi\TZI_pro_ekonomy_12.doc - 40 - zdroj chladič s procesorem operační paměť RAM grafická karta základní deska Obr. č. : Odkrytované PC (case) hard disk Zdroj: [37] http://zh.wikipedia.org/wiki/file: PC_case_modified.jpg Externí, výměnné paměti používáme na tzv. zálohování dat a programů. Zálohováním data chráníme svá data proti ztrátě. Je to vytvořená kopie našich dat, která je uložena na jiném datovém nosiči (CD, DVD, externí hard disk) nebo i jiném místě. Záložní data využijeme v případě ztráty nebo poškození originálních dat. Hardware je nefunkční bez software. K software patří především: Operační systém Uživatelské programy Ochranný systém proti virům atd. Operační systém Operační systém zahájí činnost v okamžiku, kdy stlačíme tlačítko ON. Operační systém zahájí činnost všech částí počítače: procesoru, klávesnice, paměti, display. Uživatelské programy V další fázi si uživatel zvolí aplikaci, se kterou chce zpracovat. Toto může učinit dvěma způsoby: 1) Zvolením programu na ploše obrazovky. 2) Zvolením programu pomocí nabídky start. Obr. č. : Zvolení aplikace na ploše Obr. č. : Výběr aplikace pomocí nabídky start Naposledy 40 vytištěno 5.3.2013 8:55:00

D:\Iva\Prace\Skripta\tzi\TZI_pro_ekonomy_12.doc - 41 - Tyto aplikace mají standardní obsah. Pokud si potřebujete zpracovat na počítači svůj problém a svůj vývojový diagram, můžete si zakoupit programy, které mohou plnit Vaše individuální programy (Pascal, C++, PHP atd.). Po jejich instalaci můžete váš vývojový diagram do programu převést do programu. Ten přeložíte do řeči počítače (jedničky a nuly) pomocí překladače a následně jej můžete opakovaně spouštět a využívat. O tom až později. 2.6 Ochranný systém proti virům Počítač je třeba chránit proti tzv. virům Počítačový virus je malý softwarový program, který se šíří z jednoho počítače do druhého a překáží provozu počítače. Počítačový virus může poškodit nebo odstranit data v počítači, pomocí e-mailového programu se rozšířit do dalších počítačů, nebo dokonce odstranit celý obsah pevného disku. Počítačové viry se nejsnáze šíří prostřednictvím rychlých zpráv nebo příloh e-mailových zpráv. Proto nikdy neotevírejte přílohu e-mailu, pokud nevíte, kdo vám zprávu odeslal, nebo pokud přílohu e-mailu nečekáte. Počítačové viry mohou být maskovány jako přílohy obsahující vtipné obrázky, pohlednice nebo zvukové soubory či soubory videa. Počítačové viry se také šíří při stahování z Internetu. Počítačové viry se mohou skrývat v nelegálním softwaru či v jiných souborech nebo programech, které stáhnete. [39] Druhým způsobem, jak se viry dostanou do počítače z e-mailu je, že se spustí samy. Ano, něco podobného je za určitých okolností opravdu možné! Viry totiž mohou využívat (a využívají) různé bezpečnostní chyby v operačním systému, poštovním klientovi či dalších aplikacích k tomu, aby mohly provádět úkony, které za normálních okolností nemohou vykonat. Elektronická zpráva s virem pak přijde do počítače, a pokud tento obsahuje některou bezpečnostní chybu, dojde k samočinnému spuštění souboru uloženého na příloze (tedy viru). Záplaty vám boj usnadní Obrana proti bezpečnostním chybám je velmi jednoduchá, přesto ji bohužel většina uživatelů zanedbává. Většina výrobců programů totiž pravidelně uvolňuje AKTUALIZACE, s jejichž pomocí je možné tyto nedostatky průběžně odstraňovat. Tyto jsou k dispozici zpravidla zdarma na internetu v případě nejrozšířenějšího operačního systému na stránce windowsupdate.microsoft.com Aktualizace Windows. Používejte antivirový program, a co nejčastěji k němu stahujte aktuální virovou databázi. Přitom si ale uvědomte, že antivirový program není všelékem, který vyřeší všechny problémy a který Vám umožní dělat ve světě počítačů beztrestně naprosto vše. Rozhodně klaďte důraz na výše popsanou prevenci a s antivirovým programem počítejte spíše jako se záchrannou brzdou v nouzi nejvyšší. Věta na závěr, všeho moc škodí, je vhodné mít nainstalovaný pouze jeden Antivirový program, nikoliv 2 nebo více, PC by byl velmi zpomalený (veškeré kontroly by se prováděly dvakrát či vícekrát). [40] 2.7 Shrnutí Počítače používáme nejen na řešení matematických problémů, ale také na řízení výroby, procesů, zpracování ekonomických dat, analytické rozbory atd. Řešení těchto problémů zpracovává manažer, nebo ekonom tak, že si nejprve definuje, co od řešení očekává (jaké výstupy), analyzuje vstupy a vstupní a výstupní podmínky a nakonec si nakreslí postup řešení, tzv. vývojový diagram. Vstupní data jsou uchovávána v paměti v tzv. proměnných. Operace s těmito daty provádíme jako operace s proměnnými. Pojem proměnná proto, že do takto označeného místa v paměti můžeme vkládat různá data. Vývojový diagram tedy člověku přirozeným způsobem popisuje jednotlivé kroky řešení problému. Ve vývojových diagramech je třeba používat standardizované značky tak, aby byly zřejmé každému specialistovi z oboru. Při řešení úkolů z oblasti zpracování dat převádíme vývojové diagramy Naposledy vytištěno 5.3.2013 8:55:00 41

D:\Iva\Prace\Skripta\tzi\TZI_pro_ekonomy_12.doc - 42 - do některého programovacího jazyka. Data můžeme v paměti ukládat do vymezené oblasti, kterou nazýváme databáze. 2.8 Otázky 1. K čemu nám slouží počítače? 2. Popište vývoj technologií na zpracování informací. 3. Co to je program? 4. Popište von Neumannovo schéma počítače a jeho jednotlivé části 5. Jak spolupracuje řadič instrukcí a paměť? 6. Kde se ukládají vstupní data co to jsou V V operace? 7. Co to je paměť? 8. Co to je proměnná? 9. Co to je vývojový diagram? 10. Jaké značky užíváme ve vývojových diagramech 11. Co to je cyklus a jaké druhy vývojových diagramů pro cyklus znáte? 12. Popište postup řešení problému (zadání, vývojový diagram, řešení). 13. Vysvětlete, jak použijete vývojový diagram pro řešení úkolů manažera. 14. Vysvětlete, jak použijete vývojový diagram ve své práci. 15. Co to je uměla inteligence? 16. Nakreslete vývojový diagram pro výpočet průměru tří čísel. Výsledek vytiskněte. 17. Nakreslete vývojový diagram pro Váš jeden den. 18. Co to je a k čemu slouží vnitřní paměť? 19. Proč musíme používat vnější (externí) paměť? 20. Jaké typy externí paměti dnes používáte? 21. Co to je kapacita paměti? 22. V čem měříme velikost (kapacitu) paměti? 23. Jakou funkci má paměť ROM a jakou RAM? 24. Co to je procesor? 25. Co to jsou hodiny 26. Jaký typ externí paměti je vhodný na zálohování dat? 27. Jakým způsobem si zálohujete data Vašeho počítače? 28. Jak si zálohují data vaši spolupracovníci? Naposledy 42 vytištěno 5.3.2013 8:55:00

D:\Iva\Prace\Skripta\tzi\TZI_pro_ekonomy_12.doc - 43-3 Přepis vývojového diagramu do programovacího jazyka C Jakmile se rozhodneme řešit nějakou úlohu s využitím programovacího jazyka C, postupujeme v následujících krocích: Zadání Vývojový diagram Přepis do jazyka C Editor.c (zdrojový soubor) Překlad programu Překladač (kompilátor.obj) (cílový soubor) Připojení externích knihoven Sestavovací program (Linker).exe Spustitelný soubor Spuštění programu Jak popsat řešený problém vývojovým diagramem již známe. Nyní je třeba zvládnout dovednost přepsat vývojový diagram do jazyka C, umět jej přeložit, připojit externí knihovny, spustit a uložit. Přepis vývojového diagramu do programovacího jazyka C prochází následujícími technologiemi. Editor používá se na zápis vývojového diagramu do zdrojového kódu daného jazyka. Výstupem je Zdrojový soubor (source file) je textový soubor, vypracovaný v klíčových slovech jazyka C. Překladač (kompilátor) přeloží program. Výstupem překladu je soubor s příponou obj. Linker (sestavovací program) - připojí k cílovému soubor externí 3.1 Struktura programu v jazyce C Program v jazyce C zapisujeme prostřednictvím následujících klíčových slov: asm, auto, break, case, sdesl, char, const, continue, default, do, double, else, enum, extern, far, float, for, goto, huge, if, int, interrupt, long, Nera, pascal, register, return, short, signed, sizeof, static, struct, switch, typedef, union, unisgned, void, volatile, while. Tato klíčová slova se píší malými písmeny a nesmí se jinak, než jako klíčová slova použít. Program začíná tzv. hlavičkovým souborem Hlavičkový soubor slouží k tomu, aby program mohl využít externích knihoven funkcí, například funkce pro načtení údajů z klávesnice, nebo funkce pro výpis dat na obrazovku (tzv. systém Input/Output, parametr stdio.h.). Tyto soubory využívá překladač a mají příponu.h. Knihovny připojuje překladač direktivou kompilátoru # include <>. Ta říká kompilátoru, aby načetl externí soubor a včlenil jej do předkládaného programu. #include <stdio.h> není příkaz. Je to instrukce pro překladač jazyka C. Proto se za ni nepíše středník. Program v C jazyce se skládá z jedné, nebo více funkcí. Funkce může mít libovolné jméno. Jméno funkce se skládá z velkých a malých písmen, číslic 0 9 a podtržítka a nesmí začínat číslicí. Jazyk C rozlišuje malá a velká písmena. Hlavní funkce, která je pro program vždy povinná, je identifikována klíčovým slovem main( ). Funkce main znamená začátek realizace programu. Když se program v jazyku C spustí, začne tedy funkcí main a v ní postupně plní příkaz za příkazem.(postupnou realizací příkazů organizuje řadič viz von Neumanowo schéma). Ani za main ( ) se nedělá středník. Naposledy vytištěno 5.3.2013 8:55:00 43

D:\Iva\Prace\Skripta\tzi\TZI_pro_ekonomy_12.doc - 44 - Funkce main obsahuje příkazy. Ty jsou umístěny mezi { }. Konec této funkce znamená ukončení práce programu. Obecně tedy můžeme strukturu programu C v nejjednodušší variantě napsat: main( ) { příkazy; } Jedno z klíčových slov je prinntf( );. Příkaz printf("text"), vypíše ve své nejjednodušší variantě na obrazovku text, který je umístěn v závorce mezi apostrofy. S dosavadní znalostí již můžeme napsat první, jednoduchý program v C, jehož úkolem je vypsat text "Vypis rocni uzaverky" na obrazovku: #include<stdio.h> main( ) vyvolání externí knihovny I/0 hlavičkový soubor hlavní funkce { printf("vypis rocni uzaverky"); výpis textu v uvozovkách na obrazovku } Program aktivuje příkazem #include<stdio.h> knihovnu I/O, aby mohl program vypsat na obrazovku text "Vypis rocni uzaverky". Hlavní funkce začíná systémovým slovem main ( ), mezi závorkami { } je příkaz printf("."); k vypsání textu na obrazovku ( Vypis rocni uzaverky ), který je umístěný mezi uvozovkami. Vytvořili jsme tedy jednoduchý program a nyní potřebujeme tento program zapsat do prostředí C++. To se naučíme v dalším textu. 3.2 Jak napsat program v prostředí Dev-C++ Vlastní psaní programu je velice podobně, jak kdybychom pracovali v programu Word. Nejprve musíme otevřít toto prostředí. Program je nutné do počítače nejprve nainstalovat. 1. Na ploše obrazovky klikneme na ikonu Po tomto kliknutí se otevře se obrazovka aplikace viz obr. č. 1 Naposledy 44 vytištěno 5.3.2013 8:55:00

D:\Iva\Prace\Skripta\tzi\TZI_pro_ekonomy_12.doc - 45-2. V horní liště vybereme záložku Soubor Nový Zdrojový kód Objeví se obrazovka, do které již můžeme psát program Vlastní program budeme psát s využitím anglické klávesnice. Musíme respektovat malá a velká písmena. Zápis #include je ve verzi #include chybný. Dále budeme používat pro psaní speciálních znaků (musíme mít zapnutu anglickou klávesnici) tzv. klávesové zkratky: { shift + ú > shift +. } shift + ) < shift +, * shift + 8 shift + POZOR: & shift + 7 shift + V závislosti na typu klávesnice musíte tuto ) shift + % # shift + 3 tabulku modifikovat. ( shift + 0 3. Do prázdného okna napíšeme program. Naposledy vytištěno 5.3.2013 8:55:00 45

D:\Iva\Prace\Skripta\tzi\TZI_pro_ekonomy_12.doc - 46-4. Napsaný program musíme uložit. V horní liště si vybereme záložku Soubor Uložit jako. Do rámečku Název soubor, vybereme místo na disku, kde chceme soubor uložit. Proto napíšeme jméno souboru (např. priklad1), které chceme použít. Nesmíte zapomenout za toto jméno přidat.c (priklad1.c) Pod tímto názvem budeme program vyvolávat. Doporučujeme, abyste si ve svém adresáři udělali adresář pro programy v jazyku C. Na obrazovce se objeví původní obrazovka na níž můžeme napsat program v C, který bude uložen pod názvem priklad1.c Pozor přípona.c je povinná! 5. Po napsání celého programu, musíme zkontrolovat jeho syntaxi zadaného kódu (správnost programu). V horní liště klikneme na záložku Spustit Zkompilovat. Naposledy 46 vytištěno 5.3.2013 8:55:00

D:\Iva\Prace\Skripta\tzi\TZI_pro_ekonomy_12.doc - 47 - chybných údajů a znovu program zkompilujeme. Program provede kontrolu správnosti a úplnosti a zobrazí obrazovku, kde uvidíme, v případě správně zapsaného programu obrazovku s nulovým počtem chyb. Pokud tomu tak je, podokno zavřeme. Pokud je v programu chyba, je řádek s chybným údajem zabarven. Chybu opravíme přepsáním Jestliže se při kompilaci nezobrazí žádná chyba, můžeme okno zavřít a program spustit. V horní liště vybereme záložku Spustit Spustit. Program se spustí a provede svou činnost. V následující části textu se naučíme přepsat vývojový diagram do jazyka C v prostředí Dev- C++. Budeme využívat editor, klíčová slova jazyka C a výstupem naší práce bude zdrojový soubor s příponou.c. 3.3 Úvod do syntaxe jazyka C V další části se budeme učit užívat příkazy programového jazyka C na jednoduchých aplikacích příkladech. Nejjednodušší úkol je vypsat text na obrazovku. Pozor: V následujícím textu musíte respektovat malá a velká písmena. Klíčová slova musí být malými písmeny, PAUSE s příkazu systém ("PAUSE") musí být velkými písmeny. Je velký rozdíl mezi proměnnou, která se jmenuje mzda a proměnnou MZDA, atd. Naposledy vytištěno 5.3.2013 8:55:00 47

D:\Iva\Prace\Skripta\tzi\TZI_pro_ekonomy_12.doc - 48 - Nejjednodušší varianta programu C je main( ) {příkazy}; Pokud ptřebujeme pracovat se vstupy a výstupy: #include<stdio.h> main( ) {příkazy}; hlavičkový soubor Existují i další knihovny např.: math.h všechny matematické funkce (goniometrické, kvadratické, exponenciální, logaritmické a zvláštní) vyžadují, aby program obsahoval hlavičkový soubor math.h. Příklad č. 1 Zadání: Napište na obrazovku počítače text Výpis roční uzávěrky. Metodický pokyn: 1. Spusťte DEV++ 2. Vyberte záložku Soubor nový 3. Vyberte záložku Zdrojový kód 4. Přepněte počítač na anglickou klávesnici 5. Napište program 6. V horní liště vyberte záložku Soubor uložit jako Uložte tento program: př. priklad1.c (vyberte si místo, kam chcete program uložit) 7. V horní liště vyberte nabídku Spustit kompilovat Nyní probíhá kontrola, zda je správný syntax. Jeli správně, objeví se. 8. V horní liště vyberte nabídku Spustit spustit Program proběhne. K tomu, aby program uměl přečíst údaje z klávesnice a uložit jej do proměnné v počítači potřebujeme ovládací program. Ten je uložen v tzv. knihovně vstup/výstup (I/O). Tuto knihovnu připojujeme příkazem #include <stdio.h>. Pro tisk textu na obrazovku máme k dispozici příkaz prinntf("text"); za kterým musí být středník. Text v uvozovkách se na obrazovku přenese. V tomto programu nepoužíváme žádné proměnné Naposledy 48 vytištěno 5.3.2013 8:55:00

D:\Iva\Prace\Skripta\tzi\TZI_pro_ekonomy_12.doc - 49 - Řešení: Vývojový diagram Zápis v jazyku C Popis příkazů Z Vyvolej knihovnu I/0 Výpis roční uzávěrky K #include <stdio.h> main () { printf("vypis rocni uzaverky"); } načtení I/0 knihovny hlavní funkce programu začátek hlavní funkce programu tisk textu v uvozovkách na obrazovku konec hlavní funkce programu Pozn.: obrazovka s textem pouze problikne, protože program po jeho vykonání zápisu na obrazovku se ukončil a obrazovku smazal. Abychom program zastavili po vypsání textu Výpis roční uzávěrky na obrazovku, potřebujeme do programu doplnit příkaz na zastavení programu. Popis nově použitých klíčových slov: Printf příkaz, který text v uvozovkách vystaví na obrazovku. Program lze zapsat též ve zkrácené formě #include <stdio.h> main (){printf("vypis rocni uzaverky");} Pozn.: Studenti často zapomínají, že doplněný program musí vždy zkompilovat a uložit s koncovkou.c Úkol: Spusťe znovu (lze pořád dokola) - buď v C++ - nebo na místě, kde jste původní program uložili se vytvořitl soubor s příponou exe a ten lze kdykoliv spustit Příklad č. 2: Zadání: Napište na obrazovku záhlaví Vašeho budoucího programu Vypis rocni uzaverky a tento nápis ponechte zobrazený na obrazovce (program je třeba po vypsaní textu na obrazovku zastavit) příkazem system("pause"); Metodický pokyn: Programu č. 1 tedy doplníme příkazem na zastavení programu, znovu zkompilujeme a spustíme. Naposledy vytištěno 5.3.2013 8:55:00 49

D:\Iva\Prace\Skripta\tzi\TZI_pro_ekonomy_12.doc - 50 - POZOR studenti v tomto bodě často dělají další chybu v tom, že neuzavřou obrazovku předešlého řešení, program zůstane spuštěný. Pak nelze znovu program kompilovat. Proto stiskneme libovolnou klávesu a obrazovka se automaticky vypne. Řešení: Vývojový diagram Zápis v jazyku C Popis příkazů Z Vyvolej knihovnu I/0 Vypis rocni uzaverky #include <stdio.h> main () { printf("vypis rocni uzaverky"); načtení I/0 knihovny hlavní funkce programu začátek hlavní funkce programu tisk textu v uvozovkách na obrazovku zastav K system("pause"); } program se zastaví a na obrazovku vypíše Pokračujte stisknutím libovolné klávesy. Činnost programu se obnoví stlačením kterékoliv klávesy. konec hlavní funkce programu zkrácené verzi: #include <stdio.h> main (){ printf("vypis rocni uzaverky"); system("pause");} Program provede činnost a zobrazí: Popis nově použitých klíčových slov: systém ("PAUSE"); zastaví program a na obrazovku vypíše Pokračujte stisknutím libovolné klávesy. na to místo, kde stojí kurzor (tedy na stávající text). "PAUSE" musí být velkými písmeny. systém malými písmeny. Pozor: Opět uzavřete předešlý program (černou obrazovku), stlačením libovolné klávesy. Příklad č. 3: Zadání: Zajistěte, aby se text Pokračujte stisknutím libovolné klávesy v příkazu systém ("PAUSE"); vypsal na nový řádek. Využijte příkaz printf("\n"); Naposledy 50 vytištěno 5.3.2013 8:55:00

D:\Iva\Prace\Skripta\tzi\TZI_pro_ekonomy_12.doc - 51 - Metodický pokyn: Nedostatkem tohoto programu je, že se komentář v systému ("PAUSE") Pokračujte stisknutím libovolné klávesy napíše ihned za náš text Vypis rocni uzaverky. Potřebujeme příkaz, který oba texty oddělní tak, že text Pokračujte stisknutím libovolné klávesy. napíše na nový řádek. Takový příkaz je \n, např. v příkazu printf("\n"); viz Příklad č. 3. Doplňte si příkaz printf("\n"); Zkompilujte. Spusťte. Z Vyvolej I/0 Výpis roční uzávěrky #include <stdio.h> main () { printf("vypis rocni uzaverky"); Přechod na nový řádek printf("\n"); přesun kurzoru na nový řádek Čekání na stisk klávesy system("pause"); K } Na obrazovce se objeví: Program provede příkazy a zobrazí: Naposledy vytištěno 5.3.2013 8:55:00 51

D:\Iva\Prace\Skripta\tzi\TZI_pro_ekonomy_12.doc - 52 - Popis nově použitých klíčových slov: \n v příkazu printf zajistí přechod kurzoru na další řádek \a v příkazu printf( ) způsobí signál alarm. tzv. zvonek Př.: Následující program vyvolá zvonek: #include <stdio.h> main () { printf("\a");} Vypracujte jako příklad 1b 1. Soubor nový- zdrojový kód 2. Přepište program main () { printf("\a");} 3. Zkompilujte 4. Spusťe Pozn.: Na \ není zkratková klávesa, je zobrazeno přímo na klávesnici. Zkompilujte, spusťte a zdůvodněte, proč je program funkční, i když jsme vypustili #include <stdio.h> Zvukový signál používáme na upozornění obsluhy, že má něco udělat. Například zadat vstupní údaj. Samostatná práce studenta: 1. Co udělá zápis main () { printf("\a");} 2. Vypracujte program, který spustí zvonek 5x. Ukázka chyby v syntaxu v programu V průběhu překladu programu si překladač průběžně kontroluje, zda při vytvoření zápisu programu neudělal programátor chybu. Pokud ano, sdělí mu, že v programu je chybný zápis. Upravte si program č. 3, smažete uvozovky v 1 Chybový zápis #include <stdio.h> main () { printf("vypis rocni uzaverky); 1 printf("\n"); Opravený zápis #include <stdio.h> main () { printf("vypis rocni uzaverky"); printf("\n"); } system("pause"); } system("pause"); Naposledy 52 vytištěno 5.3.2013 8:55:00

D:\Iva\Prace\Skripta\tzi\TZI_pro_ekonomy_12.doc - 53 - Proveďte kompilaci. Při kontrole programu, se (výběr záložky Spustit Zkompilovat ) se objeví obrazovka s hlášením chyby. Program zvýrazní řádek, na kterém se chyba nalézá. Chybu opravíme (viz opravný zápis výše) a program znovu zkompilujeme, v případě, že jsme opravili správně a další chybové hlášení se neobjeví, můžeme program spustit. Nyní již program proběhne bez chybového hlášení. Pokud jste zapomněli středník, ukáže chybové hlášení obvykle na následující řádek za příkazem, v němž je chyba. Deklarace proměnných Doposud jsme nevyužívali proměnné, pouze příkaz printf( ); Pokud chceme psát program, který proměnné používá, musíme je deklarovat. Na tomto místě jen zjednodušeně rozšíříme znalosti o deklaraci proměnných a přiřazení hodnot. Konstatovali jsme již, že data ukládáme do proměnných. Proměnná je pojmenovaná část paměti, do níž můžeme ukládat různé hodnoty. Proměnné musí být před použitím deklarované. To znamená, že musíme programu říci, co lze do dané proměnné (daného místa v paměti) ukládat a jaké operace jsou s takovým údajem dovoleny. Než začneme psát program, musíme promyslet, které proměnné budeme používat s ohledem na vstupní a výstupní data a potřebné zpracování problému. Pro deklaraci (definici) proměnné používáme příkaz typ jméno proměnné; př.: int x; Paměť x Pozn.: do této proměnné mohu ukládat jen celá čísla Opakujeme, že deklarace proměnné říká překladači, o jaký typ proměnné jde a tedy i kolik místa je pro ni v paměti potřeba a jaké operace s proměnnou můžeme dělat. Programovací jazyk C má pět typů proměnných: Naposledy vytištěno 5.3.2013 8:55:00 53

D:\Iva\Prace\Skripta\tzi\TZI_pro_ekonomy_12.doc - 54 - Typ znak (8 bitů) celé číslo se znaménkem desetinné číslo s pohyblivou řádovou čárkou desetinné číslo s pohyblivou řádovou čárkou s dvojnásobnou přesností bez hodnoty Klíčové slovo char int float double void Proměnná char je 8 bitů dlouhá a slouží pro uložení jednoho znaku. Celočíselná proměnná typu int může obsahovat celá čísla (bez desetinné části) se znaménkem. V paměti zabere 16 bitů a může obsahovat hodnoty v rozmezí 32 768 až + 32 767. Pozn.: Ve 32 bitových systémech od 2 147 483 až + 2 147 483 697. Proměnné typu float a double obsahují hodnoty s pohyblivou řádovou čárkou, které mohou mít desetinnou část. Float a double se liší tím, že double umožňuje ukládat čísla s dvojnásobným počtem desetinných míst. Deklarace proměnných se nachází v úvodní části programu, za. { Příklad deklarace proměnných a, b, c typu double: # include <stdio.h> main( ) { double a, b, c; příkaz 1; příkaz 2; } bude využívána knihovna vstupu, výstupu začátek hlavní funkce do proměnné a, b, c můžeme ukládat čísla s desetinnou čárkou příkazy, které realizují naši úlohu konec hlavní funkce Jak naplníme proměnnou Abychom mohli s proměnnou pracovat, potřebujeme do proměnné naplnit data. Dosáhneme toho buď tzv. přiřazením hodnoty přiřazovacím příkazem, nebo načtením hodnoty z klávesnice. Naposledy 54 vytištěno 5.3.2013 8:55:00

D:\Iva\Prace\Skripta\tzi\TZI_pro_ekonomy_12.doc - 55 - Přiřazovací příkaz Abychom mohli do proměnné vložit hodnotu, máme v jazyku C k dispozici přiřazovací příkaz: Jméno_proměnné = hodnota; Př: Uložte do proměnné MZDA hodnotu 24 000. Př.: int MZDA;.vytvořili jsme proměnnou mzda, do níž lze ukládat jen celá čísla. MC... 24000.. MZDA MZDA = 24000;. do proměnné mzda jsme uložili hodnotu 24000. (pozn. v hodnotě ukládané do číselné proměnné nesmí být mezera) Tento příkaz vloží v paměti do proměnné na místo proměnné MZDA hodnotu 24000. Tuto hodnotu můžeme dále využívat. Pozn: Také v příkazu printf( ); musíme proměnnou definovat. Následující příkaz přiřazení uloží do proměnné a hodnotu 20. Ukážeme si, co by udělal v této situaci příkaz printf("a=",a), když mu nesdělíme, o jaký typ proměnné se jedná. # include <stdio.h> main ( ) { int a; a=20; printf("a=",a); systém("pause"); } Vývojový diagram Z Deklaruj a a = 20; "a=",a Zastav K Naposledy vytištěno 5.3.2013 8:55:00 55

D:\Iva\Prace\Skripta\tzi\TZI_pro_ekonomy_12.doc - 56 - Tento příkaz sice nehlásí v kompilátoru chybu, ale nevypíše 20 na obrazovku. Doděláme tedy v příkazu printf( ) deklaraci proměnné a zápisem %d: #include <stdio.h> main () { int a; a=20; printf("a=%d",a); system("pause"); } 1 printf("a=%d",a); Program provede příkazy a zobrazí: Samostatná práce studenta: Místo příkazu 1 napište printf("a=%d\n",a);, kompilujte, spusťte a popište rozdíl oproti předešlému programu. Komentáře Často je pro přehlednost programu užitečné vkládat komentáře. Komentář je poznámka, kterou vložíme do zdrojového kódu programu. Překladač ji však ignoruje, takže poznámka nevyvolá žádnou činnost. Program se potom lépe čte. Syntaktický zápis komentáře: /*komentář*/, nebo //komentář. Druhá varianta však může být použita, když komentář nepřesáhne daný řádek Za komentářem se nedělá středník. Př. Otevřete si zdrojový kód k příkladu č. 3 a ke každému řádku při komentář. Uložte tento program s komentářem, zkompilujte a spusťte. Uvidíte, že text napsaný jako komentář se na obrazovce neobjeví. Naposledy 56 vytištěno 5.3.2013 8:55:00

D:\Iva\Prace\Skripta\tzi\TZI_pro_ekonomy_12.doc - 57 - Řešení: # include <stdio.h> /*připojení knihovny I/O*/ main ( ) /*hlavní funkce*/ { printf ("Vypis rocni uzaverky"); /*výpis na obrazovku*/ } //konec hlavní funkce main* Program zkompilujeme, spustíme a vidíme, že na obrazovku vypíše pouze text Vypis rocni uzaverky a komentáře ignoruje. Když se později vrátíme ke zdrojovému textu, rychle zjistíme, co v které části řešíme. Popis nových příkazů: Přiřazovací příkaz: c = a + b; Použití operátoru + pro sečtení hodnot Pozn: Čteme a + b vlož do c. Paměť MC: a b - typ celé číslo - typ celé číslo c + - typ celé číslo U příkazu printf ("%d + %d = %d / n ", a, b, c); v pozici, kde se nachází znak % s datovým typem, se doplní názvy proměnné, které stojí v druhé části příkazu, v příslušném pořadí. Př: a=20; b=30; printf("%d + %d = %d / n ", a, b, c); realizuje součet a + b = 20 + 30 tj. 50 a vytiskne jej a přejde na nový řádek. Samostatná práce studenta: 1. Upravte předešlé zadání tak, aby program provedl výpočet rozdílu obou čísel. 2. Nadpis Program na součet dvou čísel z Příkladu č. 5 oddělte od dalšího textu na monitoru o 10 řádků. 3. Co se vypíše na obrazovku, pokud spustíme program: #include <stdio.h> main () { printf("jedna\n dve\n tři\n čtyři"); system("pause"); } 4. Po spuštění programu se vypíše výpis na obrazovku a vše se smaže. Jak dosáhnete toho, aby text zůstal na obrazovce? Vstup dat z klávesnice do programu V předešlém textu jsme se naučili jak přesunout informace na obrazovku a naplnit proměnné s využitím přiřazovacího příkazu. Nyní se naučíme, jak realizovat jiný způsob vstupu dat do našeho Naposledy vytištěno 5.3.2013 8:55:00 57

D:\Iva\Prace\Skripta\tzi\TZI_pro_ekonomy_12.doc - 58 - programu. V nejjednodušším případě čteme data z klávesnice a ukládáme je do proměnné paměti. Každá proměnná z paměti musí mít své jméno a musí mít deklarací určeno, jaký typ dat do ní lze načíst. Potřebujeme-li například pracovat s konkrétními mzdami pracovníků, je třeba nejprve zadat jména pracovníků, jejich hrubé mzdy a následně lze z těchto údajů vypočítat odvody a vypsat výstupní sestavu na obrazovku. Příkaz pro načtení dat z klávesnice do proměnné a má tvar: scanf ("% t", & jméno_proměnné); Pozor: Značka & se používá jen u číselných datových typů. t typ proměnné &.. označení názvu proměnné V tomto příkazu to, co stojí za %, definuje typ proměnné (co do ní lze vkládat). To, co stojí za & je jméno proměnné, které se definování typu v "%d" týká. %d čtení celého čísla %c čtení jednoho znaku %e čtení čísla s pohyblivou řádovou čárkou %f čtení čísla s pohyblivou řádovou čárkou %g čtení čísla s pohyblivou řádovou čárkou %s čtení řetězce (1) To co stojí za & je jméno proměnné. Uveďme dva příklady př.: int cislo; scanf ("% d", &cislo); př.: float podil;... scanf ("%f", &podil); 24000 cislo 10.1 podíl MC MC Deklarace int číslo, říká, že do proměnné číslo lze vkládat jen celá čísla. To musí respektovat všechny následující příkazy. "% d" říká, že do proměnné číslo lze z klávesnice načíst jen celé číslo, v souladu s deklarací. Deklarace float podíl, říká, že do proměnné podíl lze vkládat čísla s desetinnou čárkou. "%f" říká, že do proměnné podíl lze z klávesnice načíst číslo s desetinnou čárkou v souladu s deklarací. Pokud chceme obsah proměnné načtené příkazem scanf ( ) zobrazit na obrazovku, musíme v souladu s (1) popsat proměnnou také v příkaze printf ( ), např. v základním stavu printf("%d", a); je a typu int. Plnění a tisk hodnoty proměnné a můžeme zobrazit jako: MC a Obr. č..: Načtení a zobraze proměnné Naposledy 58 vytištěno 5.3.2013 8:55:00

D:\Iva\Prace\Skripta\tzi\TZI_pro_ekonomy_12.doc - 59 - Příklad č. 4 Zadání: Převeďte vývojový diagram pro načtení hrubé mzdy pracovníka Kotka do proměnné mzda a následně zobrazte na obrazovku hruba mzda pana Kotka je 18 500. Použijte příkaz scanf( ) a printf( ). Metodický pokyn: V tomto případě potřebujeme využívat knihovnu I/O jak pro načtení, tak i pro výstup údajů. Řešení: Vývojový diagram Zápis v jazyku C Popis příkazů Z Načtení knihovny i/0 #include <stdio.h> main () { načti knihovnu I/0 hlavní funkce Deklarace proměnné int mzda; deklarace proměnné - mzda je celé číslo řadič zadej hrubou mzdu pana Kotka Načti hrubou mzdu pana Kotka do proměnné mzda printf("zadej hrubou mzdu pana Kotka:"); scanf ("%d",&mzda); tisk textu Zadej hrubou mzdu pana Kotka na obrazovku načtení hodnoty do proměnné mzda Tisk hruba mzda pana Kotka je ; mzda printf("hruba mzda pana Kotka je:%d\n",mzda); tisk textu hruba.. + hodnota proměnné system("pause"); zastavení programu K } 18500 přechod na nový řádek proměnná mzda je typu integer MC mzda vytiskne Naposledy vytištěno 5.3.2013 8:55:00 59

D:\Iva\Prace\Skripta\tzi\TZI_pro_ekonomy_12.doc - 60 - Barevně jsme ukázali, jak byla proměnná mzda nejprve deklarována (int mzda;) a následně používána v souladu s touto deklarací (např. scanf ("%d",&mzda); a printf( ) i). Po spuštění programu, program provede operaci a zobrazí se: Popis nově použitých klíčových slov: scanf ( ) načtení vstupní hodnoty do programu printf ( ) vystavení proměnné na obrazovku Naposledy 60 vytištěno 5.3.2013 8:55:00

D:\Iva\Prace\Skripta\tzi\TZI_pro_ekonomy_12.doc - 61 - Příklad č. 5 Zadání: Vypracujte vývojový diagram, popište činnost paměti a převeďte vývojový diagram do jazyka C pro následující úkol: Načtěte dvě celá čísla z klávesnice, sečtěte je a na monitor vypište výstupní sestavu: Program na součet dvou čísel a = b = a, +, b, =, c Metodický pokyn: Toto zadání má demonstrovat použití přiřazovacího příkazu a podrobnější syntax příkazu printf( ). Před zahájením práce na vývojovém diagramu si musíme vyřešit, které proměnné a jakého typu budete potřebovat (co do nich budeme ukládat). V našem případě to jsou proměnné a, b, c, do kterých ukládáme celá čísla (varianta A), proto je deklarace int a, b, c; Typ v deklaraci int a, b, c musíme potom respektovat v příkazech scanf ( ), printf ( ), přiřazení, atd. Příkaz #include <stdio.h> vyvolá knihovnu I/O, která organizuje přenosy dat ve scanf( ) a printf( ). Řešení: Varianta a: Použijeme přiřazovací příkaz c = a + b 1 a v příkazu 2 vytiskne jako výsledek c. Vývojový diagram Proměnné paměti Zápis v jazyku C Z Vyvolání knihovny I/O Deklarace proměnných MC #include <stdio.h> main () { int a,b,c; a b a b Načtení a Načtení b printf("zadej a:"); scanf("%d",&a); printf("zadej b:"); scanf("%d",&b); na obrazovku potřebujeme vystavit, kterou proměnnou budeme plnit. c = a + b c a + b c=a+b; 1 a =; a printf("a=%d\n",a); b =; b printf("b=%d\n",b); c =; c printf("c=%d\n",c); 1 2 3 Tisk a; + ; b = ;c printf("%d+%d=%d\n",a,b,c); system("pause"); 2 K } co máme udělat s čím to máme udělat 2 Pozn.: 1 v printf říká, že máme načíst proměnnou typu a je typu integer ("%d") 2 2 v printf říká, že máme načíst proměnnou typu b je typu integer ("%d") 3 v printf říká, že máme načíst proměnnou typu c je typu integer ("%d") Naposledy vytištěno 5.3.2013 8:55:00 61

D:\Iva\Prace\Skripta\tzi\TZI_pro_ekonomy_12.doc - 62 - Opět barevně zobrazujeme, jak byly proměnné deklarovány a následně používány v souladu s deklaracemi. Příkaz printf( ) má mnoho možností. Ve variantě b do něj umístíme součet dvou proměnných a + b. V takovém případě nepotřebujeme proměnnou c (nebudeme ji tedy ani deklarovat). Napište si tento program, přeložte a spusťte. Naposledy 62 vytištěno 5.3.2013 8:55:00

D:\Iva\Prace\Skripta\tzi\TZI_pro_ekonomy_12.doc - 63 - Varianta b: Součet a + b umístíme do příkazu printf( ). Z Vyvolání knihovny I/O Deklarace proměnných a b a =; a b =; b TISK a + b Zápis v jazyku C: #include <stdio.h> main () { int a,b; printf("zadej a:"); scanf ("%d",&a); printf("zadej b:"); scanf ("%d",&b); printf("a=%d\n",a); printf("b=%d\n",b); printf("%d\n",a+b); system("pause"); K } Naposledy vytištěno 5.3.2013 8:55:00 63

D:\Iva\Prace\Skripta\tzi\TZI_pro_ekonomy_12.doc - 64-3.4 Větvení programu V životě se musíme rozhodovat obvykle mezi více variantami řešení v závislosti na existujících podmínkách. Tuto možnost Vám dává také programovací jazyk C svými příkazy if a if-else. Tyto příkazy nám dovolí větvit program. 3.4.1 if (výraz) příkaz; je příkaz pro větvení programu (tzv. podmíněný příkaz). Je-li výraz pravdivý, vyplň příkaz. Na místě příkazu může být blok příkazů. Pokud výraz není pravdivý, pokračuj v řešení následujícími příkazy za tímto příkazem. Př.: Co se vypíše na obrazovku, vykoná-li program příkaz: ANO výraz NE if (10 > 9) printf ("je pravda"); Na obrazovku se vypíše Příkaz je pravda Pokud zadáme jako vstupní hodnoty: a = 10; b = 20; potom příkaz if (a > b) printf ("je pravda"); nenapíše se na obrazovku nic, protože a je menší než b. 3.4.2 if (výraz) příkaz 1 else příkaz 2; Struktura příkazu: Příkaz if (výraz) příkaz 1 else příkaz 2; Pokud je pravdivý výraz, vykonej příkaz 1; jinak vykonej příkaz 2; ANO a > c NE Příkaz 1 Příkaz 2 I v tomto případě lze do Příkaz 1 a Příkaz 2 dosadit blok příkazů. V takovém případě je uzavřeme mezi závorky { }. Př.: if (a > c) { a: = a + 1; c: = c + 1; } else { a: = a 1; c: = c - 1; }; Naposledy 64 vytištěno 5.3.2013 8:55:00

D:\Iva\Prace\Skripta\tzi\TZI_pro_ekonomy_12.doc - 65-3.4.3 Blok příkazů Konstatovali jsme již, že v jazyku C lze za sebou řadit příkazy do bloků: { začátek bloku příkaz 1; příkaz 2; tělo bloku blok příkazů příkaz 3;.. } konec bloku Blok příkazů začíná a končí závorkami { }. Blok příkazů lze využít například v příkazu if - else. Demonstrujme si využití struktury bloku příkazů na zápisu if a > b {a: = a+1; b: = b+1} else {a: = a-1; b: = b-1}, pro dvě varianty vstupních hodnot: př.: varianta 1 varianta 2 5 2 if a b a b a > b... výraz a > b je pravdivý.... výraz a > b není pravdivý { a: = a + 1; 6 b: = b + 1; a 3 } b else { a: = a - 1; 1 b: = b - 1; a 4 } 2 b 5 3.4.4 Aritmetické operátory +. sčítání -.. odčítání *.. násobení /.. dělení %.. zbytek po celočíselném dělení. Lze jej použít pro operace s celočíselnými typy. Dává výsledek jako zbytek pro celočíselném dělení. Na pravé straně přiřazovacího příkazu se může objevit výraz: p = a b; Operátory, /, a % mají vyšší prioritu, než operátory + a -. Pro určení pořadí vyhodnocování příkazu používáme závorky. Naposledy vytištěno 5.3.2013 8:55:00 65

D:\Iva\Prace\Skripta\tzi\TZI_pro_ekonomy_12.doc - 66 - Výpočet plochy obdélníku P = a+b #include <stdio.h> main () { int P,a,b; printf("zadej a:"); scanf ("%d",&a); } printf("zadej b:"); scanf ("%d",&b); P=a*b; printf("plocha je: %d\n",p); system("pause"); V následujícím příkladu si ukážeme příklad na operaci sečítání a podrobněji popíšeme možnosti příkazu printf( ). Operace sčítání používá operátor +, který provede sečtení hodnot do požadované proměnné. Př.: x = 10 + 20 Do proměnné x se vloží hodnota 30 jako výsledek operace sčítání. Častěji se tato operace používá mezi proměnnými. Př.: a = 10; b = 20; x = a + b; Další variantou je použití operátoru + v příkazu printf viz příklad č. 5. Př.: printf("součet je: %d", a+b); 2 V tomto případě je součet proměnných a, b proveden v rámci příkazu printf. Proměnné a, b i výsledek musí být typu int, což určuje "%d". Stejnou funkci jako operátor + má také operátor -, který se používá pro výpočet rozdílu mezi dvěma hodnotami, nebo mezi proměnnými: Př.: x = a b; V následujících příkladech použijeme aritmetické operátory k řešení úkolů. Naposledy 66 vytištěno 5.3.2013 8:55:00

D:\Iva\Prace\Skripta\tzi\TZI_pro_ekonomy_12.doc - 67-3.4.5 Relační operátory, které můžeme v jazyce C použít: Operátor Činnost > větší než >= větší než nebo rovno < menší než <= menší než nebo rovno = = rovno!= nerovno 3.4.6 Relační operátory mají nižší prioritu než aritmetické operátory. Nevyšší priorita! >>=<<= = =!= && Nejnižší priorita Výstupem relačního operátoru a > b ve variantě 1 předešlého příkladu je logická hodnota 1, ve variantě 2 předešlého příkladu je výstupem relačního operátoru logická hodnota 0. 3.4.7 Aplikace algoritmů větvení Příklad č. 6 Zadání: Vytvořte algoritmus, který určí, které ze dvou zadaných čísel je větší a toto vytiskne. Čísla nesmí být stejná. Metodický pokyn: Vývojový diagram Z Z Vyvolání knihovny i/0 Deklarace proměnných Vyvolání knihovny i/0 Deklarace proměnných Knihovna I/O Načtení dvou čísel a ALU Najdi větší z obou čísel b a > b NE ALU ANO Knihovna I/O Vytiskni větší číslo Větší číslo je a Větší číslo je b K K Naposledy vytištěno 5.3.2013 8:55:00 67

D:\Iva\Prace\Skripta\tzi\TZI_pro_ekonomy_12.doc - 68 - Zápis v jazyku C Popis příkazů #include <stdio.h> main () { int a,b; vyvolej knihovnu I/0 hlavní funkce začátek hlavní funkce a, b jsou proměnné, kam lze uložit jen celá čísla printf("zadej a:"); scanf ("%d",&a); zobrazit zadej a: na obrazovku zadání hodnoty do proměné a } printf("zadej b:"); scanf ("%d",&b); if(a>b) { printf("vetsi cislo je a \n");} else { printf("vetsi cislo je b \n");} system("pause"); zobrazit zadej b: na obrazovku zadání hodnoty do proměné b je-li a > b vystav na obrazovku text větší číslo je a posuň kurzor na nový řádek jinak vystav na obrazovku text větší číslo je b posuň kurzor na nový řádek zastavení programu Naposledy 68 vytištěno 5.3.2013 8:55:00

D:\Iva\Prace\Skripta\tzi\TZI_pro_ekonomy_12.doc - 69 - Popis nových příkazů: if jestliže platí (výraz) proveď (příkazy) else jinak, proveď (blok příkazů) Příklad č. 7 Zadání: Vytvořte jednoduchou kalkulačku. Zadejte z klávesnice typ operace (S - sčítání, O - odčítání, N - násobení, D - dělení) a dvě čísla, se kterými provedete operaci. Výsledek vytiskněte na obrazovku. Metodický pokyn: Tento příklad představuje využití MENU při řešení programů MENU v programu slouží k tomu, aby si uživatel mohl pohodlně vybrat z nabídky funkcí programu. Při řešení potřebujeme další proměnnou, do níž načteme svoji volbu. Příkaz if potom dovolí vykonat blok příkazů, které odpovídají volbě operátora. Dále se při řešení tohoto problému naučíme používat příkazy getchar ( ); a příkaz pro porovnání = = : Příkaz getchar ( ) Tato funkce je součástí knihovny stdio.h a slouží pro načtení jednoho znaku z klávesnice. Tuto funkci lze také použít pro zastavení programu a čekání na stisk libovolné klávesy. Po stisku se vloží do proměnné typu char znak, který lze testovat pomocí podmínek if a vyhodnotit jaký stisk klávesy uživatel učinil. Řešení: Vývojový diagram Z 1 Vyvolej knihovnu i / 0 CH = S NE ANO a + b Spusť hlavní funkci Zadej typ proměnných CH = O NE ANO a - b Smaž obrazovku Nabídka MENU S, O, N, D Načtení volby operace do CH S sčítání O odčítání N násobení D - dělení CH = N NE CH = D NE ANO ANO a x b a / b Načtení a Tisk výsledku Načtení b Zastav program 1 K Naposledy vytištěno 5.3.2013 8:55:00 69

D:\Iva\Prace\Skripta\tzi\TZI_pro_ekonomy_12.doc - 70 - Zápis v jazyku C - VARIANTA A #include <stdio.h> main () { int a,b; char ch; system("cls"); do proměnných a, b lze ukládat jen celá čísla do proměnné ch lze ukládat jen znaky printf("chcete:\n"); printf("scitat, Odecitat, Nasobit nebo Delit:\n"); printf("zadejte prvni pismeno funkce :"); ch=getchar(); printf("\n"); printf("zadejte prvni cislo:"); scanf ("%d",&a); printf("zadejte druhe cislo:"); scanf ("%d",&b); if(ch=='s')printf("%d",a+b); if(ch=='o')printf("%d",a-b); if(ch=='n')printf("%d",a*b); if(ch=='d')printf("%f",a/b); načtení volby z klávesnice načtení prvního čísla načtení druhého čísla jestliže je načtený znak z klávesnice S, vytiskni a + b jestliže je načtený znak z klávesnice O, vytiskni a - b jestliže je načtený znak z klávesnice N, vytiskni a x b jestliže je načtený znak z klávesnice D vytiskni a / b } printf("\n"); system("pause"); Program provede příkazy a zobrazí: Naposledy 70 vytištěno 5.3.2013 8:55:00

D:\Iva\Prace\Skripta\tzi\TZI_pro_ekonomy_12.doc - 71 - Poznámka: Pokud v této variantě dosadíme za a = 3, b = 4, výsledkem dělení je 0, protože proběhlo tzv. celočíselné dělení (zobrazí jen celé číslo výsledku: Když si tedy napíši program a ve výstupní sestavě mám jako výsledek operace 0, je pravděpodobné, že je třeba upravit některou deklaraci v dělení. Pokud chceme tento nedostatek odstranit, je třeba v deklaraci proměnných uvést: float a, b; a v příkazu scanf na místě %d vložit %f viz varianta b Zápis v jazyku C - VARIANTA B #include <stdio.h> main () { float a,b; char ch; system("cls"); printf("chcete:\n"); printf("scitat, Odecitat, Nasobit nebo Delit:\n"); printf("zadejte prvni pismeno funkce :"); ch=getchar(); printf("\n"); printf("zadejte prvni cislo:"); scanf ("%f",&a); printf("zadejte druhe cislo:"); scanf ("%f",&b); if(ch=='s')printf("%f",a+b); if(ch=='o')printf("%f",a-b); if(ch=='n')printf("%f",a*b); if(ch=='d')printf("%f",a/b); printf("\n"); } system("pause"); Naposledy vytištěno 5.3.2013 8:55:00 71

D:\Iva\Prace\Skripta\tzi\TZI_pro_ekonomy_12.doc - 72 - Nové příkazy: getchar načtení jednoho znaku z klávesnice if(ch=='s') dvě rovnítka v příkazu if znamenají porovnání znaku načteného z klávesnice se znakem v apostrofech. Následující příklad má demonstrovat postup pří řešení reálných algoritmů, které řeší problém. Vycházíme vždy z jednoduchého algoritmu, který popisuje jen hlavní body řešení úlohy a ten následně zpřesňujeme tak, až se dostaneme téměř na úroveň jednotlivých příkazů v jazyku C. Samostatná práce studenta: Změňte v Příkladu č.7 varianta B příkaz float a, b; a nahraďte jej příkazem int a, b. Jak se bude program chovat? Naposledy 72 vytištěno 5.3.2013 8:55:00

D:\Iva\Prace\Skripta\tzi\TZI_pro_ekonomy_12.doc - 73 - Příklad č. 8 Zadání: Najdi největší číslo ze tří čísel, které vstupují z klávesnice a proveďte verifikaci vývojového diagramu. Realizujte variantu, kdy je a, b, c typu int, a variantu kdy je a, b, c typu double. (pozn. všechna čísla musí být vzájemně různá). Metodický pokyn: Vlastní problém nejprve zpracujeme v přehledném, stručném vývojovém diagramu, který popisuje blokové řešení problému. Následně zpracujeme jednotlivé bloky tohoto algoritmu postupně až po dílčí příkazy, které lze převést do příkazů jazyka C. Metoda zpřesňování vývojového diagramu je obecně platná při řešení jakéhokoliv problému. Vývojový diagram: Z Z Deklarace a, b, c, max Načtení tří čísel Budeme tedy potřebovat čtyři proměnné! Deklarace a, b, c a b c Najdi z těchto tří čísel největší ANO a > b 1 NE Vytiskni maximum 2 ANO a > c NE MAX = b ANO 3 5 4 b > c MAX = a MAX = c MAX = c K Vytiskni maximum K Naposledy vytištěno 5.3.2013 8:55:00 73

D:\Iva\Prace\Skripta\tzi\TZI_pro_ekonomy_12.doc - 74 - a) Varianta s celým číslem Zápis v jazyku C #include <stdio.h> main () { int a,b,c,max; system("cls"); printf("zadejte a:"); scanf ("%d",&a); printf("zadejte b:"); scanf ("%d",&b); printf("zadejte c:"); scanf ("%d",&c); if(a>b) 1 { if(a>c) max=a; 2 else max=c; 3 } else { if(b>c) max=b; 4 else max=c; 5 } printf("maximalni cislo je :%d\n",max); Připojení knihovny I/0 Hlavní funkce Začátek hlavní funkce a, b,c. budou celá čísla Smaž obrazovku vystav na obrazovku text "zadejte a" načtení hodnoty z klávesnice do proměnné a (a je celé číslo) vystav na obrazovku text "zadejte b" načtení hodnoty z klávesnice do proměnné b (b je celé číslo) vystav na obrazovku text "zadejte c" načtení hodnoty z klávesnice do proměnné c (c je celé číslo) jestliže je a > b vlož do max hodnotu a jinak vlož do max hodnotu c. jinak jestliže je b > c vlož do max hodnotu b jinak vlož do max hodnotu c. Vytiskni na obrazovku Maximalni cislo je max } system("pause"); Zastavení programu Zakončení programu Naposledy 74 vytištěno 5.3.2013 8:55:00

D:\Iva\Prace\Skripta\tzi\TZI_pro_ekonomy_12.doc - 75 - b) Varianta s desetinným číslem (Příklad 8a) Zápis v jazyku C Paměť #include <stdio.h> main () { double a,b,c,max; system("cls"); printf("zadejte a:"); scanf ("%lf",&a); printf("zadejte b:"); scanf ("%lf",&b); naplň naplň vstupy dat vstupy dat a } printf("zadejte c:"); scanf ("%lf",&c); if(a>b) { if(a>c) max=a; Porovnáme a, c else max=c; větší uloží do max } else { if(b>c) max=b; else max=c; } printf("maximalni cislo je :%lf\n",max); system("pause"); naplň vstupy dat b c max Výstupní max na obrazovku hledání maxima Naposledy vytištěno 5.3.2013 8:55:00 75

D:\Iva\Prace\Skripta\tzi\TZI_pro_ekonomy_12.doc - 76 - Program provede operaci a zobrazí: 3.4.8 Verifikace vývojového diagramu Hrubou verifikaci (ověření správné funkce programu) provedeme tak, že za vstupní data vložíme takové kombinace hodnot, aby program musel projít všechny větve algoritmu Metodický pokyn: Vypracujeme verifikaci Programu č. 8. Vybrali jsem si čtyři kombinace vstupních dat a) b) c) d), s jejich využitím ověříme funkčnost všech větví tohoto programu: a) a = 12, b = 3, c = 1 a > b > c, b) a = 1, b = 7, c = 4 b > c > a Z Z Deklarace proměnných Deklarace proměnných a a = 12 a a = 1 b b = 3 b b = 7 c c = 1 c c = 4 ANO a > b NE ANO a > b NE ANO a > c NE NE b > c ANO ANO a > c NE NE b > c ANO MAX = a MAX = c MAX = c MAX = b MAX = a MAX = c MAX = c MAX = b K K Naposledy 76 vytištěno 5.3.2013 8:55:00

D:\Iva\Prace\Skripta\tzi\TZI_pro_ekonomy_12.doc - 77 - c) a = 20, b = 30, c = 10 c > a > b, d) a = 10, b = 20, c = 30 a < b < c Z Z Deklarace proměnných Deklarace proměnných a a = 20 a a = 10 b b = 30 b b = 20 c c = 10 c c = 30 ANO a > b NE ANO a > b NE ANO a > c NE NE b > c ANO ANO a > c NE NE b > c ANO MAX = a MAX = c MAX = c MAX = b MAX = a MAX = c MAX = c MAX = b K K Samostatná práce studenta: 1) Doplňte program příkazy, které by programátorovi sdělovaly, kterou cestou při ladění prochází Z Deklarace proměnných #include <stdio.h> main () { int a,b,c,max; system("cls"); a 1 printf("zadejte a:"); scanf ("%d",&a); printf("krok c. 1 \n"); b 2 c 3 ANO a > b NE ANO a > c NE NE 4 5 6 MAX = a MAX = c MAX = c 8 K b > c ANO 7 MAX = b } printf("zadejte b:"); scanf ("%d",&b); printf("krok c. 2 \n"); printf("zadejte c:"); scanf ("%d",&c); printf("krok c. 3 \n"); if(a>b) { printf("krok c. 3a \n"); if(a>c) {printf ("krok c. 4 \n"); max=a;} else {printf ("krok c. 5 \n"); max=c;} } else { printf("krok c. 3b \n"); if(b>c) {printf ("krok c. 6 \n"); max=b;} else {printf ("krok c. 7 \n"); max=c;} } printf("maximalni cislo je :%d\n",max); printf("krok c. 8 \n"); system("pause"); Naposledy vytištěno 5.3.2013 8:55:00 77

D:\Iva\Prace\Skripta\tzi\TZI_pro_ekonomy_12.doc - 78 - Program provede příkazy a zobrazí: Naposledy 78 vytištěno 5.3.2013 8:55:00

D:\Iva\Prace\Skripta\tzi\TZI_pro_ekonomy_12.doc - 79-3.4.9 Přehled struktury programu s využitím podprogramů: Ve vývojovém diagramu a následně v programu se často opakují úseky, které řeší stejnou problematiku, jen pro různá vstupní data. Takovému úseku říkáme podprogram. Hlavní program Zde se provádějí příkazy hlavního programu Příkaz pro zavolání podprogramu "P1" Podprogram "P1" Zde se provádějí příkazy podprogramu P1 Zde se provádějí příkazy hlavního programu Příkaz pro návrat z podprogramu Zde se provádějí příkazy podprogramu P2 Podprogram "P2" Příkaz pro zavolání podprogramu "P2" Příkaz pro návrat z podprogramu Zde se provádějí příkazy hlavního programu Příkaz pro ukončení programu Obr. č.:.. Zdroj: Ve vývojovém diagramu například v Příkladu č. 9 potom nemusíme pro každou hodnotu vstupní proměnné vykreslovat celou strukturu vývojového diagramu. Stačí jen stejný úsek označit a v následující části k tomuto označení přidávat označení proměnných, viz Příklad č. 9. Mluvíme o podprogramu. Naposledy vytištěno 5.3.2013 8:55:00 79

D:\Iva\Prace\Skripta\tzi\TZI_pro_ekonomy_12.doc - 80 - K Deklarace proměnných K1 K2 K3 K4 Pro proměnné a, b, c, d, e, f, g vyvolej P1 P1 Podprogram č. 1 - načtení údajů a proměnných Hrubé mzdy a odvody za měsíc: Mezera Tisk a1 a2 a3 a4 a5 Pro proměnné a, b, c, d, e, f, g vyvolej P2 P2 Podprogram č. 2 - tisk údajů o pracovníkovi H = a4 + b4 + c4 + d4 + e4 + f4 + g4 Součet hrubé mzdy ; H o = a5 + b5 + c5 + d5 + e5 + f5 + g5 Součet odvodů ; o Mezera V Kunovicích, dne, K2, K3, K4 NE Konec ANO Vymaž obrazovku K Výstupem programu bývají většinou tzv. výstupní sestavy. Před začátkem algoritmizace a programování problému potřebujeme přesně definovat, jak mají vypadat výstupní sestavy. V tomto případě úzce spolupracuje ekonom a manažer se specialistou-programátorem. Jednoduché rozborové sestavy si má umět navrhnout každý ekonom, manažer a informatik. Využití podprogram u výstupní sestavy vidíme na příkladu řešení v Příkladu č. 9. Naposledy 80 vytištěno 5.3.2013 8:55:00

D:\Iva\Prace\Skripta\tzi\TZI_pro_ekonomy_12.doc - 81-3.4.10 Pole Pole je seznamem proměnných, které jsou všechny jednoho typu a přistupuje se k nim přes jméno pole a pozici prvku. Pole může být jednorozměrné, např. a [2] nebo dvourozměrné b [30], [20]. a) Jednorozměrné pole Deklarace jednorozměrného pole: Typ jméno-proměnné [velikost]; U jednorozměrného pole jsou data (vždy stejného typu) ukládána sekvenčně za s sebou: MZDA[0] MZDA[1] MZDA[2] MZDA[n - 1] Pole je útvar (datová struktura), který je uložený v paměti. Proto mu musí být přiděleno jméno, které je adresou, kde je pole uloženo: MZDA[0] MZDA[1] MZDA [n-1] 0 1 n - 1 MZDA MC Například mzdy pracovníků lze umístit do proměnné typu pole, která na je nazvána MZDA. Prvky pole jsou číslovány od 0 do n (pole má n + 1 prvků) a pozice prvku v poli je udávána identifikací jména proměnné a v závorkách pořadím (pozor čísluje se od nuly); MZDA [10] je jméno prvního prvku tohoto pole. Překladači musíme určit, jaký typ dat budeme do prvku pole vkládat: - deklarace jednorozměrného pole typu int (do pole prvků mohu vkládat jen celá čísla), je: int a [10];.. Pole a má 10 znaků, číslovaných od 0. Př.: a [0]= 15; a [1]= 12; a [2]= 18; a [9]= 21; scanf ("%d",&a[0]); - deklarace jednorozměrného pole pro čísla s desetinnou čárkou do pole typu float float b [10]; Př.: b [1]= 14.2; b [3]= -7.3; b [9]= 356.23; scanf ("%d",&b[1]); - deklarace jednorozměrného pole znaky cha c [5]; Př.: c [0]= A ; c [2]= ú ; c [4]= b ; scanf ("%d",&c[0]); - deklarace jednorozměrného pole řetězce (Kotek): char r1 [50]; scanf ("%s",r1) Naposledy vytištěno 5.3.2013 8:55:00 81

D:\Iva\Prace\Skripta\tzi\TZI_pro_ekonomy_12.doc - 82 - V příkazu printf potom pracuji s tímto polem: printf("%d", a [3]); printf("%f", b [2]); printf("%c", c [2]); printf("%s", r1]); Pozn: Chceme-li použít scanf ( ) pro načtení celočíselné hodnoty do prvku pole, zadáváme před symbol &. Příklad: KR b) Dvojrozměrná pole Dovoluje pracovat se dvěma rozměry pole. První rozměr si můžeme představit jako řádek a druhý rozměr jako sloupec tabulky. Do takovéto tabulky lze vkládat různé hodnoty podle datového typu. Pokud použijeme datový typ řetězce lze vkládat na jednotlivé řádky texty. Př.: Deklarujeme-li dvojrozměrné pole, do něhož budeme vkládat text (řetězce znaků), lze použít: char jmena [10] [20]; a z klávesnice načte do první buňky hodnotu příkazem scanf ("%s", jmena[0]); 10 počet řádků 20 počet znaků Počet prvků 0 1 2 3 4 5 29 0 B O T E K 1 F I L A 2 S T A N E K 99 3.4.11 Cyklus Konstatovali jsme již, že cyklus zajišťuje opakování činnosti části programu dokud není splněna nějaká podmínka. Rozlišujeme cykly: 1) while 2) do 3) for Naposledy 82 vytištěno 5.3.2013 8:55:00

D:\Iva\Prace\Skripta\tzi\TZI_pro_ekonomy_12.doc - 83-1. Cyklus while a) Cyklus while s podmínkou na začátku cyklu while (výraz) příkaz; Na místě příkaz může být blok příkazů. Program kontroluje pravdivost výrazu na začátku cyklu. výraz Výraz není pravdivý Je-li tedy <výraz> na začátku cyklu nepravdivý, nebude se příkaz nebo blok příkazů realizovat ani jednou. Výraz je pravdivý příkaz (blok příkazů) Příklad č. 9 Zadání: Vytiskni na obrazovku čísla od 1 10 a použij cyklus s podmínkou na začátku. Vývojový diagram Zápis v jazyku C Z Deklarace typu proměnné i #include <stdio.h> main () { int i; i = 1 i=1; Nastavení počáteční hodnoty počítadla tiskni ANO i 10 NE while (i<=10) { printf("%d\n",i); i=i+1; } Dokud platí, že i 10: - vytiskni hodnotu i - hodnotu i zvyš o 1 i = i + 1 system("pause"); } K Naposledy vytištěno 5.3.2013 8:55:00 83

D:\Iva\Prace\Skripta\tzi\TZI_pro_ekonomy_12.doc - 84 - V následujícím textu si popíšeme podrobně činnost příkazu if a práce paměti. Řešení: Z Vyvolej knihovnu I / 0 MC i = 1 i 1 ANO i 10 NE i 10 i 10 i 10 i = 10 i > 10 tiskni i Tisk: 1 Tisk: 2 Tisk: Tisk: 10 i = i + 1 i 2 3 11 K K Program provede příkazy a zobrazí: Naposledy 84 vytištěno 5.3.2013 8:55:00

D:\Iva\Prace\Skripta\tzi\TZI_pro_ekonomy_12.doc - 85 - Příklad č. 10 Mzdová účetní potřebuje rychle vypočítat průměr mezd pracovníků. Počet pracovníků předem nezná. Vyřešte tento problém s využitím cyklu while, nakreslete vývojový diagram, verifikujte průběh programu na vývojovém diagramu, přepište do jazyka C, a spusťte. Řešení: Z Vyvolání knihovny i/0 Paměť Proměnná, pomocí níž rozhodnu, zda chci pokračovat Větev A: Deklarace typu proměnné plat, součet, počet, průměr, povel Součet = 0 Počet = 0 Povel = = A 1 2 Větev B součet povel 0 0 A 1 1 2 Nastavení počátečních hodnot A je pravdivé Povel = A A není pravdivé 7 3 7 zadej plat 3 Průměr = suma/počet plat průměr Součet = součet + plat Počet = počet + 1 4 5 Tiskni průměr součet počet 4 5 Povel pokračovat A/N K povel 6 načti povel 6 zadáno A Zápis v jazyku C #include <stdio.h> main () { int plat,soucet,pocet; double prumer; char povel; soucet=0; pocet=0; povel='a'; while (povel=='a') { printf("\n zadej plat :"); 3 scanf ("%d",&plat); 4 soucet=soucet+plat; 5 pocet=pocet+1; printf("pokracovat A N :"); 6 povel=getch(); 1 1 2 Vyvolání knihovny I/0 Hlavní funkce programu Definice typu proměnných Nastavení počáteční hodnoty proměnné Hlavička cyklu Větev A cyklus pro načtení vstupních dat } prumer=soucet/pocet; 7 printf("\n prumer platu je :%lf \n",prumer); } system("pause"); Větev B výstupy průměrů platů na obrazovku Naposledy vytištěno 5.3.2013 8:55:00 85

D:\Iva\Prace\Skripta\tzi\TZI_pro_ekonomy_12.doc - 86 - Program provede příkazy a zobrazí: Popis nových klíčových slov while (výraz) příkaz;..dokud je výraz pravdivý, vykonej příkaz a opakuj dotaz na pravdivost výrazu. Samostatná práce studenta Doplňte znakové upozornění (zvonek) pro obsluhu, že má zadat vstupní hodnotu! Příklad č. 11 Načtěte pro pět pracovníků příjmení, jméno a hrubou mzdu s využitím cyklu while a s využitím téhož cyklu vytiskněte sestavu: Výpis údajů Malý Petr 9 600 Šebek Jan 10 000 Staněk Milan 17 000 Fila Igor 8 400 Bobek Karel 25 000 Naposledy 86 vytištěno 5.3.2013 8:55:00

D:\Iva\Prace\Skripta\tzi\TZI_pro_ekonomy_12.doc - 87 - Nejprve si naplánujeme, jaké proměnné budeme potřebovat, jak je označíme a jak jim deklarujeme typ. a (příjmení) b (jméno) c (hrubá mzda) a1=malý b1=petr c1= 9600 a2=šebek b2=jan c2=10 000 a3= Staněk b3=milan c3=17 000 a4=fila b4=igor c4=8 400 a5=bobek b5=karel c5=25 000 Vývojový diagram Z Vyvolání knihovny i/0 Deklarace typů proměnných n a1, a2, a3, a4, a5 příjmení b1, b2, b3, b4, b5 - jméno c1, c2, c3, c4, c5 hrubá mzda Vymaž obrazovku n = 5; n > 1 while ( n 1) NE Podmínka na začátku cyklu Načtení vstupních dat (příjmení, jméno, hrubá mzda) n = 1 n = 2 n = 3 n = 4 ANO Načti údaje o pracovnících ANO ANO ANO ANO naplň a 1, b 1, c 1 naplň a 2, b 2, c 2 naplň a 3, b 3, c 3 první průchod cyklem while protože n = 5 n > 1 (naplní a5, b5, c5) první průchod cyklem while protože n = 4 n > 1 (naplní a4, b4, c4) atd. naplň a 4, b 4, c 4 n = 5 ANO naplň a 5, b 5, c 5 n = n - 1 1 Naposledy vytištěno 5.3.2013 8:55:00 87

D:\Iva\Prace\Skripta\tzi\TZI_pro_ekonomy_12.doc - 88-1 vymaž obrazovku n = 5; Tisk výpis údajů n > 1 while ( n 1) NE ANO n = 1 ANO tisk a 1, b 1, c 1 K Tisk výstupní sestavy n = 2 n = 3 ANO ANO tisk a 2, b 2, c 2 tisk a 3, b 3, c 3 n = 4 ANO tisk a 4, b 4, c 4 n = 5 ANO naplň a 5, b 5, c 5 n = n - 1 Naposledy 88 vytištěno 5.3.2013 8:55:00

D:\Iva\Prace\Skripta\tzi\TZI_pro_ekonomy_12.doc - 89 - Plnění paměti v průběhu zpracování programu: plnění proměnných n 5 4 3 2 1 0 < 1 Konec cyklu 1 5 > 1 4 > 1 3 > 1 2 > 1 1 = 1 5 > 1 4 > 1 3 > 1 2 > 1 1 = 1 A Botek Fila Staněk Šebek Malý a 5 a 4 a 3 a 2 a 1 b 5 Karel b 4 Jan b 3 Milan b 2 Jan b 1 Petr 25 000 8 400 17 000 10 000 9 600 c 5 c 4 c 3 c 2 c 1 n 4 n 3 n 2 n 1 n 0 Obr. č...: Plnění paměti při realizaci Příkladu č. 11 Nevýhodou tohoto řešení je, že musíte deklarovat veliké množství proměnných a při velkém počtu pracovníků by byl vývojový diagram i program v jazyku C neúnosně rozsáhlý. Zápis v jazyce C #include <stdio.h> main () { int Počet znaků c1,c2,c3,c4,c5; char a1[30],a2[30],a3[30],a4[30],a5[30];. příjmení char b1[30],b2[30],b3[30],b4[30],b5[30]; int n; a 1 a 1 [0] a 1 [29] system("cls"); a 2 a 2 [0] a 2 [29] n=5; while (n>=1) { if (n==1) { printf("zadejte prijmeni:");scanf ("%s",a1); printf("zadejte jmeno:");scanf ("%s",b1); printf("zadejte mzdu:");scanf ("%d",&c1); } if (n==2) { printf("zadejte prijmeni:");scanf ("%s",a2); printf("zadejte jmeno:");scanf ("%s",b2); printf("zadejte mzdu:");scanf ("%d",&c2); } Naposledy vytištěno 5.3.2013 8:55:00 89

D:\Iva\Prace\Skripta\tzi\TZI_pro_ekonomy_12.doc - 90 - if (n==3) { printf("zadejte prijmeni:");scanf ("%s",a3); printf("zadejte jmeno:");scanf ("%s",b3); printf("zadejte mzdu:");scanf ("%d",&c3); } if (n==4) { printf("zadejte prijmeni:");scanf ("%s",a4); printf("zadejte jmeno:");scanf ("%s",b4); printf("zadejte mzdu:");scanf ("%d",&c4); } if (n==5) { printf("zadejte prijmeni:");scanf ("%s",a5); printf("zadejte jmeno:");scanf ("%s",b5); printf("zadejte mzdu:");scanf ("%d",&c5); } n=n-1; } řetězec 15 znaků zarovnání vlevo } printf("vypis udaju\n\n"); n=5; číslo celé 10 znaků while (n>=1) { if (n==1)printf("%-15s%-15s%10d\n",a1,b1,c1); if (n==2)printf("%-15s%-15s%10d\n",a2,b2,c2); if (n==3)printf("%-15s%-15s%10d\n",a3,b3,c3); if (n==4)printf("%-15s%-15s%10d\n",a4,b4,c4); if (n==5)printf("%-15s%-15s%10d\n",a5,b5,c5); n=n-1; } system("pause"); Naposledy 90 vytištěno 5.3.2013 8:55:00

D:\Iva\Prace\Skripta\tzi\TZI_pro_ekonomy_12.doc - 91 - Samostatná práce studenta 1. Pokuste se s využitím stávajících znalostí naprojektovat takový program, který umožní obsluze mezi dvěma znaky změřit délku proluky. Z Délka proluky Zvonek Prodleva Zvonek ANO NE Pokračovat? K Naposledy vytištěno 5.3.2013 8:55:00 91

D:\Iva\Prace\Skripta\tzi\TZI_pro_ekonomy_12.doc - 92 - a) Cyklus s podmínkou na konci cyklu - cyklus do-while Dalším cyklem v jazyku C je cyklus do-while. Obecně má tvar: do / převeď / { příkazy / tělo cyklu / } while (výraz); / dokud platí <výraz> / Pokud se provádí jeden příkaz, { } závorky nejsou potřebné, např.:. do printf ( První úloha ); while (a < b);. Cyklus opakuje příkazy, dokud je výraz pravdivý. V tomto případě se příkazy provedou alespoň jednou, protože podmínka je až na konci cyklu. Příklad č. 12 Zadání: Vytiskni na obrazovku čísla od 1 10 a použij cyklus s podmínkou na konci. Vývojový diagram Zápis v jazyku C Popis příkazů Z i = 1 include <stdio.h> main () { int i; Vyvolání knihovny I / 0 Začátek hlavní funkce Proměnná i je typu int tiskni i = i + 1 i=1; do { printf("%d\n",i); i=i+1; } while (i<=10); Nastavení počítadla cyklu Začátek cyklu Tělo cyklu Podmínka cyklu ANO i 10 NE } system("pause"); K Naposledy 92 vytištěno 5.3.2013 8:55:00

D:\Iva\Prace\Skripta\tzi\TZI_pro_ekonomy_12.doc - 93 - Následující graf prezentuje vztah průběhu cyklu do a práci paměti. Z Vyvolání knihovny i / 0 Knihovna i / 0 i = 1 i 1 tiskni i 1 2. 9 10 i = i + 1 i 2 3 10 11 ANO i 10 NE 2 < 10 3 < 10 10 = 10 11 > 10 K K první průchod cyklu druhý průchod cyklu Následující příklad ukončí cyklus zadáním příkazu povel stlačením písmene A na klávesnici. Naposledy vytištěno 5.3.2013 8:55:00 93

D:\Iva\Prace\Skripta\tzi\TZI_pro_ekonomy_12.doc - 94 - Příklad č. 13 Vytvořte vývojový diagram a napište program v jazyku C, kdy z klávesnice budou zadávány platy, následně bude proveden dotaz na pokračování a po ukončení cyklu zadávání platů se vypočte součet zadávaných platů. Vývojový diagram Zápis v jazyku C Z Deklarace externích dat součet = 0 zadej plat Součet = součet + plat #include <stdio.h> main () { int plat,soucet; char povel; soucet=0; do { printf("\n zadej plat :"); scanf ("%d",&plat); soucet=soucet+plat; deklarace externích knihoven (i/0) deklarace typu proměnných, které budeme používat nastavení počítané hodnoty součtu cyklus do - while ANO Povel pokračovat A / N povel A NE součet platů K } printf("pokracovat A N :"); povel=getch(); } while (povel=='a'); printf("\n soucet platu je :%d \n",soucet); system("pause"); Naposledy 94 vytištěno 5.3.2013 8:55:00

D:\Iva\Prace\Skripta\tzi\TZI_pro_ekonomy_12.doc - 95 - Popis nových klíčových slov Pokud chceme cokoliv porovnávat, uvedeme dvě rovnítka: Př.: while (povel = = "A").. c) Cyklus for Cyklus for se používá pro předem známý počet opakování příkazu nebo bloku příkazů. Má obecně formát: for (inicializace, test podmínky, krok) příkazy; Inicializace znamená zadání počáteční hodnoty řídící proměnné cyklu. Test podmínky zjištění, zda řídící proměnná cyklu dosáhla konečné hodnoty Je-li test konečné hodnoty řídící proměnné pravdivý, cyklus se opakuje. Není-li pravdivý, cyklus se ukončí a program pokračuje zpracováním prvního příkazu, který stojí za cyklem. Test podmínky se provádí na začátku cyklu. Testování podmínky se provádí na začátku cyklu, což znamená, že po každém provedení cyklu se proměnná sníží (zvýší) o určitou hodnotu. Krok změna proměnné cyklu pro provedení cyklu Z Nastavení hodnoty počáteční proměnné; podmínka test na hodnotu proměnné; krok Tělo cyklu jeden příkaz nebo blok příkazů Provedení kroku Naposledy vytištěno 5.3.2013 8:55:00 95

D:\Iva\Prace\Skripta\tzi\TZI_pro_ekonomy_12.doc - 96 - Příklad č. 14 Zadání: Vytiskni na obrazovku čísla od 1 10 a použij cyklus for. Vývojový diagram Z Zápis v jazyku C #include <stdio.h> main () { int i; i: = 1; i 10; i + 1 for (i=1;i<=10;i++) { tělo cyklu tiskni i Tělo cyklu printf("%d\n",i); } i = i + 1 } system("pause"); K Popis příkazů: i + + je ekvivalent i = i + 1; i - - je ekvivalent i = i 1; Na základě dosavadních znalostí jste schopni podrobně analyzovat činnost vývojového diagramu a programu následujícího příkladu. Naposledy 96 vytištěno 5.3.2013 8:55:00

D:\Iva\Prace\Skripta\tzi\TZI_pro_ekonomy_12.doc - 97 - Příklad 15 Vypracujte vývojový diagram, který načte pro 5 pracovníků - Karel Botek, Jan Fila, Milan Staněk, Jan Šebek, Petr Malý hrubé mzdy. Vypočítejte odvod každého pracovníka a vypočítejte součet hrubých mezd a součet odvodů. Popište činnost paměti a potřebné proměnné. Vytiskněte součet hrubých mezd a součet odvodů. Řešení: Tento příklad ukazuje na využití proměnné typu pole. Vývojový diagram Paměť Z Vymaž obrazovku Deklarace proměnných n Počet pracovníků Nastavení počáteční hodnoty suma = h suma = o n 5 i = 0; i < n; i ++ i i i i i 1 2 3 4 5 pole Pracovník příjmení ANO Prijmeni i [i] Botek Fila Staněk Šebek Malý Prijmeni [i] Pracovník jméno jmeno i [i] prijmeni 1 Karel prijmeni 2 Jan prijmeni 3 Milan prijmeni 4 prijmeni 5 Jan Petr Jmeno [i] Hrubá mzda mzda i [i] jmeno 1 25 000 jmeno 2 8 400 jmeno 3 17 000 jmeno 4 10 000 jmeno 5 9 600 Mzda [i] Do odvod [i] vlož vypočítaný odvod pracovníka mzda 1 8 750 odvod 1 mzda 2 mzda 3 mzda 4 mzda 5 2 940 5 490 3 500 3 360 odvod 2 odvod 3 odvod 4 odvod 5 odvod [i] Přičti hodnotu mezd pracovníka k celkovému součtu mezd Přičti hodnotu mezd pracovníka k celkovému odvodu i 25 000 45 090 62 090 72 090 81 690 suma h 1 suma h 2 suma h 3 suma h 4 suma h 5 8 750 11 690 17 180 20 680 24 090 suma o 1 suma o 2 suma o 3 suma o 4 suma o 5 suma - h [i] suma - o [i] 2 3 4 5 6 i = i + 1 i i i i i < n i < n i < n i < n i < n i > n Naposledy vytištěno 5.3.2013 8:55:00 97

D:\Iva\Prace\Skripta\tzi\TZI_pro_ekonomy_12.doc - 98-1 Součet hrubých mezd i n Součet odvodů V Kunovicích dne 10. 3. 2013 prijmeni 0 1 2 3 29 0 B O T E K 1 F I L A 2 S T A N E K K Zápis v jazyku C Počet pracovníků #include <stdio.h> main () Počet znaků { int i,n; char prijmeni[100][30]; Jména char jmeno[100][30]; double mzda[100]; double odvod[100]; double suma_h,suma_o; Příjmení jmeno 99 0 1 2 3 29 0 K A R E L 1 J A N 2 99 system("cls"); printf("zadejte pocet pracovniku (max 100):"); scanf ("%d",&n); suma_h=0; suma_o=0; for (i=0;i<n;i++) { 0 1 2 99 Mzda 2 5 0 0 0 0 1 2 99 Odvod 8 7 5 0 zahájení cyklu } printf("pracovnik %d\n",i+1); printf("zadejte prijmeni:"); scanf ("%s",prijmeni[i]); printf("zadejte jmeno:"); scanf ("%s",jmeno[i]); printf("zadejte mzdu:"); scanf ("%lf",&mzda[i]); odvod[i]=mzda[i]*0.35; suma_h=suma_h+mzda[i]; suma_o=suma_o+odvod[i]; printf("\n"); printf("soucet hrubých mezd :%10.2lf\n", suma_h); tělo cyklu výpočet odvodů deset míst celkem 2 desetinná místa printf("soucet odvodu :%10.2lf\n\n",suma_o); printf("v Kunovicich dne :10.1.2013\n"); lf proměnná typu double } system("pause"); Naposledy 98 vytištěno 5.3.2013 8:55:00

D:\Iva\Prace\Skripta\tzi\TZI_pro_ekonomy_12.doc - 99 - Popis příkazu printf ("Soucet hrubych mezd: %10.21f\n", suma_h); 1. Na obrazovku vypíše Soucet hrubých mezd: 2. Za tento text vypíše obsah proměnné suma_h s tím, že celkem může mít toto zobrazení 10 míst, z toho jsou dvě desetinná. 3. \n\n posune kurzor obrazovky o dva řádky Naposledy vytištěno 5.3.2013 8:55:00 99

D:\Iva\Prace\Skripta\tzi\TZI_pro_ekonomy_12.doc - 100-3.4.12 Aplikace programu C do práce ekonoma Příklad č. 16 V podniku Eskaliber, s.r.o. pracují následující pracovníci: p. Koníček Aleš p. Tománek Petr p. Šula Jan p. Prát Antonín p. Koubek Karel p. Čujan Petr p. Forman Jiří Vaším úkolem je vytvořit vývojový diagram pro řešení, které dovolí v daném měsíci pro jednotlivé pracovníky zadat hrubé mzdy, vypočítat z hrubých mezd odvody a vytisknout níže uvedenou sestavu převést do programovacího jazyka C a spustit. Hrubé mzdy a odvody za měsíc: 1 K1 a 1 a 2 a 3 a 4 a 5 2 3 4 5 9 Pořadí Příjmení 1 Jméno Hrubá mzda Odvody 1 Koníček Aleš 23000 Součet hrubé mzdy: Součet odvodů: H O 10 11 V Kunovicích, dne 6 7 8 K2 K3 K4 Výstupní sestava vstupní proměnné výstupní proměnné Naposledy 100 vytištěno 5.3.2013 8:55:00

D:\Iva\Prace\Skripta\tzi\TZI_pro_ekonomy_12.doc - 101 - Vývojový diagram již řešili v předešlých částech textu. Z A Deklarace proměnných Hrubé mzdy a odvody za měsíc: K1 viz 1 měsíc Mezera K1 1 P2(a) den K2 6 Tisk a1 a2 a3 a4 a5 měsíc K3 7 P2 (b) Načtení vstupních rok pořadí a1 příjmení jméno hrubá mzda a2 a3 a4 K4 1 Koníček Aleš 23000 Výpočet odvodů a5 8 P1(a) Podprogramy 2 3 4 5 9 P2 (c) P2 (d) P2 (e) P2 (f) P2 (g) H = a4 + b4 + c4 + d4 + e4 + f4 + g4 Součet hrubé mzdy ; H 10 12 Tisk výstupní P1 (b) o = a5 + b5 + c5 + d5 + e5 + f5 + g5 11 P1 (c) P1 (d) P1 (e) Součet odvodů ; o Mezera 13 P1 (f) V Kunovicích, dne, K2, K3, K4 P1 (g) NE Konec A ANO Vymaž obrazovku K Naposledy vytištěno 5.3.2013 8:55:00 101

D:\Iva\Prace\Skripta\tzi\TZI_pro_ekonomy_12.doc - 102 - Viděli jsme také, že toto řešení vytváří jednoduchou databázi, kterou můžeme výše uvedeným programem naplnit. Naše databáze bude mít strukturu: a1 a2 a3 a4 a5 b1 b2 b3 b4 b5 c1 c2 c3 c4 c5 d1 d2 d3 d4 d5 e1 e2 e3 e4 e5 f1 f2 f3 f4 f5 g1 g2 g3 g4 g5 1 Koníček Aleš 23 000 8 050 2 Tománek Petr 11 000 3 850 3 Šula Jan 9 700 3 395 4 Prát Antonín 17 000 5 950 5 Koubek Karel 16 800 5 880 6 Čujan Petr 7 600 2 660 7 Forman Jiří 13 000 4 550 Zápis v jazyku C #include <stdio.h> main () { int a1,b1,c1,d1,e1,f1,g1,k2,k3,k4; char k1[30]; char a2[30],b2[30],c2[30],d2[30],e2[30],f2[30],g2[30]; char a3[30],b3[30],c3[30],d3[30],e3[30],f3[30],g3[30]; double a4,b4,c4,d4,e4,f4,g4; double a5,b5,c5,d5,e5,f5,g5; double suma_h,suma_o; system("cls"); proměnná řetězce (K1 bude zobrazena řetězcem znaků) proměnná pro načtení měsíce jako text printf("zadejte mesic uzaverky:");scanf ("%s",k1); printf("zadejte den:");scanf ("%d",&k2); printf("zadejte mesic:");scanf ("%d",&k3); printf("zadejte rok:");scanf ("%d",&k4); a1=1; printf("zadejte prijmeni:");scanf ("%s",a2); printf("zadejte jmeno:");scanf ("%s",a3); printf("zadejte mzdu:");scanf ("%lf",&a4); a5=a4*0.35; b1=2; printf("zadejte prijmeni:");scanf ("%s",b2); printf("zadejte jmeno:");scanf ("%s",b3); printf("zadejte mzdu:");scanf ("%lf",&b4); b5=b4*0.35; proměnná mzda (číselná hodnota) proměnná typu double c1=3; printf("zadejte prijmeni:");scanf ("%s",c2); printf("zadejte jmeno:");scanf ("%s",c3); printf("zadejte mzdu:");scanf ("%lf",&c4); c5=c4*0.35; d1=4; printf("zadejte prijmeni:");scanf ("%s",d2); printf("zadejte jmeno:");scanf ("%s",d3); printf("zadejte mzdu:");scanf ("%lf",&d4); d5=d4*0.35; e1=5; printf("zadejte prijmeni:");scanf ("%s",e2); printf("zadejte jmeno:");scanf ("%s",e3); printf("zadejte mzdu:");scanf ("%lf",&e4); e5=e4*0.35; f1=6; printf("zadejte prijmeni:");scanf ("%s",f2); printf("zadejte jmeno:");scanf ("%s",f3); printf("zadejte mzdu:");scanf ("%lf",&f4); f5=f4*0.35; Naposledy 102 vytištěno 5.3.2013 8:55:00

D:\Iva\Prace\Skripta\tzi\TZI_pro_ekonomy_12.doc - 103 - g1=7; printf("zadejte prijmeni:");scanf ("%s",g2); printf("zadejte jmeno:");scanf ("%s",g3); printf("zadejte mzdu:");scanf ("%lf",&g4); g5=g4*0.35; sedm míst pro číslo 20 znaků text dorovnání vlemo 10 míst a 2 desetinná čísla typu double system("cls"); printf("hrube mzdy a odvody za mesic :%s\n\n",k1); printf("%7s %-20s %-20s %10s %10s\n","poradi","prijmeni","jmeno","hruba mzda","odvody"); printf("%7d %-20s %-20s %10.2lf %10.2lf\n",a1,a2,a3,a4,a5); printf("%7d %-20s %-20s %10.2lf %10.2lf\n",b1,b2,b3,b4,b5); printf("%7d %-20s %-20s %10.2lf %10.2lf\n",c1,c2,c3,c4,c5); printf("%7d %-20s %-20s %10.2lf %10.2lf\n",d1,d2,d3,d4,d5); printf("%7d %-20s %-20s %10.2lf %10.2lf\n",e1,e2,e3,e4,e5); printf("%7d %-20s %-20s %10.2lf %10.2lf\n",f1,f2,f3,f4,f5); printf("%7d %-20s %-20s %10.2lf %10.2lf\n",g1,g2,g3,g4,g5); suma_h=a4+b4+c4+d4+e4+f4+g4; printf("soucet hrube mzdy :%10.2lf\n", suma_h); suma_h=a4+b4+c4+d4+e4+f4+g4; printf("soucet hrube mzdy :%10.2lf\n", suma_h); suma_o=a5+b5+c5+d5+e5+f5+g5; printf("soucet odvodu :%10.2lf\n\n",suma_o); printf("v Kunovicich dne :%d.%d.%d\n",k2,k3,k4); } system("pause"); Naposledy vytištěno 5.3.2013 8:55:00 103

D:\Iva\Prace\Skripta\tzi\TZI_pro_ekonomy_12.doc - 104 - Po spuštění programu a naplnění dat se objeví tato obrazovka: Popis příkazu 1 2 3 4 5 printf("%7s %-20s %-20s %10s %10s\n","poradi","prijmeni","jmeno","hruba mzda","odvody"); Tento příkaz vypíše na obrazovku řádek - základní tabulky. Přitom platí: Text pořadí je umístěn do 7 znaků dorovná vpravo: 1 0 1 2 3 4 5 6 P O R A D I Text příjmení je umístěn do 20 znaků dorovná vlevo: 2 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 P R I J M E N I Naposledy 104 vytištěno 5.3.2013 8:55:00

D:\Iva\Prace\Skripta\tzi\TZI_pro_ekonomy_12.doc - 105 - Text příjmení je umístěn do 20 znaků dorovná vlevo: 3 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 J M E N O %10.2lf umístí číslo do 10 znaků se dvěma desetinnými místy, zarovnání zprava: 4 5 0 1 2 3 4 5 6 7 8 9 2 3 0 0 0 0 0 0 1 2 3 4 5 6 7 8 9 8 5 0 0 0 0 a 4 = 23000.00 a 5 = 8050.00 3.5 Shrnutí Vývojový diagram je třeba po jeho verifikaci přepsat do jazyka C. V takovém případě si volíme prostředí, v němž bude probíhat přepis do jazyka C (editor, výstupem je zdrojový soubor, koncovku má.c), překladač (kompilátor, výstupem je cílový soubor s koncovkou. obj), zapojit do externí knihovny pomocí sestavovacích programů (linker, připojí externí knihovny a vytvoří spustitelný soubor s příponou.exe). Hlavičkové soubory Knihovny.lib Editor Preprocesor Překladač Linker Debugger Zdrojový soubor.c Hlavičkový soubor.h Relativní kód.obj Spustitelný soubor. exe Spuštění Program C začíná hlavičkovým souborem, který definuje přidané externí knihovny - #include <stdio.h>, které mají příponu.h. Nejčastěji používanou knihovnou je knihovna pro ovládání vstupu a výstupu (I/O) stdio.h. Za hlavním souborem se nachází jedna nebo více funkcí. Povinnou funkcí je funkce main ( ); za tímto klíčovým souborem je příkaz nebo blok příkazů (blok příkazů je uzavírá závorkami { }). Za každým příkazem musí být středník. V programu používáme konstanty (například čísla a = 5) nebo proměnné. Konstanty i proměnné jsou ukládány do paměti. U konstanty i proměnné musíme určit její typy. V programu lze používat následující typy: znak (8 bitů) celé číslo se znaménkem desetinné číslo s pohyblivou řádovou čárkou desetinné číslo s pohyblivou řádovou čárkou s dvojnásobnou přesností bez hodnoty Naposledy vytištěno 5.3.2013 8:55:00 105

D:\Iva\Prace\Skripta\tzi\TZI_pro_ekonomy_12.doc - 106 - U proměnné musíme zadat její jméno a typ, aby si program mohl v paměti vytvořit potřebné místo (typ jméno proměnné;) př.: int x; Proměnná může být definována jako a) globální b) lokální uvnitř funkce, v níž je deklarována Hodnotu konstanty přiřazujeme položce přiřazovacím příkazem jméno proměnná = hodnota. Nejčastěji používaný příkaz výstupu dat na obrazovku je printf ( );, nejčastější příkaz pro načtení dat z klávesnice je scanf ( ); Oba příkazy lze zadáním parametrů v ( ) více specifikovat. Činnost programu lze zastavit příkazem systém ("PAUSE"); Obrazovku smažeme příkazem ("CLS"); Na proměnné můžeme aplikovat operátory: Operátor Činnost + sčítání - odčítání > větší než >= větší než nebo rovno < menší než <= menší než nebo rovno = = rovno!= nerovno nebo logické (relační) operátory Nevyšší! >>=<<= = =!= && Nejnižší Přechod na nový řádek zajistíme \n. Pro větvení programu používáme příkaz if (výraz) příkaz; nebo if (výraz) příkaz1; else příkaz2; U výrazu se zkoumá jeho pravdivost. Komentáře v programu / komenář / V programech můžeme používat cykly while, do while a for. a) while (výraz) příkaz; může mít podmínku na začátku nebo na konci cyklu. b) do {tělo cyklu} while (výraz); c) for (inicializace, test podmínky, krok) příkazy; K načtení vstupního údaje lze použít také příkaz getch ( ); Data, zvláště ekonomické údaje, lze ukládat do pole. U pole určujeme typ dat, která do tohoto pole můžeme ukládat a rozsah znaků, které může proměnná mít. Tyto údaje se uvádí již v části deklarace proměnných viz char prijmeni[100][30]; nebo double mzda [100]; Pro opakující se části, lze použít tzv. podprogram. V programech používáme tzv. MENU, které dovolí uživateli strukturování jeho požadavků. Naposledy 106 vytištěno 5.3.2013 8:55:00

D:\Iva\Prace\Skripta\tzi\TZI_pro_ekonomy_12.doc - 107 - Vývojový diagram před zahájením jeho překladu tzv. verifikace provádíme kontrolu jeho správné funkce na vhodně zvolených vstupních datech. Z toho také vyplývá, že vstupní data pro konkrétní řešení programu musí vyhovovat tzv. vstupní podmínce. Pokud uděláme v přepisu nebo logice řešení úkolu chybu, program nás na chybu upozorní a zvýrazní řádek, kde si myslí, že jsme udělali chybu. Skutečnou chybu však musí nají programátor. Naposledy vytištěno 5.3.2013 8:55:00 107

D:\Iva\Prace\Skripta\tzi\TZI_pro_ekonomy_12.doc - 108-3.6 Slovní zásoba v jazyce anglickém: Slovíčka v jazyce anglickém Česká varianta Psáno anglicky Výslovnost Počítač Computer [kęmpju:tę:] Umělá inteligence Artificial Intelligence [a:rtęfišęl intelędžęns] Generace Generation [dženę:eišęn] Nula Zero [zirou] Nultá generace počítačů Zero Generation Computers [zirou dženę:eišęn kęmpju:tęs: ] MARK1 byl počítač první generace Mark 1 was the first generation computer. EPOS1 byl počítač druhé generace EPOS 1 was the second generation computer. Algoritmus Algorithm [ąlgę:iđęm] Vývojový diagram Flowchart Program Computer Programme [kęmpju:tę: prougrąm] Paměť Memory [memę:i:] Příkaz command [kęmąnd] Obsah paměti Memory Contents [memę:i: ka:ntents] Místo Space [speis] Místo v paměti Memory space [memę:i: speis ] Uložit Save [seiv] Konstanta Constant [ka:nstęnt] Znak Character [keriktę:] Uložit do paměti Save into Memory [seiv intu: memę:i:] Proměnná Variable [veri:ębęl] Uložit proměnnou do paměti Save variable into Memory Typ Type [taip] Typ proměnné Variable type [veri:ębęl taip] Proměnná typu int int variable Proměnná typu double double variable Proměnná typu float float variable Proměnná typu char char variable Pole Array [ę:ei] Proměnná typu pole Array Délka Length [leńk0] Délka proměnné Variable Length [veri:ębęl leńk0] Příkaz Command [kęmąnd] Blok příkazů Block of commands [bla:k av kęmąndz] Přiřadit Assign [ęsain] Příkaz přiřazení Assignment command [ęsainmęnt kęmąnd] Procedura Procedure [pręsi:džę:] Main je první procedura Main is first a function programu Data Data [deitę] Číst data To read Data [tu: red deitę] Načti data do proměnné Read Data into a variable Vstup dat Data Input [deitę input] Výstup dat Data Output [deitę autput] Knihovna Library Naposledy 108 vytištěno 5.3.2013 8:55:00

D:\Iva\Prace\Skripta\tzi\TZI_pro_ekonomy_12.doc - 109 - Knihovna vstupu a výstupu Input and Output Library [input ąnd autput laibreri:] % procento % ratio/per cent Lomítko Slash/forward slash Úvozovky.. Quotation Marks [kwouteišęn ma:rks] Závorky {} Brackets [brąkęts] Komentář /*.*/ Comment [ka:ment] Cyklus Loop [lu:p] Tělo cyklu Loop body [lu:p ba:di:] Cyklus while While loop [mail lu:p] Cyklus do while Do While loop [du: mail lu:p] Cyklus for For loop [fo:r lu:p] Podmínka Condition [kęndišęn] Pole Array [ę:ei] Prvek Item [aitęm] Počet Count/ computation number Počet prvků pole Number elements of array Zadání úlohy Problem spetting/task Informatika Informatics [infę:mątiks] Teoretický základ informatiky Theoretical Basis on Informatics Manažer Manager [mąnędžę:] Ekonom Economist [ika:nęmist] Přejdi Go over (to) [gou ouvę:] Přejdi na nový řádek Go over (to) a new line Výraz Vep Uložit Save [seiv] Zadání Setting [setiń] Zadání úlohy Problem spetting/task Teorie Theory [0iri:] Řešení Solution [sęlu:šęn] Grafické řešení Graphic Solution [grafik sęlu:šęn] Obsahuje Includes [inklu:dz] Funkce Function [fańkšęn] Algoritmus je řešením úlohy. Algorithm is the solution of the problem. Vývojový diagram je grafickým řešením algoritmu. Flowchart is a graphic solution of the algorithm. Program obsahuje příkazy. The programme includes instruction commands. Program obsahuje funkci main The programme includes the function main. Do paměti ukládáme data. Data is saved into memory. Do paměti ukládáme příkazy. Instruction commands are saved into memory. Do paměti ukládáme proměnné Parameter/Variable is saved into memory. Do paměti ukládáme data i příkazy Data and instruction commands are saved into memory. Data a proměnné mají v paměti délku. Data and instruction have a length in memory. Blok příkazů obsahuje příkazy. Block of instructions includes commands/ Data and variables Naposledy vytištěno 5.3.2013 8:55:00 109

D:\Iva\Prace\Skripta\tzi\TZI_pro_ekonomy_12.doc - 110 - have the length in memory a = 5 je příkaz přiřazení a is 5 is an assignment command/ a is 5 is a command of assign První funkce programu je The first function is main main Příkaz #include<studio.h >; vyvolá knihovnu vstupu a výstupu Command #include <studio.h>, call input library and out put library Obrazovka Screen Příkaz printf ( ); píše na obrazovku Příkaz scanf( ); čte data ze Command? WTF vstupu Proměnná je typu int Int variable Podmínka Condition/Term Obrazovka Screen [skri:n] Cyklus má podmínku a tělo Loop, has body cyklu Pole má určitý počet prvků The array has a certain number of elements. \n nařizuje přejít na další řádek. \n commands to go over to next line Studujeme teoretické základy informatiky pro manažery a ekonomy We study theoretical basis of informatics for managers and economists. Přepis zadání do vývojového diagramu The transcription of the setting to the flowchart Naposledy 110 vytištěno 5.3.2013 8:55:00

D:\Iva\Prace\Skripta\tzi\TZI_pro_ekonomy_12.doc - 111-3.7 Otázky Co to je algoritmus? (jednoznačně určená posloupnost konečného počtu elementárních kroků, vedoucích k vyřešení daného problému při splnění podmínek hromadnosti, jedinečnosti, konečnosti, rezultativnosti, správnosti a výsledku) Co to je vývojový diagram? (je to je druh diagramu, který slouží ke grafickému znázornění jednotlivých kroků algoritmu, nebo obecného procesu) Jak provádíme verifikaci programu? (Navrhneme kombinace vstupních dat tak, abychom ověřili správnou funkci všech větví programu). K čemu slouží vstupní proměnné v programu? (Pro načtení vstupních dat a práci s daty). K čemu slouží výstupní proměnné v programu? (Pro tisk výstupních dat). K čemu slouží cyklus? (Cyklus slouží k opakování části programu, dokud je splněna podmínka) Jaké typy cyklů používáme nejčastěji při algoritmizaci úloh? (while, do_while, for) Co zabezpečuje je editor? Zápis vývojového diagramu do zdrojového kódu daného jazyka Jakou funkci má překladač? (Přeloží program. Výstupem je soubor s koncovkou.obj) Co to je linker? (připojuje externí knihovny) K čemu slouží tzv. hlavičkový soubor? (umožní programu připojení externích knihoven, má příponu.h a tvar #include <stdio.h>) Jakým klíčovým slovem se zapisuje funkce v programu? (main( )) Který příkaz zajistí připojení knihovny I/O? (#include <stdio.h>) Proč potřebujeme v programu deklarovat proměnné? (Potřebujeme říci překladači, o jaký typ proměnné jde, kolik místa si má v paměti na proměnnou vyčlenit, jaké operace jsou s touto proměnnou dovolené). Který příkaz deklaruje celé číslo se znaménkem? (int) Který příkaz deklaruje desetinné číslo s pohyblivou řádovou čárkou s dvojnásobnou délkou? (double) Naposledy vytištěno 5.3.2013 8:55:00 111

D:\Iva\Prace\Skripta\tzi\TZI_pro_ekonomy_12.doc - 112 - Který příkaz deklaruje desetinné číslo s pohyblivou řádovou čárkou? (float) Jakou strukturu má deklarace proměnné? (typ jméno_proměnné;) Jakou strukturu má deklarace příkaz pro naplnění proměnné konstantou? (jméno_proměnné=konstanta;).ve kterém řádku je chyba? #include <stdio.h>; #include <stdio.c>; #include <stdio.d>; Všechny odpovědi jsou správné. (ve druhém, třetím a čtvrtém) Musí být za příkazem printf( ) středník? (Ano, musí být vždy) Musí být středník za příkazem scanf ("%d",&mzda)? (Ano, musí být vždy).co způsobí příkaz system("pause");? (Program se zastaví a na obrazovku napíše Pokračuj stlačením libovolné klávesy Po stlačení libovolné klávesy program pokračuje). Co způsobí příkaz \n v příkazu printf( \n )? (Program posune kurzor obrazovky na nový řádek). K čemu slouží příkaz scanf("%d",&mzda);? (Je to příkaz na načtení dat (celých čísel) z klávesnice do proměnné mzda.) Co určuje "%d" v příkazu scanf("%d",&mzda);? (mzda je typ proměnné double). Co určuje & v příkazu scanf("%d",&mzda);? (Označuje proměnnou).co vykoná příkaz system("cls");? (Smazání obrazovky) Co znamení v programu C příkaz int a,b,c;? (proměnné typu a, b, c budou celá čísla) Jakou strukturu má cyklus if? (if(podmínka)příkaz;)).jakou strukturu má cyklus if, else? (if(podmínka)příkaz1 else příkaz2;) K čemu slouží příkaz getch();? (k načtení dat do proměnné) Co vykoná příkaz if (char== S ) printf( %d, a+b);? Naposledy 112 vytištěno 5.3.2013 8:55:00

D:\Iva\Prace\Skripta\tzi\TZI_pro_ekonomy_12.doc - 113 - (Pokud char = S, vytiskne se na obrazovku součet obsahu proměnných a, b (celočíselné hodnoty)) Co znamená deklarace char a[30][10];? (Proměnná a je typu pole o 30 řádcích, každý řádek má 10 znaků).program má určit, které ze dvou zadaných čísel je větší a toto vytisknout. Který zápis je správný? a) #include <stdio.h> main () { int a,b,c; system("cls"); printf("zadej a:"); scanf ("%d",&a); printf("zadej b:"); scanf ("%d",&b); if(a>b){ printf("vetsi cislo je a \n"); } else { printf("vetsi cislo je b \n"); } } b) main () { int a,b,c; system("cls"); printf("zadej a:"); scanf ("%d",&a); printf("zadej b:"); scanf ("%d",&b); if(a>b){ printf("vetsi cislo je a \n"); } else { printf("vetsi cislo je b \n"); } } c)#include <stdio.h> { int a,b,c; system("cls"); printf("zadej a:"); scanf ("%d",&a); printf("zadej b:"); scanf ("%d",&b); if(a>b){ printf("vetsi cislo je a \n"); } else { printf("vetsi cislo je b \n"); } }.d) Žádný zápis není správný (odpověď a je správná).program má načíst hrubou mzdu pracovníka Kotka do proměnné mzda Kotek a následně ji zobrazit na obrazovku Hrubá mzda pana Kotka je 18500. Který zápis je správný? a) #include <stdio.h> main () {int mzda; system("cls"); printf("zadej hrubou mzdu pana Kotka:"); scanf ("%d",&mzda); printf("hruba mzda pana Kotka je:%d\n",mzda); system("pause"); } b)main () {int mzda; system("cls"); printf("zadej hrubou mzdu pana Kotka:"); scanf ("%d",&mzda); printf("hruba mzda pana Kotka je:%d\n",mzda); system("pause"); }.c)#include <stdio.h> {int mzda; system("cls"); printf("zadej hrubou mzdu pana Kotka:"); scanf ("%d",&mzda); }.d)#include <stdio.h> main () {int mzda; system("cls"); printf("zadej hrubou mzdu pana Kotka:"); } (Odpověď a je správná) Program má načíst dvě čísla z klávesnice, má je sečíst a na monitor vypsat: Program na součet dvou čísel a = b = a +, b, =, c Který zápis je správný? a) #include <stdio.h> main () {int a,b,c; system("cls"); printf("zadej a:"); scanf ("%d",&a); printf("zadej b:"); scanf ("%d",&b); c=a+b; printf("a=%d\n",a); printf("b=%d\n",b); printf("c=%d\n",c); printf("%d+%d=%d\n",a,b,c); system("pause"); } b) main (); {int a,b,c; system("cls"); printf("zadej a:"); scanf ("%d",&a); printf("zadej b:"); scanf ("%d",&b); c=a+b; printf("a=%d\n",a); printf("b=%d\n",b); printf("c=%d\n",c); printf("%d+%d=%d\n",a,b,c); system("pause"); } Naposledy vytištěno 5.3.2013 8:55:00 113

D:\Iva\Prace\Skripta\tzi\TZI_pro_ekonomy_12.doc - 114 - c) #include <stdio.h> {int a,b,c; system("cls"); printf("zadej a:"); scanf ("%d",&a); printf("zadej b:"); scanf ("%d",&b); c=a+b; printf("a=%d\n",a); printf("b=%d\n",b); printf("c=%d\n",c); printf("%d+%d=%d\n",a,b,c); system("pause"); }.Následující program má sečíst dvě čísla a součet vypsat na obrazovku. Který zápis je správný? a) #include <stdio.h> main () {system("cls"); printf("zadej a:"); scanf ("%d",&a); printf("zadej b:"); scanf ("%d",&b); c=a+b; printf("a=%d\n",a); printf("b=%d\n",b); printf("c=%d\n",c); printf("%d+%d=%d\n",a,b,c); system("pause"); } b) main () {system("cls"); printf("zadej a:"); scanf ("%d",&a); printf("zadej b:"); scanf ("%d",&b); c=a+b; printf("a=%d\n",a); printf("b=%d\n",b); printf("c=%d\n",c); printf("%d+%d=%d\n",a,b,c); system("pause"); } c) #include <stdio.h> {system("cls"); printf("zadej a:"); scanf ("%d",&a); printf("zadej b:"); scanf ("%d",&b); c=a+b; printf("a=%d\n",a); printf("b=%d\n",b); printf("c=%d\n",c); printf("%d+%d=%d\n",a,b,c); system("pause"); } d) žádný zápis není správný.počítač v jazyce anglickém je a) Computer b) Memory c) Save c) Theory Umělá inteligence v jazyce anglickém je a) Computer Programme b) Memory space c) Assignment command d) Artificial Intelligence Naposledy 114 vytištěno 5.3.2013 8:55:00

D:\Iva\Prace\Skripta\tzi\TZI_pro_ekonomy_12.doc - 115-4 Kódování informace v počítači Co bude posluchač po prostudování kapitoly znát: 1. Význam zakódování dat v počítači pomocí číselné hodnoty. 2. Způsob zakódovaní znaků abecedy pomocí ASCII tabulky. 3. Varianty kódování českého jazyka pomocí kódových stránek 4. Význam a způsob šifrování pomocí jednoduchých šifer. 5. Princip zabezpečení šifrovaného přenosu v prostředí internetu. 4.1 Principy ASCII kódu Cíl: Pochopení významu ukládání dat v počítači a významu ukládání informace do počítače V počítači se ukládají všechna data ve formě binárních informací pomocí nul a jedniček. S těmito daty počítač pracuje ve své operační paměti tím způsobem, že jsou načtena do jednotlivých registrů procesoru a jsou s nimi prováděny instrukce procesoru. Pro tuto práci s instrukcemi procesoru je vytvořen určitý paměťový prostor, který se vyjadřuje v konkrétních jednotkách. Nejmenší jednotka je jeden bit (0 nebo 1). Z této jednotky jsou vytvářeny další odvozené jednotky. Datová jednotka BYTE Byte je jednotka vyjadřující množství dat v informatice. Obsahuje 8 bitů (bit nejmenší jednotka 0 nebo 1), které reprezentují číslo od 0 do 255 v desítkové číselné soustavě. Do jednoho byte lze uložit 256 znaků. Současné počítače pracují s jednotkami většími než jeden byte, říká se jim slovo. ( 64 bitová architektura pracuje s 8 byte najednou ) V praxi se používají násobky této jednotky dle následující tabulky: Jednotka Značka B kb MB Kilobajt kb 1000 1 Megabajt MB 1 000 000 1000 1 Gigabajt GB 10 9 1 000 000 1000 Terabajt TB 10 12 10 9 1 000 000 Tabulka č..: Varianty násobku základní jednotky Pomocí těchto jednotek se nejčastěji vyjadřuje velikost operační paměti počítače. Další častou variantou je vyjádření velikosti externí paměti počítače pevného disku. Na pevné disku jsou data uchovávána v určité organizační struktuře, kterou vytváří operační systém počítače. Velmi často Naposledy vytištěno 5.3.2013 8:55:00 115

D:\Iva\Prace\Skripta\tzi\TZI_pro_ekonomy_12.doc - 116 - potřebujeme uchovávat textové informace ze kterých se vytvářejí dokumenty pomocí různých programů, kterým se označují textové editory (např. Word). Tyto textové informace vytváří uživatel psaním na klávesnici nebo jinou formou. Dochází tak ke komunikaci mezi uživatelem a počítačem. Při stisku určité klávesy si počítač zapamatuje číslo, které je této klávese přiřazeno. Toto číslo je určeno pomocí tabulky. V následující kapitole je popsána nejčastější forma této tabulky tzv. ASCII tabulka. 4.2 ASCII tabulka a její použití Cíl: Pochopení významu kódování písmene abecedy do paměti počítače Při práci s počítačem člověk potřebuje převádět informace vizuálního charakteru (písmena mají určitý tvar) jako je například tištěné nebo psané písmo na číselnou hodnotu, kterou si počítač zapamatuje ve své vnitřní paměti nebo na vnějším médiu (pevný disk). Tento proces je spojen s akcí, která se nazývá kódování, přiřazení určitému písmenu určité číslo (kód). K této činnosti potřebujeme tabulku, která toto přiřazení provádí pro jednotlivé písmena abecedy a také pro jednotlivé číslice. Nejznámější formou takovéto tabulky je ASCII tabulka. ASCII je zkratkou pro American Standard Code for Information Interchange ( americký standardní kód pro výměnu informací ). Tato tabulka přiřazuje číslo každému písmenu anglické abecedy, číslicím a tzv. řídícím povelům. Tato tabulka se zobrazuje v různých podobách a různých číselných soustavách. V této tabulce jsou znaky rozděleny do několika různých skupin podle významu. V první části jsou to tzv. řídící kódy, které nejsou často zobrazitelné. Řídící kódy jsou určeny pro různá zařízení, která se připojovala jako externí periférie a pro ně byl určen znak např. CR návrat vozíku a LF nový řádek. Hlavní význam pro praxi je přiřazení číselných kódu jednotlivým písmenům velké a malé abecedy. Jedná se o anglickou abecedu bez použití české diakritiky. Tato diakritika je uvedena v různých variantách jako číselné kódy za čísly ASCII tabulky. Jednotlivé skupiny ASCII tabulky jsou následující: čísla 1 31 představují řídící kódy čísla 32 47 představují znaménka čísla 48 57 představují číslice 0 9 čísla 58 64 představují další znaménka, dvojtečka a podobně čísla 65 90 představují písmena velké abecedy (A=65, B=66 ) čísla 91 96 představují značky čísla 97 122 představují písmena malé abecedy (a=97, b=98 ) čísla 123 126 představují další značky Naposledy 116 vytištěno 5.3.2013 8:55:00

D:\Iva\Prace\Skripta\tzi\TZI_pro_ekonomy_12.doc - 117 - Následující tabulka popisuje 127 znaků ASCII tabulky v desítkové, oktalové a binární podobě. dekadic oktal Hex binárně znak význam znaku 000 000 00 00000000 NUL (Null char.) 001 001 01 00000001 SOH (Start of Header) 002 002 02 00000010 STX (Start of Text) 003 003 03 00000011 ETX (End of Text) 004 004 04 00000100 EOT (End of Transmission) 005 005 05 00000101 ENQ (Enquiry) 006 006 06 00000110 ACK (Acknowledgment) 007 007 07 00000111 BEL (Bell) 008 010 08 00001000 BS (Backspace) 009 011 09 00001001 HT (Horizontal Tab) 010 012 0A 00001010 LF (Line Feed) 011 013 0B 00001011 VT (Vertical Tab) 012 014 0C 00001100 FF (Form Feed) 013 015 0D 00001101 CR (Carriage Return) 014 016 0E 00001110 SO (Shift Out) 015 017 0F 00001111 SI (Shift In) 016 020 10 00010000 DLE (Data Link Escape) 017 021 11 00010001 DC1 (XON)(Device Control 1) 018 022 12 00010010 DC2 (Device Control 2) 019 023 13 00010011 DC3 (XOFF)(Device Control 3) 020 024 14 00010100 DC4 (Device Control 4) 021 025 15 00010101 NAK (Negative Acknowledgement) 022 026 16 00010110 SYN (Synchronous Idle) 023 027 17 00010111 ETB (End of Trans. Block) 024 030 18 00011000 CAN (Cancel) 025 031 19 00011001 EM (End of Medium) 026 032 1A 00011010 SUB (Substitute) 027 033 1B 00011011 ESC (Escape) 028 034 1C 00011100 FS (File Separator) 029 035 1D 00011101 GS (Group separátor) 030 036 1E 00011110 RS (Request to Send)(Record Separator) 031 037 1F 00011111 US (Unit Separator) Značky a interpunkční znaménka 032 040 20 00100000 SP (Space) 033 041 21 00100001! (exclamation mark) 034 042 22 00100010 " (double quote) 035 043 23 00100011 # (number sign) 036 044 24 00100100 $ (dollar sign) 037 045 25 00100101 % (percent) 038 046 26 00100110 & (ampersand) 039 047 27 00100111 ' (single quote) 040 050 28 00101000 ( (left opening parenthesis) 041 051 29 00101001 ) (right closing parenthesis) 042 052 2A 00101010 * (asterisk) 043 053 2B 00101011 + (plus) 044 054 2C 00101100, (comma) 045 055 2D 00101101 - (minus or dash) 046 056 2E 00101110. (dot) 047 057 2F 00101111 / (forward slash) Číslice Naposledy vytištěno 5.3.2013 8:55:00 117

D:\Iva\Prace\Skripta\tzi\TZI_pro_ekonomy_12.doc - 118-048 060 30 00110000 0 049 061 31 00110001 1 050 062 32 00110010 2 051 063 33 00110011 3 052 064 34 00110100 4 053 065 35 00110101 5 054 066 36 00110110 6 055 067 37 00110111 7 056 070 38 00111000 8 057 071 39 00111001 9 Další značky 058 072 3A 00111010 : (colon) 059 073 3B 00111011 ; (semi-colon) 060 074 3C 00111100 < (less than sign) 061 075 3D 00111101 = (equal sign) 062 076 3E 00111110 > (greater than sign) 063 077 3F 00111111? (question mark) 064 100 40 01000000 @ (AT symbol) Písmena velké abecedy 065 101 41 01000001 A 066 102 42 01000010 B 067 103 43 01000011 C 068 104 44 01000100 D 069 105 45 01000101 E 070 106 46 01000110 F 071 107 47 01000111 G 072 110 48 01001000 H 073 111 49 01001001 I 074 112 4A 01001010 J 075 113 4B 01001011 K 076 114 4C 01001100 L 077 115 4D 01001101 M 078 116 4E 01001110 N 079 117 4F 01001111 O 080 120 50 01010000 P 081 121 51 01010001 Q 082 122 52 01010010 R 083 123 53 01010011 S 084 124 54 01010100 T 085 125 55 01010101 U 086 126 56 01010110 V 087 127 57 01010111 W 088 130 58 01011000 X 089 131 59 01011001 Y 090 132 5A 01011010 Z Značky a závorky Naposledy 118 vytištěno 5.3.2013 8:55:00

D:\Iva\Prace\Skripta\tzi\TZI_pro_ekonomy_12.doc - 119-091 133 5B 01011011 [ (left opening bracket) 092 134 5C 01011100 \ (back slash) 093 135 5D 01011101 ] (right closing bracket) 094 136 5E 01011110 ^ (caret cirumflex) 095 137 5F 01011111 _ (underscore) 096 140 60 01100000 ` Písmena malé abecedy 097 141 61 01100001 a 098 142 62 01100010 b 099 143 63 01100011 c 100 144 64 01100100 d 101 145 65 01100101 e 102 146 66 01100110 f 103 147 67 01100111 g 104 150 68 01101000 h 105 151 69 01101001 i 106 152 6A 01101010 j 107 153 6B 01101011 k 108 154 6C 01101100 l 109 155 6D 01101101 m 110 156 6E 01101110 n 111 157 6F 01101111 o 112 160 70 01110000 p 113 161 71 01110001 q 114 162 72 01110010 r 115 163 73 01110011 s 116 164 74 01110100 t 117 165 75 01110101 u 118 166 76 01110110 v 119 167 77 01110111 w 120 170 78 01111000 x 121 171 79 01111001 y 122 172 7A 01111010 z Další značky a poslední je řídící kód pro vymazání znaku, na klávesnici je často stejně označen 123 173 7B 01111011 { (left opening brace) 124 174 7C 01111100 (vertical bar) 125 175 7D 01111101 } (right closing brace) 126 176 7E 01111110 ~ (tilde) 127 177 7F 01111111 DEL (delete) Při prostudování ASCII tabulky vidíme, že poslední znak je 127 binárně 01111111, kde jedničky obsazují 7 bitů. Další část tabulky využívá právě 8 bit pro další číselné kódy, které vyjadřují diakritiku v různých jazycích. Tuto další část definuje operační systém jako kódovou stránku pro určitý jazyk. V operačním systému WINDOWS se pro český jazyk používá tabulka s označením kódová stránka 1250. Cvičení: Napište své jméno a příjmení pomocí ASCII tabulky v různých číselných soustavách. Příklad napsání zprávy pomocí ASCII tabulky, horní řádek text a dolní řádek číselné vyjádření: Naposledy vytištěno 5.3.2013 8:55:00 119

D:\Iva\Prace\Skripta\tzi\TZI_pro_ekonomy_12.doc - 120 - Písmeno A h o J Číslo desítkově 65 104 111 106 Tímto způsobem se zapisují jednotlivé znaky při psaní na klávesnici do textového editoru (program). Pokud do souboru pokus.txt napíšeme text na více řádků např. Ahoj kluci A holky V souboru budou uloženy následující číselné kódy, které v hexadecimální formě zobrazuje editor PS PAD dle následujícího obrázku. Všimněte si, že jednotlivé znaky textu jsou zobrazeny v hexadecimální soustavě dle ASCII tabulky. Obr. Ukázka hexadecimálního zápisu textu pomocíascii tabulky Pokuste se v této variantě zobrazení nalézt znaky, které určují konec řádku. Při analýze textu zjistíte, že se jedná o dva znaky OD a OA v hexadecimální formě, které představují řídící kódy ASCII tabulky CR a LF. Tyto znaky znamenají návrat vozíku a nový řádek, jedná se o analogie s psacím strojem, kde se ručně posouval válec na začátek pomocí páky. 4.3 Český jazyk a jeho kódování na počítači V další části se zaměříme na problematiku jak jsou zakódovány znaky české abecedy, když ASCII tabulka popisuje jen znaky anglické abecedy bez diakritiky. Je to realizováno tak, že písmena např. ěščřžýáíé a podobně jsou přiřazena v tabulce až za číslem 127, tedy v další části tabulky. K dispozici máme číselné hodnoty 128-255. Pro český jazyk se vymyslelo několik tabulek ve kterých je diakritika obsažena. V následující tabulce je ukázána možnosti kódování češtiny pomocí různých kódovacích tabulek. Windows- 1250 ISO 8859-2 CP852(Latin2) kód používaný firmou Microsoft v operačních systémech Windows pro kódování středoevropských jazyků standard ISO, používaný např. v operačním systému Linux kód stanovený firmou IBM používaný např. v operačním systému DOS. Česká Windows jej dodnes využívají při zadávání speciálních znaků pomocí alt-kódů. Naposledy 120 vytištěno 5.3.2013 8:55:00

D:\Iva\Prace\Skripta\tzi\TZI_pro_ekonomy_12.doc - 121 - Kód Kamenických Například když stisknete klávesu alt, vyťukáte číslo 248 a klávesu alt pustíte, objeví se na obrazovce znak pro stupeň -. V tabulce znaků je uveden pod hexadecimálním kódem F8, což je dekadicky 248. jiné kódování používané v DOSu pro potřeby češtiny a slovenštiny KOI8-ČS kódování definované v rámci RVHP Tab.: varianty kódování českého jazyka v počítači Z tabulky je zřejmé, že kódování českého jazyka je poměrně složité, protože je vyjádřeno několika různými tabulkami. Tato situace vznikla vývojem různých operačních systémů, které se na počítačích používaly. Data, která na těchto počítačích vznikala se převáděla do nových operačních systémů a byla důležitá z hlediska zachování informace, kterou nesla, proto se často ponechala v původním číselném kódu. Na tuto situaci reagovaly firmy v oblasti IT vývojem kódování UTF 8 tzv. Unicode, který vyjadřuje více jazyků v jedné kódové stránce a je tedy univerzální pro použití. Tento kód se nyní používá na internetu a dalších oblastech, protože sjednocuje zobrazení www stránek pro různé operační systémy. Pro převod mezi různými variantami kódování českého jazyku můžeme použít také editor PS PAD, který na následujícím obrázku zobrazuje menu s formátováním textu podle vybrané kódové stránky. Obr. Ukázka převodu různých variant českého jazyka pomocí menu editoru PS PAD V tomto editoru lze provádět převod textu mezi různými operačními systémy jako např. UNIX a MAC, které odlišným způsobem určují konec řádku. Pro UNIX stačí znak LF nový řádek návrat vozíku a pro MAC zase znak CR návrat vozíku. Znaková sada českého jazyka se zaznamenává nejen do textových souborů, ale také do databází, které jsou propojeny v informační systémy. V těchto databázích jsou uleženy také textové informace a ty je nutno zpracovat a zobrazovat v různých programech. Z těchto důvodů někdy vzniká dojem, že například www stránky špatně pracují s českým jazykem a nezobrazují správně diakritiku. Také v prohlížeči můžeme nastavit různé kódování češtiny podle variant, které byly uvedeny v předcházejících odstavcích. Naposledy vytištěno 5.3.2013 8:55:00 121

D:\Iva\Prace\Skripta\tzi\TZI_pro_ekonomy_12.doc - 122 - Obr. Zobrazení textu kódovaného pomocí HTML příkazu WWW stránky Na obrázku je PS PAD editor s vygenerovanou WWW stránkou pomocí HTML kódů Řádek: <meta http-equiv="content-type" content="text/html; charset=windows-1250"> Ukazuje způsob kódování češtiny v HTML kódu WWW stránky. Obr. Ukázka varia-nty zobrazení pro různé jazyky na internetovém prohlížeči Prohlížeč WWW stránek Google chrome dovoluje nastavit různé varianty kódování také ručně z manu. Na menu, které je na obrázku je vidět způsoby kódování pro různé jazyky od Arabštiny až po Západní jazyky. Naposledy 122 vytištěno 5.3.2013 8:55:00