jozve c#2 mohamady_zahedy

25
زاهدی- حمدی م برنامه سازی جزوه2 1 برنامه سازی جزوه درس دوC# کننده:یه تهحمدی م- زاهدیرستان هن کتابچی کاشان حرفه ای فنی بهار95

Upload: daneshfd

Post on 05-Jan-2017

138 views

Category:

Education


4 download

TRANSCRIPT

Page 1: Jozve c#2 mohamady_zahedy

محمدی-زاهدی

2جزوه برنامه سازی

1

دوجزوه درس برنامه سازی

C#

زاهدی-محمدی تهیه کننده:

فنی حرفه ای کتابچی کاشانهنرستان

95 بهار

Page 2: Jozve c#2 mohamady_zahedy

محمدی-زاهدی

2جزوه برنامه سازی

2

فصل اول: یادآوری و تکمیل مطالببا ورود به پوشه ی فرمان سطردر نوشت و سپس NotePadروش نوشتن برنامه گفته شد. برنامه را می توان در محیطی مانند 1در برنامه سازی

دشوار زین بزرگ یها برنامه یابی بیع و است ریگ وقت اریبسبرنامه مورد نظر را کمپایل نماییم. این روش CSC.exeو با استفاده از برنامه برنامه

. است

نوشتن برای که است (IDE)متمرکز نویسی برنامه محیط یک از استفاده کرد، استفاده برنامه اجرایی فایل تولید برای توان می که دیگری روش

. ، استفاده نمودیمکه رایگان بود Expressنسخه Visual Studioاست. در برنامه سازی یک از نرم افزار شده طراحی ها، برنامه تر راحت یابی وعیب

که محیط برنامه نویسی رایگان و متن باز دارد و SharpDevelopمانند .های دیگری نیز می باشند که بدین منظور استفاده می شوند IDEالبته

کمتر می باشد. Visual Studioحجم آن نیز نسبت به

:VSدر IntelliSense (Sense Intelligent)امکان

...(متد، کالس، نام)دستور نام از حرف چند نوشتن با برنامه، دستورات تایپ هنگام در کهبرنامه می باشد نوشتن هنگام در ارزشمند امکانات از یکی

دستورات برنامه را باال می برد. نوشتن . این ویژگی سرعتاند شده داده نشان مرتبط دستورات و متدها نام آن در که شود می ظاهر لیستی یا منو

البته با زدن یا فاصله دستور مورد نظر در برنامه قرار می گیرد. TABبا زدن کلید همچنین در نوشتن صحیح امالی دستورات تاثیر زیادی دارد.

نیز لیست ظاهر می شود. CTRL+Spaceکلید

را Parameter information و Auto list members این ویژگی بصورت خودکار فعال می باشد و در صورت غیرفعال بودن از مسیر زیر گزینه های

:باید فعال نمودToolsOptionsText EditorC# General

تفاوت این دو کلید چیست؟ را انتخاب کنید. Ctrl+F5(Start Without Debugging)یا F5(Start Debugging)برای اجرای برنامه کلید

Type Castingتبدیل نوع داده :

( انواع داده به یکدیگر در سی شارپ در صورت امکان implicitتبدیل ضمنی )اندازه و گنجایش هر متغیر توسط نوع داده اش مشخص می شود.

