Algoritmizace a programování

Podobné dokumenty
Algoritmizace a programování

Algoritmizace a programování

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

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

Java reprezentace dat, výrazy. A0B36PR1-Programování 1 Fakulta elektrotechnická České vysoké učení technické

Program převod z desítkové na dvojkovou soustavu: /* Prevod desitkove na binarni */ #include <stdio.h>

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

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

Racionální čísla, operátory, výrazy, knihovní funkce

Algoritmizace a programování

Racionální čísla, operátory, výrazy, knihovní funkce

Programovací jazyk Pascal

Algoritmizace a programování

Úvod do programovacích jazyků (Java)

Zápis programu v jazyce C#

Úvod do programování. Lekce 1

Programovací jazyk C++ Hodina 1

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

Opakování programování

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

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

5 Přehled operátorů, příkazy, přetypování

BI-PA1 Programování a algoritmizace 1 Katedra teoretické informatiky

- jak udělat konstantu long int: L long velka = 78L;

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

Formátové specifikace formátovací řetězce

BI-PA1 Programování a algoritmizace 1, ZS Katedra teoretické informatiky

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

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

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

Logické operace. Datový typ bool. Relační operátory. Logické operátory. IAJCE Přednáška č. 3. může nabýt hodnot: o true o false

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

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

Data, výrazy, příkazy

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

Výrazy a operátory. Operátory Unární - unární a unární + Např.: a +b

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

Jazyk C# a platforma.net

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

Operační systémy. Cvičení 3: Programování v C pod Unixem

Operátory, výrazy. Tomáš Pitner, upravil Marek Šabo

Výrazy, operace, příkazy

Jak v Javě příkazy, operace a výrazy. BD6B36PJV 00 Fakulta elektrotechnická České vysoké učení technické

Proměnná. Datový typ. IAJCE Cvičení č. 3. Pojmenované místo v paměti sloužící pro uložení hodnoty.

Základní datové typy, proměnné - deklarujeme předem - C je case sensitive rozlišuje malá a velká písmena v názvech proměnných a funkcí

Sada 1 - Základy programování

Čísla a číselné soustavy.

Jazyk C Program v jazyku C má následující strukturu: konstanty nebo proměnné musí Jednoduché datové typy: Strukturované datové typy Výrazy operátory

Datové typy strana 29

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

Základy jazyka C. Základy programování 1 Martin Kauer (Tomáš Kühr)

Algoritmizace a programování

Formátová specifikace má tvar (některé sekce nemají smysl pro načítání) %

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

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

Příkazy preprocesoru - Před překladem kódu překladačem mu předpřipraví kód preprocesor - Preprocesor vypouští nadbytečné (prázdné) mezery a řádky -

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

Výrazy, operace, příkazy

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

Architektury počítačů

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

MIKROPROCESORY PRO VÝKONOVÉ SYSTÉMY

Informatika Datové formáty

Jazyk C++, některá rozšíření oproti C

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

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

Michal Krátký. Úvod do programovacích jazyků (Java), 2006/2007

Algoritmizace prostorových úloh

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

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

Proměnná a její uložení v paměti

Algoritmizace a programování

Odvozené a strukturované typy dat

Struktura programu, proměnné, konstanty, výrazy v jazycích C a C#

Datové typy pro reálná čísla

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

Programovací jazyk C(++) C++ area->vm_mm->locked_vm -= len >> PAGE_SHIFT;

Základy programování (IZP)

Část I. Část 1 Základy programování v C. Přehled témat. Základy programování v C. Jazyk C

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

Operační systémy. Cvičení 4: Programování v C pod Unixem

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

Prezentace a vysvětlení programového prostředí NXC

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

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

NPRG030 Programování I, 2010/11

Jazyk C stručný přehled

Operátory. Základy programování 1 Tomáš Kühr

Operátory. Základy programování 1 Martin Kauer (Tomáš Kühr)

MIKROPROCESORY PRO VÝKONOVÉ SYSTÉMY

PROGRAMOVÁNÍ V JAZYCE C V PŘÍKLADECH 11 Dynamické datové struktury 11.1 Spojové struktury Příklad PROG_

Základy programování v C

Základy programování (IZP)

Číselné soustavy. Ve světě počítačů se využívají tři základní soustavy:

