Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
C++ Metod_new.doc
Скачиваний:
3
Добавлен:
10.11.2019
Размер:
939.52 Кб
Скачать

5. Числові функції

Прототипи – math. h.

ceil(x) – повертає найближче більше ціле число.

fabs(x) – повертає абсолютне значення x.

floor(x) – повертає найближче менше ціле число.

fmod(x,y) – повертає число з плаваючою точкою, що є залишком від ділення x на y, із тим же знаком, що і x. Аргумент y не може бути нулем.

На відміну від оператора обчислення модуля (%), що працює тільки з цілими числами, функція fmod дозволяє знаходити залишок від ділення чисел із плаваючою точкою.

pow(x,y) – повертає значення x y; якщо x <= 0, то y повинен бути цілим. Якщо x=0, то y не може бути від’ємним.

sqrt(x) – повертає значення

exp(x) – повертає значення eх

log(x) – повертає значення ln x

log10(x) – повертає значення lg x

Тригонометричні функції.

cos(x) → cos x

sin(x) sin x

tan(x) tg x

acos(x) → arccos x

asin(x) → arcsin x

atan(x) → arctg x

atan2(y, x) → arctg (y/x)

При обчисленні тригонометричних функцій, кути (аргумент функцій cos, sin і tan, а також значення зворотних тригонометричних функцій acos, asin, atan і atan2) виражаються в радіанах.

Аргументи x, y і повертаємі значення числових функцій мають тип double. Якщо до імені функції додати символ l аргументи і повертаємі значення будуть мати тип long double. Наприклад: функції fabsl, powl, sinl, atanl і т.п.

Функції генерації випадкових чисел.

Прототипи stdlib. h

rand() – повертає псевдовипадкове ціле число в діапазоні від 0 до 32767.

random(x) – повертає псевдовипадкове ціле число в діапазоні від 0 до (x-1) (не має місця у Visual C++).

Якщо потрібний інший набір випадкових чисел, використовується функція srand(seed), де seed – ціла зміна або константа.

Якщо необхідно при кожному запуску програми генерувати різноманітну множину випадкових чисел, можна використовувати функцію randomize() (не має місця у Visual C++). Вона реалізована як макропідстановка, що викликає функцію time(), тому необхідно включати файл time.h.

6. Функції роботи з датою та часом

При розробці програмного забезпечення виникає необхідність роботи з датою та часом. Під датою будемо розуміти рік, місяць, день місяця. Під часом – години, хвилини, секунди та мілісекунди. У програмуванні виникають такі основні задачі роботи з датою, як отримання поточної дати та часу, арифметичні операції з датою та часом, використовуючи структури роботи з датою. Для роботи з датою та часом до головної програми необхідно включити хайдер <time.h>. Для розширеної роботи з функціями часу, а саме робота з мілісекундами, необхідно підключити хайдер <sys\timeb.h>.

Головна структура роботи з датою та часом – це структура tm.

struct tm

{

int tm_sec; /* Секунди */

int tm_min; /* Хвилини */

int tm_hour; /* Години (0--23) */

int tm_mday; /* День місяця (1--31) */

int tm_mon; /* Місяць (0--11) */

int tm_year; /* Рік (календарний рік мінус 1900) */

int tm_wday; /* День тижня (0--6; Неділя = 0) */

int tm_yday; /* День року (0--365) */

int tm_isdst; /* відмінний від 0, якщо світло денне */

};

Елементи цієї структури можна проініціалізувати самостійно, або заповнити її поточною датою та часом, що приведено в наступному прикладі.

# include <iostream.h>

# include <string.h>

# include <stdio.h>

# include <time.h> //time

# include <sys\timeb.h> // timeb

void main()

{

char str[50];

time_t time1;

struct tm *tm1;

time(&time1); // time1 кількість секунд з 1970 р.

printf("%ld second\n",time1);

tm1 = localtime(&time1);

printf("%d year\n",tm1->tm_year);

printf("%d hour\n",tm1->tm_hour);

printf("%d minutes\n",tm1->tm_min);

printf("%d sec\n",tm1->tm_sec);

strcpy(str, asctime(tm1));

printf("%s\n", str);

}

У даному прикладі оголошується змінна t1 типу time_t, що є еквівалентним типу даних long. Функція time(), у яку передається вказівка на структуру tm1 (тип tm), повертає кількість секунд, починаючи з 1970-го року. Функція localtime() – генерує з цієї кількості секунд структуру tm1.

Cкажімо, якщо поточна дата – 24 січня 2008 року, а час 14.35.15, тоді буде мати місце наступний результат:

1201203428 second

108 year

14 hour

35 minutes

15 sec

Зауважимо, що рік розраховується відносно 1900 року, тому змінна year структури tm1 дорівнюватиме 108.

Якщо необхідно отримати дату з часом у якості рядку (масиву символів char) треба використати функцію asctime(), входом у яку є структура типу tm.

Для отримання рядку з датою або з часом використовують функції, відповідно char *_strdate(char*s1), char *_strtime(char*s1).

У наступному прикладі виводиться поточна дата та час.

# include <iostream.h>

# include <stdlib.h>

# include <stdio.h>

# include <time.h> //time

# include <sys\timeb.h> // timeb

void main()

{

char buf[15];

_strdate(buf);

cout<<"date "<<buf<<"\n";

_strtime(buf);

cout<<"time "<<buf<<"\n";

}

Існують моменти, коли треба деталізувати, включаючи мілісекунди. Особливо це важливо, коли треба перевіряти ефективність за часом тих або інших операцій. З цією метою використовується структура timeb.

struct timeb

{

long time ; //кількість секунд починаючи з 1970 року

short millitm ; // кількість мілісекунд

short _timezone ; // відмінність у хвилинах за Грінвічем та місцевим часом

short dstflag ; // відмінний від 0, якщо світло денне

};

Нижче приведемо приклад аналізу, який показує скільки часу треба на те, щоб пройшов порожній цикл з 100000000 ітерацій. Даний приклад є дуже корисним для аналізу швидкодії алгоритмів, різноманітних технологій тощо.

# include <iostream.h>

# include <stdlib.h>

# include <stdio.h>

# include <time.h> //time

# include <sys\timeb.h> // timeb

void main()

{

struct timeb timebuffer;

ftime( &timebuffer );

double nach = timebuffer.time+timebuffer.millitm/1000.0;

for(long i=1;i<100000000;i++);

ftime( &timebuffer );

double conec = timebuffer.time+timebuffer.millitm/1000.0;

printf("Kol-vo1 %f sec\n",conec - nach);

}

Функція ftime() у даному прикладі заповнює структуру timebuffer типу timeb. Потім у змінну nach записуємо кількість секунд з 1970 року з врахуванням мілісекунд, та зчитуємо відповідну кількість секунд після циклу в 100000000 ітерацій в змінну conec. Різниця цих змінних і дасть нам кількість секунд на експериментальну операцію з урахуванням мілісекунд.

Якщо необхідно провести різноманітні операції з датами: віднімання дат, додавання певної кількості днів і т.і., треба перевести дати в секунди відносно 1970 року. Для цього призначена функція mktime.

Її синтаксис наступний.

time_t mktime(struct tm *t);

Для зворотного переведення секунд до структури tm використовується функція localtime() з наступним синтаксисом:

struct tm *localtime(const time_t *timer);

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]