توضیحات
در زبان برنامه نویسی کاتلین مانند سایر زبان ها محاسبات ریاضی یک امر مهم و پر کاربرد است گاهی بعضی اعمال ریاضی
پر تکرار هستند که برای جلوگیری از این تکرار بهتره براشون تابع تعریف کرد.
بعضی از توابع ریاضی بدیهی و به
طور عمومی برای همه شناخته شده هستند؛ توابع و مقادیر ثابت ریاضی در بسیاری از زبان های برنامه نویسی به عنوان
کتابخونه ی ارسمی زبان تعریف شدن؛ زبان کاتلین از این قاعده مستثنی نبوده و برای کاتلین نیز این توابع در کتابخونه
ی رسمی زبان تعریف شده.
این توابع در کتابخونه ی استاندارد کاتلین در داخل پکیج 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 در جاوا بهره ببریم.