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

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

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

Algoritmizace a programování

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

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

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

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

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

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

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

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

Funkce, intuitivní chápání složitosti

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

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

Data, výrazy, příkazy

Úvod do programování. Lekce 1

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

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

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

Základy jazyka C. Úvod do programování 1 Tomáš Kühr

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

Programování v jazyce JavaScript

Úvod do programovacích jazyků (Java)

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

Výrazy, operace, příkazy

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

Základy jazyka C. Úvod do programování 1 Tomáš Kühr

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

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

Základní principy zobrazení čísla Celá čísla s pevnou řádovou čárkou Zobrazení reálných čísel Aritmetika s binárními čísly

NPRG030 Programování I, 2018/19 1 / :25:37

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

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

VÝRAZY výrazy = operandy prokládané operátory, vyhodnocované podle priority operátorů

Základy algoritmizace a programování

Architektury počítačů

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

Výrazy, operace, příkazy

LEKCE 6. Operátory. V této lekci najdete:

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

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

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

Algoritmizace a programování

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

Čísla v plovoucířádovéčárce. INP 2008 FIT VUT v Brně

Jazyk C# a platforma.net

Základy algoritmizace a programování

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

Inovace a zkvalitnění výuky prostřednictvím ICT Základy programování a algoritmizace úloh. Ing. Hodál Jaroslav, Ph.D. VY_32_INOVACE_25 09

MQL4 COURSE. By Coders guru -4 Operace & Výrazy

Programování v jazyce C pro chemiky (C2160) 9. Práce s PDB soubory

Datové typy pro reálná čísla

Datové typy strana 29

Algoritmizace a programování

Algoritmizace a programování

Programovací jazyk Pascal

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

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

Znalost výčtových typů. Aktivní znalost kombinovaných (zkrácených přiřazení). Znalost bitových operací. Znalost operátoru sekvence.

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

Řešení sady 1. Úvod do programování 1 Tomáš Kühr

Přednáška 7. Celočíselná aritmetika. Návratový kód. Příkazy pro větvení výpočtu. Cykly. Předčasné ukončení cyklu.

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

Seminář z IVT Proměnné a operátory. Slovanské gymnázium Olomouc 11. září 2014 Tomáš Kühr

Čísla a číselné soustavy.

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.

Programovací jazyk C++ Hodina 1

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

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

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

Sada 1 - Základy programování

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

NPRG030 Programování I, 2010/11

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

Řídící struktury, if, while, switch

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

Úvod do programování 7. hodina

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

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

Aritmetické operace a obvody pro jejich realizaci

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

Výrazy, operátory a řídicí struktury

Algoritmizace a programování

Základy jazyka C. Základy programování 1 Tomáš Kühr

Variace. Mocniny a odmocniny

Booleovská algebra. Booleovské binární a unární funkce. Základní zákony.

Aplikovaná numerická matematika

PŘETĚŽOVÁNÍ OPERÁTORŮ

Zápis programu v jazyce C#

Část I Výrazy a operátory

ZPRO v "C" Ing. Vít Hanousek. verze 0.3

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

Automaty a gramatiky(bi-aag) Formální překlady. 5. Překladové konečné automaty. h(ε) = ε, h(xa) = h(x)h(a), x, x T, a T.

Obsah přednášky. programovacího jazyka. Motivace. Princip denotační sémantiky Sémantické funkce Výrazy Příkazy Vstup a výstup Kontinuace Program

MIKROPROCESORY PRO VÝKONOVÉ SYSTÉMY

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

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

Programování v jazyce C pro chemiky (C2160) 3. Příkaz switch, příkaz cyklu for, operátory ++ a --, pole

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

Datové typy pro reálná čísla

Transkript:

Příprava studijního programu Informatika je podporována projektem financovaným z Evropského sociálního fondu a rozpočtu hlavního města Prahy. Praha & EU: Investujeme do vaší budoucnosti Racionální čísla, operátory, výrazy, knihovní funkce BI-PA1 Programování a algoritmizace 1, ZS 2014-2015 Katedra teoretické informatiky Miroslav Balík Fakulta informačních technologií České vysoké učení technické

