PDA

View Full Version : مشکل در الگوریتم محاسبه سن



anonymous$
چهارشنبه 29 خرداد 1392, 01:36 صبح
سلام,من برنامه زیر رو(تاریخ تولد و تاریخ کنونی رو میگیره و به فرد میگه که چند سال و چند ماه و چند روزشه.بعد با توجه به نتیجه بدست اومده میگه که چند ثانیه,دقیقه و ساعت عمر کرده و در آخر اگه تاریخ تولد با تاریخ کنونی برابر باشه روز تولد رو تبریک میگه در غیر این صورت میگه چند روز تا تولدش مونده) بنا به فرض اشتباه خودم(سن برابر است با تفاضل سال,ماه,روز) در حالت های ممکن نوشتم ولی برنامه سن دقیق رو نشون نمیده.
اگه کسی یه راهنمایی در باره "الگوریتم" این عمل(محاسبه دقیق سن) بکنه ممنون میشم.(سورس نه!)


#include "stdafx.h"
#include <iostream>
#include <iomanip>
using namespace std;
int main()
{
int D_B,M_B,Y_B,C_D,C_M,C_Y,X_D,X_M,X_Y,X_H,X_MI,X_S,z ,t,i,s;
cout << "Enter day of your birth : ";
cin >> D_B;
cout << endl;
cout << "Enter month of your birth : ";
cin >> M_B;
cout << endl;
cout << "Enter year of your birth : ";
cin >> Y_B;
cout << endl;
cout << "Enter day of current date : ";
cin >> C_D;
cout << endl;
cout << "Enter month of current date : ";
cin >> C_M;
cout << endl;
cout << "Enter year of current date : ";
cin >> C_Y;
cout << endl;
if(C_M >= M_B && C_D >= D_B)
{
X_D= C_D - D_B;
X_M= (C_M - M_B);
X_Y= C_Y - Y_B;
}
else if(M_B >= C_M && D_B >= C_D)
{
X_D= D_B - C_D;
X_M= M_B - C_M;
X_Y= C_Y - Y_B;
}
else if (C_M >= M_B && C_D <= D_B)
{
X_D= D_B - C_D;
X_M= C_M - M_B;
X_Y= C_Y - Y_B;
}
else if (C_M <= M_B && C_D >= D_B)
{
X_D= C_D - D_B;
X_M= M_B - C_M;
X_Y= C_Y - Y_B;
}


X_H= (X_Y * 8760)+(X_M*744)+(X_D*24);
X_MI=( X_H * 60);
X_S= X_MI * 60;

cout << "Your age is : " << X_Y << " year(s) and " << X_M << " month(s) and " << X_D << " day(s)" << endl;
cout << "you lived :" << endl;
cout << " " << setprecision(50) << X_H << " Houre(s)" << endl;
cout << " " << setprecision(50) << X_MI <<" Minute(s)" << endl;
cout << " " << setprecision(50) << X_S << " Second(s)" << endl << endl << endl;
if(C_D==D_B && C_M==M_B)
cout << "Happy Birth Day! ^_^" << "\a" ;
else if(C_M >= M_B && C_D >= D_B)
{
z=((12-(C_M - M_B ))*30)+(31-(C_D - D_B));
cout << z << " day(s) remain's to your brith day!";
cout << "\n\n" << "tedade rooz haye baghi mandeh be tavalode shoma ba hade aksar ekhtelafe 5 rooz mohasebe shod..." ;
}
else if (M_B >= C_M && D_B >= C_D)
{
t=((M_B - C_M) * 30)+(D_B - C_D);
cout << t << " day(s) remain's to your birth day!";
cout << "\n\n" << "tedade rooz haye baghi mandeh be tavalode shoma ba hade aksar ekhtelafe 5 rooz mohasebe shod..." ;
}
else if(C_M >= M_B && C_D <= D_B)
{
i=((12-(C_M - M_B)) * 30) + (D_B - C_D);
cout << i << " day(s) remain's to your birth day!";
cout << "\n\n" << "tedade rooz haye baghi mandeh be tavalode shoma ba hade aksar ekhtelafe 5 rooz mohasebe shod..." ;
}
else if(C_M <= M_B && C_D >= D_B)
{
s=((M_B - C_M )* 30) + (31-(C_D - D_B));
cout << s << " days(s) remain's to your birth day!";
cout << "\n\n" << "tedade rooz haye baghi mandeh be tavalode shoma ba hade aksar ekhtelafe 5 rooz mohasebe shod..." ;
}

cin.get();
cin.get();
}

