فوری.راهنمایی درالگوریتم نشان دادن تاریخ

majid2x

Active Member
خسته نباشید . استادمون گفته یه الگوریتم بنوسید که روز N ازسال رودریافت کنه وبگه در چه روزی از چه ماهی هستیم.ینی مثلا اگه 65 رو به عنوان ورودی بدیم،بگه که شصت وپنجمین روز ازسال چه تاریخی ازچه ماهی هستش.(با درنظرگرفتن ماه های 30و31روزی) به نظرمن آسون رسید ولی نتونستم ... برا همین از شما کمک خواستم.متشکرم
 
آخرین ویرایش:

rsad

New Member
خسته نباشید . استادمون گفته یه الگوریتم بنوسید که روز N ازسال رودریافت کنه وبگه در چه روزی از چه ماهی هستیم.ینی مثلا اگه 65 رو به انوان ورودی بدیم،بگه که شصت وپنجمین روز ازسال چه تاریخی ازچه ماهی هستش. به نظرمن آسون رسید ولی نتونستم ... برا همین از شما کمک خواستم.متشکرم


من الگوریتمشو براتون مینویسم راحت میتونین با هر زبانی بنویسین​

Input N عدد ورودی رو دریافت کن
If N <=186 then اگه کمتر - مساوی 186 (شش ماه اول سال) بود
M= N\31 خارج قسمت صحیحشو بر 31 بریز توی M (ماه ها)
D= N mod 31 باقیماندشو بریز توی D (روزها)
If D>0 then اگر باقیمانده بیشتر از صفره (یعنی در ماه جدید هستیم)
M=M+1 یکی به ماه ها اضافه کن
Else
D=31 اگه باقیمانده صفر باشه روز سی و یکمه
End If
Else در غیر اینصورت
N2= N-186 هر چی بیشتر از 186 بود (شش ماه دوم سال) بریز توی N2
M= (N2\30)+6 خارج قسمت صحیحشو بر 30 به اضافه 6 (شش ماه اول) کن و بریز توی M (ماه ها)
D= N2 mod 30 باقیمانده تقسیم (روزها) رو بریز توی D
If D>0 then اگر باقیمانده بیشتر از صفره (در ماه جدید هستیم)
M=M+1 یکی به ماه ها اضافه کن
Else
D=30 اگر باقیمانده صفر شد روز سی امه
End IF
End If پایان
Print M {مـاه}
Print D {روز}
 
آخرین ویرایش:

majid2x

Active Member
من الگوریتمشو براتون مینویسم راحت میتونین با هر زبانی بنویسین البته امیدوارم منظورتونو درست متوجه شده باشم​

Input N
If N <=186 then
M= N/31
D= N mod 31
Else
N2= N-186
M= (N2/30)+6
D= N2 mod 30
End If
Print M {مـاه}
Print D {روز}

ببخشید من کندذهنم ینی دیر متوجه میشم اگه میشه کنار هر خط یه توضیح بدید.
 

majid2x

Active Member
واقعا ممنونم.ببنید من درزمینه ویژوال بی استعدادم.پس یه سوال میپرسم بهم نخندید:برای چی N روتقسیم بر31 میکنید؟ (خط 3)
 

rsad

New Member
اگه بازم مشکلی هست بگین تا بیشتر توضیح بدم و گرنه برم لالا :)

سؤال دیگه ای هم داشتید برام میل بزنین. آدرس ایمیلمو بصورت پیام خصوصی براتون میفرستم.
 

rsad

New Member
واقعا ممنونم.ببنید من درزمینه ویژوال بی استعدادم.پس یه سوال میپرسم بهم نخندید:برای چی N روتقسیم بر31 میکنید؟ (خط 3)


چون ماه های اول سال 31 روزیه. برای اینکه بفهمیم چند ماه گذشته.
مثلا 65 تقسیم بر 31 میشه 2 (خارج قسمت صحیح) یعنی در ماه دوم هستیم حالا باقیمانده تقسیم 65 بر 31 میشه 3 یعنی روز سوم. و چون باقیمانده بیشتر از صفره یکی به ماه ها اضافه میشه. یعنی 3/3/13XX :)
 
آخرین ویرایش:

majid2x

Active Member
چون ماه های اول سال 31 روزیه. برای اینکه بفهمیم چند ماه گذشته.
مثلا 65 تقسیم بر 31 میشه 2 (خارج قسمت صحیح) یعنی در ماه دوم هستیم حالا باقیمانده تقسیم 65 بر 31 میشه 3 یعنی روز سوم. یعنی 3/2/13xx
65 تقسیم بر31 میشه 2 درصورتی که 65روز ،ازسال دربرج 3 هست .اگه میشه بازم برام توضیح بدید.متشکرم.
و چرا N2= N-186 میکنید؟
 
آخرین ویرایش:

