توابع و مقادیر ثابت ریاضی در کاتلین

توابع ریاضی در کاتلین

توضیحات

در زبان برنامه نویسی کاتلین مانند سایر زبان ها محاسبات ریاضی یک امر مهم و پر کاربرد است گاهی بعضی اعمال ریاضی پر تکرار هستند که برای جلوگیری از این تکرار بهتره براشون تابع تعریف کرد.
بعضی از توابع ریاضی بدیهی و به طور عمومی برای همه شناخته شده هستند؛ توابع و مقادیر ثابت ریاضی در بسیاری از زبان های برنامه نویسی به عنوان کتابخونه ی ارسمی زبان تعریف شدن؛ زبان کاتلین از این قاعده مستثنی نبوده و برای کاتلین نیز این توابع در کتابخونه ی رسمی زبان تعریف شده.

این توابع در کتابخونه ی استاندارد کاتلین در داخل پکیج ‎kotlin.math برای کاتلین به صورت Top Level تعریف شدن.
در ادامه به بررسی چندتا از مهم ترین هاشون میپردازیم.

توجه:

بعضی از توابع در حال حاضر در کتابخونه رسمی کاتلین تعریف نشدن، اما در کلاس Math در جاوا به صورت استاتیک وجود دارن و از اونجایی که در کاتلین میشه از کلاس و تابع (متد) های جاوا استفاده کرد میتونیم از کلاس Math در جاوا کمک بگیریم.

در این مطلب توابع ریاضی در کاتلین رو به توابع مثلثاتی، توابع نمایی (exponential) و لگاریتم و توابع مقایسه ای و قدر مطلق دسته بندی کرده و در آخر نگاهی به تابع random انداختیم.

توابع مثلثاتی

ثابت PI

عدد PI نسبت یک دایره به محیطش است. از PI به عنوان زاویه (رادیان) در مثلثات استفاده میکنیم، این عدد به عنوان پراپرتی (فیلد) ثابت نوع Double در کاتلین تعریف شده و مقدارش تقریبا برابر با 3.14 است.

const val PI: Double
                  

نکته

پارامتر توابع مثلثاتی در کاتلین Double یا Float و مقداری که بر میگردونن از نوع پارامتر است.

تابع سینوس (sin)

این تابع زاویه رو به عنوان پارامتر میگیره و مقدار سینوس زاویه رو بر میگردونه.

fun sin(x: Double): Double
fun sin(x: Float): Float
                  

تابع کسینوس (cos)

زاویه رو به عنوان پارامتر میگیره و مقدار کسینوس بر میگردونه.

fun cos(x: Double): Double
fun cos(x: Float): Float
                  

تابع تانژانت (tan)

زاویه رو به عنوان پارامتر میگیره و مقدار تانژانت رو برمیگردونه.

fun cos(x: Double): Double
fun cos(x: Float): Float
                  

تابع سینوس اینورس (asin)

مقدار سینوس به عنوان پارامتر میگیره و زاویه رو به عنوان رادیان برمیگردونه.

fun asin(x: Double): Double
fun asin(x: Float): Float
                  

تابع کسینوس اینورس (acos)

مقدار کسینوس به عنوان پارامتر میگیره و زاویه رو به عنوان رادیان بر میگردونه.

fun acos(x: Double): Double
fun acos(x: Float): Float
                  

تابع تانژانت اینورس (atan)

مقدار تانژانت رو به عنوان پارامتر میگیره و زاویه رو به عنوان رادیان بر میگردونه.

fun acos(x: Double): Double
fun acos(x: Float): Float
                  

توابع نمایی و لگاریتمی

عدد ثابت E

پایه ی لگاریتم طبیعی این متغیر به عنوان پراپرتی (فیلد) ثابت تعریف شده و مقدارش تقریبا برابر با 2.71 است.

const val E: Double
                  

تابع exp

یک مقدار به عنوان پارامتر میگیره و عدد e (اویلر) رو به توان پارامتر میرسونه.

fun exp(x: Double): Double
fun exp(x: Float): Float
                  

تابع لگاریتم طبیعی (ln)

لگاریتم طبیعی رو حساب میکنه

fun ln(x: Double): Double
fun ln(x: Float): Float
                  

تابع لگاریتم (log)

لگاریتم x رو بر پایه base حساب میکنه.

fun log(x: Double, base: Double): Double
fun log(x: Float, base: Float): Float
                  

تابع توان (pow)

عدد رو به توان x میرسونه. تابع pow یک تابع اکستنشن است.

fun Double.pow(x: Double): Double
fun Float.pow(x: Float): Float

fun Double.pow(x: Int): Double
fun Float.pow(x: Int): Float
                  

تابع جذر (sqrt)

جذر یک عدد رو میگیره

fun sqrt(x: Double): Double
fun sqrt(x: Float): Float
                  

توابع گرد کردنی (rounding)

تابع ceil

مقدارو به اولین عدد صحیح بالاتر میرسونه، مثلا اگه مقدار 2.1 باشه به 3؛ و اگه عدد -2.1 باشه به -2 میرسونه.

fun ceil(x: Double): Double
fun ceil(x: Float): Float
                  

تابع round

مقدارو به نزدیک ترین عدد صحیح میرسونه مثلا اگه 2.4 باشه به 2 میرسونه و اگه مقدار 2.6 باشه به 3 میرسونه.

