PDA

View Full Version : برنامه جمع کردن ساعت ها



moh.mon
دوشنبه 02 اردیبهشت 1387, 21:04 عصر
با سلام خدمت دوستان
میخواستم یه برنامه بنویسم که چند تا ساعت رو با هم جمع کنه اگه میشه راهنمایی کنین.
ممنون.

Nima_NF
دوشنبه 02 اردیبهشت 1387, 22:22 عصر
اگر کمی بیشتر توضیح دهید که منظورتان از جمع دو ساعت چه هست بهتر می توانیم کمکتان کنیم؛ در چه کامپایلری و از کدام توابع استفاده می کنید ؟

A.S.Roma
سه شنبه 03 اردیبهشت 1387, 00:02 صبح
سلام

اگر مشخص کنید که Object Oriented می خواهید یا Structured نیز موضوع روشنتر می شود . ( C یا ++C ؟ )

moh.mon
چهارشنبه 04 اردیبهشت 1387, 10:26 صبح
می خوام با استفاده از کلاس ها باشه وبه زبان c++ .

MRHagh
چهارشنبه 04 اردیبهشت 1387, 11:37 صبح
کلاسی که برای ساعت باید طراحی کنید , یه چیزی مثل این باید باشه :


class Time
{
int Hour;
int Minute;
int Secend;
public:
Time(int H=0, int M=0, int S=0):Hour(H), Minute(M), Secend(S){}
int GetHour(){ return Hour; }
int GetMinute(){ return Minute; }
int GetSecend(){ return Secend; }
void operator+(const Time &T)
{
((Hour+=T.Hour)>=24)?Hour-=24:Hour;
((Minute+=T.Minute)>=60)?Minute-=60:Minute;
((Secend+=T.Secend)>=60)?Secend-=60:Secend;
}
void PrintTime()
{
cout<<"Time is : "<<Hour<<":"<<Minute<<":"<<Secend;
}
};

الباقی ماجرا هم که دیگه معلوم شد ... موفق باشید !

mandbigS
چهارشنبه 04 اردیبهشت 1387, 13:50 عصر
حالا اگه بخوایم این کلاس رو یه جورایی با آرایه ها ترکیب کنیم ... چه باید بکنیم ؟

یعنی مثلا ده تا ساعت بگیریم و مجموعشون رو چاپ کنیم ...

یعنی می خوام ساعت ها رو با یه آرایه بگیرم ... یه چیزی از مخلوط کردن آرایه با کلاس ...

پیشاپیش ممنون از کمکتون

emad_67
چهارشنبه 04 اردیبهشت 1387, 14:59 عصر
یعنی مثلا ده تا ساعت بگیریم و مجموعشون رو چاپ کنیم ...

یعنی می خوام ساعت ها رو با یه آرایه بگیرم ... یه چیزی از مخلوط کردن آرایه با کلاس ...
یه آرایه ای از اون کلاس بساز و بعد با همه خونه ها رو جمع کن


Time tm[10];

moh.mon
سه شنبه 10 اردیبهشت 1387, 08:56 صبح
یه آرایه ای از اون کلاس بساز و بعد با همه خونه ها رو جمع کن

میشه بشتر توضیح بدین

emad_67
سه شنبه 10 اردیبهشت 1387, 15:20 عصر
میشه بشتر توضیح بدین
به طور مثال اینو ببین:
همون کلاسی هست که جناب MRhagh تعریف کردن. فقط من یه مقدار تغیرش دادم و عملگر = و >> رو هم oveload کردم. در ابتدا هم یه آرایه ای از کلاس Time و همچنین یک شی به عنوان sum تعریف کردم و بعد با هم تک تک خونه های آرایه رو جمع و در sum ذخیره کردم.


#include<iostream.h>
class Time
{
int Hour;
int Minute;
int Second;
public:
friend istream& operator>> (istream &in, Time &T)
{
in>>T.Hour>>T.Minute>>T.Second;
return in;
}

Time(int H=0, int M=0, int S=0):Hour(H), Minute(M), Second(S){}
int GetHour(){ return Hour; }
int GetMinute(){ return Minute; }
int GetSecond(){ return Second; }

Time &operator+(const Time &T)
{
((Hour+=T.Hour)>=24)?Hour-=24:Hour;
((Minute+=T.Minute)>=60)?Minute-=60:Minute;
((Second+=T.Second)>=60)?Second-=60:Second;
return *this;
}

void operator=(const Time &T)
{
Hour=T.Hour;
Minute=T.Minute;
Second=T.Second;
}
void PrintTime()
{
cout<<"Time is : "<<Hour<<":"<<Minute<<":"<<Second;
}

};

