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

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

توضیحات

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

این توابع در کتابخونه ی استاندارد کاتلین در داخل پکیج ‎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
کپی شد!