Racionální typy Pro práci s racionálními čísly slouží typy float double long double (nebudeme používat) Umožňují zobrazit aproximace racionálních čísel v určitém rozsahu a s určitou přesností Rozsah hodnot ani přesnost zobrazení nejsou dány normou, ale implementací jazyka; obvykle platí: typ B přesnost rozsah hodnot float 4 7 dek. číslic ±3,4 10 38 až ±3,4 10 +38 double 8 15 dek. číslic ±1,7 10 308 až ±1,7 10 +308 long double 10 19 dek. číslic ±3,4 10 4932 až ±1,1 10 +4932 2/23

Zápis racionálních čísel V programu i ve vstupních datech zapisujeme racionální čísla s desetinou tečkou nebo s exponentem 45.31 0.25.25 10. 1e10 3.1e-5 semilogaritmický tvar čísla mantisa exponent Jsou typu double Má-li být typ čísla float nebo long double, musíme k číslu přidat F nebo L 25.1F 5e-15L V paměti jsou racionální čísla zobrazena jako čísla v pohyblivé řádové čárce Princip tohoto zobrazení při daném základu z (např. 16) je číslo x zobrazeno dvojicí m, e, kde m je normalizovaná mantisa, pro kterou z -1 m < 1 nebo m=0 e je exponent x = m. z e Podrobněji v předmětu... 3/23

Výpis racionálních čísel Pro dekadický výpis racionálních čísel funkcí printf slouží konverze: %f s desetinnou tečkou (bez exponentu) %e v semilogaritmickém tvaru (s exponentem) %g podle velikosti čísla buď s, nebo bez exponentu /* prog3-1a.c */ #include <stdio.h> int main(void) { } float x, y; x = 41.25; y = 12.1e10; printf("x = %f\n", x); printf("y = %e\n", y); printf("x = %g\n", x); printf("y = %g\n", y); return 0; x = 41.250000 y = 1.210000e+11 x = 41.2500 y = 1.21000e+11 4/23

Výpis racionálních čísel Lze zadat celkový počet vypsaných znaků a/nebo počet desetinných míst /* prog3-1b.c */ #include <stdio.h> int main(void) { float x, y; x = 41.25; y = 12.1e10; celkový počet znaků počet desetinných míst printf("x = %20f\n", x); printf("y = %20e\n", y); printf("x = %20.3f\n", x);printf("y = %20.3e\n", y); printf("x = %.3f\n", x); printf("y = %.3e\n", y); return 0; x = 41.250000 } y = 1.210000e+11 x = 41.250 y = 1.210e+11 x = 41.250 y = 1.210e+11 5/23

Vstup racionálních čísel Pomocí funkce scanf a jakékoliv koverze %f, %e a %g Pozor: přečtené číslo se správně uloží pouze do proměnné typu float!!! /* prog3-1c.c */ #include <stdio.h> #include <stdlib.h> int main(void) { float x, y; printf("zadej dve racionalni cisla: "); scanf("%f%e", &x, &y); printf("x = %f\n", x); printf("y = %e\n", y); printf("x = %g\n", x); printf("y = %g\n", y); return 0; } 6/23

Konverze při přiřazení Všechny číselné typy (celočíselné a racionální) jsou kompatibilní vzhledem k přiřazení Znamená to, že v přiřazovacím příkazu x = v; může proměnná x a hodnota v být libovolného číselného typu. Přiřazovaná hodnota se vždy konvertuje na typ proměnné. Následující tabulka udává možné konverze při přiřazení typ hodnoty typ proměnné poznámka ke konverzi racionální kratší racionální zaokrouhlení mantisy racionální delší racionální doplnění mantisy nulami racionální celočíselný odseknutí necelé části celočíselný racionální možná ztráta přesnosti celočíselný kratší celočíselný odseknutí vyšších bitů celočíselný unsgn. delší celočíselný doplnění nulových bitů celočíselný sgn. delší celočíselný rozšíření znaménka Příklady: prog3-2a.c, prog3-2b.c 7/23