Programování v jazyce C pro chemiky (C2160) 12. Specifické problémy při vývoji vědeckého softwaru

Zápis programu v C a základní řídicí struktury

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

Programování v jazyce JavaScript

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

- dělají se také pomocí #define - podobné (použitím) funkcím - předpřipravená jsou např. v ctype.h. - jak na vlastní makro:

Transkript:

Algoritmizace a programování Jazyk C výrazy České vysoké učení technické Fakulta elektrotechnická Ver.1.10 J. Zděnek 2015

Struktura programu (1) Program v C se skládá z následujících součástí: Příkazy preprocesoru (Preprocessor commands) Definice typů (type definitions) Prototypy funkcí (function prototypes) kde je uvedena deklarace: Jména funkce Vstupních parametrů Návratové hodnoty funkce Proměnné (variables) Funkce (functions) (v C je procedura funkce bez návratové hodnoty) A8B14ADP Algoritmizace a programovaní -Jazyk C - výrazy 2

Funkce v C mají tento tvar: Struktura programu (2) Každý program musí obsahovat právě jednu funkci main() Všechny funkce (včetně main()) mají jednotný formát: typ_navrat_hodnoty jmeno_fce (parametry_fce){ lokalni promenne prikazy } Uvnitř funkce nelze definovat lokální funkce (definice funkci nesmí být vnořené) Na formátování zdrojového textu překladači nezáleží. Formátování zlepšuje autorovi (i ostatním) čitelnost a potlačuje chyby. A8B14ADP Algoritmizace a programovaní -Jazyk C - výrazy 3

Model kompilace (1) soubor2.h soubor1.c Header soubor3.c Source code Source code 1) Preprocessor Zdroj.kód C Zdroj.kód ASM 2) Compiler Assembly code 3) Assembler Object code soubor4.asm Source code soubor5.lib Libraries Knihovny 4) Linker Spustitelný kód Executable code A8B14ADP Algoritmizace a programovaní -Jazyk C - výrazy 4

Model kompilace (2) Vytvoření spustitelného kódu (viz obr): 1) Preprocesor: Čte zdrojový kód v C Odstraní komentáře Upraví zdrojový text podle direktiv preprocesoru (řádky začínající #) Vloží do textu obsah jiného souboru #include. Odebere text vymezený direktivami podmíněného překladu Expanduje makra 2) Překladač C: Čte výstup z preprocesoru Kontroluje syntaktickou správnost textu Hlásí chyby a varování Generuje text v assembleru (když nejsou chyby) A8B14ADP Algoritmizace a programovaní -Jazyk C - výrazy 5

Model kompilace (3) Vytvoření spustitelného kódu (viz obr): 3) Assembler: Čte výstup z překladače C Generuje relokovatelný object kód (kód s nevyřešenými odkazy mezi moduly) Přeloží případné moduly zapsané přímo v assembleru (mix programovacích jazyků) 4) Linker (spojovací program): Čte object kód všech zůčastněných modulů programu Připojí knihovní object moduly (přeložené dříve nebo dodané), Vyřeší odkazy mezi moduly Generuje spustitelný kód (zjednodušené) A8B14ADP Algoritmizace a programovaní -Jazyk C - výrazy 6

Soubor platných znaků (ASCII) (1) C - základní soubor znaků: A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m h o p q r s t u v x y z 0 1 2 3 4 5 6 7 8 9! # % & ( ) * +, -. / : ; < = >? [ \ ] ^? _ { } ~ Oddělovače (whitespace characters) space, horizontal tab, vertical tab, newline, form feed \0 - null char (koncový znak řetězce) A8B14ADP Algoritmizace a programovaní -Jazyk C - výrazy 7

Soubor platných znaků (ASCII) (2) C - základní soubor znaků (pokrač.): Řídicí znaky pro řízení výstupních zařízení (escape sequences) Escape sequence Výstup Escape sequence Výstup \a Beep (pípnutí) \ Znak \b Backspace \ Znak \f Form feed \? Znak? \n Newline \\ Znak \ \r Carriage return \o \oo \ooo o=osmičkové ( př: \741 ) číslice (octal dig) \t Horizontal tab \xh h =šestnáctkové ( př: \x1008 ) číslice (hex dig.) \v Vertical tab C - ostatní znaky: Mohou se použít v komentářích, řetězcích a znakových konstantách A8B14ADP Algoritmizace a programovaní -Jazyk C - výrazy 8

