C99 základní informace o standardu programovacího jazyka C Výpočty v přesné aritmetice
|
|
- Filip Marcel Jelínek
- před 5 lety
- Počet zobrazení:
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 Josef Dobeš Katedra radioelektroniky (13137), blok B2, místnost 722 dobes@fel.cvut.cz 15. května 2017 Praktické programování
VícePreprocesor. 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íceOperač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íceIUJCE 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ícePROGRAMOVÁ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íceProgramová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íceAlgoritmizace 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íceZPRO 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í
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íceVÝ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íceC++ 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íceZá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íceOperač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ícePří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íceJazyk 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íce2 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íceMartin 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íceProgramovací 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ícePř. 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íceZá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íce1. 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íceC++ 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íceUkazatele, 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íce8. 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íce9. 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ícePokroč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íce2 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ícefor (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ícePreprocesor 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íceOdvozené 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íceAbstraktní 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íceIUJCE 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íceC++ 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íceObsah. 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íce1. 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íceMnož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ícepř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ícePB161 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íceDí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íceLekce 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) 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íceKoncepce (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íceAlgoritmizace 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íceStř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íceIUJCE 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 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íceZá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íceZá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íceZá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ícePROGRAMOVÁ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ícepř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íceDě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íceDatové 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íceint => 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íceZá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íceSysté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íceTří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íce24-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íceDTP 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íceVÝ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ícePokroč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íce9.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íceIUJCE 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íceProgramová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íceFunkce, 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íce6. 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íce7 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ícePB161 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íceProgramová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íceAlgoritmizace 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íceZá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íceKonstruktory 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ícePole 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íceProgramová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íceZá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ícefor (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íceVÝ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íceProgramová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íceOpaková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
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íceVý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íce8 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íceAbstraktní 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íceZá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íceObjektově 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íceDatové 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íceFunkce 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íceZá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íceIterač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;
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íceStř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íceZá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íceAssembler - 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íceLekce 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íceJazyk 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
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ícePŘ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íceNapř.: // 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íceMě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