سوال در ويژوال بيسيك

iLove

Active Member
:tavajoh:برنامه اي بنويسيد كه تاريخ تولد فرد را به صورت روز ،ماه ،سال دريافت نموده و تاريخ امروز را نيز به صورت روز ،ماه ،سال دريافت نموده و سن فرد را به صورت روز ،ماه ،سال چاپ كند.
:tavajoh:
 

the_king

مدیرکل انجمن
:tavajoh:برنامه اي بنويسيد كه تاريخ تولد فرد را به صورت روز ،ماه ،سال دريافت نموده و تاريخ امروز را نيز به صورت روز ،ماه ،سال دريافت نموده و سن فرد را به صورت روز ،ماه ،سال چاپ كند.
:tavajoh:

منظورتون با تقویم هجری شمسی یه؟ روش دقیق اینه که از تاریخ تولد تا تاریخ امروز سال ها و ماه ها و روزها
رو پیمایش کنیم، کبیسه بودن سال هم در نظر گرفته بشه :
کد:
    Dim BirthDay As Long, BirthMonth As Long, BirthYear As Long
    Dim NowDay As Long, NowMonth As Long, NowYear As Long
    Dim Days As Long, Years As Long, Months As Long
    BirthYear = Val(InputBox("Birth Year :"))
    BirthMonth = Val(InputBox("Birth Month :"))
    BirthDay = Val(InputBox("Birth Day :"))
    NowYear = Val(InputBox("Now Year :"))
    NowMonth = Val(InputBox("Now Month :"))
    NowDay = Val(InputBox("Now Day :"))
    Do While (BirthYear < NowYear - 1) Or (BirthYear = NowYear - 1 And BirthMonth <= NowMonth)
        BirthYear = BirthYear + 1
        Years = Years + 1
    Loop
    Do While (BirthMonth < NowMonth - 1 Or BirthMonth > NowMonth) Or (BirthMonth = NowMonth - 1 And BirthDay <= NowDay)
        BirthMonth = BirthMonth Mod 12 + 1
        Months = Months + 1
    Loop
    If BirthMonth < NowMonth Or NowDay < BirthDay Then
        Select Case BirthMonth
        Case 1 To 6
            Days = 31 - BirthDay + NowDay
        Case 7 To 11
            Days = 30 - BirthDay + NowDay
        Case 12
            If (((BirthYear - 474) Mod 2820 + 512) * 682) Mod 2816 < 682 Then
                Days = 30 - BirthDay + NowDay
            Else
                Days = 29 - BirthDay + NowDay
            End If
        End Select
    Else
        Days = NowDay - BirthDay
    End If
    MsgBox "Years = " & CStr(Years) & "   Months = " & CStr(Months) & "   Days = " & CStr(Days)

در روش تخمینی ما هر سال رو 365.2416 روز و هر ماه رو 30.4368 روز فرض می کنیم و هر دو تاریخ تولد و امروز را
بر این اساس به یک عدد اعشاری بر حسب روز تبدیل خواهیم کرد که اختلاف شان به سادگی قابل محاسبه است.
در این روش الگوریتم ساده تر و نتایج تخمینی است :
کد:
    Dim BirthDay As Long, BirthMonth As Long, BirthYear As Long
    Dim NowDay As Long, NowMonth As Long, NowYear As Long
    Dim Days As Long, Years As Long, Months As Long
    Dim Birth As Double, Now As Double
    BirthYear = Val(InputBox("Birth Year :"))
    BirthMonth = Val(InputBox("Birth Month :"))
    BirthDay = Val(InputBox("Birth Day :"))
    NowYear = Val(InputBox("Now Year :"))
    NowMonth = Val(InputBox("Now Month :"))
    NowDay = Val(InputBox("Now Day :"))
    Birth = 365.2416 * BirthYear + 30.4368 * BirthMonth + BirthDay
    Now = 365.2416 * NowYear + 30.4368 * NowMonth + NowDay
    Years = Int((Now - Birth) / 365.2416)
    Months = Int((Now - Birth - Years * 365.2416) / 30.4368)
    Days = Int(Now - Birth - Years * 365.2416 - Months * 30.4368)
    MsgBox "Years = " & CStr(Years) & "   Months = " & CStr(Months) & "   Days = " & CStr(Days)
 

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

بالا