Identifikátory C - pravidla pro volbu identifikátorů: Obsahuje A,..,Y,a,..,z,0,..,9 a znak _ (underscore) První znak není číslice Rozlišují se velká a malá písmena (case sensitive) Délka identifikátoru není omezena, ale pouze 31 prvních znaků je významných (může se lišit podle implementace) C - rezervovaná slova (keywords): Musí být zapsaná malými písmeny auto default float register struct volatile break do for return switch while case double goto short typedef char else if signed union const enum int sizeof unsigned continue extern long static void A8B14ADP Algoritmizace a programovaní -Jazyk C - výrazy 9

Datové typy Při návrhu algoritmů a psaní programů ve vyšších programovacích jazycích abstrahujeme od binární podoby paměti počítače S daty pracujeme jako s hodnotami různých datových typů, které jsou uloženy v datových objektech Datový typ (zkráceně jen typ) specifikuje: množinu hodnot (+ reprezentace) množinu operací, které lze s hodnotami daného typu provádět Příklad typu: celočíselný typ int v jazyku C: množinou hodnot jsou celá čísla (interval je závislý na implementaci) množinu operací tvoří aritmetické operace +, -, *, /, jejichž výsledkem je hodnota typu int relační operace ==,!=, >, >=, <, <=, jejichž výsledkem je logická hodnota. V jazyce C není zavedena logický typ proměnné. Logický stav se vyhodnocuje dle hodnoty číselné proměnné kde: = 0 znamená "false", 0 znamená "true" A8B14ADP Algoritmizace a programovaní -Jazyk C - výrazy 10

Reprezentace dat v počítači bit (binary digit dvojková číslice; angl. bit drobek, kousek) základní a nejmenší jednotky informace nabývá hodnot 0 nebo 1 byte (též bajt, česky - slabika) uspořádaná osmice bitů 0 1 1 0 0 1 1 1 Násobky 1 kb = 1 000 bajtů (dekadický kilobajt, malé k ) 1 KB = 1 024 bajtů = 2 10 (binární kilobajt, velké K ) 1 MB = 1 048 576 bajtů = 2 20 1 GB = 1 073 741 824 bajtů = 2 30 A8B14ADP Algoritmizace a programovaní -Jazyk C - výrazy 11

Číselné soustavy - polyadické Reprezentace celých čísel Desítková soustava 138,24 = 1*10 2 +3*10 1 +8*10 0 +2*10-1 +4*10-2 =1*100+3*10+8*1+2*0,1+4*0,01 Dvojková soustava 11010,01 b = 1*2 4 +1*2 3 +0*2 2 +1*2 1 +0*2 0 +0*2-1 +1*2-2 = 1*16+1*8+0*4+1*2+0*1+0*1/2+1*1/4= 26,25 Šestnáctková soustava (hexadecimal numeral system) a = 0, 1, 2, 9, A, B, F ; z = 16 Př: 07D h = 0*16 2 + 7*16 1 + D*16 0 = 0 + 112 + 13 = 125 A8B14ADP Algoritmizace a programovaní -Jazyk C - výrazy 12

Reprezentace čísel v počítači Celá kladná čísla přímý binární kód Př: 125 d = 0*2 7 +1*2 6 +1*2 5 +1*2 4 +1*2 3 +1*2 2 +0*2 1 +1*2 0 = 01111101 b = 0 + 64 + 32 + 16 + 8 + 4 + 0 + 1 Celá záporná čísla dvojkový doplněk (two s complement) Př: -125 d = 10000011 b Výpočet: Kladnéčíslo: x = +125 d = 0111 1101 b ------------------------------- Zápornéčíslo: -x = -125 d znaménkový bit NOT x = 1000 0010 b +1 -------------------------------- = 1000 0011 b (jednotkový doplněk) (dvojkový doplněk) velikost čísla (není to přímý binární kód!) A8B14ADP Algoritmizace a programovaní -Jazyk C - výrazy 13

