Verze 2009 01 14 Standardn knihovn funkce matematika

  • Slides: 33
Download presentation
Verze 2009. 01 14 Standardní knihovní funkce: matematika a datum a čas A 1

Verze 2009. 01 14 Standardní knihovní funkce: matematika a datum a čas A 1 PRG - Programování – Seminář Ing. Michal Heczko heczko@fai. utb. cz

Agenda Matematické funkce Datum a čas Generátor náhodných čísel

Agenda Matematické funkce Datum a čas Generátor náhodných čísel

Matematické funkce Hlavičkový soubor math. h Parametry funkci typu double

Matematické funkce Hlavičkový soubor math. h Parametry funkci typu double

Goniometrické funkce Nutno použít velikost úhlu v radiánech ! Funkce Popis sin(x) Sinus x

Goniometrické funkce Nutno použít velikost úhlu v radiánech ! Funkce Popis sin(x) Sinus x cos(x) Kosinus x tan(x) Tangens x asin(x) Arkussinus x acos(x) Arkuskosinus x atan(x) Arkustangens x atan 2(x, y) Arkustangens x/y sinh(x) Hyperbolický sinus x cosh(x) Hyperbolický kosinus x tanh(x) Hyperbolický tangens x

Zaokrouhlování Funkce Popis ceil(x) Zaokrouhlení na celé číslo nahoru floor(x) Zaokrouhlení na celé číslo

Zaokrouhlování Funkce Popis ceil(x) Zaokrouhlení na celé číslo nahoru floor(x) Zaokrouhlení na celé číslo dolů

Zaokrouhlování Omezení: Nutnost zaokrouhlení pouze na jednotky Př. : Zaokrouhlení na 3 desetinná místa

Zaokrouhlování Omezení: Nutnost zaokrouhlení pouze na jednotky Př. : Zaokrouhlení na 3 desetinná místa x = floor(y*1000)/1000; Zaokrouhlení pouze nahoru nebo pouze dolů => nemožnost zaokrouhlit podle matematických pravidel Př. : Zaokrouhlení dle matematických pravidel x = floor(y+0. 5);

Exponenciální funkce, logaritmus, mocniny Funkce Popis exp(x) ex log(x) ln x log 10(x) log

Exponenciální funkce, logaritmus, mocniny Funkce Popis exp(x) ex log(x) ln x log 10(x) log x pow(x, y) xy sqrt(x) Druhá odmocnina z x Pozn. : Třetí a vyšší odmocnina: např. pow(x, 1. 0/3. 0);

Další matematické funkce Funkce Popis fabs(x) Absolutní hodnota ldexp(x, n) x*2 n frexp(x, exp)

Další matematické funkce Funkce Popis fabs(x) Absolutní hodnota ldexp(x, n) x*2 n frexp(x, exp) Rozdělí číslo na mantisu a mocninu 2 Pozn. exp … adresa proměnné, do které má být uložen exponent mocniny modf(x, n) Rozdělí číslo na celou a desetinnou část Pozn. N … adresa proměnné, do které má být uložena celá část fmod(x, y) Reálný zbytek po dělení x/y

