• مقدمه

در جلسات پیشین، با دستورات شرطی IF، ELSE و ELSE IF آشنا شدید و یاد گرفتید که چگونه می‌توان از آن‌ها استفاده نمود. همانطور هم که قبلاً گفته بودیم، تکمیل پروژه ماشین‌حساب به جهت استفاده از چند عملیات ریاضی به‌صورت همزمان، بدون استفاده از دستورات شرطی غیرممکن است.

اکنون که فراگرفتیم که چگونه از دستورات شرطی استفاده کنیم، می‌توانیم خیلی راحت به تکمیل پروژه‌ی خود ادامه دهیم.

  • تکمیل پروژه‌ی ماشین‌حساب

اول از همه، پروژه‌ی ماشین‌حسابی که قبلاً با هم آماده کردیم بودیم را فراخوانی کنید. برای فراخوانی پروژه‌ی‌های ایجاد شده، شما می‌توانید که با استفاده از گزینه Open Project از منوی File، به محل ذخیره‌سازی پروژه‌ی خود بروید و به دنبال فایلی با پسوند «.sln» باشید.

یک button جدید به ماشین‌حساب خود اضافه کنید (جهت انجام عمل تفریق) و Property های زیر را برای آن اعمال کنید:

Name: btnMinus

Font: Microsoft Sans Serif, 16, Bold

Location: آن را در سمت عمل جمع قرار دهید

Size: 49, 40

Text:

بر روی button تفریق خود دابل-کلیک کنید تا وارد بخش کدنویسی شوید. دو متغیر از نوع Bool به شکل زیر خارج از کدهای مربوط به button تفریق قرار دهید؛ درست بالای سر آن! به شکل زیر هم توجه کنید تا بهتر متوجه منظور من شوید:

bool plusButtonClicked = false;

bool minusButtonClicked = false;

1-btnMinus_BooleanVars

اکنون کدهای زیر را در داخل کدهای مربوط به button تفریق خود قرار دهید.

total1 = total1 + double.Parse(txtDisplay.Text);

txtDisplay.Clear();

plusButtonClicked = false;

minusButtonClicked = true;

کدهایتان باید شکلی شبیه به تصویر زیر داشته باشد:

2-btnMinus_Code

تنها کاری که ما در این پروژه اضافه کردیم تا بتوانیم به خواسته‌ی خودمان برسیم، اضافه کردن دو متغیر از نوع Boolean می‌باشد. همانطور که می‌بینید، هنگامی که این دو متغیر را تعریف کردیم، هر دو را حاوی مقدار False (غلط) به سی‌شارپ معرفی نمودیم. همچنین آن‌ها را بیرون از یک button ایجاد کردیم تا تمامی button های مربوط به عملیات ریاضی ما بتوانند به خود متغیرها و مقادیر آن‌ها دسترسی پیدا کنند. دلیل اینکه هر دو را false کردیم آن است که اول شروع برنامه، نه button جمع کلیک خورده است و نه button تفریق؛ پس هر دو false هستند.

وقتی که مثلاً button تفریق کلیک بخورد، ما این‌کار را خواهیم کرد: متغیر minusButtonClicked را True می‌کنیم و plusButtonClicked را False. شبیه همین‌کار را نیز برای button مربوط به جمع نیز انجام خواهیم داد.

اکنون برای کدهای مربوط به button جمع خود نیز، کدهای زیر را طبق تصویر اضافه کنید:

3-btnPlus_Code

اکنون، کاری که باید انجام دهیم، اصلاح بخش button مساوی است. پس به آن بخش مراجعه کنید و کدهای داخل آن را به کدهایی همانند تصویر زیر تغییر دهید:

4-btnEquals_ifStatement

فکر می‌کنم همه چیز در رابطه با کدها واضح است و نیازی به توضیح دادن آن‌ها نمی‌بینم.

الان ماشین‌حساب خود را اجرا کنید و آن را تست کنید. اگر که تمامی مراحل فوق را درست انجام داده باشید، خواهید دید که تمامی محاسبات شما درست جواب داده خواهند شد.

