حل تمرین شماره ۱۴
بدون شک این تمرین برای دوستانی که مقالات زنگ سیشارپ را دنبال میکنند تا حدی مشکل بود بنابراین اگر موفق به حل آن نشدید اصلاً نگران نباشید. هدف از قرار دادن این تمرین این بود که با برنامههای بزرگتر آشنا شوید و ارتباط بین اشیاء در برنامهها را بهتر و بیشتر درک کنید.
برای نوشتن هر برنامهای، ابتدا میبایست آن را برای خودتان (تا آنجا که میتوانید) تجزیه و تحلیل کنید و مستقیماً Code Editor را باز نکرده و شروع به برنامهنویسی نکنید! مسلماً اگر تازهکار باشید و برای نوشتن برنامه، بدون تحلیل اولیه مستقیماً سراغ کدنویسی بروید، احتمالاً بیشتر دچار مشکل میشوید بنابراین سعی کنید همیشه تحلیل اولیه را انجام دهید، هرچند که تحلیل کاملی نباشد!
لازم به ذکر است که حل این تمرین بر اساس مباحثی است که تاکنون مطرح شدهاند و این تمرین میتواند از راههای بهتر و کدنویسی بسیار تمیزتری حل شود. بنابراین ما این تمرین را بر اساس مباحثی که تا قسمت ۲۷ گفته شدهاند انجام میدهیم.
در این برنامه قصد داشتیم یک جعبهی موسیقی درست کنیم. این جعبهی موسیقی شامل یکسری خواننده است بنابراین یک کلاس برای MusicBox تعریف میکنیم که شامل آرایهای از خوانندهها است. نکتهی قابل توجه در این برنامه آهنگها هستند زیرا در نهایت کاری که انجام میدهیم، یکسری عملیات بهروی آهنگهاست پس نیاز است تا یک تعریف برای آهنگ داشته باشیم. به نظر شما یک آهنگ چه چیزهایی دارد؟ اگر آلبوم یا آهنگی را بهصورت اورجینال تهیه کنید یه سری اطلاعات را در مورد آن اثر میتوانید روی کاور آن آلبوم یا آن آهنگ ببینید. این اطلاعات میتوانند نام آهنگ، نام صاحب اثر، آهنگساز، تنظیمکننده، ترانهسرا، سبک آهنگ و سال انتشار باشند ما نیز به همین اطلاعات بسنده میکنیم. بنابراین برای این منظور کلاسی بهنام Tune تعریف میکنیم:
class Tune { private string TuneName; private string Composer; private string Songwriter; private string Arrangement; private string TuneOwner; private string TuneGenre; private ushort TuneYear; }
فعلاً از نوشتن متد و constructor ها صرفنظر میکنیم و در جای خود به آنها میپردازیم.
در مرحلهی بعد میبایست یک تعریف برای خواننده (Artist) داشته باشیم. از اینرو یک کلاس برای Artist تعریف میکنیم. فکر میکنید یک هنرمند (خواننده) برای اینکه در برنامه ما باشد به چه چیزهایی نیاز دارد؟ مسلماً هر خواننده اسم، فامیل، تعدادی آلبوم و تعدادی تکآهنگ دارد. بنابراین به فیلدهایی برای نام و نام خانوادگی و آرایهای برای ذخیره آلبومها و آرایهای برای ذخیرهی تکآهنگها نیاز داریم. همچنین باید بتوانیم برای این خواننده آلبوم و تک آهنگ اضافه کنیم پس متدهایی برای این منظور در نظر میگیریم:
class Artist { private string ArtistName; private string ArtistFamily; private Album[] Albums; private Tune[] SingleTunes; public void AddAlbum() { // ... } public void RemoveAlbum() { // ... } public void AddSingleTune() { // ... } public void RemoveSingleTune() { // ... } }
متدها و constructor اجرایی مربوط به این کلاس را بعداً تکمیل خواهیم کرد. در مرحلهی بعد باید بدانیم یک آلبوم چه ویژگیهایی میتواند داشته باشد. آلبوم نیز شامل اسم آلبوم، صاحب اثر، سبک آلبوم، سال انتشار آلبوم و تعدادی آهنگ است. همچنین به متدهایی برای اضافه و حذف کردن آهنگهای آلبوم نیاز داریم:
class Album { private string AlbumName; private string AlbumOwner; private string AlbumGenre; private ushort AlbumYear; private Tune[] Tunes; public void AddTune() { // ... } public void RemoveTune() { //... } }
تا اینجا کلاسهایی که یک جعبهی موسیقی میتواند داشته باشد را مشخص کردیم. این کلاسها باید به طریقی به هم مرتبط شوند تا دادهها بتوانند بین اشیایی که از کلاسها ساخته میشوند، انتقال یابند. برای همین منظور بهجای اینکه همهی کدها و ارتباط بین کلاسها را در متد ()Main بنویسیم، کلاسی به اسم UI تعریف میکنیم و ارتباط لازم را در آن کلاس برقرار میسازیم و در نهایت در متد ()Main کلاس UI را به اجرا در میآوریم تا برنامه اجرا شود. برای این منظور کلاس UI را (بهطور خلاصه) به شکل زیر تعریف میکنیم:
class UI { public string ShowMenu() { Console.Clear(); Console.WriteLine(); Console.WriteLine("╔═════════ Music Box ═════════╗"); Console.WriteLine("║ ║"); Console.WriteLine("║ 1. Add Artist ║"); Console.WriteLine("║ 2. Show Artists ║"); Console.WriteLine("║ 3. Exit ║"); Console.WriteLine("║ ║"); Console.WriteLine("╚═════════════════════════════╝"); Console.WriteLine(); Console.WriteLine("▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒"); Console.WriteLine(); Console.Write("Pick out a number: "); return Console.ReadLine(); } public void Proccess(string choice) { switch (choice) { case "1": // Add Artist break; case "2": // show Artists break; case "3": // Exit break; default: Console.WriteLine("Invalid Choice!"); break; } } }
کلاس UI کلاسی شلوغ و پر از کد است چراکه همهی کارها بهطور عمده در همینجا انجام میشود. البته تا حد ممکن از متد و شیگرایی استفاده خواهد شد اما همانطور که ذکر کردیم حل این تمرین با توجه با مباحثی که تا اینجا مطرح شده انجام میشود و بهتر است بدانید این روشی که با آن، تمرین را انجام میدهیم تا حد زیادی غیر استاندارد است و در دنیای برنامهنویسی حرفهای جایی ندارد. اما دلیلی برای نگرانی نیست چراکه شما باید پله پله مراحل برنامهنویسی حرفهای را طی کنید و مطمئن باشید نمیتوانید یک شبه ره صد ساله را بروید.
در متد ()Main برنامه بهطور کامل بههم مرتبط و قابل اجرا میشود:
class Program { static void Main() { UI engine = new UI(); while (true) { engine.Proccess(engine.ShowMenu()); Console.ReadLine(); } } }
برنامه ما به این ترتیب قابل اجرا خواهد بود. هنگامیکه برنامه را اجرا میکنید میتوانید از بین سه گزینهی انتخابی یکی را انتخاب کرده تا کدهای مربوط به هر قسمت اجرا شود اما همانطور که میبینید، متد ()Proccess که عملیات مربوط به هر قسمت را انجام میدهد، خالی و تنها شامل یک دستور switch است.
در مرحلهی بعد، برای اینکه بتوانیم از کلاسهایی که تعریف کرده بهتر استفاده کنیم، برای هر کدام constructor تعریف خواهیم کرد. با کلاس MusicBox شروع میکنیم. همانطور که پیشتر بیان شد، MusicBox شامل آرایهای از خوانندهها است. این کلاس نیز میتواند متدهایی بهمنظور کم و زیاد کردن و نمایش خوانندهها داشته باشد:
class MusicBox { // Fields public Artist[] Artists; // Constructor public MusicBox(ushort size) { Artists = new Artist[size]; } // Methods public bool AddArtist() { // ... } public void RemoveArtist() { // ... } public void ShowArtists() { // ... } }
همانطور که میبینید، این کلاس شامل یک فیلد بهنام Artists (که آرایهای از جنس Artist است)، یک constructor و سه متد است. البته در طی تکمیل برنامه فیلدها و متدهایی به برنامه افزوده میشود. در constructor این کلاس، آرایهای از جنس Artist ساخته شده که اندازهی این آرایه، در حین ساختن شیء از MusicBox مشخص میشود.
در قسمت بعد به کلاس Artist یک constructor اضافه میکنیم. هنگامیکه یک شیء از Artist ساخته میشود چه اطاعاتی را باید مقداردهی شوند؟ بهنظر میرسد نام و نامخانوادگی، تعداد آلبوم و تعداد تکآهنگهای منتشر شده از آن خواننده بهتر است که در constructor مشخص شوند:
class Artist { // Fields private string ArtistName; private string ArtistFamily; private Album[] Albums; private Tune[] SingleTunes; // Constructor public Artist(string artistName, string artistFamily) { ArtistName = artistName; ArtistFamily = artistFamily; Albums = new Album[5]; SingleTunes = new Tune[10]; } // Methods public void AddAlbum() { // ... } public void RemoveAlbum() { // ... } public void AddSingleTune() { // ... } public void RemoveSingleTrack() { // ... } }
اگر به constructor این کلاس توجه کنید، میبینید که دو پارامتر artistName و artistFamily وجود دارند که به فیلدهای ArtistName و ArtistFamily اختصاص مییابند. همچنین آرایهای از Album به اندازه ۵ (تعدادی آلبومی که هر خواننده میتواند در این جعبه موسیقی داشته باشد) و آرایهای از Tune به اندازه ۱۰ (تعداد تکآهنگی که هر خواننده میتواند داشته باشد) در این constructor بهوجود آمده است. این مقادیر (اندازه آرایهها) را نیز میتوانستیم مستقیماً از کاربر دریافت کنیم تا اندازه آنها ثابت نباشد اما در اینجا آنها را ثابت در نظر میگیریم.
به نظر شما constructor کلاس Album به چه چیزهایی نیاز دارد؟ هنگامی که یک شیء از کلاس Album در حال ساخته شدن است، چه فیلدهایی باید مقداردهی شوند؟ مسلم است که همهی فیلدهای آن باید مقداردهی شوند. هنگامی که قصد دارید یک Album بسازید باید نام آلبوم، صاحب آن، سبک، سال انشار و آهنگهایی که در آن آلبوم قرار دارند را مشخص کنید. مجدداً به کلاس Album توجه کنید:
class Album { // Fields private string AlbumName; private string AlbumOwner; private string AlbumGenre; private ushort AlbumYear; private Tune[] Tunes; // Constructor public Album(string albumName, Artist artist, string albumGenre, ushort albumYear, Tune[] tunes) { AlbumName = albumName; AlbumOwner = artist.GetArtistName(); AlbumGenre = albumGenre; AlbumYear = albumYear; Tunes = tunes; } // Methods public void AddTune() { // ... } public void RemoveTune() { //... } }
هنگامیکه یک شیء از کلاس Album در حال ساخته شدن است، باید نام آلبوم، یک شیء Artist، سبک آلبوم، سال انتشار و یک آرایه از Tune را به آن بدهید تا شیء Album ساخته شود. نکته قابل توجه، شیء Artist و آرایه Tune است. هنگامیکه شما یک شیء از Artist را ساخته و به constructor میدهید میتوانید به تمام اعضای public شیء Artist دسترسی داشته باشید. همانطور که میبینید برای فیلد AlbumOwner ما به نام خواننده (صاحب آلبوم) نیاز داریم. برای این منظور یک متد public به کلاس Artist اضافه میکنیم تا نام خواننده را return کند. (بهدلیل اینکه فیلدهای Artist همهگی private هستند نمیتوانیم مستقیماً به آنها دسترسی داشته باشیم):
public string GetArtistName() { return ArtistName; }
این متد در کلاس Artist قرار دارد و رشتهی ArtistName را return میکند و بهصورت زیر به رشتهی AlbumOwner اختصاص داده میشود:
AlbumOwner = artist.GetArtistName();
همچنین tunes که آرایهای از کلاس Tune است به constructor داده شده و به فیلد Tunes اختصاص مییابد. دقت کنید که در این لحظه شما آرایهای بهاسم tunes از جنس Tune را در آرایهای دیگر بهاسم Tunes که از جنس Tune است، میریزید. آرایهها باید همجنس هم باشند (هردو از جنس Tune) در غیر اینصورت برنامه شما کامپایل نخواهد شد. برای مثال نمیتوانید آرایهای از جنس Tune را به آرایهای از جنس Artist اختصاص دهید.
نوبت به constructor کلاس Tune میرسد. Tune یا همان آهنگ مورد نظر برای هر خواننده، دو نوع دارد. آهنگ یا در یک آلبوم قرار دارد و یا بهصورت تکآهنگ است. هنگامیکه شما در حال ساخت شیء از Tune هستید، میتوانید آهنگ را طوری بهوجود آورید که مخصوص آلبوم یا بهصورت تکآهنگ باشد. آهنگی که مخصوص آلبوم است، بعضی از اطلاعات آن مثل سال انتشار و صاحب آهنگ از قبل مشخص است اما یک تکآهنگ به سال انتشار و نام صاحب اثر نیز نیاز دارد. برای این منظور در اینجا از constructor overloading استفاده کردهایم:
class Tune { private string TuneName; private string Composer; private string Songwriter; private string Arrangement; private string TuneOwner; private string TuneGenre; private ushort TuneYear; // Constructor for album tunes public Tune( string tuneName, string tuneGenre, string composer, string songwriter, string arrengement ) { TuneName = tuneName; TuneGenre = tuneGenre; Composer = composer; Songwriter = songwriter; Arrangement = arrengement; } // Constructor for single tunes public Tune( string tuneName, string tuneGenre, string composer, string songwriter, string arrengement, ushort tuneYear, Artist artist ) : this(tuneName, tuneGenre, composer, songwriter, arrengement) { TuneOwner = artist.GetNameAndFamily(); TuneYear = tuneYear; } }
به این ترتیب برای ساخت شیء از کلاس Tune به دو طریق میتوانیم اینکار را انجام دهیم. بهمنظور ساخت آهنگ برای آلبوم بایستی نام، سبک، شاعر، آهنگساز و تنظیم را مشخص کنید ولی بهمنظور ساخت تکآهنگ کافی است علاوه بر موارد قبلی، سال انتشار و Artist هم مشخص کنید. نکتهی قابل توجه در اینجا کلمهی کلیدی this در constructor تکآهنگ است. اگر در اینجا از کلمهی کلیدی this استفاده نمیکردیم، آنگاه constructor به شکل زیر میشود:
// Constructor for album tunes public Tune( string tuneName, string tuneGenre, string composer, string songwriter, string arrengement ) { TuneName = tuneName; TuneGenre = tuneGenre; Composer = composer; Songwriter = songwriter; Arrangement = arrengement; } // Constructor for single tunes public Tune( string tuneName, string tuneGenre, string composer, string songwriter, string arrengement, ushort tuneYear, Artist artist ) { TuneOwner = artist.GetNameAndFamily(); TuneYear = tuneYear; // without this keyword TuneName = tuneName; TuneGenre = tuneGenre; Composer = composer; Songwriter = songwriter; Arrangement = arrengement; }
همانطور که میبینید بدون کلمهی کلیدی this مجبور شدیم چند خط کد اضافهتر بنویسیم تا فلیدها را مقداردهی کنیم درحالیکه constructor قبلی این مقداردهیها را انجام میدهد و در اینجا فقط اضافهنویسی کردهایم. با کلمهی کلیدی this فیلدهایی که توسط constructor قبلی میتوانند مقداردهی شوند را مشخص میکنیم تا آن constructor مقادیر را به فیلدها اختصاص دهد و در constructor دومی، فقط TuneYear و TuneOwner را مقدادهی میکنیم.
ادامه حل تمرین را در قسمت بعد دنبال کنید.
رضا
7 April 2013
سلام .
وقت بخیر . من تا الان تونستم چند قسمت از آموزش های شما رو دنبال کنم .
بیسیار جذاب و ساده توضیح داده شده . متشکر .
میخواستم بپرسم تو این آموزه ها قسمتی هست که با استفاده از اون بتونیم یک دیکشنری ویندوز اپلیکیشن زیبا و کاربردی بسازیم ؟
مسعود درویشیان
7 April 2013
توی این مجموعه آموزشی ما فقط تحت کنسول کار میکنیم
هر برنامهای هم که بنویسیم توی همین محیطه چون هدف یادگیری خود زبان سیشارپ هست. به زبان سیشارپ که مسلط شدید میتونید توی محیطهای مختلف برنامهنویسی کنید.
رضا
7 April 2013
در کل با محیط ویندوز اپلیکیشن تو این مباحث آموزشی کار نمیشه ؟
اگه راهنمایی در این مورد وجود داره یا کتاب الکترونیکی ممنون میشم معرفی کنید .
البته مثل مقالات شما که فوق العاده ساده نویسی و بیان شده .
مسعود درویشیان
7 April 2013
نه اینجا فقط با کنسول کار میکنیم
کتاب Murach’s C# 2010, 4th Edition فکر کنم خوب باشه
محمد فر
7 April 2013
سلام استاد.من الان جلسه 25 ام.خیلی دوست دارم زودتر خودمو برسونم.شما چه روزهایی درس جدید رو میزارید؟
مسعود درویشیان
7 April 2013
سلام، هر هفته روزای جمعه
davoud
7 April 2013
سلام مسعود جان
استادم برنامه داده گفته طبق سوییچ بنویسید
من اونا رو جدا جدا می تونم بنویسم ولی طبق سوییچ نه . اگه راهنمایی کنید ممنون میشم
برنامه اینه:
برنامه ای بنویسید که عملیات زیر را انجام دهد
۱- ب. م.م و ک م م دو عدد
۲ اعداد اول کوچکتر از n
3- جمله انم فیبوناچی
۴- n به توان n
5- اعداد تام کوچکتر از n
6- exit
چطور میتون اینا با هم ادغام کنم که بشه سوییچ؟ مرسی
مسعود درویشیان
7 April 2013
سلام، فقط کافیه هر کار خاص رو بذاری توی قسمتهای مختلف switch
davoud
7 April 2013
مرسی از راهنمایتون. فقط یه سوال من برای هر برنامه یک سوییچ ایجاد کنم؟ یهنی 5 تا سوییچ داشته باشم؟
مسعود درویشیان
7 April 2013
نه، شما یه switch دارین، هر برنامهتون رو توی یه case قرار بدید
مثل همینی که براتون نوشتم، ب.م.م توی یه case، ک.م.م توی یه case دیگه و…
داوود
7 April 2013
به به ؛ سلام آقا مسعود گل؛ چه عجب!!! برگشتید دوباره!
سال جدید رو مجددا به حضرتعالی تبریک میگم.
آواتار جدیدت شبیه کارآگاهها شده. مبارکه!!!!
مسعود جان پس طبق گفته شما در ابتدای این درس اگه نتونستیم خیلی جالب این برنامه رو بنویسیم نگران و ناراحت نباشیم؟
ضمنا اشکال نداره اگه درس 26 رو خوب یاد نگرفتیم؟ آخه من بعد از خوندن اون درس کلا برگشتم و دوباره از ابتدای کلاسها شروع به خوندن کردم. هرچی یادداشتم رو با درس 26 گیج شده و قاطی کردم. میشه درس 26 رو خوب یاد نگیریم؟
ضمنا یک سوال داشتم؛ چطور یک متغیر رو طوری عمومی در نظر بگیریم که بشه در همه کلاسهای همون برنامه ازش استفاده کرد؟ آیا اصلا این کار اصولی هستش و با کپسوله سازی منافات نداره؟؟
بعنوان مثال فرض کنیم برنامه ای هست که قراره هر کلاس اون عملیات مختلف ریاضی رو انجام بدن.
ما در ابتدا متغیر رو چطوری تعریفش کنیم و چطوری بگیریمش که در همه کلاسها قادر به استفاده از اون باشیم؟
ممنون و دستت درد نکنه که دوباره برگشتی.
موفق باشی
مسعود درویشیان
7 April 2013
سلام مرسی از لطفت، سال نو شما هم مبارک باشه
نه اگه نتونستید تمرین رو حل کنید مشکلی نداره ولی به حل تمرین خوب دقت کنید
قسمت 26 هم اتفاقاً خیلی مهم هست هرجاشو متوجه نشدید بگید تا من واضحتر بگم
در مورد متغیر هم public در نظر میگیرید دیگه! (اگه میخواین تو کلاسهای دیگه هم مورد استفاده قرار بگیره!) اگه میخواین علاوه بر public بودن به هیچ شیءای وابسته نباشه، اونو static در نظر میگیرید. البته access modifiers های دیگه هم هستن که در جای خودشون توضیح داده میشه
مسعود درویشیان
7 April 2013
در ضمن مگه قرار بود برنگردیم؟ :) این مجموعه آموزشی که نیمه کاره نمیمونه، تا آخرش با موفقیت پیش میره ;)
davoud
7 April 2013
ببخشید من گیج شدم این برنامه ب م م و ک م م منه میشه بگید این رو چور داخل برنامه شما بذارم؟
مسعود درویشیان
7 April 2013
با فرض اینکه برنامهای که نوشتید فقط ب.م.م رو انجام بده:
davoud
7 April 2013
مرسی و شب خوش
davoud
8 April 2013
ببخشید که دائم مزاحمتون می شم
راستش طبق چیزی که شما فرمودید من این جور نوشتم . راستش رو بخواید من رشتم کامپیوتر نیست ولی دارم برنامه نویسی یاد میگیرم اگه لطف کنید برنامه منو تصحیح کنید ممنون میشم .
مسعود درویشیان
8 April 2013
آره البته حواستون باشه، هر برنامه فقط یه متد ()Main داره، شما این برنامهها رو قبلاً جداجدا مینویشتین، حالا هرچیزی که توی متد ()Main اون برنامههای جداجدای قبلیتون بوده رو بر میدارین میذارین توی case های مختلف :)
آره تقریباً درسته
davoud
8 April 2013
مرسی از راهنمایتون
داوود
8 April 2013
ممنونم مسعود جان؛ حالا که دوباره شروع کردم و از اول دارم میخونم و الان رسیدم به درس 14 و 15. احساس کردم شاید خوب نخوندم که اون قسمت برام سنگین و درکش مشکل بود.
سعی می کنم سرعتم رو بیشتر کنم تا زودتر برسم به او ن قسمت.
ضمنا در خصوص سوالی که کرده بودم ؛ این برنامه رو ببین:
در این برنامه به چه نحوی ما K رو از کاربر دریافت کنیم که علاوه بر اینکه فقط یکبار دریافت بشه؛ تو همه کلاسها هم قابل استفاده باشه؟ کجا تعریفش کنیم که این قابلیت رو داشته باشه؟
ممنونم
مسعود درویشیان
8 April 2013
متغیر رو اینطوری تعریف میکنی:
و اینطوری هم استفاده میکنی:
داوود
8 April 2013
خیلی خیلی ممنون و متشکرم. مرسی. عالی بود.
رضا
8 April 2013
سلام .
من به یه مشکلی بر خودم اینه که جواب مثلثات رو درست نمیده .
بین آموزش های شما هم گشتم پیدا نکردم ممنون میشم کمکم کنید .
الان میخوام مثلثاتو حساب کنم اعداد اشتباهی میده یکی از دوستان گفت باید به رادیان تبدیل بشه . درسته ؟چجوری ؟
میتونم ایمیلتون رو داشته باشم ؟
مسعود درویشیان
8 April 2013
اینجا همهچی کامل توضیح داده شده
رضا
8 April 2013
رفتم متوجه نشدم .
این کد رو نوشتم اما بر حسب رادیان میده
مسعود درویشیان
8 April 2013
Net framework. بهطور پیشفرش محاسبات مثلثاتی رو بر حسب رادیان میگه
برای اینکه خروجی بر حسب درجه باشه، باید تبدیل زیر رو انجام بدی:
شکوفه
8 April 2013
سلام
منم همین مشکلو دارم
اگه میشه کد تبدیل رو تو برنامه آقا رضا بذارید تا متوجه بشم کجای برنامه قرار میگیره
اینجور که شما گذاشتید همش ارور میده
با تشکر از شما
مسعود درویشیان
8 April 2013
متد DegreeToRadian دقیقا این تبدیل رو انجام میده
مشکل نداره تستش کردم
رضا
8 April 2013
جناب درویشیان منم هر کاری کردم نتونستم این کد رو جایی قرار بدم این لینک سورس هست ممنون میشم ویرایشش کنید تا متوجه بشیم از کدی که شما دادید
http://upit.cc/f/601ebb7f.txt
مسعود درویشیان
9 April 2013
ببینید، متد ()DegreeToRadian رو به برنامه اضافه میکنید، وقتی میخواهید ورودی رو به تابع ()Math.Sine یا ()Math.Cos بدید از متد ()DegreeToRadian استفاده میکنید تا ورودیتون بر حسب رادیان بشه:
شکوفه
23 April 2013
سلام استاد
اگه میشه مثلث خیام رو آموزش بدید
م تا قسمت 15 رو مطالعه کردم اما نمیتونم مثلث خیام رو طراحی کنم و شدیدا به کدش نیاز دارم
یه کدی در دستم هست اما یه جاییش رو ایراد میگیره
اگه میشه کمکم کنید
ممنونم
شکوفه
23 April 2013
سلام
کد درستو پیدا کردم
فقط سخته اگه آموزش بدید خیلی خوب میشه
ممنونم
int row;
Console.BackgroundColor = ConsoleColor.Blue;
Console.ForegroundColor = ConsoleColor.White;
Console.Clear();
Console.Write(“enter number Row: “);
row = Convert.ToInt32(Console.ReadLine());
Console.Clear();
int col = Console.WindowWidth / 2;
for (int i = 0; i < row; i++)
{
for (int j = 0; j <= i; j++)
{
Console.SetCursorPosition(col + j * 6, i);
Console.Write(combination(i, j));
}
col -= 3;
}
Console.ForegroundColor = ConsoleColor.White;
Console.Write("\n—————————————-\n"); //OR console.writeline(…);
Console.Write("press any key to exit…");
Console.ReadKey(false);
}
//———————
static int combination(int n, int r)
{
return fact(n) / (fact(n – r) * fact(r));
}
//————-
static int fact(int n)
{
if (n <= 1)
return 1;
else
return n * fact(n – 1);
محمد
9 September 2014
تو این برنامه دیگه نمی شه سرچ کرد رو البوم ها و تاریخ های انتشار و موسیقی ها؟؟؟ نه .من فکر می کنم باید هر موسیقی یه شی باشه گه ویژگی های مختلفی هم داشته با شه مثل آلبوم و چیزای دیگه نه این که آلبوم هم خودش یه شی باشه حد اقل فکر می کنم ویندوز با موسیقی ها اینجوری رفتار می کنه ،نه؟؟؟؟؟؟
esysss
17 September 2014
احساس میکنم که خیلی برنامه رو الکی شلوغ کردین به نظرم نیازی به این کارا نبود