ايران ويج

نسخه‌ی کامل: توابع آرک
شما در حال مشاهده‌ی نسخه‌ی متنی این صفحه می‌باشید. مشاهده‌ی نسخه‌ی کامل با قالب بندی مناسب.
صفحه‌ها: 1 2
ببين اين كد بكارت مياد
کد:
Option Explicit
Const pi = 3.14159265358979

Type Complex

    re As Double
    im As Double

End Type



Public Function AddComplex(a As Complex, b As Complex) As Complex

AddComplex.re = a.re + b.re
AddComplex.im = a.im + b.im

End Function

Public Function MultiplyComplex(a As Complex, b As Complex) As Complex

MultiplyComplex.re = a.re * b.re - a.im * b.im
MultiplyComplex.im = a.re * b.im + a.im * b.re

End Function

Public Function Conjugate(a As Complex) As Complex

Conjugate.re = a.re
Conjugate.im = -a.im

End Function

Public Function Modulo(a As Complex) As Double

Modulo = Sqr(a.re ^ 2 + a.im ^ 2)

End Function

Public Function Argument(a As Complex) As Double

Dim i As Integer
Dim v(1 To 4) As Double

If (z.re = 0) And (z.im = 0) Then
    Argument = -10
    End Function
End If

v(1) = ArcSin(z.im / Modulo(z))
v(2) = mcPI - v(1)

v(3) = ArcCos(z.re / Modulo(z))
v(4) = -1 * v(3)

For i = 1 To 4

    While v(i) > mcPI
        v(i) = v(i) - 2 * mcPI
    Wend

    While v(i) < mcPI
        v(i) = v(i) + 2 * mcPI
    Wend

Next i

If v(1) = v(3) Then Argument = v(1)
If v(2) = v(3) Then Argument = v(2)

If v(1) = v(4) Then Argument = v(1)
If v(2) = v(4) Then Argument = v(2)

End Function

' Code by : Steven Roland Bazinet (ArcSin function only)

Private Function ArcSin(vntSine As Variant) As Double
On Error GoTo ERROR_ArcSine

Const cOVERFLOW = 6

Dim blnEditPassed As Boolean
Dim dblTemp       As Double

    blnEditPassed = False
    If IsNumeric(vntSine) Then
        If vntSine >= -1 And vntSine <= 1 Then
            blnEditPassed = True
                                                                
            dblTemp = Sqr(-vntSine * vntSine + 1)
            If dblTemp = 0 Then
                ArcSin = Sgn(vntSine) * pi / 2
            Else
                ArcSin = Atn(vntSine / dblTemp)
            End If
        End If
    End If

EXIT__ArcSine:
    If Not blnEditPassed Then Err.Raise cOVERFLOW
    Exit Function

ERROR_ArcSine:
    On Error GoTo 0
    blnEditPassed = False
    Resume EXIT__ArcSine

End Function

' Code by : Me, based (very much!) on Steven R Bazinet's code

Private Function ArcCos(vntcos As Variant) As Double
On Error GoTo ERROR_ArcSine

Const cOVERFLOW = 6

Dim blnEditPassed As Boolean
Dim dblTemp       As Double

    blnEditPassed = False
    If IsNumeric(vntcos) Then
        If vntcos >= -1 And vntcos <= 1 Then
            blnEditPassed = True
                                                                
            dblTemp = Sqr(-vntcos * vntcos + 1)
            If dblTemp = 0 Then
                ArcCos = Sgn(vntcos) * pi / 2
            Else
                ArcCos = Atn(dblTemp / vntcos)
            End If
        End If
    End If

EXIT__ArcCos:
    If Not blnEditPassed Then Err.Raise cOVERFLOW
    Exit Function

ERROR_ArcCos:
    On Error GoTo 0
    blnEditPassed = False
    Resume EXIT__ArcSine

End Function
نقل قول: آقای ممد2003 که کارش حرف نداره!
اگه درست فهمیده باشم یه مثال برا این حرف دنباله فیبوناتچی که اعداد اول رو میده.
از اون لینک هم سر در نیاوردم. (اون علامت شبیه E چی بود!)