Výrazy Výraz předepisuje výpočet hodnoty určitého typu 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 8/23

Aritmetické operátory Podle priority (od nejvyšší po nejnižší): unární + a např. +x, -x binární *, /, % např. x/y, x*y, x%z binární +, - (násobení, dělení, zbytek po dělení) (sčítání, odčítání) např. x+y, x-y Dělení (/) pro celočíselné operandy je celočíselné dělení (celá část podílu) Zbytek po dělení (%) je definován pouze pro celočíselné typy takto: x = (x / y) * y + x % y 9/23

Aritmetické operátory příklad /* prog3-3a.c */ #include <stdio.h> #include <stdlib.h> int main(void) { int i,j; printf("zadejte dve cela cisla (i,j): "); scanf("%d%d", &i, &j); printf("-i = %d\n", -i); printf("+j = %d\n", +j); printf("i+j = %d\n", i+j); printf("i-j = %d\n", i-j); printf("i*j = %d\n", i*j); printf("i/j = %d\n", i/j); printf("i%%j = %d\n", i%j); } return 0; chceme-li v řetězci formát zadat znak %, musíme napsat dva znaky % 10/23

Aritmetické operátory příklad II /* prog3-3b.c */ #include <stdio.h> #include <stdlib.h> int main(void) { } int i = 13, j = 4; printf(" i j i/j i%%j\n"); printf("%4d%4d%6d%6d\n", i, j, i/j, i%j); printf("%4d%4d%6d%6d\n", -i, j, -i/j, -i%j); printf("%4d%4d%6d%6d\n", i, -j, i/-j, i%-j); printf("%4d%4d%6d%6d\n", -i, -j, -i/-j, -i%-j); return 0; i j i/j i%j 13 4 3 1-13 4-3 -1 13-4 -3 1-13 -4 3-1 11/23

Aritmetické operace s operandy různých typů Operandy aritmetických operátorů mohou být různých číselných typů Před provedením operace se provedou tyto konverze (běžné aritmetické konverze usual aritmetic conversions): je-li jeden operand typu long double, druhý se převede na long double a operace se provede v typu long double jinak, je-li jeden operand typu double, druhý se převede na double a operace se provede v typu double jinak, je-li jeden operand typu float, druhý se převede na float a operace se provede v typu float jinak, operand celočíselného typu, který je menší než int resp. unsigned int, se převede na int resp. unsigned int (celočíselné roztažení, integer promotion) a operace se provede celočíselně ve větším z typů operandů (přesná pravidla najdeme v normě jazyka) Příklad: prog3-3c.c 12/23

Relační operátory Hodnoty všech číselných typů jsou uspořádané a lze je porovnávat relačními operátory 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 typu int: 1, když relace označená operátorem platí, 0 v opačném případě Před vyhodnocením operace se provedou běžné aritmetické konverze Příklad: prog3-3d.c 13/23

Operandy číselného typu Výsledek typu int (0 nebo 1) Logické operátory Priorita je menší než priorita relačních operátorů Operandy se vyhodnocují zleva, druhý operand se nevyhodnocuje, je-li výsledek dán prvním operandem Unární:! logická negace výsledek 1, má-li operand hodnotu 0, jinak je výsledek 0 Binární: && logický součin (konjunkce) výsledek 1, jsou-li oba operandy nenulové, jinak 0 logický součet (disjunkce) výsledek 1, je-li alespoň jeden operand nenulový, jinak 0 Příklady: prog3-4a.c, prog3-4b.c, prog3-4c.c, prog3-4d 14/23

Bitové operátory Operandy jen celočíselné, provádějí se běžné aritmetické konverze Unární: ~ negace všech bitů Binární: & logický součin všech bitů logický součet všech bitů ^ logické xor všech bitů << posun bitové reprezentace levého operandu vlevo >> posun bitové reprezentace levého operandu vpravo U operací posunu pravý operand udává délku posunu v bitech Pozor, plete se & a &&, a : int x = 1, y = 2; x & y == 0 x && y == 1 Příklad: prog3-5a.c 15/23

