10. Sana va vaqt bilan ishlash


Sana va vaqtni formatlash


Download 98.92 Kb.
bet2/2
Sana12.03.2023
Hajmi98.92 Kb.
#1264849
1   2
Bog'liq
10.Sana va vaqt bilan ishlash

10.2. Sana va vaqtni formatlash


Quyidagi funksiyalar sana va vaqtni formatli chiqarishni ta’minlaydi:
asctime() – maxsus fotmatdagi С-satrga ko‘rsatkich yoki xatolik yuzaga kelganda nol ko‘rsatkich qaytaradi. Satr oxiriga satrni ko‘chirish (\n) va nol-belgi (\0) qo‘yiladi. Funksiyaning prototipi:
#include
char *asctime(const struct tm *Tm);
Funksiyadan foydalanishga misol:
tm ptm;
char *p = 0;
time_t t = time(0);
errno_t err = localtime_s(&ptm, &t);
if(err) {
cout << "Xato" << endl;
exit(1);
}
p = asctime(&ptm);
if(!p) {
cout << "Xato" << endl;
exit(1);
}
cout << p << endl;

asctime() funksiyasi ogohlantiruvchi xabar ("warning С4996") chiqaganligi uchun uning o‘rniga asctime_s() funksiyasidan foydalanish tavsiya qilinadui. Funksiyaning prototipi:
#include
errno_t asctime_s(char *Buf, size_t SizelnBytes,
const struct tm *Tm);
Birinchi parametrda ko‘rsatkich satrga uzatiladi, ikkinchi parametrda satrning maksimal uzunligi, uchunchi parametrda esa tm strukturaga ko‘rsatkich. Agar xatolik bo‘lmasa, funksiya nol qaytaradi. Xatolik yuzaga kelganda EINVAL makrosining qiymati (qiymati: 22) qaytariladi. Funksiyadan foydalanishga misol:
tm ptm;
const short SIZE = 80;
char str[SIZE] = {0};
time_t t = time(0);
errno_t err = localtime_s(&ptm, &t);
if(err) {
cout << "Xato" << endl;
exit(1);
}
err = asctime_s(str, SIZE, &ptm);
if(err) {
cout << "Xato" << endl;
exit(1);
}
cout << str << endl;

ctime()asctime() funksiyasi bilan bir xil, ammo parametr sifatida 1970-yil 1-yanvardan boshlab o‘tgan sekundlar sonini oladi. Funksiya prototipi quyidagicha ko‘rinishga ega:
#include
char *ctime(const time_t *Time);
Funksiyadan foydalanishga misol:
char *p = 0;
time_t t = time(0);
p = ctime(&t);
if(!p) {
cout << "Xato" << endl;
exit(1);
}
cout << p << endl;