تمرین: پروژه‌ی ماشین‌حسابتان را با اضافه کردن دو عمل اصلی دیگر، یعنی ضرب و تقسیم، کامل کنید. برای این تمرین، شما تنها دو متغیر دیگر از نوع Boolean در کنار متغیرهای Boolean قبلی تعریف خواهید کرد و با اضافه کردن ELSE IF های اضافی، خواهید توانست که این ماشین‌حساب را تکمیل کنید. مابقی کار‌ها نیز فکر می‌کنم تماماً واضح باشد و نیازی به راهنمایی نیست. به تصویر زیر که کدهای مربوط به عمل تفریق را پس از اضافه کردن دو عمل ضرب و تقسیم در کنار جمع و تفریق است، دقت کنید:

5-calculator_Exerciseجهت دریافت این بخش آموزشی بصورت یک فایل PDF، اینجا را کلیک کنید.

نظرات کاربران
اشتراک در
اطلاع از
40 نظرات
فرنوش
13 سال قبل

سلام.
ازتون ممنونم که به مطالب آموزشی سی شارپ سرعت دادید.
باتشکر

Reza
13 سال قبل

خوب بود. ممنون

حسین
13 سال قبل

سلام دوست عزیز
کولاک کردی که داداش!! من ۲ هفته به نت دسترسی نداشتم الان که اومدم کلی ذوق کردم
زنده باشی عزیز کارت واقعا داره-اجرشو ببینی

حسین
پاسخ به  حسین
13 سال قبل

تصییح میکنم:ارزش داره

Praise
13 سال قبل

سلام
اگه بخواییم این پروژه رو به صورت یک نرم افزار مستقل اجرا کنیم چه باید کرد؟
با تشکر از زحماتتون

Praise
13 سال قبل

یه سوال دیگه ، برای کامنت کردن چند خط از برنامه به صورت همزمان باید چه کرد؟َ

Praise
پاسخ به  Praise
13 سال قبل

آقا شرمنده من هر چی میگردم دنبال جواب پیدا نمیکنم ولی به محض این که سوالو اینجا مطرح میکنم جواب پیدا میشه ! :))

Ctrl+K,Ctrl+C
اگه راه دیگه ای هم هست شما بفرمایید ما استفاده میکنیم

حالا اگه بخوابم چند خط رو که کامنت کردیم دوباره برگردونیم به حالت عادی چه باید کرد؟

Praise
پاسخ به  Praise
13 سال قبل

Ctrl+K,Ctrl+U
:)

امید
پاسخ به  Praise
9 سال قبل

دو تا علامت // رو از قبلش بردار

امیر
13 سال قبل

سلام
خیلی ممنون از سایت خوبتون و مخصوصا آموزش بسیار خوبتون.
من وقتی برنامه رو اجرا میکنم هر عددی رو به علاوه یا منها کنم،جواب صفر رو به من نشون میده.btn 14 =mines btn 12 = plus btn 11 = equals
اینم از کد من
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace test1
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}

private void btn1_Click(object sender, EventArgs e)
{
txt1.Text = txt1.Text + btn1.Text;
}

private void btn2_Click(object sender, EventArgs e)
{
txt1.Text = txt1.Text + btn2.Text;
}

private void btn3_Click(object sender, EventArgs e)
{
txt1.Text = txt1.Text + btn3.Text;
}

private void btn4_Click(object sender, EventArgs e)
{
txt1.Text = txt1.Text + btn4.Text;
}

private void btn5_Click(object sender, EventArgs e)
{
txt1.Text = txt1.Text + btn5.Text;
}

private void btn6_Click(object sender, EventArgs e)
{
txt1.Text = txt1.Text + btn6.Text;
}

private void btn7_Click(object sender, EventArgs e)
{
txt1.Text = txt1.Text + btn7.Text;
}

private void btn8_Click(object sender, EventArgs e)
{
txt1.Text = txt1.Text + btn8.Text;
}

private void btn9_Click(object sender, EventArgs e)
{
txt1.Text = txt1.Text + btn9.Text;
}