Nepřesnost v zobrazení reálných čísel Pokusme se v dekadické soustavě zapsat číslo 1/3 (jedna třetina) 0,3 přesněji 0,33 lépe 0,333... 0,333333333333333333333333333333333333 Jelikož máme omezený paměťový prostor, nikdy neuložíme číslo 1/3 přesně (Jak by číslo 1/3 vypadalo v trojkové soustavě?) 0*3 1 + 0*3 0 + 1*3-1 = (0,1) 3 A8B14ADP Algoritmizace a programovaní -Jazyk C - výrazy 14

Nepřesnost v zobrazení reálných čísel Reálná čísla X se zobrazují ve tvaru: X= mantisa * základ exponent exponent mantisa Nepřesnosti způsobují 1. Iracionálníčísla ( e, π, 2,. ) 2. Čísla, jež mají v dané soustavě periodický rozvoj (1/3 ve dvojkové či dekadické soustavě, 1/10 ve dvojkové) 3. Čísla, která mají příliš dlouhý zápis double (celkem 64 bitů) 1 bit znaménko dvě možnosti, +,- 11 bitů exponent 2048 možností 52 bitů 4 503 599 627 370 496 možností, tedy asi 4,5 biliardy - není možné v typu double přesně uložit čísla se zápisem delším než 52 bitů! A8B14ADP Algoritmizace a programovaní -Jazyk C - výrazy 15

Model reprezentace reálných čísel Reálnáčísla se zobrazují jako aproximace daná rozsahem paměťového místa vyhrazeného pro číslo. Reálná čísla se zobrazují ve tvaru: X = mantisa*základ exponent = m*z exponent Mantisa musí být normalizována: 0,1 <= m < 1, důvod: jednoznačnost zobrazení Model: délka mantisy 3 pozice + znaménko délka exponentu 2 pozice + znaménko Příklad: X = 77.5 = +0.775*z +02 lze zakódovat znaménko + = 0, = 1 z je 10 (16, 2,..) + 775 + 02 0 775 0 02 A8B14ADP Algoritmizace a programovaní -Jazyk C - výrazy 16

Model reprezentace reálných čísel Maximální zobrazitelné kladnéčíslo Minimální zobrazitelné kladné číslo Maximální zobrazitelné záporné číslo (v absolutní hodnotě) Minimální zobrazitelné záporné číslo (v absolutní hodnotě) Nula Jak je to se zobrazitelnými hodnotami okolo nuly, Jak je to se sousedy aproximací? + 999 + 99 + 100-99 - 999 + 99-100 - 99 + 000??? 0-0.999z 99 0.999z 99-0.101z -99 0.000z?? 0.101z -99-0.100z -99 0.100z -99 A8B14ADP Algoritmizace a programovaní -Jazyk C - výrazy 17

Model reprezentace reálných čísel Jaká je vzdálenost dvou aproximací?? To závisí na hodnotě!!! +MAXIMUM 0.999z 99 NULA 0.000z?? 0.100z -99 0.101z -99 0.100z12 0.101z 12 Aproximace reálných čísel: nejsou na číselné ose rozložené rovnoměrně!! NULA +MAXIMUM A8B14ADP Algoritmizace a programovaní -Jazyk C - výrazy 18

Reálnáčísla v C (typ double) Reálná čísla se zobrazují ve tvaru: X= mantisa*základ exponent = m*z exponent V C jsou reálná čísla reprezentována typem double na 64 bitů, norma IEEE 754 znaménkový bit (s), exponent, mantisa nejmenšíčísla v normalizovaném tvaru (v abs. hodnotě) ±2 1022 ±2.2250738585072020 10 308 největší čísla ±(1-(1/2) 53 )2 1024 ±1.7976931348623157 10 308 A8B14ADP Algoritmizace a programovaní -Jazyk C - výrazy 19

