C99 základní informace o standardu programovacího jazyka C Výpočty v přesné aritmetice

Rozměr: px
Začít zobrazení ze stránky:

Download "C99 základní informace o standardu programovacího jazyka C Výpočty v přesné aritmetice"

Transkript

1 C99 základní informace o standardu programovacího jazyka C Výpočty v přesné aritmetice Josef Dobeš Katedra radioelektroniky (13137), blok B2, místnost 722 dobes@fel.cvut.cz 15. května 2017 Strana 1 z 18 Praktické programování v C/C++ (České vysoké učení technické v Praze, Fakulta elektrotechnická)

2 1. Standardizace prvků jazyka ne dříve vždy povinných V nejrůznějších překladačích jazyka C se dříve víceméně dobrovolně dodržovaly určité obvyklé rysy, které sice striktně nebyly stanoveny standardy (jako je např. ANSI), nicméně většina překladačů je dodržovala. V důsledku toho se ovšem občas objevovaly problémy s přenositelností kódu odladěného v jednom překladači k použití pro překladač jiný. Standard C99 je poměrně rozsáhlý (texty standardu výrazně překračují 100 stran) a řeší tak mnoho problémů s kompatibilitou překladačů. Jako typický příklad lze uvést formátové konverze v standardních funkcích printf, fprintf, sprintf apod. Většina formátových konverzí jako jsou např. %d, %f pracuje samozřejmě stejně, ovšem časté potíže nastávaly v dodatečných specifikacích, např. pro long double apod. Strana 2 z 18

3 1. Standardizace prvků jazyka ne dříve vždy povinných V nejrůznějších překladačích jazyka C se dříve víceméně dobrovolně dodržovaly určité obvyklé rysy, které sice striktně nebyly stanoveny standardy (jako je např. ANSI), nicméně většina překladačů je dodržovala. V důsledku toho se ovšem občas objevovaly problémy s přenositelností kódu odladěného v jednom překladači k použití pro překladač jiný. Standard C99 je poměrně rozsáhlý (texty standardu výrazně překračují 100 stran) a řeší tak mnoho problémů s kompatibilitou překladačů. Jako typický příklad lze uvést formátové konverze v standardních funkcích printf, fprintf, sprintf apod. Většina formátových konverzí jako jsou např. %d, %f pracuje samozřejmě stejně, ovšem časté potíže nastávaly v dodatečných specifikacích, např. pro long double apod. Jako příklad zde uvedeme konverzi %Lf pro výstup long double, která již před přijetím standardu C99 fungovala ve většině překladačů. Nepracovala však správně v překladači GNU GCC (od jistých verzí) GCC totiž přejal kódy od Microsoft a ten (stejně jako Borland) standard C99 dosud plně nepodporuje (obě firmy jsou v současnosti zaměřeny především na C++). Pokud tedy chceme konverzí %Lf vypisovat long double, musíme jako option v překladači dát option -std=c99 (viz nastavení Code::Blocks), jinak se long double vypisuje nesprávně. Strana 2 z 18

4 1. Standardizace prvků jazyka ne dříve vždy povinných V nejrůznějších překladačích jazyka C se dříve víceméně dobrovolně dodržovaly určité obvyklé rysy, které sice striktně nebyly stanoveny standardy (jako je např. ANSI), nicméně většina překladačů je dodržovala. V důsledku toho se ovšem občas objevovaly problémy s přenositelností kódu odladěného v jednom překladači k použití pro překladač jiný. Standard C99 je poměrně rozsáhlý (texty standardu výrazně překračují 100 stran) a řeší tak mnoho problémů s kompatibilitou překladačů. Jako typický příklad lze uvést formátové konverze v standardních funkcích printf, fprintf, sprintf apod. Většina formátových konverzí jako jsou např. %d, %f pracuje samozřejmě stejně, ovšem časté potíže nastávaly v dodatečných specifikacích, např. pro long double apod. Jako příklad zde uvedeme konverzi %Lf pro výstup long double, která již před přijetím standardu C99 fungovala ve většině překladačů. Nepracovala však správně v překladači GNU GCC (od jistých verzí) GCC totiž přejal kódy od Microsoft a ten (stejně jako Borland) standard C99 dosud plně nepodporuje (obě firmy jsou v současnosti zaměřeny především na C++). Pokud tedy chceme konverzí %Lf vypisovat long double, musíme jako option v překladači dát option -std=c99 (viz nastavení Code::Blocks), jinak se long double vypisuje nesprávně. V následujícím zdrojovém souboru si povšimněme obvyklého způsobu získání přesnosti epsilon porovnáváním její postupně se zmenšující velikosti přičtené k jedné s jednou. Dále si povšimněme, že aby konstanta byla chápána jako long double, musí mít příponu (suffix) L (jinak je chápána jako double). Pro výpočet π si rovněž všimněme nezbytnosti použít long double verze funkce arkus tangens atanl, pro kterou je vstupem a výstupem číslo long double. Strana 2 z 18

5 Zdrojový soubor pro test přesnosti, který funguje pro Digital Mars i GNU GCC (a i pro jiné): #include <stdio.h> #include <math.h> typedef long double real; int main() { real a = 1, b1 = , // from Wikipedia to 25 decimal places b2 = L; // b1 is double, b2 is long double // epsilon computing while (1 + a/2!= 1) a /= 2; printf("length of 'long double' = %d, epsilon = %Lg\n", sizeof(a), a); // pi computing printf("pi to 23 decimal places = " "(Wikipedia)\n"); a = 4 * atanl((real)1); // atanl always gets 'long double' printf("pi to 23 decimal places = %25.23Lf\n(computed by ", a); #ifdef GNUC printf("gnu GCC Compiler with '-std=c99' option)\n"); #elif defined( DMC ) printf("digital Mars C Compiler)\n"); #else printf("another compiler)\n"); #endif printf("'double' - pi = %Lg, 'long double' - pi = %Lg\n", b1 - a, b2 - a); return b1!= b2? 0 : 1; Strana 3 z 18

6 Modul vytvořený překladačem Digital Mars (je dostupný z Code::Blocks) poskytne výsledek: length of 'long double' = 10, epsilon = e-19 pi to 23 decimal places = (Wikipedia) pi to 23 decimal places = (computed by Digital Mars C Compiler) 'double' - pi = e-16, 'long double' - pi = e-19 Povšimněme, že proměnná long double je umístěna v deseti bytech. Z výsledné hodnoty epsilon je vidět, že lze počítat s přesností zhruba na devatenáct až dvacet platných cifer. Z výsledku na třetím řádku je dále vidět, že překladač Digital Mars dbá o to, aby se nevypisovala desetinná místa, která z principu nemohou být správně (požadovaná zbylá místa jsou doplněna nulami). Strana 4 z 18

7 Modul vytvořený překladačem Digital Mars (je dostupný z Code::Blocks) poskytne výsledek: length of 'long double' = 10, epsilon = e-19 pi to 23 decimal places = (Wikipedia) pi to 23 decimal places = (computed by Digital Mars C Compiler) 'double' - pi = e-16, 'long double' - pi = e-19 Povšimněme, že proměnná long double je umístěna v deseti bytech. Z výsledné hodnoty epsilon je vidět, že lze počítat s přesností zhruba na devatenáct až dvacet platných cifer. Z výsledku na třetím řádku je dále vidět, že překladač Digital Mars dbá o to, aby se nevypisovala desetinná místa, která z principu nemohou být správně (požadovaná zbylá místa jsou doplněna nulami). Modul vytvořený překladačem GNU GCC (standardní v Code::Blocks) poskytne výsledek: length of 'long double' = 12, epsilon = e-019 pi to 23 decimal places = (Wikipedia) pi to 23 decimal places = (computed by GNU GCC Compiler with '-std=c99' option) 'double' - pi = 0, 'long double' - pi = 0 Povšimněme, že proměnná long double je tentokrát umístěna v dvanácti bytech, což je dáno organizací paměti překladače GNU GCC. Mantisa a tedy přesnost výpočtu je ovšem stejná, o čemž svědčí vypočtená hodnota epsilon. Dále je zjevné, že překladač GNU GCC vypisuje i bity na konci, které z principu nemusí být správné (tj. více než dvacet platných cifer.) Strana 4 z 18