private void btn0_Click(object sender, EventArgs e)
{
txt1.Text = txt1.Text + btn0.Text;
}

private void btn13_Click(object sender, EventArgs e)
{
txt1.Clear();//.است.بنابراین جلوی آن یک جفت پرانتز تو خالی می گذاریم method یک Clear//
}
double a = 0 , b = 0;
private void btn12_Click(object sender, EventArgs e)
{
a = a + double.Parse(txt1.Text);
txt1.Clear();
bool plusButtonClicked = true;
bool minusButtonClicked = false;
}
private void btn11_Click(object sender, EventArgs e)
{
if (plusButtonClicked == true)
{
b = a + double.Parse(txt1.Text);
}
else if (minusButtonClicked == true)
{
b = a – double.Parse(txt1.Text);
}
txt1.Text = b.ToString();
a = 0;
}

private void btn10_Click(object sender, EventArgs e)
{
txt1.Text = txt1.Text + btn10.Text;
}
bool plusButtonClicked = false;
bool minusButtonClicked = false;
private void btn14_Click(object sender, EventArgs e)
{
a = a + double.Parse(txt1.Text);
txt1.Clear();
bool plusButtonClicked = false;
bool minusButtonClicked = true;
}

}
}

اگه مشکل منو حل کنید خیلی ممنون میشم.
من اسم button ها textbox رو مطابق میل خودم تغییر دادم.
خییییییییییییییییییییییییییییییییییییییییلی ممنون.

امیر
13 سال قبل

آخ آخ آخ آخ
یادم رفتم
متغیر ها رو هم برای راحتی کار تغییر دادم.
total 1 =a
total2 = b
البته چون کدهارو copy paste کردم به هم ریخته شدن.
به بزرگی خودتتون ببخشید.

امیر
پاسخ به  Jeff Mosawy
13 سال قبل

ارسال شد

امیر
پاسخ به  Jeff Mosawy
13 سال قبل

ارسال شد؟؟؟؟؟؟؟؟؟؟

امیر
پاسخ به  Jeff Mosawy
13 سال قبل