Datové typy (1) Celočíselné datové typy: Typ Velikost [byte] Rozsah Použití char 1-128 až +127 nebo 0 až 255 Znaky unsigned char 1 0 až 255 Malá čísla signed char 1-128 až +127 Malá čísla int 2 nebo 4-32.768 až +32.767 nebo -2.147.483.648 až +2.147.483.647 Celá čísla unsigned int 2 nebo 4 0 až 65.535 nebo 0 až 4.294.967.295 Kladná celá čísla short 2-32.768 až +32.767 Celá čísla unsigned short 2 0 až 65.535 Kladná celá čísla long 4-2.147.483.648 až +2.147.483.647 Velká celá čísla unsigned long 4 0 až 4.294.967.295 Kladná celá čísla Velikost celočíselných typů určená implementací Vždy ale platí (v byte): char <= short <= int <= long Typ boolean není (až ANSI C99), = 0 ->false,!= 0 -> true A8B14ADP Algoritmizace a programovaní -Jazyk C - výrazy 20

Datové typy (2) C - reálná čísla (neceločíselné datové typy): Velikost reálných čísel určená implementací Většina překladačů se řídí standardem IEEE-754-1985, potom jsou rozsahy reálných čísel dány následující tabulkou: Typ Velikost [byte] Rozsah (uveden pro kladná č.) Přesnost float 4 1.2E-38 až 3.4E+38 6 desítkových číslic double 8 2.3E-308 až 1.7E+308 15 desítkových číslic long double 10 3.4E-4932 až 1.1E+4932 19 desítkových číslic C - typ void: void značí prázdnou hodnotu nebo proměnnou bez typu (jen ukazatelé) void funkce1 (.) - fukce bez návratové hodnoty (procedura) int funkce2 (void) - funkce bez vstupních parametrů void *ptr; - ukazatel bez určeného typu (viz dále) A8B14ADP Algoritmizace a programovaní -Jazyk C - výrazy 21

