الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

من يوضح لنا هذا الكود باستخدام time.h

مغلق
بدأه eias في 20 سبتمبر 2005 · 6 رد · 684 مشاهدة · في الأسئلة المجابة
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم ..لقد وجدت هذا الكود بموقع اجنبي و مكتوب عنه انه يقوم بالعد التنازلي..ولكن المشكلة إني لم افهم جيدا ثوابته لأني

أول مرة أشوفها..ممكن شخص كريم يوضحه سطر سطر ..الكود هو

#include <stdio.h>
#include <time.h>

void wait ( int seconds )
{
  clock_t endwait;
  endwait = clock () + seconds * CLK_TCK;
  while (clock() < endwait) {}
}

int main ()
{
  int n;
  printf ("Starting countdown...\n");
  for (n=10; n>0; n--)
  {
    printf ("%d\n",n);
    wait (1);
  }
  printf ("FIRE!!!\n");
  return 0;
}

وشكرا

#2

ممكن نشوف الملف time.h ?

بالنسبة لداخل main :

عمل لووب بتعد تنزالي من 10 إلي 0 و بينقص واحد ، و في كل مرة تنفيذ للحلقة يقوم بالتأخير واحد ثانية (1)wait

BEng , Electronics and communications.

Embedded systems engineer.

Graphics Programmer

عالم الكومبيوتر هو من لديه المعرفة في علوم الكومبيوتر ، الرياضيات ، هندسة الالكترونيات -احمد صالح

#3

هذا هو ملف time .h الخاص بمترجم vc++6

ويوجد به الدوال المذكورة بالكود

TIME.zip

#4

بالنسبة للــ

void wait ( int seconds )
{
 clock_t endwait;
 endwait = clock () + seconds * CLK_TCK;
 while (clock() < endwait) {}
}

بداية أقول....الوقت بالثواني هو: القيمة التي نحصل عليها من clock مقسما على CLK_TCK

أو بمعنى آخر أن المتغير الذي سيرجع لنا بعد تنفيذ الــclock سيكون مخزونا في متغير من نوع clock_t ......و هو يساوي الوقت الذي مر منذ بداية تشغيل البرنامج محسوبا بــ(الوقت الذي مر بالثواني مضروبا في CLK_TCK)

فما نفعله في الكود الذي في الأعلى هو أننا في البداية نعرف المتغير endwait

ثم نخزن فيه قيمة الوقت بعد ثانية من الآن.......حيث أن الــ()clock سيرجع لنا الوقت الآن.....و نضيف له seconds * CLK_TCK (أي ثانية أضافية).

ثم بعد ذلك يدخل البرنامج في جملة while و لا يخرج منها الا بعد مرور ثانية.......حيث في كل مرة يأخذ الوقت الحالي الذي حصل عليه من ()clock و يقارنه بقيمة الوقت الذي قمنا بخزنه في المتغير endwait. فأذا كان ()clock أكبر من (أو يساوي) endwait فأن هذا يعني أن الثانية مرت.

comp2.gif

#5

نسيت أن أقول أن الـCLK_TCK قد حل محلها CLOCKS_PER_SEC. و لهما نفس المعنى

comp2.gif

#6

الدالة wait مستخدمة للإنتظار لمدة محددة مع parameter

CLK_TCK يعبر عن الماكرو CLOCKS_PER_SEC المعرف في time.h القياسي

و الذي هو عبارة عن عدد ال clocks التي يكملها المعالج في ثانية واحدة

clocks() ترجع عدد ال clocks التي مرة منذ بداية البرنامج

endwait يأخذ زمن الإنتظار بال clocks

و أخيرا while (clock() < endwait) {} تستخدم لإضاعة الوقت.

#7

شكرا لكل الإخوة الكرام الي ساعدوني و خاصة الأخ ib_doom الكود أصبح واضح تقريبا و لكنه يحتاج لتركيز أكثر..

شكرا لكم جميعا .

هذا الموضوع مغلق.

مواضيع مشابهة