Další matematické funkce Příklad použití funkce modf(): double g, f; f = modf(-3. 14,

Další matematické funkce Příklad použití funkce modf(): double g, f; f = modf(-3. 14, &g); printf(″%f | %f″, f, g); // vypíše: -3. 000000 | -0. 140000

Generování náhodných čísel Knihovna stdlib. h Možno generovat celá náhodná čísla s rovnoměrným rozdělením

Generování náhodných čísel Knihovna stdlib. h Možno generovat celá náhodná čísla s rovnoměrným rozdělením Pseudonáhodný generátor – bez inicializace generuje stejnou posloupnost po každém spuštění Funkce: void srand(unsigned int seed) int rand() - inicializace - generování

Generování náhodných čísel Příklad: int cislo; srand((unsigned int) time(NULL)); cislo = (rand() % MAX);

Generování náhodných čísel Příklad: int cislo; srand((unsigned int) time(NULL)); cislo = (rand() % MAX); printf("Nahodne cislo: t%d", cislo);

Datum a čas Hlavičkový soubor time. h Důležité datové typy a konstanty (1. část):

Datum a čas Hlavičkový soubor time. h Důležité datové typy a konstanty (1. část): CLK_TCK … … clock_t … konstanta počet procesorových tiků za sekundu, v dnešní době se již nepoužívá čtyřbytové celé znaménkové číslo (long) sloužící pro funkci clock()

Datum a čas Hlavičkový soubor time. h Důležité datové typy a konstanty (2. část):

Datum a čas Hlavičkový soubor time. h Důležité datové typy a konstanty (2. část): time_t … tm … čtyřbytové celé znaménkové číslo (long) sloužící pro ostatní funkce z time. h struktura pro uložení jednotlivých složek času

Datum a čas Položky struktury tm: int tm_sec … sekundy po minutě (0 –

Datum a čas Položky struktury tm: int tm_sec … sekundy po minutě (0 – 59) int tm_min … minuty po hodině (0 – 59) int tm_hour … hodiny od půlnoci (0 – 23) int tm_isdst … příznak letního času (0 – normální čas, >0 – letní čas, <0 – nelze určit)

Datum a čas Položky struktury tm: int tm_mday … den v měsíci (1 –

Datum a čas Položky struktury tm: int tm_mday … den v měsíci (1 – 31) int tm_mon … měsíc od ledna (0 – 11) int tm_year … rok od 1900 (1900 – 2038) int tm_wday … den od neděle (0 - 6) int tm_yday … počet dnů od 1. ledna (0 - 366)

Datum a čas Funkce clock() Návratová počet hodnota: tiků procesoru Syntaxe: clock_t clock (

Datum a čas Funkce clock() Návratová počet hodnota: tiků procesoru Syntaxe: clock_t clock ( void ); Využití: Zjištění doby trvání programu – dnes se však nepoužívá kvůli nepřesnosti

Datum a čas Příklad použití funkce clock(): #include <stdio. h> #include <time. h> void

Datum a čas Příklad použití funkce clock(): #include <stdio. h> #include <time. h> void wait ( int seconds ) { clock_t endwait; endwait = clock () + seconds * CLOCKS_PER_SEC ; while (clock() < endwait) {} } int main () { int n; printf ("Starting countdown. . . n"); for (n=10; n>0; n--) printf ("%dn", n); wait (1); } return 0; } {

Datum a čas Funkce time() Návratová počet hodnota: sekund od 1. 1. 1970 Syntaxe:

Datum a čas Funkce time() Návratová počet hodnota: sekund od 1. 1. 1970 Syntaxe: time_t time ( time_t * timer ); Parametr: Ukazatel na objekt typu time_t, do kterého je uložena hodnota času. Možno použít NULL a hodnota času bude pouze v návratové hodnotě

Datum a čas #include <stdio. h> #include <time. h> int main () { time_t

Datum a čas #include <stdio. h> #include <time. h> int main () { time_t seconds; seconds = time (NULL); printf ("%ld hodin od 1. 1. 1970", seconds/3600); return 0; }

Datum a čas Funkce difftime() Návratová Rozdíl hodnota: dvou časových údajů v sekundách Syntaxe:

Datum a čas Funkce difftime() Návratová Rozdíl hodnota: dvou časových údajů v sekundách Syntaxe: double difftime ( time_t time 2, time_t time 1 ); Parametry 2 časové údaje datového typu time_t Využití: Přibližné měření času

Datum a čas Funkce localtime() Na základě hodnoty typu time_m vytvoří strukturu tm pro

Datum a čas Funkce localtime() Na základě hodnoty typu time_m vytvoří strukturu tm pro místní časovou zónu Návratová hodnota: Ukazatel na strukturu tm Syntaxe: struct tm * localtime ( const time_t * timer );

Datum a čas Funkce gmtime() Na základě hodnoty typu time_m vytvoří strukturu tm pro

Datum a čas Funkce gmtime() Na základě hodnoty typu time_m vytvoří strukturu tm pro časovou zónu UTC Návratová hodnota: Ukazatel na strukturu tm Syntaxe: struct tm * gmtime( const * timer ); time_t

Datum a čas Funkce asctime() Na základě hodnoty typu tm vytvoří řetězec ve formátu

Datum a čas Funkce asctime() Na základě hodnoty typu tm vytvoří řetězec ve formátu Sat May 20 15: 21: 51 2000 Návratová Ukazatel hodnota: na řetězec Syntaxe: char * asctime ( const struct tm * timeptr );

Datum a čas Funkce ctime() Na základě hodnoty typu time_m vytvoří řetězec ve formátu

Datum a čas Funkce ctime() Na základě hodnoty typu time_m vytvoří řetězec ve formátu Sat May 20 15: 21: 51 2000 Návratová Ukazatel hodnota: na řetězec Syntaxe: char * ctime ( const time_t * timer );

Datum a čas Funkce mktime() Funkce provede konverzi ze struktury tm na datový typ

Datum a čas Funkce mktime() Funkce provede konverzi ze struktury tm na datový typ time_t Syntaxe: time_t mktime ( struct tm * timeptr ); Vstupní hodnota: Ukazatel na strukturu tm Návratová Hodnota hodnota: typu time_t

Datum a čas Funkce strftime() Převod data ze struktury tm na formátovaný řetězec Syntaxe:

Datum a čas Funkce strftime() Převod data ze struktury tm na formátovaný řetězec Syntaxe: size_t strftime ( char * ptr, size_t maxsize, const char * format, const struct tm * timeptr );

Datum a čas Funkce strftime() Vstupní hodnoty: char * ptr size_t maxsize const char

Datum a čas Funkce strftime() Vstupní hodnoty: char * ptr size_t maxsize const char * format struct tm * timeptr Návratová Počet … ukazatel na cílový řetězec … maximální délka řetězce … formát generovaného řetězce. . . Zdrojová struktura tm hodnota: zapsaných znaků do cílového řetězce. Pokud došlo k chybě, tak NULL

Datum a čas Funkce strftime() Formátovací řetězec – řídící znaky Formát Popis Příklad %a

Datum a čas Funkce strftime() Formátovací řetězec – řídící znaky Formát Popis Příklad %a Zkratka dne v týdnu Thu %A Plný název dne v týdnu Thursday %b Zkratka měsíce Aug %B Plný název měsíce August %c Standardní formát data a času Thu Aug 23 14: 55: 02 2001 %d Den v měsíci (01 – 31) 23 %H Hodiny ve 24 -hodinovém formátu (00 – 23) 14 %I Hodiny ve 12 -hodinovém formátu (00 – 12) 02

Datum a čas Funkce strftime() Formátovací řetězec – řídící znaky Formát Popis Příklad %j

Datum a čas Funkce strftime() Formátovací řetězec – řídící znaky Formát Popis Příklad %j Den v roce (0 – 366) 235 %m Pořadové číslo měsíce (00 – 12) 08 %M Minuty (00 – 59) 55 %p AM / PM PM %S Sekundy (00 – 59) 02 %U Číslo týdne (00 – 53) – týden začíná nedělí 33 %w Číslo dne v týdnu (0 – 0) – týden začíná nedělí, neděle == 0 4 %W Číslo týdne (00 – 53) – týden začíná pondělím 34

Datum a čas Funkce strftime() Formátovací řetězec – řídící znaky Formát Popis Příklad %x

Datum a čas Funkce strftime() Formátovací řetězec – řídící znaky Formát Popis Příklad %x Datum 08/23/01 %X Čas 14: 55: 02 %y Rok (dvouciferný) 01 %Y Rok (čtyřciferný) 2001 %Z Časová zóna CDT %% Znak „%“ %

Datum a čas #include <stdio. h> #include <time. h> int main () { time_t

Datum a čas #include <stdio. h> #include <time. h> int main () { time_t rawtime; struct tm * timeinfo; char buffer [80]; time ( &rawtime ); timeinfo = localtime ( &rawtime ); strftime (buffer, 80, "Práve je %I: %M%p. ", timeinfo); puts (buffer); // Prave je 03: 21 PM. return 0; }

Závěrem Šest zákonů o programování: 1. 2. 3. 4. 5. 6. V každém programu

Závěrem Šest zákonů o programování: 1. 2. 3. 4. 5. 6. V každém programu je alespoň jedna chyba Každý program lze zkrátit alespoň o jeden řádek Nejjednodušší chyby se nejhůře hledají Každou opravou se do programu zanese nová chyba Když už se zdá, že je program v pořádku, určitě jsme něco přehlédli Programátor dělá, co umí. Počítač si dělá, co chce.

A 1 PRG-s 14. Datum a čas, … Děkuji za pozornost Ing. Michal Heczko

A 1 PRG-s 14. Datum a čas, … Děkuji za pozornost Ing. Michal Heczko heczko@fai. utb. cz 218/U 3 Prezentace k dispozici na http: //vyuka. fai. utb. cz