8 2. Některé z nových rysů standardu C99 byly převzaty z C++. Týká se to inline funkcí, komentářů uvedených //, rozptýlené příkazy a deklarace a proměnná viditelná pouze v rozsahu cyklu Funkce inline Nové klíčové slovo inline indikuje, že funkce by měla být rozvinuta inline, je-li to možné (záleží to na překladači; při rozvinutí inline nedochází k předávání parametrů a běh úlohy by tak měl být rychlejší). Moderní překladače však dokáží velmi dobře optimalizovat kód a deklarace inline tak postupně pozbývá svůj původní význam. Klasickým příkladem užití je alokování paměti: #include <sys/types.h> #include <malloc.h> inline void *allocate(size_t sz) { return malloc(sz); Strana 5 z 18

9 2. Některé z nových rysů standardu C99 byly převzaty z C++. Týká se to inline funkcí, komentářů uvedených //, rozptýlené příkazy a deklarace a proměnná viditelná pouze v rozsahu cyklu Funkce inline Nové klíčové slovo inline indikuje, že funkce by měla být rozvinuta inline, je-li to možné (záleží to na překladači; při rozvinutí inline nedochází k předávání parametrů a běh úlohy by tak měl být rychlejší). Moderní překladače však dokáží velmi dobře optimalizovat kód a deklarace inline tak postupně pozbývá svůj původní význam. Klasickým příkladem užití je alokování paměti: #include <sys/types.h> #include <malloc.h> inline void *allocate(size_t sz) { return malloc(sz); 2.2. Komentáře uvedené // Vedle tradičního užití komentářů /*... */ lze používat // jako v C++, přičemž konec řádku za // je chápán jako komentář. Většina překladačů jazyka C používala tento rys již řadu let, nyní se toto ovšem už stalo závaznou normou. Prostředí jako je Code::Blocks používají různé barvy k vytvoření hierarchie komentářů, např. Strana 5 z 18

10 #include <iostream> // Digital Mars C allows "#include <iostream.h>", too using namespace std; /** * This is a documentation comment block xxx does this (this is the documentation keyword) some user (this is the documentation keyword error) */ int main(int argc, char **argv) { /// This is a documentation comment line int numbers[20], total = 0; double average; char ch = '\n'; for (int i = 0; i < 20; ++i) // a breakpoint is set { numbers[i] = i; total += i; average = total / 20.; std::cout << numbers[0] << ch << "..." << ch << numbers[19] << ch; /// cout without std:: is only allowed with 'using namespace std;' cout << "total: " << total << ", average: " << average << ch; std::cout << "put any character and press Enter... "; std::cin >> ch; std::cout << ch << " has been entered" << '\n'; Strana 6 z 18