void main()
{
Time tm[2],sum;
int i;
for(i=0;i<2;i++)
cin>>tm[i];

for(i=0;i<2;i++)
sum=sum+tm[i];

sum.PrintTime();
}

moh.mon
شنبه 14 اردیبهشت 1387, 10:45 صبح
میشه یکم بیشتر در مورد تابع اول کلاسfriend istream& operator>> توضیح بدین.
ممنون

emad_67
شنبه 14 اردیبهشت 1387, 12:55 عصر
میشه یکم بیشتر در مورد تابع اول کلاسfriend istream& operator>> توضیح بدین.من در واقع توی اون تابع عملکر << رو oveload کردم. در حالت عادی وقتی شی ایی از یه کلاسی تعریف میکنی( در این جا مثلا tm) نمیتونی بنویسی:


cin>>tm;
چون برای عملگر << تعریف نشده است که شی ایی از کلاس time بگیره. حالا برای اینکه اینو براش تعریف کنی باید عملگر << رو oveload کنی. برای oveload کردنش هم باید اینجوری نویسی:


friend istream& operator>> (istream &in, Time &T)
{
}
حالا فرض کن مثلا می نویسیم:


cin>>tm;
کامپایلر به این شکل با این دستور رفتار میکنه:


operator>>(cin, tm);
یعنی در بدنه تابع شی ای از کلاس istream که همون cin هست داریم و شی ایی هم از کلاس Time. حالا در بدنه تابع باید پارامتر هایی رو که میخوای، از ورودی بگیری.


friend istream& operator>> (istream &in, Time &T)
{
in>>T.Hour>>T.Minute>>T.Second;
return in;
}
علت اینکه تابع رو friend تعریف کردیم هم اینه که این تابع بتونه به عضو های private کلاس هم دسترسی داشته باشه.
نکته دیگه هم اینکه این تابع ارجاعی به به کلاس istream رو برمیگردونه. علت اینکه به این شکل مینویسیم هم اینه که مثلا اگه کاربر چند شی رو با عملگر << به کار برد مشکلی پیش نیاد. مثلا وقتی بنویسیم:


cin>>tm1>>tm2;
کامپایلر از سمت چپ شروع به cin کردن میکنه. یعنی داریم:


operator>>(cin,tm1)>>tm2;
که مقدار بازگشتی از تابعی که نوشتیم شی کلاس istream ( همون cin) است که مجددا این عمل برای tm2 هم تکرار میشه. در صورتی که هیچ مقداری از تابع برنگرده فقط میشه یکبار << رو به کار برد.

moh.mon
شنبه 14 اردیبهشت 1387, 13:29 عصر
میشه بگین این برنامه مشکلش کجاست .
اجرا میشه ولی جواب نمیده.
(در ضمن ممکنه چندتا مشکل تایپی داشته باشه که خودتون اگه میشه حلش کنید)
#include <iostream>
#include <conio>
class Time
{
int Hour;
int Minute;
int Secend;
public:

void gettime(){
cin>>hour>>minute>>secend;}
void operator+(const Time &T)
{
((Hour+=T.Hour)>=24)?Hour-=24:Hour;
((Minute+=T.Minute)>=60)?Minute-=60:Minute;
((Secend+=T.Secend)>=60)?Secend-=60:Secend;
}
void PrintTime()
{
cout<<"Time is : "<<Hour<<":"<<Minute<<":"<<Secend;
}
};

int main()
{
Time t[3];
for (int i0; i<3; i++)
{
t[i].gettime()
t[i].operator+(t[i]);
t[i].PrintTime();
}
grtch();
return 0;
}

emad_67
شنبه 14 اردیبهشت 1387, 13:52 عصر
بفرمایید:


