درس پنجم: کار با داده های عددی
درس پنجم: کار با داده های عددی
5-1 مقدمه
در درس قبل با روش گرفتن ورودی و نمایش خروجی آشنا شدید. در این درس به چگونگی انجام برخی عملیات ریاضی بر روی داده های عددی می پردازیم و با تعدادی از توابع مخصوص کار با اعداد آشنا میشویم.
5-2 اتصال متغیر های عددی به همدیگر یا به رشته ها و متغیرهای رشته ای
در درس گذشته آموختید که برای اتصال رشته ها و متغیرهای رشته ای از دو علامت + و & میتوان استفاده کرد.
این موضوع برای اعداد و متغیر های عددی صادق نیست. برای اتصال یک عدد به یک رشته نمی توانید از + استفاده کنید و حتما باید فقط از & استفاده کرد. مثال :
“سن شما برابر است با : “ & age
5-3 عملیات ریاضی
5-3-1 انواع عملگر
در ویژوال بیسیک هم مانند باقی زبانهای سطح بالا، اعمال ریاضی معمولی به راحتی قابل انجام هستند. انجام چهار عمل اصلی یعنی جمع، تفری، ضرب و تقسیم، به همراه تقسیم صحیح ، توان و محاسبه ی باقیمانده بدون استفاده از هیچ گونه تابع و به راحتی قابل انجام هستند. برای جذر گرفتن، انجام عملیات مثلثات و نیز لگاریتم و غیره باید از توابع اماده و از پیش تعریف شده در این زبان استفاده کرد. در جدول 5-1 انواع عملگرهای مجاز در ویژوال بیسیک 2015 را مشاهده میکنید. لازم به ذکر است که در بسیاری زبانهای قدرتمند دنیا از جمله C، بعضی از این عملوند ها مجاز نمی باشند.
عملگر |
کارکرد |
+ |
دو عملوند را جمع میکند |
- |
دو عملوند را از هم کم میکند |
* |
دو عملوند را در هم ضرب میکند |
/ |
دو عملوند را بر هم تقسیم اعشاری میکند |
\ |
دو عملوند را بر هم تقسیم صحیح میکند |
MOD |
باقیمانده ی تقسیم دو عملوند را باز میگرداند |
^ |
عملوند اول را به توان عملوند دوم میرساند |
جدول 1-5 : انواع عملگر و نماد آنان
5-3-2 اولویت عملگرها
در زبان ویژوال بیسیک هم مانند بسیاری از زبانهای سطح بالای دیگر، ترتیب محاسبات ریاضی، از چپ به راست نیست. بلکه هر عملگر اولویت خاص خودش را دارد. برای مثال محاسبه ی بسیار ساده ی زیر را در نظر بگیرید:
8+4*2 = ?
به نظر شما جواب محاسبه ی بالا چیست؟ ممکن است شما از چپ به راست شروع به محاسبه کنید و بگویید 4+8 میشود 12. بعد 12 ضرب در 2 میشود 24. آیا جواب معادله در ویژوال بیسیک 24 است؟ خیر! جواب 16 است. زیرا اولویت ضرب از جمع بیشتر است. پس 2*4 اول محاسبه میگردد که میشود 8. بعد 8+8 میشود 16. در جدول 2-5 اولویت های محاسبات در ویژوال بیسیک را مشاهده میکنید:
اولویت |
عملگر |
1 |
پرانتز ها () |
2 |
توان ^ |
3 |
قرینه ی علامت - |
4 |
ضرب و تقسیم * و / |
5 |
\ |
6 |
باقیمانده تقسیم MOD |
7 |
جمع و تفریق - و + |
جدول 2-5 : اولویت محاسبات ریاضی
نکته ی مهم 1-2-3-5
همانطور که در جدول 2-5 می بینیم، اولویت برخی عملگرها مثل ضرب و تقسیم اعشاری با هم برابر است. همینطور اولویت جمع با تفریق برابر است. اگر در محاسبه ای عملگرهایی با اولویت یکسان وجود داشتند چه کنیم؟ پاسخ این است که آن عملگر که در سمت چپ باشد اولویت بیشتری دارد. این موضوع برای عملگرهای یکسان هم صدق میکند. مثلا در یک محاسبه ی ریاضی چند عملگر جمع داریم کدام زودتر انجام شوند، آنکه سمت چپ ترین عملگر است اولویت دارد و به همین منوال اولویت ها از چپ داده میشوند.
نکته ی مهم 2-2-3-5
اولویت در پرانتز های تو در تو، با داخلی ترین پرانتز است. این الویت از داخل به بیرون کاهش میابد.
نکته ی مهم 3-2-3-5
اگر یک عملگر با اولویت پایین مثلا جمع در داخل پرانتز باشد و الویت های بالا مانند ضرب در خارج پرانتز باشند، از آنجا که پرانتز بالاترین اولویت را داراست، ابتدا محتویات داخل پرانتز یکه جمع است محاسبه و اولویت های بعدی عملگرهای خارج پرانتز هستند.
نکته ی مهم 4-2-3-5
اولویتهای عملگرهای داخل پرانتز نیز به طور مستقل بر طبق جدول 2-5 هستند. به این صورت که محتویات داخل هر پرانتز (اولویت با داخلی ترین پرانتز) را یک عبارت تنها در نظر بگیرید بر طبق جدول 2-5 اولویت بندی کنید جواب محاسبه را جایگزین پرانتز کرده و همینطور ادامه دهید تا در نهایت به یک پاسخ نهایی برسید.
مثال :
7-5*(4+6)^2+7.5+1*9-(12+(6 mod 2)) = ?
در محاسبه ی ساده ی بالا دو پرانتز داریم. یک پرانتز تنها و دیگری یک پرانتز در داخل خودش هم دارد. اولویت با پرانتز سمت چپی است. (4+6) می شود 10 . ده را جایگزین این پرانتز میکنیم و باقی عملیات مطابق زیر به ترتیب انجام میشود:
7-5*(4+6)^2+7.5+1*9-(12+(6 mod 2))
7-5*10^2+7.5+1*9-(12+(6 mod 2))
7-5*10^2+7.5+1*9-(12+0)
7-5*10^2+7.5+1*9-12
7-5*100+7.5+1*9-12
7-500+7.5+1*9-12
7-500+7.5+9-12
-493+7.5+9-12
-485.5+9-12
-476.5-12
-488.5
5-3-3 عملیات ریاضی بر روی متغیرها
هر آنچه درباره ی اولویتها گفته شد برای این بود که شما بتوانید روش محاسبه ی ریاضی توسط ویزوال بیسیک را درک کنید تا در موقع طراحی برنامه قادر به پیشبینی عملیاتی که توسط سیستم انجام خواهد شد باشید. باید توجه داشت این عملیات ریاضی را ویژوال بیسیک مانند یک ماشین حساب برای شما انجام میدهد. شما میتوانید برنامه ای طارحی کنید که عملوندهایش را از ورودی و کاربر بگیرد و عملیات ریاضی خاصی را انجام و سپس پاسخ را در خروجی نمایش دهد. مثلا برنامه ای برای محاسبه ی معادله ی درجه دوم یا محاسبه ی مساحت یک مثلث. همچنین میتوان برنامه ای طراحی کرد که داده های عددی را از کاربر دریافت و نیز از کاربر بپرسد که چه نوع عملیاتی باید روی داده ها انجام شود. مثلا طراحی یک ماشین حساب. در پایان این درس شما باید قادر باشید یک برنامه ی ساده با قابلیت دریافت ورودی و نمایش خروجی طراحی کنید. اگر با چگونگی نمایش خروجی و دریافت ورودی آشنا نیستید، درس چهارم را ببینید.
مثال : برنامه ای طراحی میکنیم که ضرایب یک معادله ی درجه دوم را بگیرد و دلتا را تشکیل دهد:
برای این کار یک پروژه مطابق معمول باز میکنیم و در آن سه TextBox به همراه یک دکمه و 4 لیبل قرار میدهیم.
در خاصیت text برای Label اول، پیغام مناسبی مینویسیم تا به کاربر توضیح دهیم ظرایب معادله را باید در فیلدهای مخصوص وارد کند. سپس سمت چپ هر TextBox یک لیبل قرار میدهیم و به ترتیب در خاصیت text هر یک a,b,c مینویسیم. بعد خاصیت text دکمه را هم "محاسبه" میگذاریم. روی آن دابل کلیک میکنیم تا رویداد کلیک برایش فعال و بلاک کد مخصوص آن اماده شود. بین دو عبارت ...Private sub Button1_Click و End Sub کد زیر را وارد میکنیم. خروجی مطابق شکل 1-5 خواهد بود.
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click Dim a, b, c, delta As Single a = TextBox1.Text b = Textbox2.Text c = Textbox3.Text delta = b ^ 2 - 4 * a * c MsgBox(“دلتا برابر است با : “ & delta, vbInformation + vbOKOnly, “دلتا”) End Sub
شکل 1-5
5-4 توابع عددی
گفتیم برای انجام محاسبات پیچیده تر از اعمال اصلی و معمولی مانند گرفتن لگاریتم و انجام عملیات مثلثاتی بر روی داده های عددی، باید از توابع آماده ی ویژوال بیسیک استفاده کنیم. عموم این توابع در کلاس Math قرار دارند. بنابراین برای استفاده از این توابع باید نام کلاس آن ها یعنی در اینجا Math را نوشته ، سپس یک نقطه قرار داده و نام تابع مورد نظر را بنویسیم در داخل پرانتز باز و بسته هم مقداری که میخواهیم برای تابع بفرستیم چه عدد یا پارامتر قرار میدهیم. این تابع پاسخ را برمیگرداند که ما باید آن را در متغیری ذخیره کنیم. سینتکس مقابل را ببینید :
Dim variableName As Single variableName = Math.func(values Or parameters)
حالا به معرفی چند تابع میپردازیم.
5-4-1 تابع جذر ()Math.Sqrt
این تابع جذر یک مقدار یا پارامتر را بر میگرداند.
X = Math.Sqrt(4) ‘Output => X = 2
5-4-2 تابع قدر مطلق ()Math.abs
این تابع قدر مطلق یک مقدار یا پارامتر را بر میگرداند.
X = Math.abs(-4) ‘Output => X = 4
5-4-3 تابع عدد پی Math.PI
این تابع مقدار دقیق عدد پی را تا 15 رقم اعشار برمیگرداند.
X = Math.PI ‘Output => X = 3.14159265358979
5-4-4 تابع عدد نپر Math.E
این تابع مقدار دقیق عدد نپر را بر میگرداند.
X = Math.E ‘Output => X = 2.71828182845905
5-4-5 تابع سینوس ، کسینوس و تانژانت ()Math.Sin(), Math.Cos(), Math.Tan
این توابع به ترتیب سینوس، کسینوس و تانژانت یک زاویه بر حسب رادیان را بر میگردانند.
مشکل این توابع این است که با زوایای بر حسب درجه نمیتوانند کار کنند. یعنی شما اگر بنویسید :
X = Math.Sin(90) ‘Output => X = 0.893996663600558
پاسخ معادله ی بالا بر خلاف تصور شما عدد یک نخواهد شد. بلکه X = 0.893 . زیرا تابع ()Sin عدد 90 را بر حسب رادیان حساب میکند. برای حل این مشکل همیشه باید قبل از پاس دادن زاویه بر حسب درجه به کلیه ی توابع مثلثاتی در ویژوال استدیو 2015، آن را به زاویه بر حسب درجه تبدیل کنیم. برای این کار از فرمول زیر استفاده کنید :
1º = PI / 180 radian
5-4-6 تابع لگاریتم ()Math.Log
این تابع لگاریتم عدد یا پارامتر را بر حسب یک مبنا بر میگرداند.
X = Math.Log(20, 5) ‘Output => X = 1.86135311614679
5-4-7 تابع رند ()Math.Round
این تابع عدد یا پارامتر را به نزدیک ترین عدد زوج رند میکند.
در مدرسه آموختیم هر گاه قسمت اعشاری عددی از 0.5 کمتر بود، عدد را به عدد قبلی رند کنیم یعنی 11=11.4 و هرگاه قسمت اعشاری عدد برابر یا بزرگتر از 0.5 بود، عدد را به عدد بالاتر رند کنیم یعنی : 13=12.5 .
اما در اکثر زبانهای برنامه نویسی مانند ویژوال بیسیک این قانون اندکی متفاوت است. در کامپیوتر ما انتظار داریم سیستم همیشه سعی کند عدد را به نزدیک ترین عدد زوج رند کند. یعنی 11.5 و 12.5 هر دو به 12 رند میشوند. درک این مطلب حتی در پایگاه داده و زبان SQL به درد شما خواهد خورد:
X = Math.Round(12.5) ‘Output => X = 12
5-4-8 توابع آرک سینوس، آرک کسینوس و آرک تانژانت ()Math.Asin(), Math.Acos(), Math.Atan
این توابع نیز آرک سینوس و کسینوس و تانژانت را محاسبه و پاسخ را بر حسب درجه رادیان بر میگردانند. برای تبدیل رادیان به درجه از فرمول زیر استفاده کنید:
1º = PI / 180 radian
ویژوال بیسیک 2015 دارای توابع زیادی برای کار با داده های عددی است که به برخی از آنها اشاره شد. باقی توابع را خودتان میتوانید با تایپ کلمه ی کلیدی Math و قرار دادن یک نقطه در مقابل آن داخل یک لیست ببینید. هریک را تست کنید و توضیحات IDE را بخوانید. در صورت نیاز در ادامه ی دروس به توابع بیشتری اشاره خواهد شد.
5-5 طراحی یک فرم برای محاسبات ساده
فرمی مطابق شکل 2-5 طراحی کنید و کد زیر را برای برنامه نویسی آن استفاده کنید. در دروس بعدی که با حلقه ها و شرطها آشنا شدید به طراحی برنامه هایی برای محاسبات پیچیده و ماشین حسابهای حرفه ای خواهیم پرداخت. بعد به روشهای جلوگیری از ارور دادن برنامه می پردازیم تا تحت هیچ شرایطی برنامه هایتان هنگ نکند. فعلا اول کاریم و تا همینجا هم شما میتوانید برنامه های کوچک و جالبی بنویسید. همیشه سعی کنید کد را برای خودتان تحلیل کنید که در هر قسمت چه اتفاقی افتاده است. تحلیل کدها تمرین بسیار بسیار مفیدی برای کسانی است که آرزوی برنامه نویس شدن را در سر دارند.
شکل 2-5
Public Class Form1 Public a1, a2 As Double Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load Label5.Text = " " Label6.Text = " " Label7.Text = " " Label8.Text = " " End Sub Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click a1 = TextBox1.Text a2 = TextBox2.Text Label5.Text = a1 + a2 End Sub Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click a1 = TextBox3.Text a2 = TextBox4.Text Label6.Text = a1 - a2 End Sub Private Sub Button3_Click(sender As Object, e As EventArgs) Handles Button3.Click a1 = TextBox5.Text a2 = TextBox6.Text Label7.Text = a1 * a2 End Sub Private Sub Button4_Click(sender As Object, e As EventArgs) Handles Button4.Click a1 = TextBox7.Text a2 = TextBox8.Text Label8.Text = a1 / a2 End Sub End Class
تمرین: برنامه ای بنویسید که مساحت دایره را حساب کند.
عالی بود ممنون