Konstanty (1) 6 typů konstant: Celočíselné (integer constants) Reálné (floating constants) Znakové (character constants) Řetězcové (literal constants) (literály) Výčtové (enumeration constants) (pojmenované prvky množiny) Symbolické (#define MAX 300) A8B14ADP Algoritmizace a programovaní -Jazyk C - výrazy 22

Konstanty - celočíselné (2) Formát celočíselné konstanty: Desítkový - nezačíná číslicí 0 (nula), př: 1024 Osmičkový - začíná číslicí 0 (nula), př: 012 Šestnáctkový - začíná znaky 0x nebo 0X (nula x), př: 0x7F8A číslice a,..,f (A,..,F) mohou být velká i malá pismena Typ celočíselné konstanty: Není-li určen explicitně, přiřadí se nejbližší dostatečně veliký typ Desítkové konst. - int, long, unsigned long Šestnáctkové a osmičkové - int, unsigned int, long, unsigned long Určí se explicitně znaky U nebo u (unsigned), L nebo l (long) jinak int Desítkově Osmičkově Šestnáctkově Typ 15 017 0xF int 32767 077777 0x7FFF int 10U 012U 0xAU unsigned int 16L 020L 0x10L long 27UL 0333ul 0x1BUL unsigned long A8B14ADP Algoritmizace a programovaní -Jazyk C - výrazy 23

Konstanty - reálné (3) Formát reálné konstanty: S řádovou tečkou př: 41.9 Mantisa a exponent př: 5.67E-3 // 5.67*10-3 nebo rovněž 5.67e-3 Typ reálné konstanty: Není-li určen explicitně, pak je - double Určí se explicitně znaky F nebo f - float L nebo l - long double V tabulce jsou všechny konstanty typu double 5.19 0.519E1 0.0519e+2 519E-2 12. 12.0.12E2 12e0 370000.0 37e+4 3.7E+5 0.37e6 0.000004 4E-6 0.4e-5.4E-5 A8B14ADP Algoritmizace a programovaní -Jazyk C - výrazy 24

Konstanty - znakové (4) Formát znakové konstanty : Jeden nebo více znaků v jednoduchých apostrofech př: B, g, ab, 9 Hodnota znakové konstanty : Jednoznaková konstanta má hodnotu odpovídajícího kódu znaku př: v ASCII kódu 0 ~= 48, A ~=65 Víceznaková konstanta - hodnota závisí na implementaci překladače C Typ znakové konstanty: Znaková konstanta je typu int Pozn: Řídicí znaky (escape sequences) mohou tvořit znakové konstanty př: \n A8B14ADP Algoritmizace a programovaní -Jazyk C - výrazy 25

Konstanty - řetězcové (literály) (5) Formát řetězcové konstanty (literálu) : Posloupnost znaků a řídicích znaků (escape sequences) uzavřená v uvozovkách př: Já jsem řetězcová konstanta! \n Pozn: Řetězcové konstanty oddělené pouze oddělovači (whitespace characters) jsou sloučeny do konstanty jediné. př: Já jsem řetězcová konstanta! \n se sloučí do Já jsem řetězcová konstanta! \n Typ řetězcové konstanty: Řetězcová konstanta je uložená v poli typu char (array of char) a je zakončená znakem \0 př: Nazdar se uloží v poli typu char takto: N a z d a r \0 A8B14ADP Algoritmizace a programovaní -Jazyk C - výrazy 26

Konstanty - výčtové (enum type) (6) Formát výčtové konstanty : enum { CERVENA, MODRA, BILA, CERNA}; pak CERVENA=0 a každý další prvek má hodnotu o jedničku vyšší enum { MALY=5, VETSI, VELKY, NEJVETSI } pak MALY=5, VETSI=6 a každý další prvek má hodnotu o jedničku vyšší Typ výčtové konstanty: Výčtová konstanta je typu int A8B14ADP Algoritmizace a programovaní -Jazyk C - výrazy 27

Konstanty - symbolické #define (7) Formát symbolické konstanty #define: Konstanta se založí příkazem preprocessoru #define (je to makro bez parametrů, každé #define musí být na samostatné řádku) př: #define CERVENA 0 /* Zde muze byt komentar */ #define MODRA 1 / /Je zvykem jména konstant psát velkými písmeny #define BILA 2 Hodnotu konstanty je možné vyjádřit konstantním výrazem př: #define MAX_1 (100*5)-12 Symbolické konstanty mohou být vnořené př: #define MAX_2 MAX_1+30 A8B14ADP Algoritmizace a programovaní -Jazyk C - výrazy 28

Komentář C používá dva způsoby označení komentáře: /* Toto je komentář */ /* Toto je rovněž komentář */ rozdělený na několik řádků // Toto je též komentář až do konce řádku /* Komentář nesmí být vnořený do jiného komentáře /* to je chybný zápis komentáře */ */ Preprocesor nahradí každý komentář jednou mezerou //.. tento způsob některé překladače nepodporují A8B14ADP Algoritmizace a programovaní -Jazyk C - výrazy 29

Proměnné a přiřazení Proměnná je datový objekt, který je označen jménem a je v něm uložena hodnota nějakého typu, která se může měnit alfa 0 hodnota proměnné jméno proměnné datový objekt V jazyku C zavedeme výše uvedenou proměnnou deklarací int alfa = 0; Hodnotu proměnné lze změnit přiřazovacím příkazem alfa 0 alfa = 37; alfa 37 A8B14ADP Algoritmizace a programovaní -Jazyk C - výrazy 30

Deklarace proměnných Proměnné se zavádějí deklaracemi Příklady deklarací proměnných: int i; // deklarace proměnné i typu int double x; // deklarace proměnné x typu double Proměnná deklarovaná uvnitř funkce (lokální proměnná) nemá deklarací definovanou hodnotu Deklaraci proměnné lze doplnit o inicializaci proměnné: int x = 10; // deklarovaná proměnná má hodnotu 10 Deklarací lze zavést několik proměnných stejného typu: int x, z; A8B14ADP Algoritmizace a programovaní -Jazyk C - výrazy 31

Přiřazovací příkaz Slouží pro přiřazení hodnoty proměnné Tvar přiřazovacího příkazu: <proměnná> = <výraz>; Příklad: x = y + z; proměnné x se přiřadí součet hodnot proměnných y a z x = x + 1; hodnota proměnné x se zvětší o 1 Příklady přiřazovacích příkazů: int i; double d; char c i = 14; d = 3.14; c = 'A'; A0B36PRI A8B14ADP PROGRAMOVÁNÍ Algoritmizace a programovaní 02 -Jazyk C - výrazy 32 32

Přiřazovací příkaz Přířazovací operátory: <proměnná> = <proměnná> <OP> <výraz> ~ <proměnná> <OP>= <výraz> Př.: j += 5; ~ j = j + 5; přiřazení je výraz!!!: Př.: int x, y; x = 7; // má hodnotu 7 a lze tedy opět přiřadit!! y = x = x + 6;// vyhodnotí se jako y = (x = (x + 6)); A0B36PRI A8B14ADP PROGRAMOVÁNÍ Algoritmizace a programovaní 02 -Jazyk C - výrazy 33 33

Příkaz výstupu - printf() printf("cislo Pi = %6.3f \n ", Math.PI); Výstup na obrazovku: Cislo Pi = 3.142 Specifikace formátu %[$indexparametru][modifikátor][šířka][.přesnost]konverze konverze - povinný parametr typ celé číslo d,o,x - dekadicky, oktalově a hexadecimálně typ double f je desetinný zápis; e,e vědecký s exponentem šířka - počet sázených míst, zarovnání vpravo přesnost - počet desetinných míst modifikátor - v závislosti na typu konverze určuje další vlastnosti, například pro konverzi f (typ double) symbol + určuje, že má být vždy sázeno znaménko, symbol - určuje zarovnání vlevo, symbol 0 doplnění čísla zleva nulami. \n přechod na další řádek a další A0B36PRI A8B14ADP PROGRAMOVÁNÍ Algoritmizace a programovaní 02 -Jazyk C - výrazy 34 34

Příkaz vstupu scanf() V dalších příkladech budeme potřebovat příkazy pro vstup číselných dat zadaných na klávesnici Použijeme standardní funkce scanf() #include <stdio.h> #include <stdlib.h> int main(int argc, char** argv) { int pocet; scanf("%d", &pocet); printf("pocet = %d", pocet); } Ve funkci scanf() je nutné uvést očekávaný formát vstup (zde %d znamená celočíselný formát a proměnnou do které se má hodnota z klávesnice uložit. Pozor před hodnotou musí být znak & (znamená to volání odkazem viz další přednášky) A8B14ADP Algoritmizace a programovaní -Jazyk C - výrazy 35

Typové konverze Typová konverze je operace, která hodnotu nějakého typu převede na hodnotu jiného typu, důvod jiná reprezentace čísel Typová konverze může být implicitní (vyvolá se automaticky) nebo explicitní (v programu je třeba ji explicitně předepsat) Konverze typu int na double je v jazyku C implicitní: kde se očekává hodnota typu double, může být uvedena hodnota typu int, která se automaticky převede na hodnotu typu double Příklad: double x; int i = 1; x = i; //hodnota 1 typu int se automaticky převede //na hodnotu 1.0 typu double Převod hodnoty typu double na int (odseknutím neceléčásti) je třeba explicitně předepsat Příklad: double x = 1.2; int i; i = (int)x; //hodnota 1.2 typu double se odseknutím //necelé části převede na hodnotu 1 typu int A8B14ADP Algoritmizace a programovaní -Jazyk C - výrazy 36

Výrazy Výraz předepisuje výpočet hodnoty určitého typu Příklad výrazu: {14.6 + sin(3.14)} * a 100 Výraz může obsahovat: proměnné konstanty volání funkcí binární operátory unární operátory závorky Pořadí operací předepsaných výrazem je dáno: Příklad: prioritou operátorů asociativitou operátorů výraz pořadí operací zdůvodnění x + y * z x + (y * z) * má vyšší prioritu než x + y + z x + y) + z + je asociativní zleva A8B14ADP Algoritmizace a programovaní -Jazyk C - výrazy 37