rsad

New Member
ببخشید، اصلاحش کردم.:)

N رو به این خاطر منهای 186 میکنیم که شش ماه اول سال میشه 186 روز (31*6) و تعداد ماه هاش مطمئنا 6 تاست (که بعداً با تعداد ماه های شش ماهه دوم جمع کردیم) حالا "ما به التفاوت " N و 186 میشه تعداد روزهایی که از شش ماه دوم گذشته. پس تعداد ماه هاش میشه 6 به اضافه N2 (همون ما به التفاوته) تقسیم بر 30 (که تعداد روزهای شش ماه دوم ساله) و روز و ماهشو هم مثل قبل باز به دست میاریم.

الان اگه با عدد مثلاً 255 امتحان کنیم داریم:
255 از 186 بزرگتره پس:
255 - 186 = 69
69 \ 30 = 2
2+6 = 8
باقیمانده 69 بر 30 = 9
چون بیشتر از صفره یکی به ماهها (8) اضافه میکنیم = 9
9/9/13xx

(ضمناً از راست به چپ بخونین چون فارسی نوشتم یکم قاطی شده)
 
آخرین ویرایش:

majid2x

Active Member
Sharmande key farsi nadashtam...

bebinid :

Input N عدد ورودی رو دریافت کن
If N <=186 then اگه کمتر - مساوی 186 (شش ماه اول سال) بود
M= N\31 خارج قسمت صحیحشو بر 31 بریز توی M (ماه ها)
D= N mod 31 باقیماندشو بریز توی D (روزها)
If D>0 then اگر باقیمانده بیشتر از صفره (یعنی در ماه جدید هستیم)
M=M+1 یکی به ماه ها اضافه کن
Else
D=31 اگه باقیمانده صفر باشه روز سی و یکمه
End If
Else در غیر اینصورت
N2= N-186 هر چی بیشتر از 186 بود (شش ماه دوم سال) بریز توی N2
M= (N2\30)+6 خارج قسمت صحیحشو بر 30 به اضافه 6 (شش ماه اول) کن و بریز توی M (ماه ها)

D= N2 mod 30 باقیمانده تقسیم (روزها) رو بریز توی D
If D>0 then اگر باقیمانده بیشتر از صفره (در ماه جدید هستیم)
M=M+1 یکی به ماه ها اضافه کن
Else
D=30 اگر باقیمانده صفر شد روز سی امه
End IF
End If پایان
Print M {مـاه}
Print D {روز}
-------------------------------
tozihate khotote ghermez :
fek konid ma dar rooze 190 az sal hastim 190-186=4=N2
khate bad mige : (4\30)=M ke nemishe
nemidoonam shayad man eshtebah mikonam.lotf konid ye kam bishtar tozih bedid....bazam motshakeram.
 

rsad

New Member
ببینید، همون 190 رو در نظر میگیریم و از خط اول شروع میکنیم به حلش:

خط 1- 190 رو میگیره

خط 2- چون بزرگتر از 186 هست میره به else

خط 11- 190 - 186 رو میریزه توی N2 --->
N2=4

خط 12- N2\30 یعنی خارج قسمت صحیح** 4 بر 30 یعنی صفر رو (به اضافه ی 6 میکنه و) میریزه توی M

خط 13- باقیمانده تقسیم صحیح 4 بر 30 رو که میشه 4 میریزه توی D

خط 14- چون D بزرگتر از صفره

خط 15- یکی به ماه ها اضافه میکنه (7) و میریزه توی M

خط 20 و 21- 4 رو به عنوان روز و 7 رو به عنوان ماه (4/7/.....) چاپ میکنه و پایان.

** وقتی علامت تقسیم رو از این طرف (\) میذاریم یعنی خارج قسمت صحیح تقسیم (البته در بیسیک باز در بعضی زبانها متفاوته که اگه میخواین به زبان خاصی بنویسیدش بگین تا براتون کدشو بذارم. ولی در واقع من اینجا فقط خواستم الگوریتمشو بگم)
در عین حال همین برنامه رو که نوشتم مثلاً توی Qbasic بنویسید بعد میبینید که جواب میده (البته اول متغیرها رو به صورت زیر تعریف کنید)

Dim N,N2,M,D As Integer
 

majid2x

Active Member
مشکل در خط 13

ببینید، همون 190 رو در نظر میگیریم و از خط اول شروع میکنیم به حلش:

خط 1- 190 رو میگیره

خط 2- چون بزرگتر از 186 هست میره به else

خط 11- 190 - 186 رو میریزه توی N2 --->
N2=4

خط 12- N2\30 یعنی خارج قسمت صحیح** 4 بر 30 یعنی صفر رو (به اضافه ی 6 میکنه و) میریزه توی M

خط 13- باقیمانده تقسیم صحیح 4 بر 30 رو که میشه 4 میریزه توی D

