- •1. Кроки для створення виконання програми
- •2. Змінні та константи
- •3. Символьні масиви і рядки
- •4. Директиви препроцесора
- •Тема 2: введення-виведення даних план
- •Аргументи для setiosflags і resetiosflags
- •2. Функція printf
- •2. Операції відношення
- •3. Логічні операції
- •4. Додаткові операції
- •5. Порозрядні операції
- •Тема 4: організація циклів план
- •1. Організація циклів за допомогою while і do...While
- •2. Організація циклів із використанням оператора for
- •3. Оператори switch і goto
- •Тема 5: створення функцій план
- •1. Створення функцій
- •2. Видимість змінних
- •3. Передача значень
- •4. Повертаємі значення і прототипи функцій
- •Тема 6: зовнішні пристрої і символьне введення/виведення план
- •1. Загальна концепція
- •2. Функції символьного введення-виведення
- •3. Символьні функції
- •4. Рядкові функції
- •5. Числові функції
- •6. Функції роботи з датою та часом
- •Тема 7: масиви план
- •1. Одномірні масиви, їхня ініціалізація
- •2. Сортування масивів
- •3. Розміщення одномірного масиву в пам’яті
- •4. Багатомірні масиви і їхнє розміщення в пам’яті
- •Тема 8. Вказівки і посилання план
- •1. Вказівки
- •2. Масиви і вказівки
- •Тема 9: робота з файлами план
- •1. Загальна характеристика роботи з файлами
- •2. Послідовні файли
- •Можливі режими доступу
- •3. Файли довільного доступу (із випадковим доступом)
- •Тема 10. Структури план
- •1. Загальна характеристика структури
- •2. Масиви структур
- •3. Використання масивів, як елементів структур
- •2. Робота зі структурами є універсальною, передбачено додавання записів до файлу (флаг ios:app). Для підрахунку кількості структур на диску приведемо наступні рядки програми:
- •Список літератури
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);