نمیدونم چرا ارسال نشد.ولی آپولدش کردم .اینم لینک دانلودش:
[http://amir7613.persiangig.com/test1.rar]

امیر
پاسخ به  Jeff Mosawy
13 سال قبل

سلام آقای موسوی
برنامه رو دیدید؟
به نظرتون مشکلش ار کجاست؟

امیر
پاسخ به  Jeff Mosawy
13 سال قبل

خیلی متشکرم از پاسخگوییتان
ولی یه مشکل دیگه به وجود اومد.
من اون ها رو از بین دو براکت خارج کردم و وارنینگ ها بر طرف شد اما در قسمت کد های دکمه مساوی زیر minesButtonClicked و plusButtonClicked خط قرمز کشیده و این ارور رو میده:
Ambiguity between ‘test1.Form1.plusButtonClicked’ and ‘test1.Form1.plusButtonClicked’
یه ارور دیگه مثل ارور بالایی میده فقط به جای پلاس ، ماینسه

وحید
13 سال قبل

با سلام.
شما در قسمت تفریق کد زیر رو نوشتید که درست نیست و کد مربوط به قسمت جمع هستش. حالا چه کدی باید قرار دهیم؟
total1 = total1 + double.Parse(txtDisplay.Text);

وحید
پاسخ به  Jeff Mosawy
13 سال قبل

این کد موقعی درسته که شما دو تا عدد رو از هم کم کنین.
در مواقعی سه تا یا بیشتر رو بخواین تفریق کنین جواب درست درنمیاد.
یه بار دقیق امتحان کنین.
مثلا اگر بخواییم ۲-۳-۱۵ رو انجام بدیم که ۱۰ بشه اول میاد ۱۵ رو با ۳ جمع میکنه بعد ۲ رو ازش کم میکنه و جوابی که میده ۱۶ هستش نه ۱۰ !

وحید
13 سال قبل

کسی اینجا نیس به من کمک کنه؟؟ گیر همین منها و تقسیم ام!!! :((

وحید
پاسخ به  Jeff Mosawy
13 سال قبل

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

alireza
پاسخ به  Jeff Mosawy
12 سال قبل

سلام جناب مهندس.منم همین مشکل رو برای تفریق دارم .میشه توضیح بدید .میخوام به جای دو عدد برای منها از چن عدد استفاده کنم.با تشکر.

سمانه
13 سال قبل

سلام من برای ممیز کد زیر را نوشتم ولی اشتباه حساب می کنه لطفا کمکم کنید
private void button7_Click(object sender, EventArgs e)
{
textBox5.Text = textBox5.Text + “.”;
total1 += double.Parse(textBox5.Text);

}
مثلا دو عدد 2.2 + 1.1=6.4 که اشتباه است.

حمید
12 سال قبل

با سلام و تشکر فراوان از زحمت های شما
من یه سوالی دارم …یعنی یه برنامه ای میخوام بنویسم که خود اون نرم افزار بر روی مکان مشخصی از صفحه نمایش کلیک کند( و هم دابل کلیک)
و ما تعداد دفعات کلیک و مختصات رو به نرم افزار بدهیم تا نرم افزار بر روی آن کلیک کند
اگه راهنمایی کنید ممنون میشم
fox11101@yahoo.oc

SeyedMuhammad
12 سال قبل

به نام خدا
با سلام
چرا در کد زیر دوبار از total1 استفاده کردید
total1=total1+double.Parse(txtDisplay.Text);
و آن را به صورت زیر ننوشتید
total1=double.Parse(txtDisplay.Text);
لطفا سریعتر پاسخ دهید.

علی
12 سال قبل

با سلام
اگه بخواهیم عملی به شکل زیر انجام دهیم با مشکل مواجه میشیم
۹-۲-۱
یعنی دوبار ‍متوالی تفریق انجام بدیم

Alish
پاسخ به  علی
11 سال قبل

int a;
a = b – c;
a = a -d;
در خط سوم عدد d رو از حاصل تفریق b , c کم می کنیم و توی a میریزیم

امید
9 سال قبل

باسلام!
چطور میشه بررسی کرد که یک کاراکتر خاص موجود هست یا نه؟
میخوام برای ممیز استفاده کنم که اگر کاربر یک ممیز گذاشت دیگه نتونه ممیز بزاره.
ممنون از آموزش کامل و بسیار خوبتون

امید
9 سال قبل

با سلام!
if(firstnumber.Text != “”)
{
firstnumber.Text = firstnumber.Text + “0”;
}
این کد میتونه از گذاشت صفر اول عدد جلوگیری فک میکنم بدردتون بخوره.

امید
9 سال قبل

با سلام!
ببخشید من یه ماشین حساب درست کردم که با ماشین حساب شما یه مقدار تفاوت داره :(
ومشکل اینجاست که با داده های بزرگ مشکل داره و ارور overflow رو میده!
چطوری میتونم برنامه ام رو برای شما ارسال کنم که برام عیب اش رو پیدا کنید؟

این هم کد مربوط به دکمه مساوی:
private void mosavi_Click(object sender, EventArgs e)
{
number1 = int.Parse(firstnumber.Text);
number2 = int.Parse(firstnumber.Text);
javab = 0;
if (what == “+”){javab = number1 + number2;}
else if (what == “-“) { javab = number1 – number2; }
else if (what == “x”) { javab = number1 * number2; }
else if (what == “/”) { javab = number1 / number2; }
else if (what == “^”) { javab = number1 ^ number2; }
result.Text = javab.ToString();
which = 1;
}
۱-متغییر what با فشردن دکمه های عملگرا تغییر میکنه
۲- first number یه تکست باکسه که عدد اول رو میگیره
۳- secondnumber هم به همین صورت
۴- result هم یک تکست باکسه که جواب رو نشون میده
//ببخشید اگه خیلی حرف زدم چون سایت شما بهترین منبع آموزشی هست و منم اون رو به همه معرفی میکنم