fun round(x: Double): Double
fun round(x: Float): Float
                  

تابع floor

مقدار عددو به اولین عدد صحیح پایین‌تر میرسونه مثلا اگه عدد 2.1 باشه به 2 میرسونه و اگه -2.1 باشه به -3 میرسونه.

fun floor(x: Double): Double
fun floor(x: Float): Float
                  

تابع min، max و قدرمطلق

تابع max

بین دو عدد مقدار بزرگترو بر میگردونه

fun max(a: UInt, b: UInt): UInt
fun max(a: ULong, b: ULong): ULong
fun max(a: Double, b: Double): Double
fun max(a: Float, b: Float): Float
fun max(a: Int, b: Int): Int
fun max(a: Long, b: Long): Long
                  

تابع min

مقدار کوچیکترو بین دو عدد بر میگردونه

fun min(a: UInt, b: UInt): UInt
fun min(a: ULong, b: ULong): ULong
fun min(a: Double, b: Double): Double
fun min(a: Float, b: Float): Float
fun min(a: Int, b: Int): Int
fun min(a: Long, b: Long): Long
                  

تابع قدرمطلق (abs)

مقدار مثبت یک عدد رو بر میگردونه

fun abs(x: Double): Double
fun abs(x: Float): Float
fun abs(n: Int): Int
fun abs(n: Long): Long
                  

ایجاد اعداد تصادفی با استفاده از تابع random

برای ایجاد اعداد تصادفی به دو روش میتونیم عمل کنیم

با استفاده از تابع random در کاتلین

مثال:

میخوایم یک عدد بین 0 تا 100 به صورت تصادفی ایجاد کنیم اگه بخوایم خود 100 به حساب نیاد از until استفاده میکنیم.

val rndm0 = (0 until 100).random()
val rndm1 = (0..100).random()
println("rndm0 is $rndm0 and rndm1 is $rndm1")
                  

با استفاده از تابع استاتیک random در کلاس Math جاوا

اگه بخوایم از بین اعداد 0 تا x یک عدد به عنوان عدد تصادفی ایجاد کنیم کافیه تابع random رو ضربدر x کنیم.

مثال

میخوایم یک عدد تصادفی بین 0 تا 1000 ایجاد کنیم (خود 1000 به حساب نیاد).

val rndm = (Math.random() * 1000).toInt()
println("rndm is $rndm")
                  

محاسبه ی زاویه یک مثلث روی صفحه.

فرض کنید سه نقطه رو صفحه داریم

p0=(x0,y0), p1=(x1,y1)، p2=(x2,y2)

این سه نقطه سه رأس یک مثلث رو تشکیل میدن؛ حالا هر ضلع یک مثلث رو به ترتیب ‎a, b, c در نظر بگیرید.
برای محاسبه ی طول هر ضلع از فرمول زیر استفاده میکنیم:

val a = sqrt((x1 - x0) * (x1 - x0) + (y1 - y0) * (y1 - y0))
          
val b = sqrt((x2 - x1) * (x2 - x1) + (y2 - y1) * (y2 - y1))
          
val c = sqrt((x2 - x0) * (x2 - x0) + (y2 - y0) * (y2 - y0))
                  

بعد از حساب کردن طول هر ضلع میتونیم از فرمول زیر زاویه هر رأس رو حساب کنیم:

val A = acos(a * a - b * b - c * c) / (-2 * b * c)

val B = acos(b * b - a * a - c * c) / (-2 * a * c)
          
val C = acos(c * c - a * a - b * b) / (-2 * a * b)
                  

پیاده‌سازی کامل کد ها:

val input = new Scanner(System.in)

println("Enter Three points: ")

val x0 = input.nextDouble()
val y0 = input.nextDouble()
val x1 = input.nextDouble()
val y1 = input.nextDouble()
val x2 = input.nextDouble()
val y2 = input.nextDouble()


val a = sqrt((x1 - x0) * (x1 - x0) + (y1 - y0) * (y1 - y0))
val b = sqrt((x2 - x1) * (x2 - x1) + (y2 - y1) * (y2 - y1))
val c = sqrt((x2 - x0) * (x2 - x0) + (y2 - y0) * (y2 - y0))


val A = Math.toDegree(acos(a * a - b * b - c * c) / (-2 * b * c))

val B = Math.toDegree(acos(b * b - a * a - c * c) / (-2 * a * c))
          
val C = Math.toDegree(acos(c * c - a * a - b * b) / (-2 * a * b))

println("The Three angles are ${round(A * 100)/100}, ${round(B * 100)/100}, ${round(C * 100)/100}")
                  

خلاصه

  • در کتابخونه رسمی کاتلین مانند سایر زبون های برنامه نویسی توابع ریاضی تعریف شده.
  • توابع مثلثاتی شامل sin، cos، tan، asin، acos و atan هستند.
  • توابع نمایی شامل exp، ln، log، pow و sqrt هستند.
  • توابع rounding شامل ceil، round و floor است.
  • بعضی از توابع در پکیج math کاتلین تعریف نشده مانند toDegree میتونیم از توابع (متد) های استاتیک در کلاس Math در جاوا بهره ببریم.
arrow_drop_up
کپی شد!