hr.siroos
چهارشنبه 29 خرداد 1392, 15:04 عصر
من تغییراتی که دادم بر اساس برداشت خودم از توضیحاتت بود.
بهتره نام متغییر های تو شبیح به هم باشد.

#include "stdafx.h"
#include <iostream>
#include <iomanip>
using namespace std;
int main()
{
int D_B,M_B,Y_B,D_C,M_C,Y_C,D_X,M_X,Y_X,X_H,X_MI,X_S,z ,t,i,s;
cout << "Enter day of your birth : ";
cin >> D_B;
cout << endl;
cout << "Enter month of your birth : ";
cin >> M_B;
cout << endl;
cout << "Enter year of your birth : ";
cin >> Y_B;
cout << endl;

cout << "Enter day of current date : ";
cin >> D_C;
cout << endl;
cout << "Enter month of current date : ";
cin >> M_C;
cout << endl;
cout << "Enter year of current date : ";
cin >> Y_C;
cout << endl;

Y_X = Y_C - Y_B ;

D_X = D_B - D_C ;

M_X = M_B - M_C ;

if(D_X < 0)
{
D_X = 30 + D_X ;
}
if(M_X < 0)
{
M_X = 12 + M_X ;
}

X_H= (Y_X * 8760)+(M_X*744)+(D_X*24);
X_MI=( X_H * 60);
X_S= X_MI * 60;

cout << "Your age is : " << Y_X << " year(s) and " << M_X << " month(s) and " << D_X << " day(s) ,[-1,+1]," << endl;//[-1,+1] MOOMKENE BA EKHTELAFE 1 ROOZ NAMAYESH DAHAD
cout << "you lived :" << endl;
cout << " " << setprecision(50) << X_H << " Houre(s)" << endl;
cout << " " << setprecision(50) << X_MI <<" Minute(s)" << endl;
cout << " " << setprecision(50) << X_S << " Second(s)" << endl << endl << endl;
if(D_X==0 && M_C==0)
cout << "Happy Birth Day! ^_^" << "\a" ;
else
{
z=((M_X)*30)+(D_X);
cout << z << " day(s) remain's to your brith day!";
cout << "\n\n" << "tedade rooz haye baghi mandeh be tavalode shoma ba hade aksar ekhtelafe 5 rooz mohasebe shod..." ;
}
cin.get();
cin.get();
}

saied_hacker
چهارشنبه 29 خرداد 1392, 15:09 عصر
ولی من چند تا تاریخ رو تست کردم جواب درست میده هم سن رو و هم مابقی رو .... ؟؟؟!!! :متفکر:

فقط تعداد روز باقی مانده تا تولد ایراد داره فکر کنم که باید اختلاف ماهها و روز ها باشه ...

( خودت میدونی چه متغیری مال چیه ؟ :چشمک: یه اسم قابل فهم بزار خواهشا )

hr.siroos
چهارشنبه 29 خرداد 1392, 15:14 عصر
ولی من چند تا تاریخ رو تست کردم جواب درست میده هم سن رو و هم مابقی رو .... ؟؟؟!!! :متفکر:
شما با کدوم برنامه است و با کدوم تست کردین؟

saied_hacker
چهارشنبه 29 خرداد 1392, 15:18 عصر
با کد خودش، مال شمام که نصفشو زدی D_M تعریف نشده ...

anonymous$
چهارشنبه 29 خرداد 1392, 20:49 عصر
دوستان مشکل حل شد.:لبخندساده: