10. Sana va vaqt bilan ishlash
Sana va vaqtni formatlash
Download 98.92 Kb.
|
1 2
Bog'liq10.Sana va vaqt bilan ishlash
- Bu sahifa navigatsiya:
- 10.3. Kod qismining bajarilish vaqtini oʻlchash
10.2. Sana va vaqtni formatlashQuyidagi 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ʻlchashBa’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 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
ma'muriyatiga murojaat qiling