Funksiya ogohlantiruvchi xabar ("warning С4996") chiqariladi, shu sababli uning o‘rniga ctime_s() funksiyasidan foydalanish tavsiya qilinadi. Funksiya prototipi:
#include
errno_t ctime_s(char *Bufer, size_t SizelnBytes,
const time_t *Time);
Xatoliklar bo‘lmasa, funksiya "0" qaytaradi. Xatoliklar mavjud bo‘lganda EINVAL makrosi qiymati qaytariladi. Funksiyadan foydalanishga misol:
const short SIZE = 80;
char str[SIZE] = {0};
time_t t = time(0);
errno_t err = ctime_s(str, SIZE, &t);
if(err) {
cout << "Xato" << endl;
exit(1);
}
cout << str << endl; // Natija: Mon Jan 09 22:57:04 2017\n\0
strftime() – sananing satrli ko‘rinishini Buf С-satrga mos holda formatli yozadi. Funksiya prototipi:
#include
size_t strftime(char *Buf, size_t SizelnBytes,
const char *Format, const struct tm *Tm);
Birinchi parametrda, funksiyaning bajarilishi yoziladigan, belgili massivga ko‘rsatkich uzatiladi. SizelnBytes parametrida belgili massivning maksimal uzunligi beriladi. Format parametrida maxsus format satri ko‘rsatiladi, so‘nggi parametrda taqdim etilgan vaqt bilan tm strukturaga ko‘rsatkich uzatiladi. Funksiya yozilgan belgilar sonini qaytaradi. Xatolik yuzaga kelganda errno o‘zgaruvchisi EINVAL makrosiga teng deb o‘rnatiladi.
strftime() funksiyasidan foydalanishga misol tariqasida joriy sana va vaqtni chiqarish dasturini ko‘raylik.
#include
#include
#include
int main() {
setlocale(LC_ALL, "Russian_Russia.1251");
tm ptm;
const short SIZE = 100;
char str[SIZE] = {0};
time_t t = time(0);
int err = localtime_s(&ptm, &t);
if(err) {
cout << "Xato" << endl; exit(1);
}
err = strftime(str, SIZE,"Сегодня:\n%A %d %b %Y %H:
%M:%S\n%d.%m.%Y", &ptm);
if(!err) {
cout << "Xato" << endl;
exit(1);
}
cout << str << endl;
cin.get();
return 0;
}

Dasturning bajarilishini to‘xtatib turish. sleep() Win API-funksiyasi dasturning bajarilish jarayonini ko‘rsatilgan vaqt davomida to‘xtatib turush imkonini beradi. Vaqt tugaganidan so‘ng, dastur ishini davom ettiradi. Funksiyaning prototipi:
#include
void Sleep(DWORD dwMilliseconds) ;
Funksiyaning dvMilliseconds parametrida dasturning bajarilishi qancha vaqtga to‘xtab turishi millisekundlarda ko‘rsatiladi. DWORD berilganlar tipi quyidagicha aniqlangan:
typedef unsigned long DWORD;
Misol tariqasida 1 dan 10 gacha sonlarni chiqaramiz. Sonlarni chiqarish oralig‘ida bir sekundga “to‘xtaymiz”. Dastur listinggi quyidagicha ko‘rinishga ega bo‘ladi:
#include
#include Windows.h>
int main() {
for(int i = 1; i <= 10; ++i) {
cout << "\r... " << i << "%";
Sleep(1000); // 1 sekundga “to‘xtaydi”
}
cout << "\rTamom" << endl;
cin.get() ;
return 0;
}

10.3. Kod qismining bajarilish vaqtini oʻlchash


Ba’zi hollarda kod parchalarining (masalan dasturni optimallashtirish maqsadida) bajarilish vaqtini o‘lchashga to‘g‘ri keladi. Buning uchun clock() funksiysidan foydalaniladi. Funksiyaning prototipi quyidagicha:
#include clock_t clock(void);
Bu funksiya funksiya chaqirilgunga qadar dastur bajarilishining taxminiy qiymatini qaytaradi. Agar vaqtni olish imkoniyati bo‘lmasa, funksiya "-1" qiymat qaytaradi. Dastur qismining (dasturning) bajarilish vaqtini o‘lchash uchun funksiya parchadan oldin chaqilishi va natijani saqlashi lozim. So‘ngra funksiya parchadan keyin chaqiriladi va ikki qiymat orasidagi farq hisoblanadi. Qiymatni sekundlarda olish uchun natijani CLOCKS_PER_SEC makrosi qiymatiga bo‘lish kerak. Makrosning aniqlanishi quyidagicha ko‘rinishga ega:
#define CLOCKS_PER_SEC 1000
Misol uchun, Sleep() WinAPI-funksiyasi yordamida kod qismining bajarilishini imitatsiya qilamiz va bajarilish vaqtini o‘lchaymiz.
#include
#include
#include
int main() {
clock_t t1, t2, t3;
t1 = clock(); // 1-metka
cout << "t1 = " << t1 << endl;
Sleep(2000); // Kod fragmentini imitatsiyalash
t2 = clock(); // 2-metka
cout << "t2 = " << t2 << endl;
t3 = t2 – t1; // Metkalar orasidagi farq
cout << "t3 = " << t3 << endl;
cout << (t3 / CLOCKS_PER_SEC) << "sec." << endl;
cin.get();
return 0;
}



Download 98.92 Kb.

Do'stlaringiz bilan baham:
1   2




Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©fayllar.org 2024
ma'muriyatiga murojaat qiling