Aritmetické operátory Pro operandy typu int a double budeme požívat tyto aritmetické operátory (seřazeno sestupně podle priority): unární (změna znaménka) binární *, /, % (násobení, dělení a zbytek po dělení) binární + a (sčítání a odčítání) Jsou-li oba operandy stejného typu, výsledek aritmetické operace je téhož typu Jsou-li operandy různého typu, operand typu int se implicitní konverzí převede na hodnotu typu double a výsledkem operace je hodnota typu double Výsledkem dělení operandů typu int je celá část podílu např. 7/3 je 2-7/3 je -2 Pro zbytek po dělení platí: x % y = x (x / y) * y např: 7%3 je 1; -7%3 je -1; 7%-3 je 1; -7%-3 je -1 speciální inkrementační a dekrementační operátory: ++x, x++, --x, x-- A8B14ADP Algoritmizace a programovaní -Jazyk C - výrazy 38

Relační operátory Hodnoty všech jednoduchých typů jsou uspořádané a lze je porovnávat relačními operátory Budeme používat tyto relační operátory (priorita je menší než priorita aritmetických operátorů): >, <, >=, <= (větší než, menší než, větší nebo rovno, menší nebo rovno) ==,!= (rovná se, nerovná se) Výsledek relační operace je (true, když relace označená operátorem platí, false v opačném případě)(true se v "C" hodnotí dle výsledku 0 a false dle výsledku = 0. V "C" není typ logické proměnné. Jestliže při porovnáváníčíselných hodnot jsou operandy různého typu, operand typu int se implicitní konverzí převede na hodnotu typu double Relační operátory mají menší prioritu, než aritmetické operátory A8B14ADP Algoritmizace a programovaní -Jazyk C - výrazy 39

Logické operátory Logické operátory jsou unární a binární unární! (negace) binární && resp. & (konjunkce, logický součin) binární resp. (disjunkce, nevýhradní logický součet, OR) binární ^ (disjunkce, výhradní logický součet, XOR) x y!x x && y x y x ^ y false false true false false false false true true false true true true false false false true true true true false true true false Negace má stejnou prioritu, jako změna znaménka, logický součin má nižší prioritu než relační operátory Operace && a se vyhodnocují zkráceným způsobem, tj. druhý operand se nevyhodnocuje, jestliže lze výsledek určit již z prvního operandu A8B14ADP Algoritmizace a programovaní -Jazyk C - výrazy 40

Standardní knihovny (1) Standardní knihovny (ANSI C library Standard Library) : Vlastní jazyk C neobsahuje žádné prostředky pro vstup a výstup dat, složitější matematické operace, práci s řetězci, třídění, blokové přesuny dat v paměti, práci s datem a časem, komunikaci s operačním systémem,správu paměti pro dynamické přidělování, vyhodnocení běhových chyb (run-time errors) apod. Tyto a další funkce jsou však obsaženy ve standardních knihovnách (ANSI C Library) dodávaných s překladači jazyka C. Uživatel dostává k dispozici přeložený kód knihoven (který se připojuje linkuje k uživatelovu kódu) a hlavičkové soubory (headers) s prototypy funkcí, novými typy, makry a konstantami Hlavičkové soubory (obdoba interface v Javě) se připojují k uživatelovu kódu direktivou preprocesoru #include < >. Je zvykem, že hlavičkové soubory mají rozšíření *.h, např. stdio.h A8B14ADP Algoritmizace a programovaní -Jazyk C - výrazy 41

Standardní knihovny (2) Standardní knihovny (ANSI C library Standard Library) pokrač: Standardní knihovny jsou rozděleny do následujících částí: (uvedeno pro ANSI C95): Vstup a výstup (formátovaný i neformátovaný) stdin.h Rozsahy čísel jednotlivých typů limits.h Matematické funkce stdlib.h math.h Zpracování běhových chyb (run-time errors) errno.h assert.h A8B14ADP Algoritmizace a programovaní -Jazyk C - výrazy 42

Standardní knihovny (3) Standardní knihovny (ANSI C library Standard Library) pokrač: Standardní knihovny jsou rozděleny do následujících částí: (uvedeno pro ANSI C95) pokrač: Klasifikace znaků (typ char) ctype.h Práce s řetězci (string handling) string.h Internacionalizace (adaptace pro různé jazykové mutace) locale.h Vyhledávání a třídění stdlib.h Blokové přenosy dat v paměti string.h A8B14ADP Algoritmizace a programovaní -Jazyk C - výrazy 43

Standardní knihovny (4) Standardní knihovny (ANSI C library Standard Library) pokrač: Standardní knihovny jsou rozděleny do následujících částí: (uvedeno pro ANSI C95) pokrač: Správa paměti (Dynamic Memory Management) stdlib.h Datum a čas time.h Komunikace s operačním systémem stdlib.h signal.h Nelokální skok (lokální je součástí jazyka, viz goto) setjump.h A8B14ADP Algoritmizace a programovaní -Jazyk C - výrazy 44

Algoritmizace a programování Jazyk C Jazyk C výrazy KONEC České vysoké učení technické Fakulta elektrotechnická