خط 14- چون D بزرگتر از صفره

خط 15- یکی به ماه ها اضافه میکنه (7) و میریزه توی M

خط 20 و 21- 4 رو به عنوان روز و 7 رو به عنوان ماه (4/7/.....) چاپ میکنه و پایان.

** وقتی علامت تقسیم رو از این طرف (\) میذاریم یعنی خارج قسمت صحیح تقسیم (البته در بیسیک باز در بعضی زبانها متفاوته که اگه میخواین به زبان خاصی بنویسیدش بگین تا براتون کدشو بذارم. ولی در واقع من اینجا فقط خواستم الگوریتمشو بگم)
در عین حال همین برنامه رو که نوشتم مثلاً توی Qbasic بنویسید بعد میبینید که جواب میده (البته اول متغیرها رو به صورت زیر تعریف کنید)

Dim N,N2,M,D As Integer


خط 13- باقیمانده تقسیم صحیح 4 بر 30 رو که میشه 4 میریزه توی
ببخشید من بازم متوجه نشدم.البته معذرت می خوام ولی من واقعا دیرمیگیرم(من نفهمیدم چه جوری تقسیم 4 بر30 میشه 4
بازم بابت حوصلتون ممنونم.
 
آخرین ویرایش:

rsad

New Member
خط 13- باقیمانده تقسیم صحیح 4 بر 30 رو که میشه 4 میریزه توی
ببخشید من بازم متوجه نشدم.البته معذرت می خوام ولی من واقعا دیرمیگیرم(من نفهمیدم چه جوری تقسیم 4 بر30 میشه 4
بازم بابت حوصلتون ممنونم.


به صورتی که توی فایل ضمیمه هست باقیمانده ی تقسیم صحیح 4 بر 30 میشه 4 :wink:

MMZ.JPG
 
آخرین ویرایش:

majid2x

Active Member
ببینید RSAD جان قسمت 6 ماه اول با بعضی ازاعداد درست جواب میده اما بابعضیاشم نه.من خودم اصلاحش کردم.نمیدونم ولی من باهرعددی امتحانش کرم درست در اومد.

start

اگر N<186

N2\31میریزه توی M

N MOD 31 میریزه توی D

اگرN<=31 آنگاه D=N

اگر D=0 آنگاه D=31

اگر D نامساوی 31 آنگاه M+1

Else

...

شش ماه دوم رو هنوز امتحان نکردم.
(خیلی ممنونم بابت اینکه با راهنمایاتون فرصت فکر کردن به من دادید .)
 
آخرین ویرایش:

rsad

New Member
ببینید RSAD جان قسمت 6 ماه اول با بعضی ازاعداد درست جواب میده اما بابعضیاشم نه.من خودم اصلاحش کردم.نمیدونم ولی من باهرعددی امتحانش کرم درست در اومد.
start

اگر N<186

N2\31میریزه توی M

N MOD 31 میریزه توی D

اگرN<=31 آنگاه D=N

اگر D=0 آنگاه D=31

اگر D نامساوی 31 آنگاه M+1

Else

...

شش ماه دوم رو هنوز امتحان نکردم.
(خیلی ممنونم بابت اینکه با راهنمایاتون فرصت فکر کردن به من دادید .)


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

Dim N,N2,D,M as Integer
Input "Please Enter a Number Between 1 to 365:", N
If N <=186 then
M= N\31
D= N mod 31
If D>0 then
M=M+1
Else
D=31
End If
Else
N2= N-186
M= (N2\30)+6
D= N2 mod 30
If D>0 then
M=M+1
Else
D=30
End IF
End IF
Print M
Print D
اگر هم خواستی وقتی عددی کمتر از یک یا بیشتر از 365 میده اخطار بده خط زیرو بهش اضافه کن:


Dim N,N2,D,M as Integer
Input "Please Enter a Number Between 1 to 365:", N
If N<1 or N>365 then
Print "Invalid Number"
Else
If N <=186 then
M= N\31
D= N mod 31
If D>0 then
M=M+1
Else
D=31
End If
Else
N2= N-186
M= (N2\30)+6
D= N2 mod 30
If D>0 then
M=M+1
Else
D=30
End IF
End IF
Print M , "/", D
End IF​
 
آخرین ویرایش:

majid2x

Active Member
برنامتون رو در Vb امتحان کردم .کاملا درست بود.خیلی باهاتون حال کردم . ولی برعکسش به خنگی خودم پی برم. ولی میخوام سریع خودمو بکشم بالا وحتما به کمک شما نیازدارم.بازم ممنونم.
 

rsad

New Member
نه آقا، شما خیلی هم باهوشی، اما کلاً 70% برنامه نویسی تجربه ست. به هر حال ما در خدمتیم.
 

جدیدترین ارسال ها

بالا