11 2.3. Rozptýlené příkazy a deklarace V starších verzích jazyka C se deklarace mohly vyskytovat pouze na začátku bloku před všemi příkazy. V standardu C99 lze deklarace umísťovat do libovolného místa kódu stejně jako je tomu v C++ a jako je tomu např. v následujícím fragmentu kódu splňujícím standard C99: typedef struct { int age; double salary; Employee; void compensations(employee *emp) { double bonus = ; double salary; salary = emp->salary + bonus; int rank; // povoleno pouze v C99 rank = emp->age - 25; //... zbytek kódu Strana 7 z 18

12 2.3. Rozptýlené příkazy a deklarace V starších verzích jazyka C se deklarace mohly vyskytovat pouze na začátku bloku před všemi příkazy. V standardu C99 lze deklarace umísťovat do libovolného místa kódu stejně jako je tomu v C++ a jako je tomu např. v následujícím fragmentu kódu splňujícím standard C99: typedef struct { int age; double salary; Employee; void compensations(employee *emp) { double bonus = ; double salary; salary = emp->salary + bonus; int rank; // povoleno pouze v C99 rank = emp->age - 25; //... zbytek kódu 2.4. Proměnné viditelné v rozsahu cyklu Fragment kódu (i tento kód je v Code::Blocks možné přeložit pouze s option -std=c99) for (int n = 0; n < 10; ++n) { // příkazy Strana 7 z 18

13 je ekvivalentní klasickému kódu { int n = 0; for (; n < 10; ++n) { // příkazy Strana 8 z 18

14 3. Novými rysy C99 jsou pole s proměnnou délkou, přiřazené inicializátory, datový typ long long, variadická makra a identifikátor func Pole s proměnnou délkou jde o nejvýznamnější nový rys C99: int sentvla(int [*], int ); int createvla(int size, int *sumquad) { int arr[size]; // size isn't const; allowed only in C99 for (int i = 0; i < size; i++) arr[i] = i * i; *sumquad = sentvla(arr, size); return sizeof(arr); #if defined( GNUC ) int sentvla(int vla[], int size) { // GNU C allows "[*]" in prototypes only #elif defined( DMC ) int sentvla(int vla[*], int size) { // Digital Mars C also allows "[*]" here #else int sentvla(int *vla, int size) { // another possible way of compilation #endif int suma = 0; for (int i = 0; i < size; i++) suma += vla[i]; return suma; Strana 9 z 18

15 Ve všech předchozích verzích jazyka C nebylo možné, aby délka pole (size) byla proměnná, tj. známá až v okamžiku běhu programu (nikoliv v okamžiku kompilace, jak tomu bylo dříve) ve výše uvedeném příkladu délka dynamicky alokovaného pole v proceduře vstupuje jako parametr procedury. Tato možnost neexistuje ani v C++ zde je nutné pole dynamicky alokovat pomocí operátorů new a delete[], což rozhodně není tak elegantní jako v C99. Strana 10 z 18

16 Ve všech předchozích verzích jazyka C nebylo možné, aby délka pole (size) byla proměnná, tj. známá až v okamžiku běhu programu (nikoliv v okamžiku kompilace, jak tomu bylo dříve) ve výše uvedeném příkladu délka dynamicky alokovaného pole v proceduře vstupuje jako parametr procedury. Tato možnost neexistuje ani v C++ zde je nutné pole dynamicky alokovat pomocí operátorů new a delete[], což rozhodně není tak elegantní jako v C99. K podpoře polí s proměnnou délkou C99 zavádí notaci [*] v parametrech funkce ovšem některé překladače toto umožňují jen v deklaraci prototypu funkce (jako GNU GCC) a jiné i v konkrétní definici funkce (jako Digital Mars). Strana 10 z 18

17 Ve všech předchozích verzích jazyka C nebylo možné, aby délka pole (size) byla proměnná, tj. známá až v okamžiku běhu programu (nikoliv v okamžiku kompilace, jak tomu bylo dříve) ve výše uvedeném příkladu délka dynamicky alokovaného pole v proceduře vstupuje jako parametr procedury. Tato možnost neexistuje ani v C++ zde je nutné pole dynamicky alokovat pomocí operátorů new a delete[], což rozhodně není tak elegantní jako v C99. K podpoře polí s proměnnou délkou C99 zavádí notaci [*] v parametrech funkce ovšem některé překladače toto umožňují jen v deklaraci prototypu funkce (jako GNU GCC) a jiné i v konkrétní definici funkce (jako Digital Mars). Běžné debuggery mají potíže se zobrazováním obsahu dynamicky alokovaných polí (např. klasické verze WinDbg), nové verze debuggeru GDB pro GNU GCC však zobrazují dynamicky alokovaná pole správně. Rovněž vícerozměrná pole lze v standardu C99 alokovat dynamicky. Strana 10 z 18

18 Ve všech předchozích verzích jazyka C nebylo možné, aby délka pole (size) byla proměnná, tj. známá až v okamžiku běhu programu (nikoliv v okamžiku kompilace, jak tomu bylo dříve) ve výše uvedeném příkladu délka dynamicky alokovaného pole v proceduře vstupuje jako parametr procedury. Tato možnost neexistuje ani v C++ zde je nutné pole dynamicky alokovat pomocí operátorů new a delete[], což rozhodně není tak elegantní jako v C99. K podpoře polí s proměnnou délkou C99 zavádí notaci [*] v parametrech funkce ovšem některé překladače toto umožňují jen v deklaraci prototypu funkce (jako GNU GCC) a jiné i v konkrétní definici funkce (jako Digital Mars). Běžné debuggery mají potíže se zobrazováním obsahu dynamicky alokovaných polí (např. klasické verze WinDbg), nové verze debuggeru GDB pro GNU GCC však zobrazují dynamicky alokovaná pole správně. Rovněž vícerozměrná pole lze v standardu C99 alokovat dynamicky. Výše uvedené funkce lze např. použít v následujícím testovacím hlavním programu: #include <stdio.h> #include "variablesize_func.c" void main() { int size, nbytes, sumquad; printf("enter array's size: "); scanf("%d", &size); nbytes = createvla(size, &sumquad); printf("nbytes = %d, sumquad = %d\n", nbytes, sumquad); Strana 10 z 18

19 3.2. Přiřazené inicializátory Přiřazené inicializátory umožňují elegantním způsobem přiřazovat počáteční hodnoty prvkům polí, struktur a unionů podle následujícího příkladu: #include <stdio.h> int vec[5] = {[1]=10, [3]=20; typedef struct { char name[20]; int ID; int age; FILE *record; Employee; Employee emp = {.ID=0,.record=NULL; Strana 11 z 18

20 3.2. Přiřazené inicializátory Přiřazené inicializátory umožňují elegantním způsobem přiřazovat počáteční hodnoty prvkům polí, struktur a unionů podle následujícího příkladu: #include <stdio.h> int vec[5] = {[1]=10, [3]=20; typedef struct { char name[20]; int ID; int age; FILE *record; Employee; Employee emp = {.ID=0,.record=NULL; 3.3. Datový typ long long Tento datový typ musí podle standardu mít nejméně 64 bitů (důležité např. pro náhodná čísla) #include <stdio.h> void main() { long long molecules= ll; printf("%lld\n", molecules); Strana 11 z 18

21 3.4. Variadická makra Standard C99 podporuje kromě variadických funkcí (printf funkce s proměnným počtem parametrů) i variadická makra, přičemž proměnný seznam argumentů makra reprezentuje ellipsis (... ): #include <stdio.h> #define DoLogFile(...) fprintf(stderr, VA_ARGS ) #define MakeName(...) # VA_ARGS int main() { char *p; p = MakeName(Mary); p = MakeName(Doe, John); DoLogFile("MakeName=%s\n", p); // kombinace dvou variadických maker: DoLogFile("MakeName=%s\n", MakeName(Martin Luther King, Jr.)); Strana 12 z 18

22 3.5. Identifikátor func Identifikátor func vrací jméno funkce, v které byl tento identifikátor použit. Jméno funkce je tedy poskytováno podobným způsobem jako pracují např. makra FILE nebo DATE : #include <stdio.h> void moje_funkce() { printf("you're in %s\n", func ); void main() { moje_funkce(); Strana 13 z 18

23 3.5. Identifikátor func Identifikátor func vrací jméno funkce, v které byl tento identifikátor použit. Jméno funkce je tedy poskytováno podobným způsobem jako pracují např. makra FILE nebo DATE : #include <stdio.h> void moje_funkce() { printf("you're in %s\n", func ); void main() { moje_funkce(); 3.6. Komplexní čísla Standard C99 přináší nová klíčová slova _Complex a _Imaginary a je přípustná deklarace long double _Complex a (přirozená) práce s komplexními čísly s přesností na 19 až 20 platných cifer je tedy možná. Na následující straně je uveden příklad kódu použitelného pro překladače Digital Mars C i GNU GCC. Strana 13 z 18

24 #include <stdio.h> //nebyl použit complex.h, aby bylo jasné co je generické inline long double creall(long double _Complex z) { return (long double)z; //nebo *(long double *)&z, reálná část je první inline long double cimagl(long double _Complex z) { return ((long double *)&z)[1]; //realná a imaginární jsou tedy za sebou long double _Complex csinl(long double _Complex); //csinl je v knihovnách #ifdef DMC //pozor, I je definováno jiným typem v Digital Mars a GNU C! #define I ((const float _Imaginary) imaginary) //DMC má typ _Imaginary #elif defined( GNUC ) //DMC tedy definuje I jako typ standardu _Imaginary #define I (0.0F + 1.0iF) //v MinGW, GCC totiž NEMÁ dosud typ _Imaginary #endif //oba nejprve definují standard _Complex_I a oba rovn ěž definují i I /* GCC ovšem umožňuje psát i za číslem, tj. např. a = 1.3L+2.5iL */ void main() { long double _Complex a = 1.3L+2.5L*I, b = -2.7L-0.3L*I, sum, mul, foo, t; printf("a = %Lg + %Lgi (size(a)=%d)\n", creall(a), cimagl(a), sizeof(a)); printf("b = %Lg + %Lgi\n", creall(b), cimagl(b)); sum = a + b; mul = a * b; printf("a + b = %Lg + %Lgi\n", creall(sum), cimagl(sum)); printf("a * b = %Lg + %Lgi\n", creall(mul), cimagl(mul)); foo = csinl(a); t = csinl( l L*I); printf("sin(a) = %.20Lg + %.20Lgi\nsin(pi/2 + ln(2+sqrt(3))i) = " "%.20Lg + %.20Lgi", creall(foo), cimagl(foo), creall(t), cimagl(t)); Strana 14 z 18

25 Program vytvořený překladačem Digital Mars poskytne výsledek (je vidět, že jedno komplexní číslo zabírá v tomto případě 20 bytů): a = i (size(a)=20) b = i a + b = i a * b = i sin(a) = i sin(pi/2 + ln(2+sqrt(3))i) = e-19i a program vytvořený překladačem GNU GCC poskytne obdobný výsledek (v tomto případě ovšem komplexní číslo zabere 24 bytů): a = i (size(a)=24) b = i a + b = i a * b = i sin(a) = i sin(pi/2 + ln(2+sqrt(3))i) = e-019i Strana 15 z 18

26 Program vytvořený překladačem Digital Mars poskytne výsledek (je vidět, že jedno komplexní číslo zabírá v tomto případě 20 bytů): a = i (size(a)=20) b = i a + b = i a * b = i sin(a) = i sin(pi/2 + ln(2+sqrt(3))i) = e-19i a program vytvořený překladačem GNU GCC poskytne obdobný výsledek (v tomto případě ovšem komplexní číslo zabere 24 bytů): a = i (size(a)=24) b = i a + b = i a * b = i sin(a) = i sin(pi/2 + ln(2+sqrt(3))i) = e-019i 3.7. Použití knihovny s čtyřnásobnou délkou slova Ještě mnohem větší přesnosti dosáhneme při použití nově vytvořené knihovny libquadmath pro překladač GNU GCC (tuto knihovnu musíme zatím při procesu sestavování ručně připojovat, což ovšem není velký problém). Způsob použití je zjevný z následujícího kódu, který je přesnější variantou dříve demonstrovaného testu přesnosti. Strana 15 z 18

27 #include <stdio.h> #include <quadmath.h> typedef float128 real; int main() { real a = 1, b1 = , //bude v GCC long double b2 = Q; //bude v GCC float128 // epsilon computing while (1 + a/2!= 1) a /= 2; printf("length of ' float128' = %d, epsilon = %.4g\n", sizeof(a), (double)a); // pi computing printf("pi to 35 decimal digits = " "(Wikipedia)\n"); a = 4 * atanq((real)1); //atanq má parametr typu float128 char s[40]; quadmath_snprintf (s, sizeof(s), "%39.36Qf", a); //speciální tisk v quad printf("pi to 36 decimal digits =%s (computed\nby ", s); #ifdef GNUC printf("gnu GCC Compiler with '-std=c99' option and " "libquadmath.a library)\n"); #else printf("another compiler)\n"); #endif printf("'long double' - pi = %.4g, ' float128' - pi = %.4g", (double)(b1 - a), (double)(b2 - a)); return b1!= b2? 0 : 1; Strana 16 z 18

28 a v tomto případě můžeme počítat s přesností výpočtu až na 35 platných cifer (viz epsilon): length of ' float128' = 16, epsilon = 1.926e-034 pi to 35 decimal digits = (Wikipedia) pi to 36 decimal digits = (computed by GNU GCC Compiler with '-std=c99' option and libquadmath.a library) 'long double' - pi = 5.017e-020, ' float128' - pi = 0 Strana 17 z 18

29 a v tomto případě můžeme počítat s přesností výpočtu až na 35 platných cifer (viz epsilon): length of ' float128' = 16, epsilon = 1.926e-034 pi to 35 decimal digits = (Wikipedia) pi to 36 decimal digits = (computed by GNU GCC Compiler with '-std=c99' option and libquadmath.a library) 'long double' - pi = 5.017e-020, ' float128' - pi = 0 Knihovna libquadmath umožňuje ve stejné přesnosti pracovat i s komplexními čísly: #include <quadmath.h> #include <stdio.h> int main() { complex128 t; t = csinq( q Qi); printf("sin(pi/2 + ln(2+sqrt(3))i) = %.20Lg + %Lgi", (long double)crealq(t), (long double)cimagq(t)); return 0; což poskytne výsledek sin(pi/2 + ln(2+sqrt(3))i) = e-035i který opět potvrzuje přesnost přibližně na 34 platných cifer. Strana 17 z 18

30 4. Účelnost aritmetiky v čtyřnásobné přesnosti lze názorně dokumentovat následujícím příkladem v C: #include <quadmath.h> #include <stdio.h> int main (void) { float128 a = sinq(1e22q); float128 b = logq(17.1q); float128 c = expq(0.42q); float128 d = *a *b *c; char s[45]; quadmath_snprintf(s, sizeof(s), "%44.35Qe", d); // bez Q nefunguje printf("result to 36 decimal digits: %s\n", s); printf("non-precise standard printing:%44.35e\n", (double)d); printf("interesting precise printing: %44.35Le", (long double)d); // Le je v c99! nebo v Fortran90: program cise implicit none real(16) a, b, c, d a = sin(1e22_16) b = log(17.1_16) c = exp(0.42_16) d = *a *b *c print *, d end program cise Oba programy dávají (správný výsledek) e-012. Pokud bychom to provedli v long double, výsledek by byl e-012 a v double dokonce úplně špatný výsledek e-011. Strana 18 z 18

C99 základní informace o standardu programovacího jazyka C Výpočty v přesné aritmetice

C99 základní informace o standardu programovacího jazyka C Výpočty v přesné aritmetice C99 základní informace o standardu programovacího jazyka C Výpočty v přesné aritmetice Josef Dobeš Katedra radioelektroniky (13137), blok B2, místnost 722 dobes@fel.cvut.cz 15. května 2017 Praktické programování

Více

Preprocesor. Karel Richta a kol. katedra počítačů FEL ČVUT v Praze. Karel Richta, Martin Hořeňovský, Aleš Hrabalík, 2016

Preprocesor. Karel Richta a kol. katedra počítačů FEL ČVUT v Praze. Karel Richta, Martin Hořeňovský, Aleš Hrabalík, 2016 Preprocesor Karel Richta a kol. katedra počítačů FEL ČVUT v Praze Karel Richta, Martin Hořeňovský, Aleš Hrabalík, 2016 Programování v C++, A7B36PJC 4/2016, Lekce 9b https://cw.fel.cvut.cz/wiki/courses/a7b36pjc/start

Více

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

Operační systémy. Cvičení 4: Programování v C pod Unixem Operační systémy Cvičení 4: Programování v C pod Unixem 1 Obsah cvičení Řídící struktury Funkce Dynamická alokace paměti Ladění programu Kde najít další informace Poznámka: uvedené příklady jsou dostupné

Více

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

IUJCE 07/08 Přednáška č. 1 Úvod do předmětu Literatura Záznamy přednášek a vaše poznámky Harbison, S. P., Steele, G. L.: Referenční příručka jazyka C Herout, P.: Učebnice jazyka C Kernighan, B. W., Ritchie, D. M.: The C Programming

Více

PROGRAMOVÁNÍ V C++ CVIČENÍ

PROGRAMOVÁNÍ V C++ CVIČENÍ PROGRAMOVÁNÍ V C++ CVIČENÍ INFORMACE Michal Brabec http://www.ksi.mff.cuni.cz/ http://www.ksi.mff.cuni.cz/~brabec/ brabec@ksi.mff.cuni.cz gmichal.brabec@gmail.com PODMÍNKY ZÁPOČTU Základní podmínky společné

Více

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

Programování v C++ 1, 1. cvičení Programování v C++ 1, 1. cvičení opakování látky ze základů programování 1 1 Fakulta jaderná a fyzikálně inženýrská České vysoké učení technické v Praze Zimní semestr 2018/2019 Přehled 1 2 Shrnutí procvičených

Více

Algoritmizace a programování

Algoritmizace a programování Algoritmizace a programování Strukturované proměnné Struktura, union Jazyk C České vysoké učení technické Fakulta elektrotechnická A8B14ADP Jazyk C - Strukturované proměnné Ver.1.10 J. Zděnek 20151 Struktura

Více

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

ZPRO v C Ing. Vít Hanousek. verze 0.3 verze 0.3 Hello World Nejjednoduší program ukazující vypsání textu. #include using namespace std; int main(void) { cout

Více

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

Úvod do jazyka C. Ing. Jan Fikejz (KST, FEI) Fakulta elektrotechniky a informatiky Katedra softwarových technologií 1 Fakulta elektrotechniky a informatiky Katedra softwarových technologií 12. října 2009 Organizace výuky Přednášky Teoretické základy dle normy jazyka C Cvičení Praktické úlohy odpřednášené látky Prostřední

Více

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

VÝUKOVÝ MATERIÁL. Bratislavská 2166, Varnsdorf, IČO: tel Číslo projektu VÝUKOVÝ MATERIÁL Identifikační údaje školy Vyšší odborná škola a Střední škola, Varnsdorf, příspěvková organizace Bratislavská 2166, 407 47 Varnsdorf, IČO: 18383874 www.vosassvdf.cz, tel. +420412372632

Více

C++ objektově orientovaná nadstavba programovacího jazyka C

C++ objektově orientovaná nadstavba programovacího jazyka C C++ objektově orientovaná nadstavba programovacího jazyka C (1. část) Josef Dobeš Katedra radioelektroniky (13137), blok B2, místnost 722 dobes@fel.cvut.cz 5. května 2014 České vysoké učení technické v

Více

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í

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í 02 Jazyk C - je imperativní říkáme, co se má udělat, voláme příkazy - další imperativní jazyky: Pascal, Java, C/C++ apod. - na rozdíl od jazyků deklarativních např. Prolog, Haskell, Scheme, Lisp (funkcionální

Více

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

Operační systémy. Cvičení 3: Programování v C pod Unixem Operační systémy Cvičení 3: Programování v C pod Unixem 1 Obsah cvičení Editace zdrojového kódu Překlad zdrojového kódu Základní datové typy, struktura, ukazatel, pole Načtení vstupních dat Poznámka: uvedené

Více

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 -

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 - 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 - Preprocesor je možné ovládat pomocí příkazů - řádky začínající

Více

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

Jazyk C++, některá rozšíření oproti C Karel Müller, Josef Vogel (ČVUT FIT) Jazyk C++, některá rozšíření oproti C BI-PA2, 2011, Přednáška 1 1/22 Jazyk C++, některá rozšíření oproti C Ing. Josef Vogel, CSc Katedra softwarového inženýrství Katedra

Více

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.

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. Vážení zákazníci, dovolujeme si Vás upozornit, že na tuto ukázku knihy se vztahují autorská práva, tzv copyright To znamená, že ukázka má sloužit výhradnì pro osobní potøebu potenciálního kupujícího (aby

Více

Martin Flusser. Faculty of Nuclear Sciences and Physical Engineering Czech Technical University in Prague. October 17, 2016

Martin Flusser. Faculty of Nuclear Sciences and Physical Engineering Czech Technical University in Prague. October 17, 2016 ZPRO cvičení 2 Martin Flusser Faculty of Nuclear Sciences and Physical Engineering Czech Technical University in Prague October 17, 2016 Outline I 1 Outline 2 Proměnné 3 Proměnné - cvičení 4 Funkce 5 Funkce

Více

Programovací jazyk C++ Hodina 1

Programovací jazyk C++ Hodina 1 Programovací jazyk C++ Hodina 1 Používané překladače Bloodshed Dev C++ http://www.bloodshed.net/devcpp.html CodeBlocks http://www.codeblocks.org pokud nemáte již nainstalovaný překladač, stáhněte si instalátor

Více

Př. další použití pointerů

Př. další použití pointerů Př. další použití pointerů char *p_ch; int *p_i; p_ch = (char *) p_i; // konverze int * na char * 8 int i = 5; int *p_i; p_i = &i; POZOR!!!! scanf("%d", p_i); printf("%d", *p_i); Obecný pointer na cokoliv:

Více

Základy programování (IZP)

Základy programování (IZP) Základy programování (IZP) Páté počítačové cvičení Brno University of Technology, Faculty of Information Technology Božetěchova 1/2, 612 66 Brno - Královo Pole Petr Veigend, iveigend@fit.vutbr.cz 5. týden

Více

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

1. lekce. do souboru main.c uložíme následující kód a pomocí F9 ho zkompilujeme a spustíme: 1. lekce 1. Minimální program do souboru main.c uložíme následující kód a pomocí F9 ho zkompilujeme a spustíme: #include #include int main() { printf("hello world!\n"); return 0; 2.

Více

C++ objektově orientovaná nadstavba programovacího jazyka C

C++ objektově orientovaná nadstavba programovacího jazyka C C++ objektově orientovaná nadstavba programovacího jazyka C (2. část) Josef Dobeš Katedra radioelektroniky (13137), blok B2, místnost 722 dobes@fel.cvut.cz 18. května 2015 České vysoké učení technické

Více

Ukazatele, dynamická alokace

Ukazatele, dynamická alokace Ukazatele, dynamická alokace Karel Richta a kol. katedra počítačů FEL ČVUT v Praze Přednášky byly připraveny s pomocí materiálů, které vyrobili Ladislav Vágner, Pavel Strnad, Martin Mazanec Karel Richta,

Více

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

8. lekce Úvod do jazyka C 3. část Základní příkazy jazyka C Miroslav Jílek 8. lekce Úvod do jazyka C 3. část Základní příkazy jazyka C Miroslav Jílek 1/41 Základní příkazy Všechny příkazy se píšou malými písmeny! Za většinou příkazů musí být středník (;)! 2/41 Základní příkazy

Více

9. lekce Úvod do jazyka C 4. část Funkce, rekurze Editace, kompilace, spuštění Miroslav Jílek

9. lekce Úvod do jazyka C 4. část Funkce, rekurze Editace, kompilace, spuštění Miroslav Jílek 9. lekce Úvod do jazyka C 4. část Funkce, rekurze Editace, kompilace, spuštění Miroslav Jílek 1/24 Editační prostření Kód programu lze editovat v jakémkoli textovém editoru. 2/24 Editační prostření Kód

Více

Pokročilé programování v jazyce C pro chemiky (C3220) Pokročilá témata jazyka C++

Pokročilé programování v jazyce C pro chemiky (C3220) Pokročilá témata jazyka C++ Pokročilé programování v jazyce C pro chemiky (C3220) Pokročilá témata jazyka C++ Prostory jmen U programů mohou někdy nastat kolize mezi jmény (tříd, funkcí, globálních proměnných atd.) pokud v různých

Více

2 Datové typy v jazyce C

2 Datové typy v jazyce C 1 Procedurální programování a strukturované programování Charakteristické pro procedurální programování je organizace programu, který řeší daný problém, do bloků (procedur, funkcí, subrutin). Původně jednolitý,

Více

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

for (i = 0, j = 5; i < 10; i++) { // tělo cyklu } 5. Operátor čárka, - slouží k jistému určení pořadí vykonání dvou příkazů - oddělím-li čárkou dva příkazy, je jisté, že ten první bude vykonán dříve než příkaz druhý. Např.: i = 5; j = 8; - po překladu

Více

Preprocesor a koncepce (větších) programů. Úvod do programování 2 Tomáš Kühr

Preprocesor a koncepce (větších) programů. Úvod do programování 2 Tomáš Kühr Preprocesor a koncepce (větších) programů Úvod do programování 2 Tomáš Kühr Práce s preprocesorem Preprocesor Zpracovává zdrojový kód ještě před překladačem Provádí pouze záměny textů (např. identifikátor

Více

Odvozené a strukturované typy dat

Odvozené a strukturované typy dat Odvozené a strukturované typy dat Petr Šaloun katedra informatiky FEI VŠB-TU Ostrava 14. listopadu 2011 Petr Šaloun (katedra informatiky FEI VŠB-TU Ostrava) Odvozené a strukturované typy dat 14. listopadu

Více

Abstraktní třídy, polymorfní struktury

Abstraktní třídy, polymorfní struktury Karel Müller, Josef Vogel (ČVUT FIT) Abstraktní třídy, polymorfní struktury BI-PA2, 2011, Přednáška 9 1/32 Abstraktní třídy, polymorfní struktury Ing. Josef Vogel, CSc Katedra softwarového inženýrství

Více

IUJCE 07/08 Přednáška č. 4. v paměti neexistuje. v paměti existuje

IUJCE 07/08 Přednáška č. 4. v paměti neexistuje. v paměti existuje Konstanty I možnosti: přednostně v paměti neexistuje žádný ; o preprocesor (deklarace) #define KONSTANTA 10 o konstantní proměnná (definice) const int KONSTANTA = 10; příklad #include v paměti

Více

C++ Akademie SH. 2. Prom nné, podmínky, cykly, funkce, rekurze, operátory. Michal Kvasni ka. 20. b ezna Za áte níci C++

C++ Akademie SH. 2. Prom nné, podmínky, cykly, funkce, rekurze, operátory. Michal Kvasni ka. 20. b ezna Za áte níci C++ C++ Akademie SH 2. Prom nné, podmínky, cykly, funkce, rekurze, operátory Za áte níci C++ 20. b ezna 2011 Obsah 1 Prom nné - primitivní typy Celá ísla ƒísla s pohyblivou desetinnou árkou, typ bool 2 Podmínka

Více

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

Obsah. Předmluva 13 Zpětná vazba od čtenářů 14 Zdrojové kódy ke knize 15 Errata 15 Předmluva 13 Zpětná vazba od čtenářů 14 Zdrojové kódy ke knize 15 Errata 15 KAPITOLA 1 Úvod do programo vání v jazyce C++ 17 Základní pojmy 17 Proměnné a konstanty 18 Typy příkazů 18 IDE integrované vývojové

Více

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

1. lekce. do souboru main.c uložíme následující kód a pomocí F9 ho zkompilujeme a spustíme: 1. lekce 1. Minimální program do souboru main.c uložíme následující kód a pomocí F9 ho zkompilujeme a spustíme: #include #include int main() { printf("hello world!\n"); return 0; 2.

Více

Množina čísel int stl-set-int.cpp

Množina čísel int stl-set-int.cpp Řetězce, pole a STL V C++ je výhodné pro práci s řetězci použít třídu string, funkce C jsou stále k dispozici cstring, ukazatele a pole lze stále používat stejně, jako v C, použití iterátorů a dalších

Více

přetížení operátorů (o)

přetížení operátorů (o) přetížení operátorů (o) - pro vlastní typy je možné přetížit i operátory (tj. definovat vlastní) - pro definici slouží klíčové slovo operator následované typem/znakem operátoru - operátor je speciální

Více

PB161 Programování v jazyce C++ Přednáška 10

PB161 Programování v jazyce C++ Přednáška 10 .. PB161 Programování v jazyce C++ Přednáška 10 Šablony Nikola Beneš 23. listopadu 2015 PB161 přednáška 10: šablony 23. listopadu 2015 1 / 29 K zamyšlení Jaký je rozdíl mezi new int[10] a new int[10]()?

Více

Dílčí příklady použití jazykových konstrukcí v projektu. Jazyk C Příklady. Pravidla překladu v gmake. Zadání

Dílčí příklady použití jazykových konstrukcí v projektu. Jazyk C Příklady. Pravidla překladu v gmake. Zadání Dílčí příklady použití jazykových konstrukcí v projektu Jazyk C Příklady Jan Faigl Katedra počítačů Fakulta elektrotechnická České vysoké učení technické v Praze Přednáška 10 A0B36PR2 Programování 2 Program

Více

Lekce 6 IMPLEMENTACE OPERAČNÍHO SYSTÉMU LINUX DO VÝUKY INFORMAČNÍCH TECHNOLOGIÍ JAZYK C

Lekce 6 IMPLEMENTACE OPERAČNÍHO SYSTÉMU LINUX DO VÝUKY INFORMAČNÍCH TECHNOLOGIÍ JAZYK C Identifikační údaje školy Číslo projektu Název projektu Číslo a název šablony Autor Tematická oblast Číslo a název materiálu Anotace Vyšší odborná škola a Střední škola, Varnsdorf, příspěvková organizace

Více

Úvod do programovacích jazyků (Java)

Úvod do programovacích jazyků (Java) Úvod do programovacích jazyků (Java) Michal Krátký Katedra informatiky VŠB Technická univerzita Ostrava Úvod do programovacích jazyků (Java), 2007/2008 c 2006 2008 Michal Krátký Úvod do programovacích

Více

Koncepce (větších) programů. Základy programování 2 Tomáš Kühr

Koncepce (větších) programů. Základy programování 2 Tomáš Kühr Koncepce (větších) programů Základy programování 2 Tomáš Kühr Parametry a návratová hodnota main Již víme, že main je funkce A také tušíme, že je trochu jiná než ostatní funkce v programu Funkce main je

Více

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

Algoritmizace a programování. Ak. rok 2012/2013 vbp 1. ze 44 Algoritmizace a programování Ak. rok 2012/2013 vbp 1. ze 44 Vladimír Beneš Petrovický K101 katedra matematiky, statistiky a informačních technologií vedoucí katedry E-mail: vbenes@bivs.cz Telefon: 251

Více

Střední škola pedagogická, hotelnictví a služeb, Litoměříce, příspěvková organizace

Střední škola pedagogická, hotelnictví a služeb, Litoměříce, příspěvková organizace Střední škola pedagogická, hotelnictví a služeb, Litoměříce, příspěvková organizace Předmět: Vývoj aplikací Téma: Datové typy Vyučující: Ing. Milan Káža Třída: EK3 Hodina: 5 Číslo: V/5 Programování v jazyce

Více

IUJCE Přednáška č. 11. další prvky globální proměnné, řízení viditelnosti proměnných, funkcí

IUJCE Přednáška č. 11. další prvky globální proměnné, řízení viditelnosti proměnných, funkcí Velké projekty v C velký = 100ky a více řádek udržovatelnost, bezpečnost, přehlednost kódu rozdělení programu do více souborů další prvky globální proměnné, řízení viditelnosti proměnných, funkcí Globální

Více

Úvod do programování. Lekce 1

Úvod do programování. Lekce 1 Úvod do programování Lekce 1 Základní pojmy vytvoření spustitelného kódu editor - psaní zdrojových souborů preprocesor - zpracování zdrojových souborů (vypuštění komentářů atd.) kompilátor (compiler) -

Více

Základy C++ I. Jan Hnilica Počítačové modelování 18

Základy C++ I. Jan Hnilica Počítačové modelování 18 Základy C++ I 1 Přechod z C na C++ jazyk C++ je nadmnožinou jazyka C z hlediska syntaxe se jedná o velmi podobné jazyky, spolu s dalšími jazyky "céčkovské" rodiny, jako je např. C# každý platný program

Více

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

Základy jazyka C. Základy programování 1 Martin Kauer (Tomáš Kühr) Základy jazyka C Základy programování 1 Martin Kauer (Tomáš Kühr) Organizační záležitosti Konzultace Pracovna 5.076 Úterý 15:00 16:30 Emailem martin.kauer@upol.cz Web předmětu http://tux.inf.upol.cz/~kauer/index.php?content=var&class=zp1

Více

Základy programování (IZP)

Základy programování (IZP) Základy programování (IZP) Jedenácté počítačové cvičení Brno University of Technology, Faculty of Information Technology Božetěchova 1/2, 612 66 Brno - Královo Pole Gabriela Nečasová, inecasova@fit.vutbr.cz

Více

PROGRAMOVÁNÍ V C++ URČENO PRO VZDĚLÁVÁNÍ V AKREDITOVANÝCH STUDIJNÍCH PROGRAMECH ROSTISLAV FOJTÍK

PROGRAMOVÁNÍ V C++ URČENO PRO VZDĚLÁVÁNÍ V AKREDITOVANÝCH STUDIJNÍCH PROGRAMECH ROSTISLAV FOJTÍK PROGRAMOVÁNÍ V C++ URČENO PRO VZDĚLÁVÁNÍ V AKREDITOVANÝCH STUDIJNÍCH PROGRAMECH ROSTISLAV FOJTÍK ČÍSLO OPERAČNÍHO PROGRAMU: CZ.1.07 NÁZEV OPERAČNÍHO PROGRAMU: VZDĚLÁVÁNÍ PRO KONKURENCESCHOPNOST OPATŘENÍ:

Více

přetížení operátorů (o)

přetížení operátorů (o) přetížení operátorů (o) - pro vlastní typy je možné přetížit i operátory (tj. definovat vlastní) - pro definici slouží klíčové slovo operator následované typem/znakem operátoru - deklarace pomocí funkčního

Více

Dědění, polymorfismus

Dědění, polymorfismus Programování v jazyce C/C++ Ladislav Vagner úprava Pavel Strnad Dědění. Polymorfismus. Dnešní přednáška Statická a dynamická vazba. Vnitřní reprezentace. VMT tabulka virtuálních metod. Časté chyby. Minulá

Více

Datové typy pro reálná čísla

Datové typy pro reálná čísla Datové typy pro reálná čísla KAPITOLA 3 V této kapitole: Vlastnosti datových typů pro reálná čísla v jazyce C/ C++ Vstupně/výstupní operace z pohledu reálných čísel Aritmetické operace s reálnými čísly

Více

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

int => unsigned int => long => unsigned long => float => double => long double - tj. bude-li: 13.4.2010 Typová konverze - změna jednoho datového typu na jiný - známe dva základní implicitní ("sama od sebe") a explicitní (výslovně vyžádána programátorem) - C je málo přísné na typové kontroly = dokáže

Více

Základy programování (IZP)

Základy programování (IZP) Základy programování (IZP) Deváté počítačové cvičení Brno University of Technology, Faculty of Information Technology Božetěchova 1/2, 612 66 Brno - Královo Pole Petr Veigend, iveigend@fit.vutbr.cz 27.11.2017,

Více

Systém je citlivý na velikost písmen CASE SENSITIVE rozeznává malá velká písmena, např. PROM=1; PROm=1; PRom=1; Prom=1; prom=1; - 5 různých proměnných

Systém je citlivý na velikost písmen CASE SENSITIVE rozeznává malá velká písmena, např. PROM=1; PROm=1; PRom=1; Prom=1; prom=1; - 5 různých proměnných Systém je citlivý na velikost písmen CASE SENSITIVE rozeznává malá velká písmena, např. PROM=1; PROm=1; PRom=1; Prom=1; prom=1; - 5 různých proměnných jakési nádoby na hodnoty jsou různých typů při běžné

Více

Třídy a struktury v C++

Třídy a struktury v C++ katedra informatiky FEI VŠB-TU Ostrava 7. prosince 2015 Odvozené a strukturované typy dat v C základní datové typy součást normy jazyka, preprocesor použití netypových maker, raději voĺıme konstanty d

Více

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

24-2-2 PROMĚNNÉ, KONSTANTY A DATOVÉ TYPY TEORIE DATUM VYTVOŘENÍ: 23.7.2013 KLÍČOVÁ AKTIVITA: 02 PROGRAMOVÁNÍ 2. ROČNÍK (PRG2) HODINOVÁ DOTACE: 1 24-2-2 PROMĚNNÉ, KONSTANTY A DATOVÉ TYPY TEORIE AUTOR DOKUMENTU: MGR. MARTINA SUKOVÁ DATUM VYTVOŘENÍ: 23.7.2013 KLÍČOVÁ AKTIVITA: 02 UČIVO: STUDIJNÍ OBOR: PROGRAMOVÁNÍ 2. ROČNÍK (PRG2) INFORMAČNÍ TECHNOLOGIE

Více

DTP Základy programování Úvod do předmětu

DTP Základy programování Úvod do předmětu DTP Základy programování 01 - Úvod do předmětu Úvod Co již umíte? Plán předmětu Studijní materiály Způsob ukončení předmětu Základní pojmy I. Řešený problém: Řešeným nebo zpracovávaným problémem je konkrétní

Více

VÝUKOVÝ MATERIÁL. Bratislavská 2166, 407 47 Varnsdorf, IČO: 18383874 www.vosassvdf.cz, tel. +420412372632 Číslo projektu

VÝUKOVÝ MATERIÁL. Bratislavská 2166, 407 47 Varnsdorf, IČO: 18383874 www.vosassvdf.cz, tel. +420412372632 Číslo projektu VÝUKOVÝ MATERIÁL Identifikační údaje školy Vyšší odborná škola a Střední škola, Varnsdorf, příspěvková organizace Bratislavská 2166, 407 47 Varnsdorf, IČO: 18383874 www.vosassvdf.cz, tel. +420412372632

Více

Pokročilé programování v jazyce C pro chemiky (C3220) Operátory new a delete, virtuální metody

Pokročilé programování v jazyce C pro chemiky (C3220) Operátory new a delete, virtuální metody Pokročilé programování v jazyce C pro chemiky (C3220) Operátory new a delete, virtuální metody Dynamická alokace paměti Jazyky C a C++ poskytují programu možnost vyžádat si část volné operační paměti pro

Více

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

9.3.2010 Program převod z desítkové na dvojkovou soustavu: /* Prevod desitkove na binarni */ #include <stdio.h> 9.3.2010 Program převod z desítkové na dvojkovou soustavu: /* Prevod desitkove na binarni */ #include int main(void) { int dcislo, kolikbcislic = 0, mezivysledek = 0, i; int vysledek[1000]; printf("zadejte

Více

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

IUJCE 07/08 Přednáška č. 6 Správa paměti Motivace a úvod v C (skoro vždy) ručně statické proměnné o datový typ, počet znám v době překladu o zabírají paměť po celou dobu běhu programu problém velikosti definovaných proměnných jak

Více

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

Programování v C++, 2. cvičení Programování v C++, 2. cvičení 1 1 Fakulta jaderná a fyzikálně inženýrská České vysoké učení technické v Praze Zimní semestr 2018/2019 Přehled 1 Operátory new a delete 2 3 Operátory new a delete minule

Více

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

Funkce, intuitivní chápání složitosti 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 Funkce, intuitivní

Více

6. lekce Úvod do jazyka C knihovny datové typy, definice proměnných základní struktura programu a jeho editace Miroslav Jílek

6. lekce Úvod do jazyka C knihovny datové typy, definice proměnných základní struktura programu a jeho editace Miroslav Jílek 6. lekce Úvod do jazyka C knihovny datové typy, definice proměnných základní struktura programu a jeho editace Miroslav Jílek 1/73 https://en.cppreference.com internetová stránka s referencemi https://gedit.en.softonic.com/download

Více

7 Formátovaný výstup, třídy, objekty, pole, chyby v programech

7 Formátovaný výstup, třídy, objekty, pole, chyby v programech 7 Formátovaný výstup, třídy, objekty, pole, chyby v programech Studijní cíl Tento studijní blok má za cíl pokračovat v základních prvcích jazyka Java. Konkrétně bude věnována pozornost formátovanému výstupu,

Více

PB161 Programování v jazyce C++ Přednáška 10

PB161 Programování v jazyce C++ Přednáška 10 PB161 Programování v jazyce C++ Přednáška 10 Šablony Nikola Beneš 27. listopadu 2017 PB161 přednáška 10: šablony 27. listopadu 2017 1 / 33 Šablony PB161 přednáška 10: šablony 27. listopadu 2017 2 / 33

Více

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

Programování v jazyce C pro chemiky (C2160) 12. Specifické problémy při vývoji vědeckého softwaru Programování v jazyce C pro chemiky (C2160) 12. Specifické problémy při vývoji vědeckého softwaru Reprezentace reálnách čísel v počítači Reálná čísla jsou v počítači reprezentována jako čísla tvaru ±x

Více

Algoritmizace a programování

Algoritmizace a programování Algoritmizace a programování Strukturované proměnné Pole (array), ukazatele (pointer) Jazyk C České vysoké učení technické Fakulta elektrotechnická Ver.1.10 J. Zděnek 2015 Pole (array) (1) Pole je množina

Více

Základy programování (IZP)

Základy programování (IZP) Základy programování (IZP) Šesté počítačové cvičení Brno University of Technology, Faculty of Information Technology Božetěchova 1/2, 612 66 Brno - Královo Pole Petr Veigend, iveigend@fit.vutbr.cz 6. týden

Více

Konstruktory překladačů

Konstruktory překladačů Konstruktory překladačů Miroslav Beneš Dušan Kolář Konstruktor Lex generátor lexikálních analyzátorů M. E. Lesk, 1975 - pro OS Unix flex - Vern Paxson, 1990 - GNU verze určeno pro generování výstupu v

Více

Pole a Funkce. Úvod do programování 1 Tomáš Kühr

Pole a Funkce. Úvod do programování 1 Tomáš Kühr Pole a Funkce Úvod do programování 1 Tomáš Kühr (Jednorozměrné) pole u Datová struktura u Lineární u Homogenní = prvky stejného datového typu u Statická = předem určený počet prvků u Pole umožňuje pohodlně

Více

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

Programování v jazyce C pro chemiky (C2160) 3. Příkaz switch, příkaz cyklu for, operátory ++ a --, pole Programování v jazyce C pro chemiky (C2160) 3. Příkaz switch, příkaz cyklu for, operátory ++ a --, pole Příkaz switch Příkaz switch provede příslušnou skupinu příkazů na základě hodnoty proměnné (celočíselné

Více

Zápis programu v jazyce C#

Zápis programu v jazyce C# Zápis programu v jazyce C# Základní syntaktická pravidla C# = case sensitive jazyk rozlišuje velikost písmen Tzv. bílé znaky (Enter, mezera, tab ) ve ZK překladač ignoruje každý příkaz končí ; oddělovač

Více

for (int i = 0; i < sizeof(hodnoty) / sizeof(int); i++) { cout<<hodonoty[i]<< endl; } cin.get(); return 0; }

for (int i = 0; i < sizeof(hodnoty) / sizeof(int); i++) { cout<<hodonoty[i]<< endl; } cin.get(); return 0; } Pole Kdybychom v jazyce C++chtěli načíst větší počet čísel nebo znaků a všechny bylo by nutné všechny tyto hodnoty nadále uchovávat v paměti počítače, tak by bylo potřeba v paměti počítače alokovat stejný

Více

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

VÝUKOVÝ MATERIÁL. Bratislavská 2166, Varnsdorf, IČO: tel Číslo projektu VÝUKOVÝ MATERIÁL Identifikační údaje školy Vyšší odborná škola a Střední škola, Varnsdorf, příspěvková organizace Bratislavská 2166, 407 47 Varnsdorf, IČO: 18383874 www.vosassvdf.cz, tel. +420412372632

Více

Programování v jazyce C pro chemiky (C2160) 4. Textové řetězce, zápis dat do souboru

Programování v jazyce C pro chemiky (C2160) 4. Textové řetězce, zápis dat do souboru Programování v jazyce C pro chemiky (C2160) 4. Textové řetězce, zápis dat do souboru Textové řetězce V jazyce C neexistuje typ proměnné, který by byl určen výhradně pro ukládání textu V jazyce C používáme

Více

Opakování programování

Opakování programování Opakování programování HW návaznost - procesor sběrnice, instrukční sada, optimalizace rychlosti, datové typy, operace (matematické, logické, podmínky, skoky, podprogram ) - paměti a periferie - adresování

Více

Šablony, kontejnery a iterátory

Šablony, kontejnery a iterátory 7. října 2010, Brno Připravil: David Procházka Šablony, kontejnery a iterátory Programovací jazyk C++ Šablony Strana 2 / 21 Šablona funkce/metody Šablona je obecný popis (třídy, funkce) bez toho, že by

Více

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

Výrazy a operátory. Operátory Unární - unární a unární + Např.: a +b Výrazy a operátory i = 2 i = 2; to je výraz to je příkaz 4. Operátory Unární - unární a unární + Např.: +5-5 -8.345 -a +b - unární ++ - inkrement - zvýší hodnotu proměnné o 1 - unární -- - dekrement -

Více

8 Třídy, objekty, metody, předávání argumentů metod

8 Třídy, objekty, metody, předávání argumentů metod 8 Třídy, objekty, metody, předávání argumentů metod Studijní cíl Tento studijní blok má za cíl pokračovat v základních prvcích jazyka Java. Konkrétně bude věnována pozornost třídám a objektům, instančním

Více

Abstraktní datové typy, moduly

Abstraktní datové typy, moduly Abstraktní datové typy, moduly BI-PA1 Programování a Algoritmizace 1 Miroslav Baĺık, Ladislav Vagner a Josef Vogel Katedra teoretické informatiky a Katedra softwarového inženýrství Fakulta informačních

Více

Základy programování (IZP)

Základy programování (IZP) Základy programování (IZP) Čtvrté počítačové cvičení Brno University of Technology, Faculty of Information Technology Božetěchova 1/2, 612 66 Brno - Královo Pole Petr Veigend, iveigend@fit.vutbr.cz 4.

Více

Objektově orientované programování

Objektově orientované programování 10. října 2011 Pragmatické informace Volitelný předmět, zápočet: zápočtový program(s dokumentací), aktivní účast na cvičení(body v CodExu), praktický test, zkouška: zkoušková písemka na objektový návrh

Více

Datové typy pro reálná čísla

Datové typy pro reálná čísla Datové typy pro reálná čísla V kapitole 2 jsme se seznámili s celočíselnými datovými typy. Pro uložení číselných hodnot ve velkém rozsahu obvykle nepožadujeme tak velkou přesnost, jakou nám poskytují celá

Více

Funkce pokročilé možnosti. Úvod do programování 2 Tomáš Kühr

Funkce pokročilé možnosti. Úvod do programování 2 Tomáš Kühr Funkce pokročilé možnosti Úvod do programování 2 Tomáš Kühr Funkce co už víme u Nebo alespoň máme vědět... J u Co je to funkce? u Co jsou to parametry funkce? u Co je to deklarace a definice funkce? K

Více

Základy programování. Úloha: Eratosthenovo síto. Autor: Josef Hrabal Číslo: HRA0031 Datum: 28.11.2009 Předmět: ZAP

Základy programování. Úloha: Eratosthenovo síto. Autor: Josef Hrabal Číslo: HRA0031 Datum: 28.11.2009 Předmět: ZAP Základy programování Úloha: Eratosthenovo síto Autor: Josef Hrabal Číslo: HRA0031 Datum: 28.11.2009 Předmět: ZAP Obsah 1 Zadání úkolu: 3 1.1 Zadání:............................... 3 1.2 Neformální zápis:.........................

Více

Iterační výpočty. Dokumentace k projektu č. 2 do IZP. 24. listopadu 2004

Iterační výpočty. Dokumentace k projektu č. 2 do IZP. 24. listopadu 2004 Dokumentace k projektu č. 2 do IZP Iterační výpočty 24. listopadu 2004 Autor: Kamil Dudka, xdudka00@stud.fit.vutbr.cz Fakulta Informačních Technologií Vysoké Učení Technické v Brně Obsah 1. Úvod...3 2.

Více

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

- jak udělat konstantu long int: L long velka = 78L; Konstanty (konstatní hodnoty) Např.: - desítkové: 25, 45, 567, 45.678 - osmičkové: 045, 023, 03 vždy začínají 0 - šestnáctkové: 0x12, 0xF2, 0Xcd, 0xff, 0xFF - jak udělat konstantu long int: 245566553L

Více

Střední škola pedagogická, hotelnictví a služeb, Litoměříce, příspěvková organizace

Střední škola pedagogická, hotelnictví a služeb, Litoměříce, příspěvková organizace Programování v jazyce C a C# část I. Střední škola pedagogická, hotelnictví a služeb, Litoměříce, příspěvková organizace Předmět: Algoritmizace a programování Téma: Programování Vyučující: Ing. Milan Káža

Více

Základy programování (IZP)

Základy programování (IZP) Základy programování (IZP) Druhé počítačové cvičení Brno University of Technology, Faculty of Information Technology Božetěchova 1/2, 612 66 Brno - Královo Pole Petr Veigend, iveigend@fit.vutbr.cz Verze

Více

Assembler - 5.část. poslední změna této stránky: Zpět

Assembler - 5.část. poslední změna této stránky: Zpět 1 z 5 19.2.2007 7:52 Assembler - 5.část poslední změna této stránky: 9.2.2007 1. Pseudoinstrukce a direktivy Zpět Kromě instrukcí můžete v Assembleru psát také další konstrukce, které se obšem nepřekládají

Více

Lekce 19 IMPLEMENTACE OPERAČNÍHO SYSTÉMU LINUX DO VÝUKY INFORMAČNÍCH TECHNOLOGIÍ JAZYK C

Lekce 19 IMPLEMENTACE OPERAČNÍHO SYSTÉMU LINUX DO VÝUKY INFORMAČNÍCH TECHNOLOGIÍ JAZYK C Identifikační údaje školy Číslo projektu Název projektu Číslo a název šablony Autor Tematická oblast Číslo a název materiálu Anotace Vyšší odborná škola a Střední škola, Varnsdorf, příspěvková organizace

Více

Jazyk C++ 1. Blok 3 Objektové typy jazyka C++ Třída. Studijní cíl. Doba nutná k nastudování. Průvodce studiem

Jazyk C++ 1. Blok 3 Objektové typy jazyka C++ Třída. Studijní cíl. Doba nutná k nastudování. Průvodce studiem Jazyk C++ 1 Blok 3 Objektové typy jazyka C++ Studijní cíl Ve třetím bloku bude představen a rozebrán nejdůležitější objektový typ jazyka C++ a to sice třída. Po absolvování bloku bude student schopen navrhovat

Více

Šablony, kontejnery a iterátory

Šablony, kontejnery a iterátory 11. března 2015, Brno Připravil: David Procházka Šablony, kontejnery a iterátory Programovací jazyk C++ Šablony Strana 2 / 31 Obsah přednášky 1 Šablony 2 Abstraktní datové struktury 3 Iterátory 4 Array

Více

PŘEDNÁŠKA KURZU BPC2A

PŘEDNÁŠKA KURZU BPC2A 1 PŘEDNÁŠKA KURZU BPC2A Rozšíření jazyka C, ISO C99, ISO C11 M. Richter (email: richter@feec.vutbr.cz) P. Petyovský (email: petyovsky@feec.vutbr.cz) 2 Standardní hlavičkový soubor matematické knihovny

Více

Např.: // v hlavičkovém souboru nebo na začátku // programu (pod include): typedef struct { char jmeno[20]; char prijmeni[20]; int rok_nar; } CLOVEK;

Např.: // v hlavičkovém souboru nebo na začátku // programu (pod include): typedef struct { char jmeno[20]; char prijmeni[20]; int rok_nar; } CLOVEK; Struktury - složený datový typ. - datový typ jehož položky jsou jiné proměnné: - používá obvykle dohromady s příkazem typedef nechci vypisovat opakovaně složitou deklaraci pomocí typedef udělám nový datový

Více

Mělká a hluboká kopie

Mělká a hluboká kopie Karel Müller, Josef Vogel (ČVUT FIT) Mělká a hluboká kopie BI-PA2, 2011, Přednáška 5 1/28 Mělká a hluboká kopie Ing. Josef Vogel, CSc Katedra softwarového inženýrství Katedra teoretické informatiky, Fakulta

Více