PDA

View Full Version : سوال: سوالی در مورد کلاس Time



Omid707
پنج شنبه 22 مهر 1389, 19:20 عصر
با سلام
قبل از همه چیز بگم من تو سایت سرچ کردم و چند تا کد تایمر پیدا کردم ولی چون منظور تمرین رو نفهمیدم بدردم نمیخوره:متفکر:

تمرین از کتاب دیتل:
کلاسTime را به نحوی اصلاح کنید که حاوی تابع عضو tick باشد،تا زمان ذخیره شده در شی Time را در هر ثانیه افزایش دهد.بایستی شی time همیشه در وضعیت پایدار باقی بماند.برنامه ای بنویسید که تابع عضو tick را در حلقه ای که زمان را در فرمت استاندارد در هر بار تکرار چاپ میکند،تست نماید تا از عملکرد صحیح آن مطمئن شویم.حتما حالات زیر تست شوند:
a)ورود به دقیقه بعد
b)ورود به ساعت بعد
c)ورود به روز بعد(یعنی 11:59:59PM به 12:00:00AM)

مخصوصا قسمت قرمز رنگ که من متوجه خواسته جناب دیتل نشدم:گیج:
آیا منظورش اینه که بعد از کامپایل کد و بازشدن صفحه سیاه کنسول،بعد از گذشت هر ثانیه، زمانیکه در شی ذخیره شده و داره نمایش میده رو افزایش بده؟

فایل سرآیند:

#ifndef TIME_H
#define TIME_H

class Time
{
public:
Time(int=0,int=0,int=0);
void setTime(int,int,int);
void setHour(int);
void setMinute(int);
void setSecond(int);
int getHour();
int getMinute();
int getSecond();
void PrintStandard();

private:
int Hour;//0-23
int Minute;//0-59
int Second;//0-59
};

#endif


تعریف کلاس:

#include <iostream>
using std::cout;
#include <iomanip>
using std::setfill;
using std::setw;
#include "Time.h"

Time::Time(int h, int m, int s)
{
setTime(h,m,s);
}

void Time::setTime(int h, int m, int s)
{
setHour(h);
setMinute(m);
setSecond(s);
}

void Time::setHour(int h)
{
Hour =( ( h>=0 && h<24)? h : 0 );
}

void Time::setMinute(int m)
{
Minute =( ( m>=0 && m<60)? m : 0 );
}

void Time::setSecond(int s)
{
Second =( ( s>=0 && s<60)? s : 0 );
}

int Time::getHour()
{
return Hour;
}

int Time::getMinute()
{
return Minute;
}

int Time::getSecond()
{
return Second;
}

void Time::PrintStandard()
{
cout<<setfill('0')<<setw(2)
<<( (getHour() == 0)||(getHour() == 12)? 12 : getHour()%12 )<<":"
<<setw(2)<<getMinute()<<":"<<setw(2)<<getSecond()<<( Hour<12 ?" AM":" PM");
}

کد سرویس گیرنده:

#include <iostream>
using std::cin;

#include "Time.h"

int main()
{
Time a(4,36,25);
a.PrintStandard();


return 0;
}

Omid707
جمعه 23 مهر 1389, 15:23 عصر
خیلی ممنون از کمکتون خسته نباشید:ناراحت:
خودم جواب رو پیدا کردم کد خواسته شده رو نوشتم هر چند بدرد کسی نمیخوره ولی میزارمش اینجا شاید فرد دیگری با تمرین مشابه برخورد کرد و براش مفید بود

این کلاس ابتدا یک زمان از شما میگیره (در کد سرویس گیرنده) و از اون به بعد خود برنامه به ازای گذشت هر یک ثانیه زمان قیلی رو افزایش میده (این زمان به هیچ عنوان زمان سیستم نیست )

سرآیند:

#ifndef TIME_H
#define TIME_H

class Time
{
public:
Time(int=0,int=0,int=0);
void setTime(int,int,int);
void setHour(int);
void setMinute(int);
void setSecond(int);
int getHour();
int getMinute();
int getSecond();
void PrintStandard();
void Tick();

private:
time_t x,c;
int Hour;//0-23
int Minute;//0-59
int Second;//0-59
};

#endif

کلاس:

#include <iostream>
using std::cout;
using std::endl;
#include <iomanip>
using std::setfill;
using std::setw;
#include <ctime>
#include "Time.h"

Time::Time(int h, int m, int s)
{
setTime(h,m,s);
}

void Time::setTime(int h, int m, int s)
{
setHour(h);
setMinute(m);
setSecond(s);
x,c=0;
}

void Time::setHour(int h)
{
Hour =( ( h>=0 && h<24)? h : 0 );
}

void Time::setMinute(int m)
{
Minute =( ( m>=0 && m<60)? m : 0 );
}

void Time::setSecond(int s)
{
Second =( ( s>=0 && s<60)? s : 0 );
}

int Time::getHour()
{
return Hour;
}

int Time::getMinute()
{
return Minute;
}

int Time::getSecond()
{
return Second;
}

void Time::PrintStandard()
{ int h=Hour , m=Minute , s=Second ;
for(;;)
{
if( Second != s || Minute != m || Hour != h )
{
cout<<setfill('0')<<setw(2)
<<( (getHour() == 0)||(getHour() == 12)? 12 : getHour()%12 )<<":"
<<setw(2)<<getMinute()<<":"<<setw(2)<<getSecond()<<( Hour<=12 && Hour!=0 ?" AM":" PM")
<<endl;
}
s=Second;
m=Minute;
h=Hour;
Tick();
}
}

void Time::Tick()
{
x = time (0);
if( x > c)
{
setSecond(Second+1);
if( Second == 0 )
{
setMinute(Minute+1);
if( Minute == 0 )
{
setHour(Hour+1);
}
}
}
c=x;
}