Inkrementace a dekrementace Unární operace s vedlejším efektem (změní hodnotu operandu) Lze zapsat prefixově nebo postfixově Inkrementace: ++ Dekrementace: -- Prefix: ++X --X inkrementuje (dekrementuje) X, hodnotou je změněné X Postfix: X++ X-- inkrementuje (dekrementuje) X, hodnotou je X před změnou Příklady: před operace po x == 1 y = ++x x == 2, y == 2 x == 1 y = x++ x == 2, y == 1 x == 1 y = --x x == 0, y == 0 x == 1 y = x-- x == 0, y == 1 Příklad: prog3-6a.c 16/23

Podmíněný výraz Výsledek podmíněného výrazu je závislý na hodnotě podmínky Syntaxe: Podmínka? Výraz1 : Výraz2 kde Výraz1 a Výraz2 jsou výrazy číselných typů Je-li Podmínka splněna (nenulová hodnota), je výsledkem hodnota Výrazu1, jinak je výsledkem hodnota Výrazu2 Vyhodnocuje se podmínka a pak jen příslušný výraz Příklad: max = a > b? a : b; p = r * (x < 0? -1 : x == 0? 0 : 1); Příklad: prog3-7a.c 17/23

Operátor přiřazení, výrazový příkaz Operátor přiřazení (=) patří mezi binární operátory, má vedlejší efekt Výraz x = h se vyhodnotí tak, že hodnota h se (po případné konverzi) přiřadí proměnné x a výsledkem je nová hodnota proměnné x Z přiřazovacího výrazu uděláme přiřazovací příkaz tím, že ho zakončíme znakem středník x = y přiřazovací výraz x = y; přiřazovací příkaz Z jakéhokoliv výrazu uděláme příkaz tím, že ho zakončíme středníkem Příklad: x++; --y; 18/23

Operátor přiřazení Přiřazení lze řetězit, je asociativní zprava /* prog3-8a.c */ #include <stdio.h> #include <stdlib.h> int main(void) { int i; float f; f i = i f = = 1.98; 1.34; /* a co teď?*/ printf("i = %d\n", i); printf("f = %f\n", f); return 0; } Co program vypíše? 19/23

Složené přiřazení Operátory složeného přiřazení (přiřazení spojeno s operací): += -= *= /= %= &= = ^= <<= >>= Význam: X op= Y je zkratkou za X = X op (Y) /* prog3-9a.c */ #include <stdio.h> #include <stdlib.h> int main(void) { int i = 10, j = 5, k = 0; k += i+j; printf("i = %d\n", i); printf("j = %d\n", j); printf("k = %d\n", k); return 0; } 20/23

Knihovní funkce Při numerických výpočtech někdy potřebujeme matematické funkce jako např. sin, cos, apod. Jejich deklarace jsou v souboru math.h Většina (záleží na implementaci) je uváděna ve třech variantách: #include <math.h> double sin(double x); // sin... double float sinf(float x); // sinf... float long double sinl(long double x); // sinl... long 21/23

Knihovní funkce přehled základních double sin(double X); //sin X double cos(double X); //cos X double tan(double X); //tg X double asin(double X); //arcsin X double acos(double X); //arccos X double atan(double X); //arctg X double atan2(double X, double Y); // arctg (X/Y) double sinh(double X); //sinh X double cosh(double X); //cosh X double tanh(double X); //tgh X double exp(double X); //ex double log(double X); //ln X double log10(double X); //log10 X double pow(double X, double Y); //XY double sqrt(double X); //X1/2 double fabs(double X); // X pro celá čísla je abs 22/23

Příklad použití: Knihovní funkce /* prog3-10a.c */ #include <stdio.h> #include <stdlib.h> #include <math.h> int main(void) { float x, y, z; printf("zadejte delky odvesen: "); scanf("%f%f", &x, &y); z = sqrt(x*x+y*y); printf("delka prepony je %f\n", z); return 0; } S dalšími funkcemi se seznámíme na cvičení 23/23