ما کوچکتیم ! اون E شکله علامت سیگما هستش یعنی مجموع تک تک هر کدوم از اعضای دنباله موجود جلوی علامت سیگما به ازای مقدار n در حدود مثلا از 0 تا بینهایت ! چون آشنا نیستی بیشتر از این نمی تونم توضیح بدم . بهتره از همون تیکه تابع آرک سینوس موژول آقا اشکان استفاده کنی :


کد:
Option Explicit
Const pi = 3.14159265358979

Private Function ArcSin(vntSine As Variant) As Double
On Error GoTo ERROR_ArcSine

Const cOVERFLOW = 6

Dim blnEditPassed As Boolean
Dim dblTemp As Double

blnEditPassed = False
If IsNumeric(vntSine) Then
If vntSine >= -1 And vntSine <= 1 Then
blnEditPassed = True

dblTemp = Sqr(-vntSine * vntSine + 1)
If dblTemp = 0 Then
ArcSin = Sgn(vntSine) * pi / 2
Else
ArcSin = Atn(vntSine / dblTemp)
End If
End If
End If

EXIT__ArcSine:
If Not blnEditPassed Then Err.Raise cOVERFLOW
Exit Function

ERROR_ArcSine:
On Error GoTo 0
blnEditPassed = False
Resume EXIT__ArcSine

End Function

در واقع همین تیکه اش به درت میخوره ( البته یه تابع دیگه آرک هم زیرش هست واسه کسینوس ) ممنون از اشکان عزیز
آقا اشکان خیلی ممنون. فکر کنم اون کد قبلی هم درست بود. مثل اینکه اطلاعات من کم بوده. ما آرک رو اینطوری خوندیم که مثلا اگه سینوس 30 درجه 0.5 باشه آرک سینوس 0.5 میشه 30. منم انتظار داشتم برنامه آرک سینوس 0.5 رو 30 بده! بعد یادم اومد که ما آرک سینوس 30 رو پی شیشم هم می گفتیم.
حالا برا من این پی مبهم شده. پی 180 یا 3.14 ؟! 180 باشه که تقسیم بر 6 میشه 30. اگه 3.14 باشه که همونی میشه که برنامه میده.
حسابی دارین می خندین! خنگ شدم؟!
اصلا این پی 180 با اون پی 3.14 چه فرقی داره؟
نخندین دیگه!
نقل قول: اصلا این پی 180 با اون پی 3.14 چه فرقی داره؟
منطقی که اونجا میگه پی یعنی 180 به این منظور نیست که مقدار عدد پی عوض میشه . به این جمله توجه کن :

هر 1 درجه برابر است با pi/180 رادیان !

حالا اگه طرفین رو در یه 180 ضرب کنی عبارت اینطوری میشه :

180 درجه برابر است با pi رادیان !!

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

نمونه بارزش همین توابع مثلثاتی وی بی هستن که آرگومان ( مقدار ورودی ) تابع اونها باید برحسب رادیان داده بشه ! اگه میخوای برحسب درجه باشه طبق همون جمله بالا باید آرگومان رو در یک pi/180 ضرب کنی تا مقدار سینوس بر حسب درجه محاسبه بشه ! مثلا اگه بخوای مقدار سینوس 30 درجه رو حساب کنی مینویسی :

((x=sin(30 * (pi/180



نه خطا ميده نه اشتباهه البته كد رو كه نبايد دقيقا كپي كرد خوب معلومه خطا مي ده ، روش رو ببين. بدست آوردن آرك سينوس از ارك تان‍‍‍‍ژانت كه يه كاره ساده دبيرستانه ديگه كمك گرفتن نمي خواد كه ....
ممد2003 از کدوم سیاره اومدی؟!
spiderman نوشته است:ممد2003 از کدوم سیاره اومدی؟!

من از هیچ کجا نیومدم ! چند سال که بیشتر ریاضیات رو بخونی و انشاالله وقتی رفتی دانشگاه ، با توجه به علاقه ای که داری ، خیلی چیزها رو یاد خواهی گرفت و بهتر ازشون میتونی استفاده کنی ! من کلا ریاضیم ضعیفه ولی از زمانی که توی هند ریاضی ای که بیشتر جنبه کاربردی داره میخونم ، با ریاضی خیلی بیشتر حال می کنم .
صفحه‌ها: 1 2