در قسمت قبل با ساختار کلی برنامه آشنا شدید، در این قسمت به ادامهی مبحث جلسهی قبل و تکمیل تمرین شمارهی ۱۴ میپردازیم. اگر بهیاد داشته باشید در قسمت قبل یکسری کلاس تعریف کردیم که در این برنامه از آنها استفاده خواهیم کرد. در در ادامه یک جمعبندی از کلاسهایی که قرار است از آنها استفاده کنیم را مشاهده میکنید.
کلاس Tune: این کلاس شامل یکسری فیلد برای ذخیره اطلاعات مربوط به آهنگ و دو constructor است. اینطور در نظر گرفتهایم که دو نوع آهنگ میتواند وجود داشته باشد: تکآهنگ و آهنگ آلبوم. بنابراین یک constructor برای ساخت تکآهنگ و یک constructor برای ساخت آهنگ آلبوم در نظر گرفتهایم.
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.GetArtistName(); TuneYear = tuneYear; } }
کلاس Album: این کلاس شامل یکسری فیلد برای نگهداری اطلاعات مربوط به آلبوم مثل نام، سبک، صاحب اثر و…، یک constructor و دو متد است. این کلاس همچنین شامل آرایهای از کلاس Tune برای نگهداری آهنگهای آلبوم است.
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() { //... } }
کلاس Artist: این کلاس شامل فیلد، یکسری متد و constructor است. این کلاس همچنین شامل آرایهای از Tune و آرایهای از Album است. آرایهی Tune بهمنظور ذخیره تکآهنگها و آرایهی Album بهمنظور نگهداری آلبومهای خوانندهی مورد نظر است.
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 string GetArtistNameAndFamily() { return ArtistName + " " + ArtistFamily; } public void AddAlbum() { // ... } public void RemoveAlbum() { // ... } public void AddSingleTune() { // ... } public void RemoveSingleTrack() { // ... } }
کلاس MusicBox: این کلاس شامل آرایهای از Artist، یک constructor و تعدادی متد است.
class MusicBox { // Fields public Artist[] Artists; // Constructor public MusicBox(ushort size) { Artists = new Artist[size]; } // Methods public void AddArtist() { // ... } public void RemoveArtist() { // ... } public void ShowArtists() { // ... } }
کلاس UI: علت بهوجود آوردن این کلاس این است که در اینجا به عبارتی engine برنامه را (تا حدودی) جدا در نظر بگیریم. یک Music Player واقعی را تصور کنید، آیا شما وقتیکه دکمه خاموش/روشن را فشار میدهید تا دستگاه خاموش/روشن شود از اتفاقاتی که پشت دکمه میافتد با خبر هستید؟ مسلماً نه! در اینجا نیز قضیه به همین صورت است.
همیشه سعی کنید تا آنجا که میتوانید معماری و اصول شیگرایی را رعایت کنید. در مقالات زنگ سیشارپ تا حدودی با این اصول و قواعد آشنا خواهید شد.
class UI { // Fields MusicBox MyMusicBox; // Constructor public UI() { // A music box with 10 artists. MyMusicBox = new MusicBox(10); } // Methods 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": Environment.Exit(0); // Exit break; default: Console.WriteLine("Invalid Choice!"); break; } } }
کلاس Program: در این کلاس موتور برنامه به حرکت در میآید. ابتدا یک شیء از کلاس UI بهوجود آوردهایم تا به اعضای آن دسترسی داشته باشیم و سپس در یک حلقهی بینهایت متد ()Proccess را صدا زدهایم. علت وجود حلقهی بینهایت این است که برنامه تا زمانی که کاربر نخواهد، Exit نشود.
class Program { static void Main() { UI engine = new UI(); while (true) { engine.Proccess(engine.ShowMenu()); Console.ReadLine(); } } }
در مرحلهی بعد قصد داریم یک خواننده را به جعبهی موسیقی اضافه کنیم. با سادهترین حالت ممکن مثال میزنیم. تمام کاری که قرار است انجام دهیم این است که یک شیء Artist درست کرده و آن را در جعبهی موسیقیمان (MusicBox) ذخیره کنیم و تمام! به کلاس Artist نگاهی بیندازید، برای اینکه از این کلاس شیء بسازید به نام و نامخانوادگی هنرمند نیاز دارید (با توجه به constructor) و مسلماً قرار است که این نام و نامخانوادگی از کاربر گرفته شود پس در ابتدا در “case “1 متد ()Proccess اینچنین مینویسیم:
// Add Artist Console.Write("Enter artist's name: "); string artistName = Console.ReadLine(); Console.Write("Enter artist's family: "); string artistFamily = Console.ReadLine(); Artist anArtist = new Artist(artistName, artistFamily);
تا اینجا ما فقط شیء anArtist را بهوجود آوردهایم و هنوز آن را در جایی ذخیره نکردیم. در همینجا میبینید که عمل گرفتن دو ورودی از کاربر چهار خط کد شده است و این عمل در طول برنامه بسیار تکرار میشود پس یک متد برای دریافت ورودی از کاربر در کلاس UI تعریف میکنیم تا هم خط کد کمتری داشته باشیم و همینطور عمل دریافت ورودی را برای خودمان راحتتر کنیم:
static string GetInput(string message) { Console.Write(message); return Console.ReadLine(); }
این متد پیغام را میگیرد و نمایش میدهد و ورودی کاربر (که یک رشته است) را return میکند. بعد از استفاده از این متد ساخت شیء بسیار راحتتر خواهد شد:
Artist anArtist = new Artist( GetInput("Enter artist's name: "), GetInput("Enter artist's family: ") );
در اینجا برای ساخت شیء از Artist دو argument به آن دادهایم اما تفاوت در اینجاست که این argument ها دو متد هستند که ابتدا یک پیغام را چاپ میکنند و ورودی گرفته شده از کاربر را تحویل constructor کلاس Artist میدهند تا شیء anArtist ساخته شود. اکنون باید این شیء ساخته شده را ذخیره کنیم اما در کجا؟ ما در کلاس MusicBox آرایهای از جنس Artist در نظر گرفتیم تا هر خواننده را (تمام و کمال) در یک خانه از این آرایه ذخیره کنیم. آرایه از جنس Artist است و شما در خانههای آن میتوانید اشیایی از جنس Artist ذخیره کنید. اگر بهیاد داشته باشید متدی بهنام ()AddArtist در کلاس MusicBox تعریف کردیم اما بدنهی آن خالی بود. ما از این متد برای ذخیره کردن خواننده استفاده میکنیم. متد ()AddArtist باید بهعنوان ورودی یک Artist را دریافت و آن را در آرایهی Artists ذخیره کند:
public bool AddArtist(Artist artist) { Artists[0] = artist; return true; }
متد بالا، پارامتر artist را در خانهی اول آرایهی Artists ذخیره میکند اما ما نیاز داریم دفعهی بعد، خواننده در خانهی بعدی آرایه ذخیره شود همچنین اگر آرایه پر شده است، متد false را return کند پس یک متغیر به اسم Counter تعریف میکنیم تا index خانههای آرایه را نگه دارد. به متد ()AddArtist و constructor در کلاس MusicBox مجدداً توجه کنید:
class MusicBox { // Fields public Artist[] Artists; private byte Counter; // Constructor public MusicBox(ushort size) { Artists = new Artist[size]; Counter = 0; } // Methods public bool AddArtist(Artist artist) { if (Counter < Artists.Length) { Artists[Counter] = artist; Counter++; return true; } else return false; } public void RemoveArtist() { // ... } public void ShowArtists() { // ... } }
همینطور متد ()Process در کلاس UI بهصورت زیر است:
public void Proccess(string choice) { switch (choice) { case "1": // Add Artist Artist anArtist = new Artist( GetInput("Enter artist's name: "), GetInput("Enter artist's family: ") ); MyMusicBox.AddArtist(anArtist); break; case "2": // show Artists break; case "3": // Exit Environment.Exit(0); break; default: Console.WriteLine("Invalid Choice!"); break; } }
به “case “1 توجه کنید که چگونه یک شیء از کلاس Artist ساختهایم و سپس از طریق متد ()AddArtist این شیء ساخته شده را ذخیره کردهایم. متد ()AddArtist یک شیء از جنس Artist دریافت کرده و آن را در خانههای آرایه ذخیره میکند.
در مرحلهی بعد قصد داریم خوانندههای ذخیره شده را نمایش دهیم. برای این منظور در متد ShowArtists کلاس MusicBox مینویسیم:
public void ShowArtists() { for (int i = 0; i < Artists.Length; i++) { if (Artists[i] == null) continue; Console.WriteLine(Artists[i].GetArtistNameAndFamily()); } }
توسط این متد، نام و نامخانوادگی هر خواننده (که در خانههای آرایهی Artists ذخیره شدهاند) را نمایش میدهیم و هر خانهی آرایه که خالی باشد نادیده در نظر گرفته میشود. در نهایت در “case “2 متد ()Process مینویسیم:
case "2": // show Artists Console.WriteLine(); MyMusicBox.ShowArtists(); break;
ادامهی حل تمرین را در قسمت دنبال کنید.
رضا
13 April 2013
با سلام و خسته نباشیید ببخشیید آقا مسعود پلاتفرم چیه تعریفش و…… باتشکر
مسعود درویشیان
13 April 2013
http://en.wikipedia.org/wiki/Computing_platform
hamzeh
13 April 2013
salam agha masoud vaghen dastetoon dard nakone . khaily alie.khoda azat razi bashe
karet 20 20 20 va alye
رضا
13 April 2013
با سلام ببخشیید اگر ممکنه خودتون توضیح بدهید فارسی من انگلیسیم قوی نیتش در حد صفر هستمم هیچی بلد نیستم باتشکر
مسعود درویشیان
13 April 2013
با توجه به تعریفی که در ویکیپدیا هست بهطور خلاصه، توی زمینهی کامپیوتر، پلتفرم شامل یه معماری سختافزاری و یه چهارچوب نرمافزاری هست طوریکه ترکیب این دو، به یه نرمافزار اجازه میده روی اون پلتفرم اجرا بشه. پلتفرمها ممکنه معماری خاص، رابطکاربری خاص و زبان برنامهنویسی خاص خودشون رو داشته باشن….
در ضمن اگه دوست داری برنامهنویسی رو حرفهای دنبال کنی به شدت نیاز داری که توی انگلیسی قوی باشی. پس یه فکری براش کن ;)
ناشناس
14 April 2013
سلام خسته نباشید
متأسفانه فایل pdf خرابه
مسعود درویشیان
14 April 2013
ممنون که اطلاع دادید، درست شد :)
abbas
17 April 2013
با سلام میشه در خصوص این برنامه منو راهنمایی کنید با تشکر
برنامه:
سیستم اموزش
دارای موجودینت دانشجو شامل اطلاعات نام ونام خانوادگی و نمره . دارای حادکثر ۱۰ دانشجو
۱- new student
2- enter grade
3- nam student max v min
4- sort by grade
5- exit
مسعود درویشیان
17 April 2013
بهترین راهنمایی همین تمرینی هست که داریم اونو حلش میکنیم.
abbas
17 April 2013
من یه مقداریشو نوشتم میشه اگه درسته تصحیحش کنید ممنون میشم
Console.WriteLine(“enter a new student:”);
string[] Names = new string[10];
for (int i = 0; i < Names.Length; i++)
{
Console.WriteLine("{0}th new student :", i + 1);
Names[i] = Console.ReadLine();
for (int j = i; j <= i; j++)
{
Console.WriteLine("{0}grade :", j + 1);
Names[j] = Console.ReadLine();
}
// sort by max/min
int max, min;
int x = max = min = int.Parse(Console.ReadLine());
for (int k = 0; k <= i; k++)
{
Console.WriteLine("{0}th number: ", k);
x = int.Parse(Console.ReadLine());
if (x max)
max = x;
if (++k <= 10)
break;
Console.WriteLine("Max is : {0} and Min is {1}", max, min);
Console.ReadKey();
}
مسعود درویشیان
17 April 2013
abbas
17 April 2013
مرسی مسعود جان و با تشکر از همکاری و راهنمایی های خوبتان
رضا
17 April 2013
با عرض سلام و خسته نباشیید ببخشیید آقای درویشیان ممکنه توی قسمت پنجم آموزش سی شارپ جدول برخی ز escape sequence های رایج در سی ششارپ را نشان دهید.
و به صورت اون جدول رو به فارسی نامهای کاراکتر رو بنویسید چون انگلیسی ام خوب نیستش و نمی دونم چطوری بخونم خواهش میکنم نام هر کاراکتر رو به فارسی بنویسید باتشکر
مسعود درویشیان
17 April 2013
لطفاً دیکشنری رو باز و ترجمهاش کنید :) و از همین امروز یه فکری واسه تقویت زبانتون بکنید چون در غیر اینصورت پیشرفت زیادی نخواهید داشت.
رضا
17 April 2013
با عرض سلام ببخشیید آقای درویشیان من چطوری زبانم رو قوی کنم وقت زبان انگلیسی صفر هستم آیا میشه همزمان هم دروس دانشگاهم رو بخونم و هم برنامه نویسی و هم زبان انگلیسی یاد بگیرم اگه ممکنه روشی بهم ارائه بدهید
باتشکر
مسعود درویشیان
17 April 2013
بله میتونید. اینکه چطوری انگلیسیتون رو قوی کنید بستگی به خودتون داره. یا میتونید کلاس برید یا اینکه توی خونه تمرین کنید.
اگه قصد دارید توی خونه تمرین کنید، یه مجموعه آموزشی زبان مثل English Today رو تهیه کنید و در کنارش هم توی جعبهی لایتنر روزانه یه تعداد کلمه جدید حفظ کنید.
رضا
17 April 2013
اوکی دستتون درد نکنه ولی به جای گرفتن مجموعهی آموزشی english today از این سایت استفاده کنم چی http://dude-club.com/?p=194
و
http://dude-club.com/?p=70 چی نظرتون چی هستش خوبه یا نه یا اینکه باز مجموعه ی آموزشی رو بگیرم چون این سایت هم میتونید مطلب انگلیسی رو گوش کنی من خودم میخوام خونه یاد بگیرم کلاس نمیرم فقط اگه روزی 30 دقیقه فقط لغت و زبان انگلیسی بخونم کافی هستش یا نه
و اگه ممکنه بهم بگویید از کدوم شروع کنم از این http://dude-club.com/?p=70 یا http://dude-club.com/?p=194
باتشکر
مسعود درویشیان
17 April 2013
بله این هم عالیه ولی مهمتر از همه ادامه دادن و پشتکار خودتونه :)
داوود
17 April 2013
سلام مسعود جان؛ خوبی عزیزم؟؟
ببخشید من هنوز تو دور دوم تو درس بیست و یکم هستم؛ یکم یواشتر برید لطفا تا بهتون برسم.
بابت آموزشهای خوبت مثل همیشه ازت ممنون + سپاسگزارم؛ دستت درد نکنه.
دوستدارت!
مسعود درویشیان
17 April 2013
سلام، قربانت داوود جان :)
خیلی کار خوبی میکنی که داری مجدداً از اول میخونی
مهسا
17 April 2013
با سلام از آموزشهای خوبتون ممنونم ببخشیید من هم دوباره دارم از اول شروع مکینم فقط بشینم بخونم مثالهاشو و فقط تمرینها رو پشت کامپیوتر بنویسم یا روشی دیگه ای رو انجام بدم ممنون میشم راهنماییم کنید .
راستی یک سوال برام پیش اومد اونم اینکه چه موقعی از روش روش نردمانی if-else ladder استفاده میکنیم مگر ما نمی تونیم از سویچ استفاده کنیم و اینکه برای تمرین بیشتر چه کتابی رو معرفی کنید فقط باید بشینم بخونیم خوبه یا نه روشی خاصی دارید بهم معرفی کنید
مسعود درویشیان
17 April 2013
کتاب فارسیها رو تو این زمینه نمیشناسم. این مجدداً از اول بخونید خیلی عالیه چون باعث میشه همه مطالب دوباره براتون مرور بشه. بهترین کار اینه که هم بخونید و هم تمرین کنید (حتماً تمرینها رو با کامپیوتر انجام بدید)
switch و if-else-if ladder یه جورایی مثل هم هستن ولی به نظر من استفاده از switch میتونه گاهی جالبتر باشه ولی بستگی به موقعیت داره، از هردوش میتونید استفاده کنید.
مهسا
18 April 2013
با عرض سلام
ببخشیید آقای درویشان من دوباره شروع کردم به خوندن و تا الان تمرینات و همه رو تا قسمت یازدهم رو انجام داد خودم فقط توی قسمت یازدهم توی دستورات do_while مشکل دارم چه موقعی باید ازش استفاده کرد و اینکه چرا توی مثالی که گفتید میشه تحلیلش رو هم بگید منظورم بیشتر توضیح بدهید با مثال و چه فرقی با دستور while داره مثلا ما با دستوری میخواهیم از اعداد یک تا 5 رو چاپ کنیم با while میشه ولی با dowile ابتدا چاپ میشه بعد شرط چک میشه (منظورم اگه نخواهیم اصلا از این دستور استفاده نکنیم ) مشکلی پیش نمیاد
باتشکر
مسعود درویشیان
18 April 2013
بینید سیشارپ میاد یه سری امکانات و دستور به برنامهنویس ارائه میده تا بتونه توی موقعیتهای خاص و مختلف و بر اساس نیازش از اون استفاده کنه. دوستور do-while هم همینه! شما ممکنه یهجا دارید یه برنامهای مینویسید که میبینید به این دستور احتیاج پیدا میکنید (تازه ممکنه مشکلتون رو با for و while هم بتونید بهراحتی برطرف کنید)
دستور do-while تنها کاری که میکنه اینه که اول یه بار دستورات داخل حلقه رو اجرا میکنه و بعد میاد شرط رو بررسی میکنه. خوب مزیت اینکار چیه؟! مثلا شما یهجای برنامهات میخوای فلان دستورات تو یه حلقه تکرار بشن ولی اگه شرط حلقه برقرار نبود دیگه حداقل یه بار اجرا شده باشن! چون do-while یهبار حلقه رو اجرا میکنه بعد میاد شرط رو چک میکنه که اگه شرط برقرار نبود حداقل یه بار دستورات داخلش اجرا شده باشند.
مهسا
18 April 2013
ببخشیید آقای درویشیان منظورم این مثالی که گفتید
توی این دستور چرا اگر این برنامه را اجرا کنید متوجه میشوید با اینکه شرط برقرار نیست ولی پیغام نمایش داده میشود. علت این است که شرط در پایین حلقه بررسی میشود و statement حداقل یکبار اجرا خواهد شد.میخوام بدونم چرا با دستور wile و یا هر دستور دیگه ای اجر کنیم برای چی نمایش داده نمیشه و اینکه میتونید بهم بگوید چطور سوالی یا برنامه های بزرگی می دهند تا ازش استفاده کنیم ممنون میشم باتشکر
مسعود درویشیان
18 April 2013
آره تو این برنامه دستور داخله حلقه یهبار اجرا میشه. چرا؟! چون برنامه خط به خط داره میخونه میاد پایین و اولش شرط رو نمیبینه پس یه بار دستورات داخل حلقه اجرا میشن بعد که میرسه به پایین میبینه که شرط برقرار نیست و از حلقه خارج میشه:
خروجی:
حالا اگه while یا for بود، چون شرط بالای حلقه قرار داره، اول شرط بررسی میشه و اگه شرط برقرار نبود یهراست از حلقه خارج میشه:
خروجی:
مهسا
18 April 2013
ببخشیید آقای درویشیان نمی دونم می تونم منظورمو رسونده ام یا نه
فرم کلی اش رو می دونم میخوام اگه ممکنه همین مثال رو برام مثل برنامه های که خوب توضیح میدادید در مقالات زنگ سی شارپ همینجوری توضیح بدهید کامل مثلا متغر تعریف کردید و بهش مقداری اختصاص دادید
ممنون میشم چون فکر کنم اینطوری بتونم متوجه شم باتشکر
داوود
18 April 2013
سلام مسعود عزیز؛
وقتت بخیر و آخر هفته خوبی داشته باشی.
فکر کنم مهسا خانوم هم روش من رو در پیش گرفته.
مسعود جان نمیدونم کار درستی می کنم یا نه ؛ چون قبلا گفته بودی هر سوال رو تو پست مربوط به خودش مطرح کنید. اگه سوالم مربوط به همون پست هستش لطفا این دفعه اگه اشکال نداره شما زحمت گذاشتن تو پست مربوطه رو بکش از دفعه دیگه تو همون پست سوالمو میذارم.
سوالم مربوط به پست درس 19 هست. جایی که میخواستیم ایجاد کنیم. (سوالم مربوط به آرایه ها هست):
برنامه رو ببینید:
ابتدا میخواستم در Main اقدام به گرفتن نام بکنم. ولی طبق کدی که اونو غیرفعالش کردم؛ اگه اینجوری بنویسم ایراد میگیره:
//for (int i = 0; i < mytest.fname.Length(); i++) بعدش برای همین اومدم و sizearray رو تعریف کردم؛ چرا ایراد میگیره؟ متدی که برای دریافت نام ایجاد کردم؛ از نظر شما مشکلی نداره؟ ممنون
مسعود درویشیان
18 April 2013
علت اینکه برنامهات Error میده اینه که Length متد نیست که آخرش () بذاری!
داوود
19 April 2013
درست میگید؛ببخشید حواسم نبود و این رو بذارید به حساب کم اطلاعی بنده. ببخشید.
مسعود جان یک سوال:
در اینجا شما از سازنده استفاده کردین:
public Person()
{
Names = new string[3];
}
میشه علتشو بگید؟ اونجوری که من نوشته بودم بهینه نبود؟ یا خوانایی برنامه کمتر بود که شما از سازنده استفاده کردین؟
مسعود درویشیان
19 April 2013
چون یکی از استفادههای constructor اینه که یه سری از فیلدهامون در حین ساخت شیء، مقداردهی بشن پس اینجوری بهتر و استانداردتر هست.
داوود
19 April 2013
ممنونم ازت؛ مسعود جان من اومدم ویه متد به برنامه اضافه کردم و بدین نحو فراخوانیش کردم(البته فعلا برای اینکه کمتر وقت بگیره خودم عدد رو بهش دادم و بعد از اینکه اصلاح شد از کاربر عدد رو میگیرم) در واقع برای حذف یک عنصر از آرایه مون هستش.
نحوه فراخوانیش در برنامه:
class example
{
static void Main()
{
person mytest = new person();
mytest.getname(“Please Enter Names:”);
mytest.show();
mytest.Delete(2);
mytest.show();
}
}
من میخوام که عنصر دوم حذف بشه(که حالا چون از صفر شروع میشن ؛ میشه سومی).
میخواستم بعد از اجرای متد Delete مجددا عناصر آرایه م رو ببینم و به همین دلیل از متد show نیز بعدش مجددا استفاده کردم.
این هم متد Delete:
public void Delete(int id)
{
for (int j = 0; j < Names.Length; j++)
{
if (id == j)
{
Names[j].Remove(j);
}
}
}
چه دلیل داره که توسط این متد قادر به حذف یک عنصر از آرایه م نیستم و برنامه خطا می گیره؟؟؟؟
با تشکر
مسعود درویشیان
19 April 2013
شما اگه میخوای یه شیء رو پاک کنی کافیه اونو برابر با null قرار بدی
وقتی هم میخوای با حلقه عناصر داخل آرایه رو نشون بدی، داخل حلقه یه if میذاری و میگی هر خونهای که null هست، continue بشه
مهسا
18 April 2013
اوکی دستتون دردنکنه من یاد گرفتتتتتتتتتتتتتتتتتتتتتتتتتتتتتتتتتم
واقعا هر چی ازتون تشکر کنممممممممممممممممممممم بازم کمه
مسعود درویشیان
18 April 2013
خواهش میکنم :)
مهسا
18 April 2013
ببخشیید دوباره مزاحم شدم فقط آموزش بعدی رو کی قرار می دهید
مسعود درویشیان
18 April 2013
فردا
رضا
18 April 2013
با سلام ببخشیید آقای مهندس
من برنامه هایی که می نویسم انگار داره حفظ میکنم مثلا اعداد اول و………. رو کد ها رو حفظ میکنم فکر کنم مثلا یه برنامه ای دیگه بدهم بدهند نمی تونم بنویسم و همیشه هم اول میرم ویژال استدیو رو باز میکنم و میرم سراغ کد دیگه تحلیل و….. نمی کنم و تحلیل کردن هم بلد نیستم نمی دونم باید چیکار نه برای این مثال بلکه برای هر مسئله ای حتی پروزه های بزرگ این مشکلو دارم نمی دونم باید چیکار کنم ممنون میشم راهنماییم کنید
مسعود درویشیان
18 April 2013
یکی از خوبیهای برنامهنویسی اینه که آدم رو وادار به فکر کردن میکنه شما مشکلت اینه که رو مسئله فکر نمیکنی! خود تحلیل یعنی فکر کردن. اگه شما یه مساله رو نمیفهمی، روش فکر کن، حتی اگه شده چند روز روش فکر کن. وقتی مغزت رو عادت بدی به فکر کردن بعد یه مدت مغزت قویتر عمل میکنه دقیقاً مثل یه ورزشکار که اولش نمیتونه وزنه بزنه اما با تمرین سخت میتونه بعد یه مدت وزنههای سنگینتری رو بزنه. مغز هم دقیقاً همینه، هرچی بیشتر ازش استفاده کنی، قویتر میشه
مهسا
19 April 2013
با عرض سلام ببخشیید آقای درویشیان همیشه مزاحم میشم
دربارهی این جملات میخواستم بیشتر توضیح بدهید و مثال بزنید در حلقه های while و do while کلمهی contnue موجب می شود مستقیما به قسمت condition حلقه برود و مجددا حلقه را اجرا کند. اینو رو با مثال همراه با توضیحاتی که توی مقالات برای دستورات دیگه می دادید این رو همینطور توضیح بدهید باتشکر
مهسا
20 April 2013
ببخشیید آقای درویشیان گفته بودید دیروز گفته بودید خبری امروز جمعه آموزش رو قرار می دهید روی سایت ولی نذاشتید پس کی میزارید
باتشکر
داوود
21 April 2013
از پاسخها و توضیحاتت ممنون مسعود جان؛
آقا مسعود این تکه کد هم مربوط به Update کردن یک عنصر از عناصر داخل آرایه هستش؛ آیا درست نوشتم و خوبه:
[#C]
public void UpDate(string text)
{
Console.WriteLine(text);
int id = Convert.ToInt32(Console.ReadLine());
Console.WriteLine(“Please Enter New Name that you want Replaced.”);
string newname = Console.ReadLine();
for (int j = 0; j < Names.Length; j++)
{
if (id == j)
{
Names[j] = newname;
Console.WriteLine("Element {0} has been Updated successfully", j);
}
}
}
[#C/]
ابتدا ID نام شخصی رو که میخوایم تغییرش بدیم میگیریم و بعدش نام جدید رو وارد می کنیم. در انتها با استفاده از متد show که در پستهای قبلی اونو گذاشتم ؛ تغییرات رو نشون میدیم.
آیا خوبه همینجوری یا نه؟؟ و اینکه منظور شما همینجوری بود؟
رایتل
26 April 2013
خوب بود اما طولانی
محمد فر
26 April 2013
سلام.خبری از قسمت 30 نیست؟چرا دیر شد.
kamal
26 April 2013
با عرض سلام
اول از همه باید از زحمات شما آقای درویشیان تشکر کنم بابت آموزش های بسیار عالی و خوبتون .
اما یک سوال هم داشتم و اون اینکه چرا اینقدر دیر به دیر آموزش های جدید سی شارپ رو قرار می دهید.
لطفا اگه امکان داره آموزش ها رو یکم زودتر قرار بدین
چون من واقعا دیگه تحمل انتظار کشیدن (آموزش های عالیتون) رو تا یک هفته بعد ندارم
من می خوام سی شارپ رو خیلی عالی یاد بگیرم و هرروز یکی از آموزش ها تون رو حتما می خونم و یاد می گیرم
باتشکر فراوان
داوود
27 April 2013
دوستان دیرتر بیاد که بهتره؛ بشینید از اول بخونید؛ باور کنید خیلی خوبه.
شاید آقای درویشیان درگیر کاری هستند بنده خدا !!
گناه داره، اذیتش نکنید.
میلاد
28 April 2013
سلام و خسته نباشید
آقا ممنون از همه قسمتا تا اینجا
آقا قسمت 30 نمی آید؟
منتظر هستیمااااااا…
مسعود درویشیان
28 April 2013
ببخشید بابت تاخیر
جمعه انشالله منتشر میشه
مطالبی که گفته شده رو خوب بفهمید و تمرین کنید که کم کم وارد قسمتهای سخت میشیم :) البته هیچ چیز سختی وجود نداره
مهسا
28 April 2013
با عرض سلام ببخشیید آقای درویشیان همیشه مزاحم میشم
دربارهی این جملات میخواستم بیشتر توضیح بدهید و مثال بزنید در حلقه های while و do while کلمهی contnue موجب می شود مستقیما به قسمت condition حلقه برود و مجددا حلقه را اجرا کند. اینو رو با مثال همراه با توضیحاتی که توی مقالات برای دستورات دیگه می دادید این رو همینطور توضیح بدهید باتشکر
رضا
30 April 2013
سلام جناب آقای مهندس درویشیان ببخشیید من یه مشکلی داشتم توی حل تمرین شماره ی 10 که گفتید یک مستطیل بکشم که سایزشو دریافت کنه به مشکل برخوردم هرچند اینکه توضیح دادید توی مقاله ولی بازم به مشکل برخوردم میشه دوباره از اول بیشتر توضیح بدهید باتشکر
مسعود درویشیان
5 October 2013
خیلی سادهست!
حلقهی خارجی برای چاپ کردن سطرهاست و حلقهی داخلی برای چاپ کردن ستونها.
برنامه وارد حلقهی خارجی میشه (سطر اول) و توسط حلقهی داخلی مثلا 10 تا ستاره رو چاپ میکنه (10 تا ستون) بعد دوباره برمیگرده اول حلقهی خارجی (سطر دوم) و دوباره میره داخل حلقه داخلی و 10 تا ستاره رو چاپ میکنه. اینکار رو اینقدر انجام میده تا شرط حلقهی خارجی نقض بشه:
بهاره
18 August 2013
سلام آقاي درويشيان
وقتي با sound player يه آهنگ رو پخش ميكنيم آيا راهي هم هست كه صداي اونو در برنامه كم و زياد كنيم؟
مسعود درویشیان
25 August 2013
این لینک رو ببینید.