ا می توان واگذار نمود)بصورت ضمنی انجام می شود( ام decimalیا longیا floatیا doubleرا به متغیر نوع intمثال متغیر نوع .انجام می گیرد

واگذار نمود. charیا shortیا ulongرا به متغیر نوع intنمی توان متغیر نوع

توجه :

در تبدیل ضمنی هیچ گاه نمی توان متغیر نوعdouble .را به متغیر نوع دیگر واگذار نمود

در تبدیل ضمنی متغیر نوع floatفقط می توان به متغیر نوع راdouble .واگذار نمود

در تبدیل ضمنی هیچ گاه نمی توان متغیر نوعdecimal .را به متغیر نوع دیگر واگذار نمود

استفاده نمود. type Castingبرای رفع این مشکل می توان از تبدیل صریح یا

خطا دارد ;x=x+1باشد دستور shortیا byteاز نوع xاستفاده می شود. بعنوان مثل اگر بدیل نوعی به نوع دیگر بصورت صریحاین ویژگی جهت ت

گتر را نمی توان در رقدار با گنجایش بزمو از طرفی می دانیم می باشند (بایت 4) intزیرا در سی شارپ اعداد صحیح بصورت پیش فرض از نوع

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

= متغیر مقصد)مقصد داده نوع (مبدأ عبارت

;x=(short)(x+1) بایت( باشد دستور زیر صحیح می باشد 2) shortاز نوع Xپس اگر

: 1 مثال int i = 2; float f = 4.6f; double d = 0.58e1; i = (int)f + (int)d; Console.WriteLine(i); //9 i = (int)(f + d); Console.WriteLine(i); //10 f = (float)(i + d); Console.WriteLine(f); //15.8

: 2مثال char x = 'B'; int a = 2; a = --x + a; Console.WriteLine("{0} ** {1}", a, (char)a); //67 ** C

دقیقا شبیه هم هستند؟ ;age++و ;age=age+1سوال( با توجه به مطالب ارائه شده، آیا دستور

Page 3: Jozve c#2 mohamady_zahedy

محمدی-زاهدی

2جزوه برنامه سازی

3

.نمی توان استفاده نمود و بر عکس رشته ای خاصی به برای تبدیل نوعرا این روش :1نکته

.استفاده کرد Parseباید از متد یا کراکتری برای تبدیل نوع رشته ای به عددی :2نکته string s = Console.ReadLine(); short x = short.Parse(s);

.استفاده می شود ()ToStringداده ی غیر رشته ای به نوع رشته ای از متد برای تبدیل هر نوع :3نکته string s; double d = 12.5; s = d.ToString();

مثال .داده خواهد شد و برنامه متوقف می شود ،خطای زمان اجرا ،داده را از رشته ای به نوع مورد نظر تبدیل کند نتواند Parseمتد اگر :4نکته string s = "12a3"; int i = int.Parse(s);

به را شده تبدیل مقدار ،شود انجام بدیلتاگر متد این شود. استفاده TryParse متد از ، Parse متد از استفاده جای بهمی توان در این صورت

منطقی مقدار یک تولید با بلکه کند نمی قطع را برنامه و دهد نمی نمایش را خطایی نشود عدد تبدیل به موفق اگر و ریزد می خود دوم ورودی

False ، شود می متوجه مقدار این دریافت با نویس برنامه و رساند می نویس برنامه اطالع به را عدد تبدیل در مشکل.

به عنوان مثال، اگر در برنامه زیر کاربر هنگام ورود داده ، عدد وارد نکند پیغام مناسب صادر می شود:

string s = Console.ReadLine(); int i; if (int.TryParse(s, out i)) Console.WriteLine("{0} is valid Number",i); else Console.WriteLine("{0} is invalid number",s);

.قبل از متغیر عددی ضروری است و به این مفهوم است که این پارامتر مقداری را دریافت می کند outنوشتن کلمه TryParseدر متد :5نکته

اگر عمل تبدیل به درستی انجام صفر می باشد.، و همچنین محتوای پارامتر عددی false: اگر عمل تبدیل درست انجام نگیرد خروجی تابع 6هتنک

است و عدد تبدیل شده در متغیر عددی قرار می گیرد. trueشود، خروجی این متد

: برنامه ای بنویسید تعدادی عدد از کاربر بگیرد سپس در انتها مجموع اعداد را نمایش دهد. برنامه

صل جمع را نمایش دهد و برنامه به پایان برسدعدد منفی وارد کرد حااگر کاربر الف(

داده شود. Invalidب( اگر عددی که کاربر وارد می کند نامعتبر باشد پیغام string s; bool b; int n, sum = 0; while (true) { s = Console.ReadLine(); b = int.TryParse(s, out n); if (b == true) { if (n < 0) break; else sum += n; } else Console.WriteLine("{0} is invalid number", s); }

الگوی نمایش :

می توان داده ها را با الگوی خاصی نمایش داد مثال WriteLineیا Writeقبال گفته شد که در متد Console.WriteLine("{0}+{1} is {2}", 12, 18, 12 + 18); // 12 + 18 is 30

.میکن نیمع ازین صورت در زین را راست و چپ تراز نیهمچن و عبارت شینمای قهیطر و الگو می توان شماره{ تراز، عدد :شینما ی}الگو

منظور از شماره ، شماره پارامتری است که می خواهیم نمایش داده شود که از صفر شروع می شود.

Page 4: Jozve c#2 mohamady_zahedy

محمدی-زاهدی

2جزوه برنامه سازی

4

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

اینصورت راست چین می شود.این مقدار منفی باشد مقدار مورد نظر چپ چین و در غیر

الگوی نمایش شامل تعدادی کراکتر می باشد که هر کدام کار خاصی را انجام می دهد.

Console.WriteLine("{0,5}*{1,-5}", 12,13);// 12*13 Console.WriteLine("{0:p} {1:C} {2:E} {2:F}",100,200,300,400);//10,000.00 % $200.00 3.000000E+002 300.00 Console.WriteLine("{0:D} {1:G} {2:N} {2:X}", 14500, 14500, 14500, 14500);// 14500 14500 14,500.00 38A4

#Visual Cکنید و سپس گزینه انتخاب را Insert Snippet گزینه شود می ظاهر که منویی از و کرده راست کلیک نویسی کد پنجره توجه : اگر در

. لذا نیازی به حفظ جزییات و تایپ دستورات دهد نشان می را شارپ سی زبان رزروشده کلمات و دستورات که شود می ظاهر منوییرا انتخاب کنید

ندارید!

عملگر سه تایی : شکل کلی آن بدین صورت است : از آن استفاده نمود. ifبه عملگر سه تایی معروف است و می توان بجای دستور ?عملگر

(یمنطق عبارت) ? اوّل مقدار : دوم مقدار

باشد خروجی مقدار اول است وگرنه خروجی مقدار دوم است. trueاگر عبارت منطقی

.را نمایش دهد "odd" یر این صورت پیغامغو در "even": برنامه ای بنویسید عددی بگیرد اگر زوج بود پیغام برنامه

: 1روش int x = int.Parse(Console.ReadLine()); string st; st = (x % 2 == 0) ? "even" : "odd"; Console.WriteLine(st);

: 2روش

int x = int.Parse(Console.ReadLine()); Console.WriteLine( (x % 2 == 0) ? "even" : "odd");

:while , forیادآوری دستورات

بزرگترین و کوچکترین آنها را نمایش دهید. کاربر دریافت کنید وسه عدد از if( بدون استفاده از تمرین

Format Specifier

C محل کی خاص یپول مقدار

integer D حیصح انواع

E یعلم نماد

F ثابت اعشار نقطه

G یعموم اعداد

N کاما کننده جدا با ثابت اعشار نقطه

P درصد یدارا اعداد

X 16عدد مبنای

int x = int.Parse(Console.ReadLine()); string st; if (x % 2 == 0) st = "even"; else st = "odd"; Console.WriteLine(st);

int x,sum = 0; for (int i = 1; i < 10;i++ ) { x = int.Parse(Console.ReadLine()); sum += x; } Console.WriteLine(sum / 10);

int digits=0, n=int.Parse(Console.ReadLine()); while (n > 0){ int r = n % 10; digits++; n /= 10; } Console.WriteLine(digits);

int k = 10; while (k > 0) Console.WriteLine(k--);

Page 5: Jozve c#2 mohamady_zahedy

محمدی-زاهدی

2جزوه برنامه سازی

5

: constدستور

ری هستند که در برنامه تغییر نمی کنند. ثابت هایی که با یثابت ها مقاد .شود می استفاده const کلیدی کلمه از ثابت نام یا شناسه تعریف برای

شود می نوشته بزرگ حروف با شود می تعریف ثابت ی شناسهبرای که نامی معموالًد را نمی توان در برنامه تغییر داد. نتعریف شو constدستور

ابتدای در که تفاوت این با باشد می متغیرها تعریف مانند ها، ثابت تعریف نحوه ی است. ثابت مقدار شناسه، یک این که باشد مشخص برنامه در تا

دارد. قرار const کلمه آنها تعریفconst int SIZE=12; SIZE++; // error

.ر می توان در هرکجای برنامه تعریف نمودثابت ها را همانند متغی

علت خطای دستور مقابل چیست؟: سوال const int x = 3; { int x = 12; x++; }

حلقه های تو در تو: اگر یک دستور تکرار در داخل دستور تکرار دیگری قرار گیرد، حلقه های متداخل نامیده می شوند.

نوان مثال در دستورات روبرو به ازای هر بار اجرای حلقه بیرونی، حلقه ی به ع

داخلی به طور کامل) چهاربار( اجرا می شود.

جدول ضرب را نمایش دهد؟: برنامه ایی بنویسید که برنامه

: خروجی برنامه زیر را بدست آورید؟1تمرین

بدست آورید؟: خروجی برنامه زیر را 2تمرین

با استفاده از حلقه های تو در تو خروجی های زیر را نمایش دهید؟ :3تمرین

int a,b; for (a = 1; a <= 6; a++) // حلقه بیرونی

{ for (b = 1; b <= 4; b++)// حلقه داخلی

Console.Write("*"); Console.WriteLine(); }

int i,j; for (i = 1; i <= 10; i++) { for (j = 1; j <= 10; j++) Console.Write("{0,4}",i*j); Console.WriteLine(); }

for (int i = 1; i <= 4; i++) { for (int j = 4; j >=1; j--) Console.Write("{0,2}", (i==j)?1:0); Console.WriteLine(); }

for (int a = 1; a <= 5; a++) { for (int b = 1; b < a; b++ ) Console.Write("{0}+",b); Console.WriteLine(a); }

*****

**** *** ** *

Page 6: Jozve c#2 mohamady_zahedy

محمدی-زاهدی

2جزوه برنامه سازی

6

: \کراکتر کاراکتر شود، دیده ای رشته در کاراکتر، این گاه هر است. دار معنی و خاص کاراکتر یک ،\ کاراکتر نویسی سی و سی شارپ ، برنامه های زبان در

همین به شود. می بعدی کاراکتر عملکرد تغییر سبب ،\ کاراکتر دیگر عبارت به. دارد آن شکل ظاهری از جدای خاصی، عملکرد و اثر آن بعدی

.شود می گفته(Escape Sequence) فرار دنباله است، دیگری کاراکتر دومی و \ اول کاراکتر که کاراکترها مجموعه این دلیل به دنباله عملکرد

Beep \aبوق هشدار

Backspace \bحذف کاراکتر

New Line \nایجاد خط خالی

Tab \tفاصله افقی زیاد

'\ ایجاد تک کوتیشن

"\ ایجاد دابل کوتیشن

\\ ایجاد بک اسلش

Enter \r رفتن به ابتدای سطر

: هامثال Console.WriteLine("\"test\"\\"); //"test"\ Console.WriteLine("This is a \htest"); //error Console.WriteLine("This is a \test"); //This is a est Console.WriteLine("Project\build"); //Projecuild Console.WriteLine("I am \na teacher.\b\b\\\rtest"); // I am

testache\. Console.WriteLine("\test\\""); // error

string st = "this is \"test\".\nI am a\tstudent."; Console.WriteLine(st);

: خروجی های برنامه روبرو را بدست آورید؟4تمرین

int a, b; for (a = 1; a < 10; a++) for (b = 0; b < 10; b = b + 2) Console.WriteLine(a * 100 + b * 10 + a);

Page 7: Jozve c#2 mohamady_zahedy

محمدی-زاهدی

2جزوه برنامه سازی

7

: آرایهفصل دومتغیر دادی مهر متغیر می تواند فقط یک مقدار را در خود نگه داری کند. اگر در یک برنامه نیاز به ذخیره ی تعداد زیادی، داده باشد، استفاده از تع

نام قابلخانه هایی از حافظه که پشت سر هم هستند و با یک آرایه، با نام های متفاوت مناسب نیست. در این حالت از آرایه استفاده می شود.

است که هر سلول دارای اندیس است. اندیس ها از صفر شروع می شوند. هم نوعو هم نامدر واقع آرایه تعدادی سلول دسترسی می باشند.

تعریف آرایه باید در دو مرحله انجام گیرد :

داده نوع []آرایه متغیر نام ; : مرحله اول

= متعیرآرایه new داده نوع ]آرایه اندازه[ : مرحله دوم

در مرحله اول نوع آرایه تعیین می شود و در مرحله دوم با مشخص شدن طول آرایه، حافظه برای آن تخصیص می یابد.

:نمود و بصورت زیر تعریف کردیکدیگر ادغام می توان دو مرحله را باint[] x =new int[10];

ه چون از صفر شروع می نبدهیم )یعنی چهارمین خا 15را عدد 3اندیس ی فرض کنید می خواهیم محتوای خانه: دسترسی به عناصر آرایه

شود.(x[3]=6; x[5]=x[3]+8; x[x[3]]=x[5]+2;

سوال( به نظر شما بقیه عناصر آرایه که هنوز مقداردهی نشده اند، چه مقداری دارند؟

استفاده کرد. forبرای دریافت و چاپ عناصر یک آرایه می توان از حلقه ی

عدد از کاربر دریافت کند و سپس از آخر به اول آنها را نمایش دهید؟ 10برنامه ایی بنویسید که برنامه(

عدد از کاربر دریافت کند و سپس اعدادی که از میانگین آنها بیشتر هستند را چاپ کند؟ 10برنامه( برنامه ایی بنویسید که float[] x = new float[10]; string st;

float sum = 0f, average;

for (int i = 0; i < x.Length; i++) {

st = Console.ReadLine();

x[i] = float.Parse(st);

sum += x[i];

}

average=sum/x.Length;

Console.WriteLine("Average = {0:n}", average);

for (int i = 0; i < x.Length; i++)

if (x[i] > average)

Console.WriteLine("{0:n}", x[i]);

می توان آرایه را بهنگام تعریف مقداردهی اولیه هم نمود مثال :int[] x=new int[10] {19,23,45,74,13,26,44,77,20,36};

9 8 7 6 5 4 3 2 1 0 36 20 77 44 26 13 74 45 23 19

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

int[] y=new int[] {24,17,60,19,25,12,43};

6 5 4 3 2 1 0

43 12 25 19 60 17 24

5 4 3 2 1 0 29 28 135 51 29 34

9 8 7 6 5 4 3 2 1 0

16 14 6

مثال(int [] x; x=new int[10];

int[] m = new int[10]; for (int i = 0; i < 10; i++) m[i] = int.Parse(Console.ReadLine());

Page 8: Jozve c#2 mohamady_zahedy

محمدی-زاهدی

2جزوه برنامه سازی

8

int[] z= {19,23,45,74,13,26}; int []z=new int[5]{45,13,12,55,99,66}; //error

استفاده نمی شود. newروش دیگر: در این روش از عملگر int[] c = { 45, 13, 52, 17 };

، نمی توانید اندازه آن را تغییر دهید یعنی نمی توانید عنصری به آن اضافه و یا کم کنید.بعد از ایجاد آرایهنکته(

اندازه از همچنین و کمتر صفر عدد از نباید و شود می کنترل آرایه اندیس محدودهدر هنگام دسترسی به عناصر آرایه، سی شارپ زبان در (نکته

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

مثال: .شود می روروبرint [] k=new int[10]; k[10]=45; // error

نام متغیر آرایه length. .می توان طول آرایه را در زمان اجرا بدست آورد lengthاز ویژگی (نکته

مثال: در زمان اجرای برنامه تعیین می شود.. در این حالت طول آرایه طول آرایه بهنگام تعریف آرایه می تواند متغیر باشد (نکتهint n=int.Parse(Console.ReadLine()); int[] s=new int[n];

اعشاری باشد.یا تعداد خانه های آرایه نمی تواند منفی (نکته

خطای زمان اجرا داده می شود.ده از آرایه ی صادر نمی شود ولی بهنگام استفااگر تعداد خانه آرایه صفر در نظر گرفته شود خطای (نکتهfloat[] x = new float[0]; x[0] = 1f; // Runtime Error

خروجی برنامه های زیر را بدست آورید؟ تمرین(

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

بزرگترین و کوچکترین و میانگین اعداد را محاسبه و نمایش دهید.

foreach دستور حلقه arrayعنصر از داده قابل شمارش تکرار می شود. نوع داده ی روی هر foreachاستفاده کنیم. دستور forرا می توان بجای حلقه foreachدستور

قابل شمارش هستند. stringو

foreach( نام متغیر نوع داده in نام آرایه )

; دستور

گین می از میان بیشتربرای پیمایش آرایه یا مجموعه ها استفاده نمود. در مثال باال برای پیمایش آرایه و نمایش نمرات از این دستور نیز می توان

توان از دستور زیر نیز استفاده نمود : foreach (float item in x)

if (item < average)

Console.WriteLine("{0:n}", item);

در هر بار اجرای حلقه یکی از عناصر آرایه را نشان می دهد) از اندیس استفاده نمی شود( itemمتغیر

استفاده کرد؟ foreachسوال( آیا می توان برای دریافت سلول های آرایه از حلقه

int[] F = new int[10]; F[0] = F[1] = 1; for (int i = 2; i < 10; i++) F[i] = F[i - 2] + F[i - 1]; for (int i = 0; i < F.Length; i++) Console.Write("{0} ",F[i]);

int[] T = new int[10]; T[0] = 1; int x = int.Parse(Console.ReadLine()); for (int i = 1; i < T.Length ; i++) T[i] = T[i - 1] * x; for (int i = 0; i < T.Length; i++) Console.Write("{0} ",T[i]);

int[] T = new int[6]; T[0] = 1; for (int i = 1; i < T.Length ; i++) T[i] = T[i - 1] * i; for (int i = 0; i < T.Length; i++) Console.Write("{0} ",T[i]);

Page 9: Jozve c#2 mohamady_zahedy

محمدی-زاهدی

2جزوه برنامه سازی

9

مثال : برنامه ای بنویسید رشته ای از کاربر بگیرد سپس تعداد کاراکترهای فاصله را در آن نمایش دهد. int count=0;

string st = Console.ReadLine();

foreach (char ch in st)

if (ch == ' ')

count++;

Console.WriteLine("Count Space in {0} = {1}", st, count);

تعداد حروف کوچک آن را محاسبه و نمایش دهید.( برنامه ایی بنویسید که یک رشته از کاربر دریافت کند و سپس تعداد حروف بزرگ و برنامه

:(sort Bubble)مرتب سازی حبابیکه خیلی ساده و ابتدایی می باشد)البته روش های بهتر و سریع تر از این روش نیز وجود داده ها، روش حبابی است یکی از روش های مرتب سازی

سریع( مرتب سازیدارد مانند روش

.شود می انجام (swap) جایی جابه( و compare)مقایسه عمل دو همواره سازی مرتب الگوریتم در

طی شود تا آرایه مرتب شود. )فاز(مرحله n-1تا عنصر باشد در این روش باید nاگر آرایه ای دارای

جای آنها را عوض می کنیم.) یعنی ،( در این روش اولین عدد لیست با دومین عدد لیست مقایسه می شود و اگر ترتیب آنها درست نبود1مرحله

اینکه عدد اولی از دومی بزرگتر باشد(

ض رسپس عدد دومی را با عدد سومی مقایسه می کنیم و اگر ترتیب آنها درست نبود جای آنها را عوض می کنیم. و این کار را تا انتهای لیست) ف

یک حباب( ام می رود) مانند Nانه تا سلول دارد( ادامه می دهیم. عدد بزرگتر به خ Nبر این است که

( دوباره از خانه اول شروع می کنیم و خانه اول را با خانه دوم مقایسه می کنیم و اگر ترتیب آنها درست نبود جای آنها را عوض می کنیم2مرحله

ادامه پیدا می کند. بعد از مرحله دوم عدد بزرگتر بعدی در سلول N-1و سپس عدد دوم وعدد سوم مقایسه می شوند و ......... و این کارتا خانه

یکی به آخر قرار می گیرد.

انجام می شود. N-2مرحله سوم( مرحله سوم نیز مانند مرحله دوم است با این تفاوت که تا خانه

مرحله خواهیم داشت. N-1تا سلول باشد Nداری آرایهاگر

مثال( آرایه روبرو را به روش حبابی مرتب صعودی کنید؟

عمل جابجایی صورت گرفته است 10عمل مقایسه و 15مجموعا در این مثال

تا عنصرباشد به Nدارای آرایهنکته( بطور کلی در روش مرتب سازی حبابی اگر

شود. تا مقایسه انجام می N(N-1) / 2تعداد

9 13 17 10 18 12

6 5 4 3 2 1

9 13 17 10 18 12 9 13 17 10 18 12

9 13 17 18 10 12 9 13 18 17 10 12 9 18 13 17 10 12 18 9 13 17 10 12

عمل مقایسه و چهار جابجایی رخ داده است. 5: 1مرحله

6 5 4 3 2 1

18 9 13 17 10 12 18 9 13 17 12 10 18 9 13 17 12 10 18 9 17 13 12 10 18 17 9 13 12 10

: چهار عمل مقایسه و سه جابجایی رخ داده است. 2مرحله

6 5 4 3 2 1

18 17 9 13 12 10 18 17 9 13 12 10 18 17 9 13 12 10 18 17 13 9 12 10

: سه عمل مقایسه و یک عمل جابجایی رخ داده است 3مرحله

6 5 4 3 2 1

18 17 13 9 12 10 18 17 13 9 12 10 18 17 13 12 9 10

: دو عمل مقایسه و یک جابجایی رخ داده است. 4مرحله

6 5 4 3 2 1

18 17 13 12 9 10 18 17 13 12 10 9

: یک مقایسه و یک جابجایی رخ داده است. 5مرحله

Page 10: Jozve c#2 mohamady_zahedy

محمدی-زاهدی

2جزوه برنامه سازی

10

ه دارد ولی می توان گفت که حداکثر تعداد نکته( تعداد جابجایی ها در روش حبابی را دقیقا نمی توان محاسبببه کرد و بسببتگی به بی نظمی آرای

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

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

عنصری را به روش حبابی مرتب کنیم چند عمل مقایسه انجام می شود؟ 10 آرایهسئوال( اگر بخواهیم یک

45د( 50ج( 15ب( 9الف(

نکته( روش مرتب سازی حبابی کند است.

تا عدد از کاربر دریافت کند و به صورت صعودی مرتب و سپس نمایش دهد؟ nبرنامه( برنامه ایی بنویسید که

سوال( برای مرتب سازی به صورت نزولی برنامه فوق چه تغییری باید داشته باشد؟

سوال( آرایه روبرو را به روش حبابی مرتب کنید و مشخص کنید آرایه بعد از فاز سوم به چه صورت خواهد بود

جستجو در آرایه:جستجو در آرایه، پیدا کردن یک عنصر خاص)کلید( در آرایه است. دو نوع جستجو را در این درس تشریح می کنیم. جستجوی خطی و منظور از

دودویی.

: Liner Searchجستجوی خطی رد آرایه های نامیده می شود مقایسه می شود. جستجوی خطی در مو Search Keyدر جستجوی خطی،هر عضو آرایه با مقداری که کلید جستجو

کوچک یا مرتب نشده خوب عمل می کند ولی برای آرایه های بزرگ و مرتب کارایی بهینه ندارد.

ورت ص در این روش کلید) داده ایی که قرار است جستجو شود( با اولین دادة آرایه مقایسه می شود اگر پیدا شد کار به پایان می رسد در غیر این

دقت کنید که هر موقع کلید پیدا شد، عمل جستجو باید قطع شود. ی شود و این کار تا پایان آرایه ادامه می یابد.با دومین دادة آرایه مقایسه م

باشد در آرایه زیر چند عمل مقایسه انجام می شود تا کلید پیدا شود؟ ) به روش خطی( 12مثال( اگر کلید

دو نکته( اگر در آرایه چند مورد از کلید باشد به روش خطی جستجو کنیم اولین کلید را پیدا می کند و کار جستجو تمام می شود. در مثال باال

که در خانه ششم است پیدا می شود و کار تمام می شود. 12وجود دارد اما اولین 12عدد

ما مرتب شده باشد یعنی داده ها در آرایه صعودی یا نزولی باشند. نکته( در این روش جستجوی خطی الزم نیست که آرایه

عمل آرایهبه تعداد خانه های ،در بدترین حالت جستجوی خطی نکته( در بهترین حالت جستجوی خطی عمل مقایسه یکبار انجام می شود.

عمل مقایسه انجام می N/2جام می شود.در حالت متوسط عمل مقایسه ان Nتا عنصر داشته باشد N آرایهبنابراین اگر مقایسه انجام می شود.

شود. )بطور میانگین نصف اعضای آرایه مورد مقایسه قرار می گیرند(

عنصر باشد در روش جستجوی خطی در بدترین و متوسط چند عمل مقایسه انجام می شود؟ 20سئوال( اگر آرایه ای دارای

int n = int.Parse(Console.ReadLine()); int[] M = new int[n]; for (int i = 0; i < n; i++) M[i] = int.Parse(Console.ReadLine()); for (int i = n - 1; i > 0; i--) for (int j = 0; j < i; j++ ) if(M[j]>M[j+1]) // مقایسه { int temp = M[j]; // جابجایی M[j] = M[j + 1]; M[j + 1] = temp; } foreach (int item in M) Console.Write("{0} ",item);

2 12 17 19 12 7 11 14 13 10

Page 11: Jozve c#2 mohamady_zahedy

محمدی-زاهدی

2جزوه برنامه سازی

11

برنامه(

زیرا تعداد دفعات مقایسه بسیار زیاد می شود.جستجو در آرایه های بزرگ به این روش سبب اتالف زمان می شود

: Binary )دودویی(جستجوی باینری در صورتی که آرایه نامرتب باشد ابتدا باید آن را مرتب کرد. بر روی آرایه های مرتب قابل اجرا است. فقطاین روش

در آن به روش باینری جستجو کنیم: فرض کنید که یک آرایه مرتب صعودی )از کوچک به بزرگ( داریم و می خواهیم کلیدی را

و کلید را با عنصر وسط آرایه مقایسه می کنیم که سه حالت ممکن است رخ دهد: آرایه را از وسط نصف می کنیم

( : در این حالت با توجه به اینکه لیست مرتب )صعودی( است حتما کلید در نیمه سمت Key > A[C]الف( کلید از عنصر وسط بزرگتر باشد)

ست است و ما باید نیمه سمت راست را جستجو کنیم و نیمه سمت چپ را جستجو نخواهیم کرد.را

نیمه سمت چپ وسط نیمه سمت راست

ب( کلید از عنصر وسط آرایه کوچکتر است: در این حالت با توجه به اینکه آرایه به صورت صعودی مرتب است حتما کلید در نیمه سمت چپ

چپ را باید جستجو کرد و نیمه راست را جستجو نخواهیم کرد.است و باید نیمه سمت

ج( در بهترین حالت کلید مساوی عنصر وسط آرایه باشد. در این حالت کلید پیدا شده است و عمل جستجو متوقف می شود.

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

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

تای دیگر را جستجو می کنیم. با مقایسه 500عنصر آن را کنار می گذاریم و 500عنصر داشته باشد با یک مقایسه 1000در این روش اگر آرایه

گر را کنار می گذاریم و .... به همین دلیل سرعت جستجو بسیار زیاد است.عنصر دی 250بعدی

چند مقایسه انجام می شود؟عنصر داشته باشد در جستجوی دودویی حداکثر 1000سوال( اگر آرایه ایی

ند عمل مقایسه انجام می عنصر است در بدترین حالت و بهترین حالت جستجوی یک کلید به روش دودویی و خطی چ 18دارای ای ( آرایهسوال

شود؟

سوال( آیا می توانید یک رابطه ریاضی برای حداکثر تعداد مقایسه ها در جستجوی دودویی حدس بزنید!؟

int i; bool flag = false; int n = int.Parse(Console.ReadLine()); // طول آرایه int[] arr = new int[n]; for (i = 0; i < n; i++) // مقدار دهی آرایه arr[i] = int.Parse(Console.ReadLine()); int key=int.Parse (Console.ReadLine()); //دریافت کلید for (i = 0; i < n; i++ ) // جستجوی خطی if (arr[i]==key) { flag = true; break; } if (flag) Console.WriteLine("{0} Found in {1} ", key, i); else Console.WriteLine("{0} not Found!", key);

Page 12: Jozve c#2 mohamady_zahedy

محمدی-زاهدی

2جزوه برنامه سازی

12

برنامه( جستجوی دودویی در آرایه:

را دریافت و تعداد تکرار آنرا مشخص کنید؟ xتا عدد را از کاربر دریافت و ذخیره کند و سپس عدد nبرنامه( برنامه ایی بنویسید که ابتدا

تا عدد را از کاربر دریافت و دخیره کند و سپس داده ها را به صورت نزولی مرتب کنید. در نهایت اعداد را nبرنامه ( برنامه ایی بنویسید که ابتدا

چاپ کنید بطوریکه اعداد تکراری فقط یکبار نمایش داده شود.

;int[] coin=new int[] {500,1000,2000,5000} دهد؟ ی انجام میستور زیر چه عمل(د1تست

دهد. الف( یک آرایه با پنج عنصر ایجاد کرده و اعداد داده شده را به ترتیب در آن قرار می

دهد. ب( یک آرایه با چهار عنصر ایجاد کرده و اعداد داده شده را به ترتیب در آن قرار می

دهد. ج( یک آرایه با پنج عنصر ایجاد کرده و اعداد داده شده را از آخر به اول در آن قرار می

دهد.د( یک آرایه با چهار عنصر ایجاد کرده و اعداد داده شده را از آخر به اول در آن قرار می

شود. ........................ انجام می سازی همیشه دو عمل .......................... ودر هر الگوریتم مرتب( 2تست

Compare – Searchد( Search – Swapج( Search – Compareب( Compare – Swapالف(

کدامیک از جمالت زیر در رابطه با آرایه صحیح است؟ (3تست

توان اندازه آرایه را تغییر داد. ایجاد آرایه میب( بعد از شود. شروع می 1الف( اندیس آرایه از

شود.استفاده می createد( برای ایجاد آرایه از دستور توان عنصری به آن اضافه یا کم کرد. ج( بعد از ایجاد آرایه نمی

کدام گزینه صحیح است؟ listبرای دسترسی به عنصر پانزدهم از یک آرایه به نام ( 4تست

list[14]د( list[]14ج( list[]15ب( list[15]الف(

int i;bool flag = false; int n = int.Parse(Console.ReadLine()); // طول آرایه int[] arr = new int[n]; for (i = 0; i < n; i++) // مقدار دهی آرایه arr[i] = int.Parse(Console.ReadLine()); Array.Sort(arr); // مرتب سازی آرایه int key=int.Parse (Console.ReadLine()); // دریافت کلید int first=0, last=n-1, middle=0; while(first >= last) { middle = (first + last) / 2; // محاسبه وسط آرایه

if (arr[middle] == key) { flag = true; break; } else if (arr[middle] > key) last = middle - 1; else first = middle + 1; } if (flag) Console.WriteLine("{0} Found in {1} ", key, middle); else Console.WriteLine("{0} not Found!", key);

Page 13: Jozve c#2 mohamady_zahedy

محمدی-زاهدی

2جزوه برنامه سازی

13

متد و کالس شمارشی، دادهفصل سوم : : 1شمارشی داده نوع

شوند. می برنامه خوانایی باالبردن است. استفاده از نوع داده شمارشی سبب داده یک سری شامل خود که است مرکب های داده از شمارشی داده

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

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

کرد. استفاده شمارشی داده نوع از توان می

داده نوع تعریف قرارگیری محل .است public معموالً نوع دسترسی شود. می استفاده enum کلیدی کلمه از شمارشی داده نوع یک تعریف برای

.است برنامه ابتدای در و کالس از خارج معموالً شمارشی، نام دلخواه enum نوع دسترسی { و کلماتلیستی از نام ها

}

)نقطه ویرگول در انتهای لیست وجود ندارد(هر یک از اعضای نوع داده شمارشی معادل با یک عدد ثابت هستند. مثال : public enum DayOfWeek { sat,Sun, Mon,Tue, Wedn,Thurs,Fri }

می باشد که البته می برابر یک و ... Sunو ارزش 0برابر satشامل هفت مقدار می باشد که ارزش dayofWeekدر این مثال نوع داده شمارشی

توان ارزش عددی آنها را تغییر داد. public enum DayOfWeek { Sat=1,Sun, Mon,Tue, Wedn,Thurs,Fri }

برابر یک و ارزش عددی اعضای بعدی یک واحد بیشتر از قبلی می باشد. Satدر این مثال ارزش

:ف نمودیرا بصورت زیر نیز تعر نوع می توان این public enum DayOfWeek { Wedn=5,Sat=1, Mon=3, Sun=2,Tue=5, Fri=7, Thurs=6 }

:مثال .برای استفاده از این نوع ابتدا باید متغیری از این نوع تعریف شود و سپس مقداردهی شود DayOfWeek d; d = DayOfWeek.Thurs; Console.WriteLine(d);

.تعریف گردد اما می توان داخل کالس یا خارج از کالس تعریف نمود Mainاین نوع نباید داخل متد (1نکته

.(حساسیت به حروف کوچک و بزرگ)عدد یا رشته قرار داد و حتما باید یکی از همان مقادیر باشد نمی توانمحتوای متغیر شمارشی را (2نکته

در متغیر نوع شمارشی فقط می توان از عملگر جمع یا تفریق استفاده نمود. (3نکته

این نوع داده را نمی توان از ورودی دریافت کرد)؟؟؟!!!!!( (4نکته

نیز وجود دارد. ConsoleColorمانند داده های شمارشی آماده ، دات نت کتابخانه در (5نکته

مثال : public enum DayOfWeek { sat=1,Sun, Mon,Tue, Wedn,Thurs,Fri } static void Main(string[] args) { DayOfWeek d;

1 Enumerated Type

public enum CAR { Peykan, Pride, Samand, Benz, BMW }

Page 14: Jozve c#2 mohamady_zahedy

محمدی-زاهدی

2جزوه برنامه سازی

14

d = 3; //error d = DayOfWeek.Thurs; Console.WriteLine(d); // Thurs d++; Console.WriteLine(d); // Fri Console.WriteLine((int)d); // 7 d += 100; Console.WriteLine(d); // 107 d = DayOfWeek.Mon - 2; Console.WriteLine(d); // sat d -= 3; Console.WriteLine(d); // -2 d = int.Parse(Console.ReadLine()); // Error d = (DayOfWeek) int.Parse(Console.ReadLine()); //ok type casting if (d == DayOfWeek.Fri) Console.WriteLine(" تعطیل "); if (d == 7) // Error Console.WriteLine(" تعطیل "); }

کالس :

باشد شئ نام با مطابق کالس، )بهتر است نام کند. می مشخص را شئ نوع و بردارد را در شئ یک رفتارهای و وضعیت مشخصات، تعریفکالس،

نویس می تواند یک کالس را تعریف کند. یعنی مشخصات و وضعیت و رفتارهای یک شی را در قالب یک (. برنامه هستیم آن تعریف در حال که

کالس تعریف می کند. توجه داشته باشید که کالس فقط تعریف است و وجود خارجی ندارد)انتزاعی است(.

ن ایجاد اشیاء فراهم شده است و اشیاء با یکدیگر ارتباط و نسبت زبان های برنامه نویسی که در آنها امکان تعریف ویژگی ها و رفتارهای اشیاء و امکا

و جاوا شی گرا هستند. برنامه هایی که به این زبان ها ++C# ،Cزبان های برنامه نویسی نامیده می شوند. 2به هم واکنش دارند، زبانهای شی گرا

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

( :object) شی ء الس نوع شی را مشخص می کند.ک از یک کالس می توان تعداد زیادی شی ایجاد کرد. نمونه ای از کالس می باشد که متولد )ساخته( می شود.شی،

می عملیاتی نیز شئ هر روی برهمچنین .سازد می متمایز دیگر اشیای از را که آن است عملیات و رفتار وضعیت، ویژگی، تعدادی شامل شئ یک

.داد انجام توان

ت یدروس و نمرات ویژگی های کارنامه است و وضعمثال( کارنامه یک دانش آموز می تواند یک شی در نظر گرفته شود. نام و نام خانوادگی و نام

کارنامه می تواند قبول، رد باشد. وارد کردن نمرات، چاپ کردن نمرات یا محاسبه معدل عملیات بر روی کارنامه در نظر گرفته می شود.

سوال( اگر تخته سیاه کالس یک شی در نظر گرفته شود، ویژگی ها و عملیات های آن را نام ببرید؟

.دارد اهمیت بسیار یکدیگر با آنها ارتباط و اشیاء تشخیص گرا، شئ روش به مسئله یک حل یبرا

. گردند می تعریف متدها قالب در اشیاء رفتارهایو شود می مشخص شوند، می نامیده فیلد که متغیر تعدادی وسیله به شئ یک وضعیت و ها ویژگی

.است کالس یک داخل در شئ یک متدهای و فیلدها تعریف مکان و حلم

.… , Title , Capslock , Cursorsizeدارای ویژگی های consoleبعنوان مثال کالس

می باشد

.را دارد get , setقابلیتو stringاز نوع Titleویژگی

.را دارد فقط getقابلیتو boolاز نوع Capslockویژگی

.را دارد get , setقابلیتو intاز نوع Cursorsizeویژگی

2 Object Oriented Language

Page 15: Jozve c#2 mohamady_zahedy

محمدی-زاهدی

2جزوه برنامه سازی

15

(Method)متد :

د می تواند ورودی و خروجی داشتهت. مرود می کار به کوچک مسئله حل یک و خاص عمل یک انجام برای که است دستورات از ای مجموعه متد،

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

.اند بودهMain به نام

: دستورات داخل متد متد بدنه -2 : خط اول متد است.متد عنوان -1:شود می تشکیل قسمت دو از متد، هر

(Modifier) :کننده توصیف

،static کننده توصیف مثال عنوان به .کند می مشخص را متد به دسترسی محدوده و ایجاد روش که شود می شروع ای کلمه با متد یک عنوان خط

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

static, private, protected, publicچهار نوع توصیف کننده عبارتند از :

ای آماده متدهای تمام .دهد می خطا برنامه ترجمه در مترجم ننویسید، را static کننده توصیف اگر باشد static نوع از باید همواره ()Main متد

static متدهای از استفاده. اند شده تعریف قبل از Console کالس در که هستند استاتیک نوع از نیز ReadLine نظیر اید کرده استفاده تاکنون که

.است ساده

محدود کالس یک به را متد به دسترسی محدوده توان می آنها ی وسیله به که دارند وجود protected و private نظیر دیگری های کننده توصیف

.کرد معین محدودیت بدون واقع، در و گسترده بسیار را متد یک به دسترسی محدوده public کننده توصیف از استفاده با یا و کرد

از (کالسی هر)ای برنامه هر در توانید می که است دلیل همین به و اند شده تعریف public کننده توصیف با ()WriteLine و()ReadLine متدهای

.کنید استفاده آنها

گرفته نظر در متد برای فرض پیش طور به private دسترسی نوع ،نشود ذکر متد یک دسترسی محدوده تعیین برای ای کننده توصیف هیچ اگر

. ) خصوصی(شود می

متدی خصوصی باشد آنگاه این متد فقط در همان کالسی که متد در آن تعریف شده است قابل استفاده است و خارج از آن قابل استفاده نیست. اگر

( باشد در بقیه کالس ها نیز قابل استفاده است.publicاما اگر متدی عمومی)

(Return type) : متد برگشتی داده نوع یا خروجی مقدار

روی که آنچه مقدارخروجی، از منظور .می شود مشخص متد برگشتی داده نوع یا خروجی مقدار ها، کننده توصیف از پس متد، عنوان خط در

.کرد ذخیره متغیر یک در را آن توان می و است دریافت قابل اجرای متد طریق از که است مقداری بلکه نیست شود می چاپ نمایش صفحه

می باشد معموال خروجی voidکه خروجی آن از نوع writeLineدها خروجی ندارند مانند متد تدارد اما بعضی م stringکه خروجی ReadLineمانند

م می تواند باشد.ه intمی باشد اما از نوع voidنیز ()Mainمتد

مثال(

باشد نداشته ورودی مقدار یا و خروجی مقدار متد، یک است ممکن نکته(

:متد نام

static int test(float x, byte y) { دستورات // }

Page 16: Jozve c#2 mohamady_zahedy

محمدی-زاهدی

2جزوه برنامه سازی

16

را ها شناسه گذاری نام اصول متغیرها، نام مانند باید متد گذاری نام در .کنیم تعیین را متد نام باید برگشتی، نوع تعیین از پس متد، عنوان خط در

را آن انجام قصد متد، که باشد کاری نوع کننده بیان است بهتر نام این .شود می گذاری نام امری فعل یک صورت به متد نام معموالً .کنیم رعایت

.است نمایش صفحه روی نوشتن برای Write متد و نمایش صفحه کردن پاک برای Clear متد مثال برای .دارد

یارسال پارامترهای لیست

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

نیز متدها از بعضی .شود داده نمایش کنسول صفحه روی باید که باشد رشته یک تواند می ورودی پارامتر Write متد برای مثالً .کنیم مشخص

()Readline متد مانند ندارند ورودی پارامتر

( آن را فراخوانی نمودoverloads 17+)شکل 18که می توان به write: بعضی متد ها را می توان به شکل های مختلف استفاده نمود مانند نکته

مثالConsole.Write(); Console.Write(12); Console.Write("test"); Console.Write('a');

(Method callفراخوانی متد : ) یا استفاده روش

است کافی متد، عنوان از اطالع از پس (بدانیم را آن عنوان خط )البته باید است ساده بسیار آن فراخوانی باشد استاتیک نوع از متدی چنانچه

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

.بنویسید را ویرگول نقطه عالمت انتها در و کنید معین پرانتز داخل در نیز را پارامترها

)مقدار پارامترها( نام متد . نام کالس . فضای نامی;

: 1مثال public static string ReadLine( );

نداردورودی )ها( : string نوع خروجی: public staticتوصیف کننده: ReadLineنام متد :

طریقه فراخوانی : string userName = System.Console.ReadLine( );

Console.WriteLine(System.Console.ReadLine( ));

(overloads 2): 2مثال public static void Beep(int frequency, int duration); public static void Beep();

Public staticتوصیف کننده : Beepنام متد :

)البته می توان بدون ورودی هم استفاده نمود( frequency, durationندارد ورودی )ها( : نوع خروجی:

طریقه فراخوانی : Console.Beep(); Console.Beep(1700,1000);

در چه صورت می توان فضای نامی را هنگام فراخوانی یک متد ننوشت؟سوال(

Page 17: Jozve c#2 mohamady_zahedy

محمدی-زاهدی

2جزوه برنامه سازی

17

آماده های کالس و متدها با کار:فصل چهارما و کالس هدر زبان برنامه سازی سی شارپ تعداد زیادی کالس و متد از قبل آماده وجود دارد که می توان از آنها استفاده کرد. قبال نیز تعدادی از

تعداد زیادی کالس و متد آماده Net Framework.. در کتابخانه و غیره WriteLineیا متد Consoleکار گرفته اید. مانند کالس متد های آماده را ب

وجود دارد. در این فصل سه کالس آماده را معرفی می کنیم.

Mathکالس

عمل یا توان و نظیر دیگری عملگرهای به نیاز اصلی، عمل چهار بر عالوه ریاضی محاسبات انجام برای. قرار دارد Systemاین کالس در فضای نام

استفاده نمود. Mathکه می توان از متد های کالس باشد می غیره و جذر

کالس متدهای از لیستی نقطه، عالمت و Math کالس نام نوشتن محضبه اند. شده تعریفMath کالس در استاتیک متدهای صورت به توابع این

Math ی وسیله به IntelliSense شود می داده نشان

()Pow متد

y توان به x حاصل که باال می باشد دقت عدد اعشاری یک نیز . خروجی متد است باال دقت با اعشاری نوع از y و x عدد دو متد، این های ورودی

.است

25: 1مثالdouble number = Math. Pow (5, 2);

Console. WriteLine (number);

:2مثالConsole. WriteLine (Math.Pow (5, 2)(;

: 3مثالMath.Pow (5, 2);

را محاسبه می کند اما از خروجی آن استفاده نمی کند. 2به توان 5این دستور

می باشد. مثال برای محاسبه مساحت دایره ای به 3.14159265358979323846وجود دارد که مقدار آن PIدر این کالس ثابتی به نام نکته(

می نویسیم: 5.3شعاع double a = Math.PI * Math.Pow(5.3, 2);

(PI* درجه =180/(رادیانفرمول تبدیل درجه به رادیان:

درجه را با سی شارپ محاسبه کنید؟ 30ی وال( سینوس زاویه س

یک ثابت است نه یک متد. Math.PIنکته(

for (int i = 0; i < 10; i++) Console.WriteLine(Math.Pow(2, i));

Page 18: Jozve c#2 mohamady_zahedy

محمدی-زاهدی

2جزوه برنامه سازی

18

Console.WriteLine(Math.Max(100.8, 100.81)); //100.81 Console.WriteLine(Math.Max(-25, -20)); //-20 Console.WriteLine(Math.Min(10, 10)); //10 Console.WriteLine(Math.Min(-100, -200)); //-200 Console.WriteLine(Math.Pow(3, 3)); //27 Console.WriteLine(Math.Pow(-2, 3));//-8 Console.WriteLine(Math.Round(18.6));//19 Console.WriteLine(Math.Round(18.5)); //18 Console.WriteLine(Math.Round(18.55));//19 Console.WriteLine(Math.Sqrt(225)); //15 Console.WriteLine(Math.Sqrt(200)); //14.142135623731 Console.WriteLine(Math.Truncate(70.83)); //70 Console.WriteLine(Math.Truncate(-8.54)); //-8 Console.WriteLine(Math.Abs(70.83)); //70.83 Console.WriteLine(Math.Abs(-70.83)); //70.83

خروجی قطعه کدهای زیر چیست؟A) Console.Write(Math.Round(11.5)); 12

B) Console.Write(Math.Truncate(34.765));

C) Console.Write(Math.Sqrt(64));

D) Console.Write(Math.Log(25,5));

E) Console.Write(Math.Max(Math.Pow(2,3),Math.Pow(2,4)));

int[] arr = { 25, 13, 32, 11, 17, 8, 21, 14, 19, 14 }; int min=arr[0]; // آرایه اول عنصر با دهی مقدار foreach (int x in arr) min = Math.Min(min, x); Console.WriteLine(min);

Page 19: Jozve c#2 mohamady_zahedy

محمدی-زاهدی

2جزوه برنامه سازی

19

: tring Sکالس

string نوع از متغیری توان می نیز ای رشته های برای داده کرد، تعریف عددی های داده نگهداری برای متغیری توان می برنامه در که طور همان

.کند می کاراکترها از آرایه ای به اشاره شود می تعریف نوع این از که متغیری و است یک کالس واقع در داده نوع این .کرد تعریفStrintg st="Computer";

Console.write(st[3]); // p

'St[0] 'Cمی توانیم به کاراکترهای یک رشته دسترسی داشته باشیم.

ایجاد، از پس رشته یک دیگر عبارت به نیست. تغییر قابل محتویات آن شد، ایجاد حافظه در رشته یک اینکه از پس :رشته یک ناپذیری تغییر: نکته

است شده تعریف دوباره که است این مانند گیرد می دیگری مقدار ای متغیر رشته که بار هر که است دلیل این است. (Immutableناپذیر) تغییر

خطا ندارد. "st="testخطا دارد اما دستور st[1]='d'; //errorپس دستور .دهیم تغییر را آن از حرف توانیم یک پس نمی

.دهند نمی تغییر را ای رشته متغیر بنابراین محتوای گردانند. می بر دیگر رشته یک بلکه گذارند نمی تأثیر رشته خود روی ها متد این

مثال : string s = "This is a test"; Console.WriteLine(s.ToLower()); //this is a test Console.WriteLine(s.ToUpper()); //THIS IS A TEST Console.WriteLine(s.Insert(0, "Note,")); //Note,This is a test Console.WriteLine(s.Length); //14 Console.WriteLine(s.IndexOf("i")); //2 Console.WriteLine(s.IndexOf("I")); //-1 Console.WriteLine(s.Replace("This","it"));//it is a test Console.WriteLine(s.Replace("This is", "we have"));//we have a test Console.WriteLine(s.CompareTo("This is a test")); //0 Console.WriteLine(s.CompareTo("A")); //1

C o m p u t e r

p.CompareTo(s)

p>s 1

p < s -1

p == s 0

حرف دو رشته مقایسه می برای مقایسه حرف به

شود و ترتیب مقایسه به این صورت است که اعداد

کوچکتر از حروف هستند و حروف کوچک نسبت

به حروف بزرگ، کوچکتر هستند.

"A" > "a" "ABC">"ali"

Page 20: Jozve c#2 mohamady_zahedy

محمدی-زاهدی

2جزوه برنامه سازی

20

Console.WriteLine(s.CompareTo("U")); //-1

؟با توجه به اعالن متغیر زیر، خروجی قطعه کد های زیر را تعیین کنیدسوال( string s = "I am a student.";

A) Console.Write(s[5]);

B) Console.Write(s.Replace("a","A")); I Am A student.

C) Console.Write(s.IndexOf(" "));

D) Console.WriteLine(s.CompareTo("i am a student"));

E) Console.Write(s.Insert(7,"computer "));

برای کار بر روی آرایه ها می باشد. این کالس برای مرتب سازی و جستجو در آرایه متدهای خاصیرای متدهای این کالس نیز دا: Arrayکالس

مناسب دارد. برخی از این متدها به صورت زیر است:

string[] st = new string[6]; st[0] = "reza"; st[1] = "ali";st[2] = "amir";

Null Null Null Null Null Null

0 1 2 3 4 5

Reza ali amir karim hadi amir

0 1 2 3 4 5

Page 21: Jozve c#2 mohamady_zahedy

محمدی-زاهدی

2جزوه برنامه سازی

21

st[3] = "karim"; st[4] = "hadi"; st[5] = "amir"; int x = Array.IndexOf(st, "amir"); Console.WriteLine(x);//2 x = Array.LastIndexOf(st, "amir"); Console.WriteLine(x);//5 x = Array.BinarySearch(st, "karim"); Console.WriteLine(x);//-1 Array.Sort(st); x = Array.BinarySearch(st, "karim"); Console.WriteLine(x); //4 Array.Reverse(st); string[] ss = new string[4]; Array.Copy(st, ss,4); ss

Array.Clear(st,1,2);

تست(

به صورت زیر تعریف شده باشد، خروجی قطعه کد زیر چیست؟ valueاگر داده شمارشی -1

0123ب( abcdالف(

ج( پیغام خطا صادر می شود د( چیزی چاپ نمی شود

تعریف شده باشد. کدام گزینه نادرست است؟ level از نوع xاگر قطعه کد روبرو را داشته باشیم و متغیر -2

د( ب و ج ;x=0ج( ;x=(level)0ب( ;x=level.aالف(

در قطعه کد زیر کدام دستور خطا دارد؟-3

4د( 3ج( 2ب( 1الف(

؟کدام گزینه است aمقدار متغیر -4

د( خطا 0ج( 1-ب( 1الف(

ali amir amir hadi karim reza

0 1 2 3 4 5

reza Karim Hadi Amir Amir ali

0 1 2 3 4 5

reza Karim Hadi Amir

0 1 2 3

reza null null Amir Amir ali

0 1 2 3 4 5

public enum value { a, b, c, d }; value test; for (test = value.d; test <= value.a; test++) Console.Write(test);

public enum level { a, b, c };

const byte a = 25; //1 a++; //2 byte r = a + 10; //3 const byte A = 350 / 10; //4

string s = "CSHARP"; int a = s.IndexOf("x");

Page 22: Jozve c#2 mohamady_zahedy

محمدی-زاهدی

2جزوه برنامه سازی

22

ایجاد برنامه های ویندوزی با استفاده از ویژوال استودیو

. روند اجرای برنامه های کنسولی به شروع می شود و دستورات خط به خط اجرا می شوند Mainدر برنامه های کنسولی اجرای برنامه از متد

صورت زیر است:

( رخ Event)یشروع می شود با این تفاوت که برنامه منتظر می ماند تا اتفاق یا رویداد Mainنیز اجرای برنامه از متد ویندوزی در برنامه های

.دهد

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

زده شود. Enterدر برنامه های کنسولی وقتی به دستور دریافت داده می رسیم، اجرا برنامه متوقف می شود تا داده ها وارد شود و کلید

در مجدداً مربوطه، عملیات انجام و رویدادها به از واکنش پس ویندوزی های برنامه که، است این کنسولی و ویندوزی برنامه بین دیگر تفاوت یک

.گردد خارج برنامه از کاربر نهایت در برند تا می سر به بعدی رویداد برای انتظار حالت

سیستم طرف از و شود می شناسایی عامل طریق سیستم از رویداد این کند، می کلیک ماوس با کلیدی روی بر کاربر که هنگامی ترتیب این به

اگر که است طبیعی شود. می اجرا خودکار طور به ایم نوشته قبالً که رویداد آن به مربوط EH متد و شود می فرستاده برنامه به پیام یک عامل

.داد نشان نخواهد واکنشی آن مقابل در برنامه بفرستد پیام عامل سیستم که چقدر هر باشد، رویداد یک برای فاقد متدی برنامه

Event Handlerپس در برنامه های ویندوزی، برنامه نویس تعداد متد می نویسد که در ازای رخ دادن هر رویدادی اجرا شوند، به این متدها

گفته می شود.

ای ویندوزی با از اول تا آخر اجرا می شود در برنامه ه Mainترتیب اجرای متدها نیز بستگی به کاربر دارد و برخالف برنامه های کنسولی که متد

توجه به عملی که کاربر انجام می دهد، یک متد اجرا می شود.

است : زیر صورت به EH متد یک کلی شکل

void (جزئیات پیام ، فرستنده پیام)نام متد

{

دستورات واکنش به رویداد

}

Page 23: Jozve c#2 mohamady_zahedy

محمدی-زاهدی

2جزوه برنامه سازی

23

. مثال(است رویداد جزئیات به مربوط دوم پارامتر کند و می مشخص را پیام فرستنده شئ نوع اولی که است ورودی پارامتر دو دارای EH متد هرprivate void Form1_KeyPress(object sender, KeyPressEventArgs e) {

کدهای متد }

کاربر یکیگراف واسط

این د.قرار دهی آن روی را ها نوشته و تصاویر منوها، ها، دکمه انواع تا باشید داشته اختیار در فرمی یا صفحه باید ویندوزی برنامه یک ساخت در

فرم صفحه ای است که اجزای گرافیکی گوناگونی بر روی آن قرار می گیرد. شود. می نامیده GUI 3یا کاربر گرافیکی واسط فرم،

را انتخاب کنید. Visual C# Windows Form Applicationگزینه New Projectبرای ایجاد یک برنامه ویندوزی در قسمت

IDEهای پنجره با آشنایی

.( : در این پنجره نام و آیکن کنترل های قابل استفاده دسته بندی شده اندToolbox) جعبه ابزار

Auto Hideهستند که بوسیله آن می توانید قابلیت (PushPinپنجره ها دارای دکمه ای به نام پونز)

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

جعبه ها به طورخودکار مخفی می شوند.

برای قرار دادن یک کنترل بر روی فرم می توان آن را از جعبه ابزار بر روی فرم درگ کرد یا اینکه بر

روی آن دابل کلیک کرد.

استفاده در برنامه در این پنجره مشاهده می : لیست فایل های مورد Solution Explorerپنجره

Program.csدستورات یک برنامه ویندوزی در سه فایل شود و برای مدیریت پروژه استفاده می شود.

قرار Program.csدر فایل Mainمتد قرار می گیرد. Form1.Designer.csو Form1.csو

دارد.

را فشار دهید پنجره Shift+F7کنید یا کلید کلیک View Designerدر این پنجره اگر بر روی

.را فشار دهید Ctrl+Alt+0یا کلید View Code طراحی فرم ظاهر می شود و همچنین برای مشاهده دستورات فرم

دارد. قرار دیگری فایل در Form1 کالس تعریف از بخشی که دهد می نشان partial کلیدی کلمه Form کالس تعریف عنوان خط( در 1نکته

در کدام فایل؟

Form1.Designer.csبه طور خودکار کدهای ایجاد آن شی و تنظیمات آن را در فایل VSهنگامی که یک کنترل را بر روی فرم قرار می دهید،

در این فایل است. هر کنترلی که به فرم اضافه می Form1قرار می دهد. بنابراین بقیه تعریف کالس

کنید این فایل تغییر می کند.

ر سمت چپ شان عالمت + می باشد که با کلیک ددر بخش مشاهده دستورات، بعضی قسمت ها (2نکته

شده و دستورات داخل آن نمایش داده می شود که این کار را شما می –روی آن تبدیل به عالمت

.نیز ایجاد کنید region …. #endregion#دستور راهنمای توانید با

و : برای مشاهده ویژگی های اشیا و همچنین رویداد ها می توان استفاده نمودPropertiesپنجره

ویژگی ها را می توان هم بر حسب حروف الفبا و هم عملکرد آنها دسته بندی نمود.

موجود روی فرم را مشاهده کرد.در این پنجره می توان نام کنترل های

برای تغییر ویژگی های هر کنترل باید آن کنترل را ابتدا انتخاب کنیم تا ویژگی های آن در پنجره

Properties .نمایش داده شوند

3 Graphical User Interface

Page 24: Jozve c#2 mohamady_zahedy

محمدی-زاهدی

2جزوه برنامه سازی

24

آنها را دوباره به نمایش بگذارید. viewدر صورتی که هر کدام از پنجره های فوق، بسته شده باشند می توانید از منوی

برحی ویژگی های فرم :

Textرشته ای( : مشاهده و تغییر عنوان فرم(

RighToLeft( برای پشتیبانی از زبان های راست به چپ :Yes/NO)

Font تغییر نام ، سبک و اندازه فونت شی :

ForeColor لم فونتق: رنگ

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

چپ باالی فرم می باشد(

را بکار ببرید. Center in Formگزینه Formatبرای قرار دادن یک کنترل در وسط فرم می توانید بعد از انتخاب آن از منوی

FormBorderStyle )سبک یا شکل ظاهری فرم را تعیین کنیم مثال اگر گزینه :)فقط برای فرمSizeable غییر سایز داد و اگر باشد فرم را می توان ت

.باشد اندازه فرم ثابت و قابل تغییر نیست FixedSingleگزینه

ControlBox)خروج و کمینه بیشینه، های آیکن و پنجره آشکار یا پنهان کردن : برای)فقط برای فرم

Anchor: طرفین از فاصله داشتن نگه ثابت برای

SizeMode در کنترل :PictureBox اگر گزینه .استفاده می شود و جهت تعیین اندازه تصویر استفاده می شودStretchImage ،انتخاب شود

تصویر در جعبه تصویر جاسازی می شود.

Image: برای آوردن تصویر داخل شیء

اضافه Resourcesاین فایل در فولدر کردن آن یک کپی از فایل مورد نظر به فایلهای پروژه اضافه می شود. Importنکته( با انتخاب یک تصویر و

می شود) پوشه منابع(.

مقدار دهی اولیه ویژگی های اشیا را می توان مشاهده کرد. ()InitializeComponentمتد Form1.Designer.csنکته( در فایل

:د شی آشنایی با چن

Label برچسب (جهت نمایش متن روی فرم( :

PictureBox )جهت نمایش تصویر )جعبه تصویر :

Button دکمه :

سواالت:

در پوشه ی......... قرار می گیرند. Solution Explorerتصاویری که به پروژه اضافه می شوند در پنجره -1

Programد( Referenceج( Resourceب( Propertiesالف(

;Pic1.image=Button1.Backgroundimageبا اجرای دستور مقابل چه اتفاقی می افتد؟ -2

نمایش داده می شود Pic1الف( تصویر زمینه ی دکمه در کنترل

در زمینه ی دکمه قرار می گیرد Pic1ب( تصویر موجود در کنترل

تور خطا داردج( دس

د( تصاویر موجود در دو کنترل با هم جابجا می شود.

Page 25: Jozve c#2 mohamady_zahedy

محمدی-زاهدی

2جزوه برنامه سازی

25

برای تغییر موقعیت کنترل ها در زمان اجرا از کدام مشخصه استفاده می شود؟ -3

Locationد( Left ,Topج( Right, Bottomب( Moveالف(

در کدام فایل قرار دارد؟ Main در برنامه های ویندوزی، متد -4

Designerد( Form1.Designer.csج( Form1.csب( Program.csالف(

برای مشاهده دستوارت فایل فرم از کلید میانبر استفاده می شود؟ -5

Shift+F7د( F7ج( Ctrl+F5ب( F5الف(

برای ثابت ماندن فاصله ی کنترل ها نسبت به فرم، از کدام ویژگی استفاده می شود؟ -6

Lockedد( Locationج( Sizeب( Anchorالف(

خروجی برنامه روبرو کدام گزینه است؟ -7

5ب( 2الف(

د( خطا در برنامه وجود دارد BENZج(

خروجی برنامه زیر چیست؟-8

5ج( 6ب( 4الف(

3د(

توان استفاده کرد؟ نمیبرای دریافت عناصر یک آرایه از کدام حلقه -9

do whileد( foreachج( whileب( forالف(

خروجی برنامه روبرو کدام است؟-10

تا * 14ب( *تا 10الف(

تا * 18تا * د( 30ج(

همواره باید از نوع ....................... باشد و اگر توصیف کننده را ننویسیم، مترجم خطا می دهد. Mainمتد -11

staticد( Protectedج( Privateب( Publicالف(

خروجی قطعه برنامه روبرو چیست؟-12

hasaiج( hasaniب( hasanالف(

د( خطا

int[] a = {1, 2, 3, 4, 5, 6, 7, 8, 9 };

int[] b= {5, 4, 8, 3, 1, 7, 5, 9, 2};

int cnt = 0;

for (int i = 0; i < a.Length; i++)

if (a[i] > b[i])

cnt++;

Console.WriteLine(cnt);

for (int a = 0; a < 6; a++)

for (int j = a; j < 5; j++)

if (a == 4)

break;

else

Console.Write("*");

string st = "hasan";

st.Insert(st.Length , "i");

Console.WriteLine(st);

public enum CAR { PEYKAN,PRIDE=4,BENZ,SAMAND,BMW} static void Main(string[] args) { Console.WriteLine(CAR.BENZ); }