به نام خالق زیبایی ها
در این پست قصد دارم برنامه ParityCheck( بررسی تعداد زوج بودن یا نبودن 8 بیت در شبکه کامپیوتری) رو خدمتتون آموش بدم، امیدوارم کمکی کرده باشم برا بچه هایی که درس شبکه در دانشگاه قراره پاس کنن و همه عزیزان و همراهان Virus32.
همراه ما باشید.
خب برای ابتدای کار شما یک وبفرم(WinForm) تو سی شارپ میسازید و نیاز به تعدادی:
1- 9 عدد Lable (برای نمایش و ...)
2- 1 عدد TextBox (وارد کردن بیت های ورودی )
3- 2 عدد Button (یکی برای نمایش و یکی برای برگشت)
4- 1عدد CheckBox (اضافه کردن نویز به داده ورودی در صورت نیاز)
هرجای کد نیاز به توضیح باشه حتما توضیحش رو میدم و نه بصورت کلی.
این تعداد کنترل های مورد نیاز رو با توجه به تصویرقرار میدم(میتونه سلیقه ای باشه) ولی حتی الامکان با توجه به تصویر جاگذاری بشه بهتره.
خب حالا میریم سراغ کد نویسی. با توجه به تصویری که براتون گذاشتم دارم کد نوشته شده است.
1- کد زیر رو سراسری تعریف کنید
آرایه تعریف میکنیم برای ورودی که جلوتر کار دارین باهاش
int[] array_input;
2- روی Button اولی(اجرا کن) دوبار کلیک میکنیم و قطعه کد زیر رو مینویسیم.
توضیحات رو تو کد دادم که گله مند نشید:
int input = -1;
input = textBox1.Text != "" ? int.Parse(textBox1.Text) : -1;
if (input > 11111111 || input < 0 )
{
MessageBox.Show("داده شما به درستی وارد نشده است","سیستم",MessageBoxButtons.OK,MessageBoxIcon.Warning,MessageBoxDefaultButton.Button1);
textBox1.Clear();
textBox1.Focus();
input = -1;
}
else
{
string me = "";
bool result = true;
Add_Array(input);
if (checkBox1.Checked)
{
Make_Noise();
}
me = Messageboxshowing_array();
label1.Visible = true;
label1.Text = me;
label2.Visible = true;
label3.Visible = true;
label4.Visible = true;
label4.Text = textBox1.Text;
label5.Visible = true;
label6.Visible = true;
label7.Visible = true;
label7.Text = array_input[8].ToString();
result = CheckParity();//تابع چک کننده درست بودن یا نبودن رو میریزه تو یه متغییر
label8.Visible = true;
label8.Text = array_input[8].ToString();
label9.Visible = true;
//اگه نویزی وارد بشه و مقدار 8 بیت رو تغییر بده داده با خطا مواجه گردید
if (!result)
{
label9.Text = " داده با خطا دریافت شده است ";
label9.ForeColor = Color.Red;
}
else//در غیر اینصورت داده به درستی رسیده است
{
label9.Text = " داده به درستی دریافت شده است ";
label9.ForeColor = Color.Green;
}
}
2- خب حالا زمان نوشتن توابعی هستش که قراره برنامه رو اجرا کنن.
اولبن تابع Add_Array هستش که داده 8 بیت رو از ورودی میگیره و داده که از سمت چپ وارد کردیم رو باید با محاسباتی که نوشته شده بررسی کنه و از سمت راست اضافه بشه و داده ما در این تابع بصورت کامل ذخیره میشه و در توابع دیگر نیاز داریم خیلی بهش:
public void Add_Array(int x)
{
array_input = new int[9]; //برای نشون دادن زوج (0)و فرد (1) هستش
for (int i = 7; i >= 0; i--)
{
array_input[i] = x % 10;
x = x / 10;
}
array_input[8] = Checkeven() ? 0 : 1;
}
3- خب حالا این تابع موظف هستش با توجه به تابع قبلی که داده رو ذخیره کرده بیاد و زوج بودن این داده رو بررسی کنه، میپرسین چطوری؟
خب ما میدونیم که زوج بودن فرمولش چیه(هر عددی که باقی مانده اون بر 2 برابر 0 بشه زوجه دیگه)
دقیقا همین کار این تابع انجام میده:
public bool Checkeven() { int c = 0; bool even = false; for (int i = 0; i < 8; i++) { if (array_input[i]==1) { c++; } } if (c % 2 == 0) { even = true; } return even; }
4- تابع بعدی ایجاد نویز برای داده ورودیمونه:
public void Make_Noise() { /* تابع ایجاد نویز بصورت رندوم و قرار گیری اون تو 8 بیت ورودی */ int x = 0; Random R = new Random(DateTime.Now.Millisecond); x = R.Next(0, 7); array_input[x] = array_input[x] == 0 ? 1 : 0; }
5- تابع Messageboxshowing_array میاد داده رو بصورت کلی ذخیره میکنه و جهت نمایش نشون میده چه با نویز و چه بدون نویز:
public string Messageboxshowing_array() { string myarray = ""; for (int i = 0; i < 8; i++) { myarray += array_input[i]; } return myarray; }
6- و آخرین تابع CheckParity میباشد که قاره درستی داده هارو بررسی کنه که داده ای که ما ذخیره کردیم؛ همون داده ای هست که سمت گیرنده دریافت شده؟
اگه درست همونی که ما وارد کردیم، فرستنده گرفت که جوابش درست در میاد
اگه داده ما که وارد کردیم و زمانی که نویز وارد شده و این دو مقدار برابر هم نباشد که جوابشو میشه خیر
توسط این تابع رله میشه:
public bool CheckParity() { bool correct = true; int new_parity = -1; new_parity = Checkeven() ? 0 : 1; if (new_parity != array_input[8]) { correct = false; } array_input[8] = new_parity; return correct; }
7-پیشفرض تمامی Lable ها رو غیر قابل رویت(پنهان) میکنیم و در دکمه دومی این قطعه کد رو مینویسیم که برگشت رو همینطور کنه:
private void button2_Click(object sender, EventArgs e) { textBox1.Text = ""; checkBox1.Checked = false; label1.Visible = false; label2.Visible = false; label3.Visible = false; label4.Visible = false; label5.Visible = false; label6.Visible = false; label7.Visible = false; label8.Visible = false; label9.Visible = false; }
حالا کد ما تموم شده و آماده اجراست.
قبل از اون یک قطعه کد دیگه هم هست برای محکم کاری نوشته میشه میشه که جلوی داده غلط به TextBox رو میگیره پس برید Event تکس باکس و KeyPress رو پیدا کنید و این کد رو بنویسید
if(!char.IsControl(e.KeyChar)&&!char.IsDigit(e.KeyChar)||e.KeyChar>'1') { e.Handled = true; MessageBox.Show("فقط عدد"); }
کد ما به سلامتی بطور کامل تموم شده
اگه جایی مبهم بودبراتون سوال بفرمایید، من و دوستای عزیزم در خدمتتونیم.
امیدوارم در تمامی مراحل زندگیتون موفق باشد.
سلام خسته نباشید
این جریان به چه دردی میخوره؟
یعنی زوج یا فرد بودنش رو بفهمیم چی میشه؟