View Full Version : سوال: وارد کردن تاریخ و نمایش یک روز بعد
farzin69
جمعه 21 فروردین 1394, 16:21 عصر
با سلام خدمت اساتید محترم. ممنون میشم ا کمکم کنید که بدونم باید چکار کنم. فکر میکنم باید با if ساخته بشه. فقط راهنمایی میخوام
برنامه ای بنویسید که تاریخ را به شکل روز ماه و سال از ورودی خوانده تاریخ یک روز بعد از آن را نمایش دهد (6 ماهه اول 30 روزه فرض شود و 6 ماهه دوم 31 روزه)
اگر در آخرین روز بود وارد ماه بعد و اگر در ماه آخر بود وارد سال بعد شود
amirtork
جمعه 21 فروردین 1394, 16:54 عصر
سلام،
همونطور که خودتون گفتید، برای اینکار باید از if استافاده کرد.
برای اینکار 3 متغیر از نوع int لازم هست، برای مثلا، dd,mm,yy که به ترتیب سال و ماه و روز رو در اونها ذخیره کنیم، حالا، باید تشخیص بدیم که ماه 30 روزه هست، یا 31 روزه، یا به عبارت دیگه، mm بزرگتر از 6 هست، یا کوچکتر مساوی 6، اگر mm بزرگتر از 6 بود، یعنی ماه 31 روزه هست و ما باید شرط مون در مورد روز رو روی 31 تنظیم کنیم، یعنی در این حالت، اگر dd برابر با 31 بود، باید چک کرد که mm برابر 12 هست یا نه، اگر بود، یک واحد به سال اضافه میشه، و mm و dd برابر 01 قرار میگیرن، اگر mm برابر 12 نبود، یک واحد به mm اضافه میشه و dd برابر 01 قرار میگیره، حالا اگر mm کوچکتر مساوی 6 بود، همه ی عملیات های بالا برای وضعیت 30 روز برسی میشن.
farzin69
جمعه 21 فروردین 1394, 17:37 عصر
سلام،
همونطور که خودتون گفتید، برای اینکار باید از if استافاده کرد.
برای اینکار 3 متغیر از نوع int لازم هست، برای مثلا، dd,mm,yy که به ترتیب سال و ماه و روز رو در اونها ذخیره کنیم، حالا، باید تشخیص بدیم که ماه 30 روزه هست، یا 31 روزه، یا به عبارت دیگه، mm بزرگتر از 6 هست، یا کوچکتر مساوی 6، اگر mm بزرگتر از 6 بود، یعنی ماه 31 روزه هست و ما باید شرط مون در مورد روز رو روی 31 تنظیم کنیم، یعنی در این حالت، اگر dd برابر با 31 بود، باید چک کرد که mm برابر 12 هست یا نه، اگر بود، یک واحد به سال اضافه میشه، و mm و dd برابر 01 قرار میگیرن، اگر mm برابر 12 نبود، یک واحد به mm اضافه میشه و dd برابر 01 قرار میگیره، حالا اگر mm کوچکتر مساوی 6 بود، همه ی عملیات های بالا برای وضعیت 30 روز برسی میشن.
ممنون دوست عزیز. حالا بعد از if باید printf رو به چه شکل بنویسم که یه واحد اضافه بشه و درست باشه؟
الان if رو اینطوری نوشتم:
if (mm>12&&dd>30) printf
ممنون. ببخشید دیگه من تازه کارم
amirtork
جمعه 21 فروردین 1394, 17:51 عصر
بهتر هست به جای اینکه برنامه رو به این شکل بخواید تکمیل کنید، و در هر if یک پرینت انجام بدید، تمامی تغییرات لازم رو روی متغیر ها انجام بدید، و بعد نتیجه رو چاپ کنید، که اون هم به شکل printf("tomorrows date is : %d/%d/%d",yy, mm, dd); خواهد بود).
مثلا برای برسی اینکه آیا ماه 31 روزه هست و انجام عملیات های لازم به این شکل عمل کنید،
if(mm > 6)
{
if(dd == 31)
{
if(mm == 12)
{
mm = 1;
dd = 1;
yy++;
}
else
{
dd = 1;
mm++;
}
}
else
dd++;
}
farzin69
جمعه 21 فروردین 1394, 18:35 عصر
واقعا ممنونم. ولی توی اجرا هر تاریخی بهش میدم فقط مینویسه tomorrows date is : 0/1232/1238
فکر کنم توی scanf یا جواب if ها مشکل داره
amirtork
جمعه 21 فروردین 1394, 19:53 عصر
کد کاملی که نوشتید رو میشه بزارید؟ بدون کد نمیتونم در مورد مشکل چیری بگم.
farzin69
جمعه 21 فروردین 1394, 20:54 عصر
#include<stdio.h>
void main ()
{int yy,mm,dd;
printf("tomorows date is: %d/%d/%d\n",yy,mm,dd);
scanf("%d,%d,%d",&yy,mm,dd);
if(mm>6)
if(dd==31)
{
if(mm==12)
{mm=1;
dd=1;
yy++;
}
else
{
dd=1;
mm++;
}
}
else
dd++;
}
amirtork
جمعه 21 فروردین 1394, 22:06 عصر
خب، توی کدی که شما نوشتید، قبل از اینکه متغیر ها حتی برای بار اول مقدار دهی بشن، دارید مقدار اونها رو چاپ میکنید، که جوابی که خواهید گرفت فقط مقادیر garbage هست و علت اینکه شما مقدار مذکور رو به ازای هر ورودی میگیرد هم همین هست.
برای رفع این مشکل، ابتدا مقایر رو باید scanf کنید، و بعد از انجام عملیات ها(بعد از سری if ها) مقادیر ثانویه اونها رو چاپ کنید.
و مورد بعدی هم این هست که، شما فقط برای 6 ماه دوم برنامه رو کامل کردید؛ و برای ماه های کوچکتر از 6 برنامه بلاتکلیف است.
در مورد scanf هم، نحوه ی صحیحش به صورت زیر هست:
scanf("%d %d %d", &dd,&mm ,&yy);
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.