#include <iostream.h>
#include <conio.h>
class Time
{
int Hour;
int Minute;
int Secend;
public:

void gettime(){
cin>>Hour>>Minute>>Secend;}
void operator+(const Time &T)
{
((Hour+=T.Hour)>=24)?Hour-=24:Hour;
((Minute+=T.Minute)>=60)?Minute-=60:Minute;
((Secend+=T.Secend)>=60)?Secend-=60:Secend;
}
void PrintTime()
{
cout<<"Time is : "<<Hour<<":"<<Minute<<":"<<Secend;
}
};

int main()
{
Time t[3];
for (int i=0; i<3; i++)
{
t[i].gettime();
t[i].operator+(t[i]);
t[i].PrintTime();
}
getch();
return 0;
}

البته این قسمت رو:


t[i].operator+(t[i]);

دیگه لازم نیست اینجوری بنویسی. اینجوری بنویس:


t[i]+t[i];

ضمنا کدت رو هم توی تگ کد قرار بده.

zuck_619
شنبه 14 اردیبهشت 1387, 16:11 عصر
salam .man ye barname dar morede hamin neveshtam vali javab nemide . age mishe komak konid #include <iostream.h>
#include <conio.h>
class time
{
private:
int second,minute,hour;
public:
int h,m,s;
void get_time (h,m,s)
{
hour = h ; minute = m ; second = s;
}
void show_time()
{
cout<<"time is : "<<hour<<":"<<minute<<":"<<second<<endl;
}
int mian()
{
int j,a,b,c;
cout<<"enter class quantity : ";
cin>> j;
for (int i=1 ; i<=j ; i++)
{
time s[i];
cout<< "enter hour : ";
cin>> h;
cout<< "enter minute: ";
cin>> m;
cout<<"enter second: ";
cin>> s;
s[i].get_time(h , m , s) ;
cout<<"s["<<i<<"] : ";
s[i].show_time() ;
a+= h; b+= m; c+= s;
}
cout<<"sum of time is: "<<a<<b<<c;
getch() ;
return 0;
}

emad_67
شنبه 14 اردیبهشت 1387, 18:57 عصر
دوست من اول از همه قوانین سایت رو بخون تا احیانا پست هات پاک نشه.
توی این سایت حتما فارسی بنویس.
کد ها رو بین تگ کد قرار بده( توی ادیتور با علامت # مشخص شده)
بریم سراغ اشکالات کدت:
شما در حلقه fot نوشتی :


time s[i];
اگه میخوای یه آرایه ای از کلاس بسازی باید اونو در بیرون کلاس بسازی و در حلقه for استفاده کنی. البته اینجا فکر میکنم که میخواستی تعداد ساعت هایی که قرار دریافت بشه رو از کاربر بگیری. برای اینکار باید از آرایه داینامیک استفاده کنی. یعنی مثلا فرض کن n رو از کابر میگیریم و میخوایم یه آرایه به اون طول بسازیم. باید اینجوری بنویسی:


time *s=new time[n];
در داخل حلقه از h, m,s استفاده کردی!! درسته که این ها عضو های public کلاس هستند ولی برای دسترسی بهشون باید از شی کلاس ساخته شده استفاده کنی. اینجوری:


s[i].h
مشکلات دیگه اینه که نوع پارامتر های ورودی تابع get_time رو مشخص نکردی.

roberty
شنبه 14 اردیبهشت 1387, 19:31 عصر
سلام دوست من !!
بنده یه برنامه ای رو تو تعطیلات عید نوشتم !! امیدوارم بدرد شما بخوره !!
راستش برای جمع کردن دوتا ساعت نیست !! بلکه برای جمع کردن دوتا زمان هست !! به این صورت که دو تا زمان بصورت سال و ماه رو روز و ساعت و دقیقه رو میگیره و با هم جمع میکنه !!
اگه اجراش بکنی متوجه میشی :


#include<iostream.h>

int main()
{
int y,y1,y2,M,M1,M2,d,d1,d2,h,h1,h2,m,m1,m2,s,s1,s2;//"s" displays seconds and "m" displays minutes
cout<<"enter the first time";
cin>>y1>>M1>>d1>>h1>>m1>>s1;//"M" displays months and "y" displays years
{
if((y1<0) || (M1<0) || (d1<0) || (h1<0) ||(m1<0)||(s1 <0))//"h" displays hours
cout<<"time cant be nagetive";
else
if(( M1>12) || (d1>31) ||(h1>24)||(m1>60) ||(s1>60))
cout<<"error";
}
{
cout<<"enter your time";
cin>>y2>>M2>>d2>>h2>>m2>>s2;
if((y2<0) || (M2<0) || (d2<0) || (h2<0) ||(m2<0)||(s2 <0))
cout<<"time cant be nagetive";
else
if(( M2>12) || (d2>31) ||(h2>24)||(m2>60) ||(s2>60))
cout<<"error";
}
if(s1+s2>60)
s=(s1+s2)%60;
else
s=s1+s2;
cout<<s<<" seconds"<<endl;
if(m1+m2>60)
m=(m1+m2)%60;
else
m=m1+m2;
cout<<m<<" minutes"<<endl;
if(h1+h2>24)
h=(h1+h2)%24;
else
h=h1+h2;
cout<<h<<" hours"<<endl;
if(d1+d2>31)
d=(d1+d2)%31;
else
d=d1+d2;
cout<<d<<" days"<<endl;
if(M1+M2>12)
M=(M1+M2%12);
else
M=M1+M2;
cout<<M<<" months"<<endl;
y=y1+y2;
cout<<y<<" years"<<endl;
return 0;
}

moh.mon
دوشنبه 16 اردیبهشت 1387, 11:01 صبح
بفرمایید:
از راهنماییتون خیلی ممنون ولی با این کار دیگه نمیتونم چند تا ساعت رو باهم جمع کنم فکرکنم باید عملگر = رو سر بارگذاری کنم میشه بگین چه جوری میشه = رو سر بارگذاری کرد لطفا سر بارگذاری رو بیشتر توضیح بدین.
در ضمن یکم هم در مورد تابع friend کامل توضیح بدین.
ممنون

emad_67
دوشنبه 16 اردیبهشت 1387, 13:35 عصر
از راهنماییتون خیلی ممنون ولی با این کار دیگه نمیتونم چند تا ساعت رو باهم جمع کنم فکرکنم باید عملگر = رو سر بارگذاری کنم میشه بگین چه جوری میشه = رو سر بارگذاری کرد لطفا سر بارگذاری رو بیشتر توضیح بدین.
من در پست صفحه قبل عملگر = رو هم برای شما سربارگذاری کردم.
http://barnamenevis.org/forum/showpost.php?p=507245&postcount=9

برای توضیح بیشتر در مورد سربارگذاری اینجا ها رو بخون:
http://www.aachp.ir/post.aspx?no=58
http://www.aachp.ir/post.aspx?no=60

برای friend ها هم اینجا رو بخون:
http://www.aachp.ir/post.aspx?no=72

moh.mon
شنبه 21 اردیبهشت 1387, 11:53 صبح
خیلی از راهنماییتون ممنون مشکلم حل شد.

moh.mon
شنبه 21 اردیبهشت 1387, 11:59 صبح
اینم برنامه ی من:

#include <iostream.h>
#include <conio.h>
class Time
{
private:
int Hour;
int Minute;
int Second;
public:
Time(int h , int m , int s)
{
Hour=h;
Minute=m;
Second=s;
}
Time()
{
Hour=Minute=Second;
}
void gettime()
{
cout<<"\nplz enter Hour: ";
cin>>Hour;
cout<<"plz enter Minute: ";
cin>>Minute;
cout<<"plz enter Second: ";
cin>>Second;
}
void showtime()
{
cout<<"\nTime is: "
<<Hour<<":"<<Minute<<":"<<Second;
}
Time operator+(Time t2)const
{
int s=Second + t2.Second;
int m=0;
if(s>=60){s-=60; ++m;}
m=Minute+t2.Minute;
int h=0;
if(m>=60){m-=60; h++;}
h=Hour+t2.Hour;
return Time(h,m,s);
}
int time2second()
{
return Hour*60*60+Minute*60+Second;
}
Time second2time(int i)
{
int x;
Hour=i/(60*60);
x=i%(60*60);
Minute=x/60;
Second=x%60;
return Time(Hour , Minute , Second);
}
};

int main()
{
Time t[3],t1;
int x;
int sum=0;
for(int i=1;i<=3;i++)
{
cout<<"\nplz enter time "<<i;
t[i].gettime();
x=t[i].time2second();
sum+=x;
}
cout<<"\nTime to Second is: "<<sum;
t1.second2time(sum);
t1.showtime();
getch();
return 0;
}