آموزش ساخت ماشین حساب مهندسی پیشرفته در #C
سلام بر برنامه نویسان سی شارپ 😉 در این مطلب آموزشی #C ، یاد می گیرین که یک ماشین حساب حرفه ای بسازید که دارای امکانات زیادی باشه.تصویر مربوط به این ماشین حساب رو میتونید مشاهده کنید:
برای مشاهده تصویر با کیفیت خوب روی تصویر کلیک کنید:
امکانات برنامه ماشین حساب مهندسی پیشرفته که در این مطلب آموزشی یاد میگیرید که اونها رو بسازید:
- چهار عمل اصلی جمع و تفریق و ضرب و منها
- نشان دادن عملیات و عددهای واردشده در مراحل قبلی به صورت ریز
- لگاریتم
- جذر
- سینوس
- کسینوس
- تانژانت
- باقی مانده
- Round
- sin-1
- cos-1
- tan-1
- sinh
- cosh
- tanh
- Floor
- Trunc
- e^x
- فاکتوریل
- و …
برای مشاهده ی این آموزش به صورت کامل و همچنین دانلود سورس کد ، باید عضو vip سایت شوید.
خب ابتدا یک پروژه جدید در ویژوال استودیو ایجاد کنید.(اگر با wpf کار می کندی ، یک پروژه wpf ایجاد کنید و اگر با ویندوز فرم کار می کنید یک پروژه windows form application ایجاد کنید)
این آموزش در محیط ویندوز فرم اپلیکیشن انجام میشه.
سپس بعد از آکولاد باز کد public partial class Form6 : Form ، کدهای زیر را قرار بدهید تا متغیرها مقداردهی اولیه بشوند:
double variable1;
double variable2;
int addBit = 0;
int subBit = 0;
int multBit = 0;
int divBit = 0;
int modBit = 0;
int powerBit = 0;
Boolean fl = false;
String s, x;
سپس در رویداد کلیک دکمه ی 1 (عدد1) کدهای زیر را وارد کنید:
{
txtInput.Text = txtInput.Text + Convert.ToString(1);
}
else if (sign_Indicator == 1)
{
txtInput.Text = Convert.ToString(1);
sign_Indicator = 0;
}
fl=true;
متغیر sign_Indicator که یکی از مهم ترین متغیرهای این پروژه است ، تعیین می کند که آیا در هنگام اضافه کردن یک عدد آیا باید مقدار تکست باکس با عددی که کاربر روی دکمه ی آن کلیک کرده جایگزین شود یا اینکه عددی که کاربر روی دکمه ی آن کلیک کرده کنار عددهای قبلی بیاید و افزوده شود.
اگر sign_Indicator برابر صفر بود ، مقدار txtInput برابر مقدار قبلی آن به علاوه ی عددی که کاربر روی دکمه ی آن کلیک کرده می شود.یعنی اگر قبلا مقدار تکست باکس برابر 568 بوده و حالا کاربر روی دکمه ی عدد 7 کلیک کرده باشد ، مقدار فعلی تکست باکس برابر 5687 می شود ولی اگر مقدار قبلی 568 بوده و کاربر مثلا روی دکمه + کلیک کرده و پس از آن روی کمه ی عدد 7 کلیک کرده باشد ، مقدار فعلی textbox باید برابر 7 بشود.
فلسفه ی این کار این است که هنگامی که کاربر مثلا روی دکمه + کلیک می کند ، مقدار متغیر sign_Indicator برابر 1 می شود (رویداد کلیک دکمه + یا دیگر دکمه های عملگر را مشاهده کنید) و در رویداد کلیک دکمه های مربوط به عددها چک می شود که اگر sign_Indicator برابر 1 بود مقدار تکست باکس 1 با عددی که کاربر روی دکمه ی آن کلیک کرده جایگزین شود یعنی دیگر همان مقدار قبلی نباشد و مقدار جدید جایگزین شود.
سپس در رویداد کلیک دکمه ی 2 (عدد 2) کدهای زیر را وارد کنید:
{
txtInput.Text = txtInput.Text + Convert.ToString(2);
}
else if (sign_Indicator == 1)
{
txtInput.Text = Convert.ToString(2);
sign_Indicator = 0;
}
fl=true;
سپس در رویداد کلیک دکمه ی 3 (عدد 3) کدهای زیر را وارد کنید:
{
txtInput.Text = txtInput.Text + Convert.ToString(3);
}
else if (sign_Indicator == 1)
{
txtInput.Text = Convert.ToString(3);
sign_Indicator = 0;
}
fl=true;
سپس در رویداد کلیک دکمه ی 4 (عدد 4) کدهای زیر را وارد کنید:
{
txtInput.Text = txtInput.Text + Convert.ToString(4);
}
else if (sign_Indicator == 1)
{
txtInput.Text = Convert.ToString(4);
sign_Indicator = 0;
}
fl=true;
سپس در رویداد کلیک دکمه ی 5 (عدد 5) کدهای زیر را وارد کنید:
{
txtInput.Text = txtInput.Text + Convert.ToString(5);
}
else if (sign_Indicator == 1)
{
txtInput.Text = Convert.ToString(5);
sign_Indicator = 0;
}
fl=true;
سپس در رویداد کلیک دکمه ی 6 (عدد 6) کدهای زیر را وارد کنید:
{
txtInput.Text = txtInput.Text + Convert.ToString(6);
}
else if (sign_Indicator == 1)
{
txtInput.Text = Convert.ToString(6);
sign_Indicator = 0;
}
fl=true;
سپس در رویداد کلیک دکمه ی 7 (عدد7) کدهای زیر را وارد کنید:
{
txtInput.Text = txtInput.Text + Convert.ToString(7);
}
else if (sign_Indicator == 1)
{
txtInput.Text = Convert.ToString(7);
sign_Indicator = 0;
}
fl=true;
سپس در رویداد کلیک دکمه ی 8 (عدد 8) کدهای زیر را وارد کنید:
{
txtInput.Text = txtInput.Text + Convert.ToString(8);
}
else if (sign_Indicator == 1)
{
txtInput.Text = Convert.ToString(8);
sign_Indicator = 0;
}
fl=true;
سپس در رویداد کلیک دکمه ی 9 (عدد 9) کدهای زیر را وارد کنید:
{
txtInput.Text = txtInput.Text + Convert.ToString(9);
}
else if (sign_Indicator == 1)
{
txtInput.Text = Convert.ToString(9);
sign_Indicator = 0;
}
fl=true;
سپس در رویداد کلیک دکمه ی 0 (عدد 0) کدهای زیر را وارد کنید:
{
txtInput.Text = txtInput.Text + Convert.ToString(0);
}
else if (sign_Indicator == 1)
{
txtInput.Text = Convert.ToString(0);
sign_Indicator = 0;
}
fl=true;
سپس تابع reset_SignBits را به صورت زیر تعریف کنید:
{
addBit = 0;
subBit = 0;
multBit = 0;
divBit = 0;
modBit = 0;
powerBit = 0;
fl = false;
}
سپس در رویداد کلیک دکمه ی + کدهای زیر را وارد کنید:
{
calculate();
reset_SignBits();
addBit = 1;
sign_Indicator = 1;
}
این کد با اصلی ترین تابع این پروژه یعنی calculate رابطه دارد. طرز کار این برنامه به این صورت هست که ابتدا کاربر با استفاده از دکمه ها عدد دلخواهشون رو درون تکست باکس به وجود میاره و سپس با کلیک کردن روی دکمه ی عملگری مثل + تابع calculate و reset_SignBits فراخوانی میشه و به محض اینکه کاربر عدد بعدی رو بخواهد با استفاده از دکمه های عددی به وجود بیاره مقدار تکست باکس با اون عددی که روی دکمه اش کلیک کرده ، جایگزین می شود.(کافیه خودتون پروژه رو اجرا کنید)
شرح کد: ابتدا در یک شرط چک می کند که طول تکست باکس txtInput صفر نباشد که اگر صفر نبود تابع های calculate و reset_SignBits فراخوانی میشوند و مقدار متغیر addBit برابر 1 میشه و مقدار متغیر sign_Indicator هم برابر 1 میشه.
هنگامی که تابع calculate فراخوانی می شود ابتدا در یک شرط چک می کند که مقدار txtInput برابر . نباشد ، چون اگر نقطه باشد کاربر به خطا بر می خورد.خودتان می توانید کدهای مربوط به خطاهای آن را بنویسید.سپس مقدار variable2 برابر مقدار txtInput می شود.
variable2 = Convert.ToDouble(txtInput.Text);
مقدار متغیر addBit از ابتدا صفر بوده است پس هنگامی که تابع calculate فراخوانی می شود در قسمت شرط else if (addBit == 1) کدهای آن اجرا نمی شوند و مقدار f1 هم که برابر true است جون تابع calculate قبل از تابع reset_SignBits فراخوانی می شود و در قسمت دکمه های عددی مقدار متغیر f1 برابر true قرار داده شده است.پس در نهایت تمام if و else ها else نهایی که کد زیر می باشد اجرا می شود:
variable1 = variable2;
یعنی متغیر variable1 را برابر مقدار variable2 قرار می دهد و چون در مرحله ی قبلی مقدار variable2 برابر مقدار txtInput شده بود پس حالا مقدار variable2 با مقدار variable1 با مقدار txtInput یکسان هستند.
و در مرحله ی بعد که کاربر روی دکمه ی مساوی کلیک کرد (برای مشاهده ی کدهای رویداد کلیک دکمه ی مساوی ، به آخرین کد این مطلب مراجعه کنید) کد زیر دوباره اجرا می شود:
variable2 = Convert.ToDouble(txtInput.Text);
پس متغیر variable2 برابر مقدار وارد شده در تکست باکس (عدد دومی که کاربر وارد می کند) می شود و مقدار variable1 هم که قبلا برابر مقدار عدد اولی که کاربر در تکست باکس وارد کرده بود ، است پس الآن کافی است فقط این 2 عدد با هم جمع زده شوند. قبل از آن چند خط بعد را بخوانید تا با فلسفه ی کار آشنا شوید.
در این جا باز هم تابع calculate و reset_SignBits فراخوانی میشوند با این تفاوت که این دفعه مقدار متغیر addBit برابر 1 می باشد.در مرحله ی قبل که کاربر روی دکمه + کلیک می کرد ، مقدار متغیر addBit از ابتدا صفر بوده است و بعد از فراخوانی تابع calculate مقدار متغیر addBit عوض می شد و مقدارش 1 می شد ولی حالا مقدارش 1 است (چون قبلا در رویداد کلیک دکمه ی + مقدارش 1 شده بود) و در همین حال تابع calculate فراخوانی می شود پس در قسمت else if (addBit == 1) کدهای آن قسمت اجرا می شوند (یعنی کدهای زیر) :