زنگ سی شارپ – قسمت بیست و دوم

توضیحی در مورد برخی از کاربردهای سی شارپ و تمرین و مرور مباحثی که تا قسمت 21 مطرح شده‌اند


مسعود درویشیان ۳۶ دیدگاه سی شارپ جمعه, ۱۵ام دی , ۱۳۹۱ 21681 بازدید

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

زنگ سی‌شارپ - قسمت بیستم و دوم

بسیاری از دوستان و خوانندگان از این‌که مطالب و آموزش‌ها در محیط کنسول ارائه می‌شود ابراز نگرانی می‌کنند و خواهان ارائه مطالب در محیطی مدرن‌تر و کاربردی‌تر هستند. البته یک خواننده‌ی آگاه حق اظهار چنین نظر و درخواستی را دارد. او نمی‌خواهد وقت خود را در این دنیای سرشار از اطلاعاتی که روز به روز در حال تغییر و گسترش است، هدر دهد. یک خواننده‌ی باهوش چیزی را می‌خواند که واقعاً برایش مفید باشد و وقت ارزشمند او را نگیرد. لازم به ذکر است که نباید هیچ نگرانی به دل خود راه دهید چراکه شما در حال یادگیری اصل زبان سی‌شارپ هستید و پس از گذارندن این سطح می‌توانید به‌راحتی در محیط‌های دل‌خواه خود فعالیت‌ کنید و از این‌که می‌توانید در محیطی مثل موبایل یا ویندوز اپلیکیشن و… برنامه بنویسید لذت ببرید.

شیرین‌ترین لحظه‌ی برنامه‌نویسی برای شما آن زمانی است که درحال آشنایی با محیط کاربردی و جدیدی مثل برنامه‌نویسی برای ویندوز ۸ یا اندروید هستید و می‌بینید که دیگر درک بسیار زیادی از دستورات دارید و از این‌که با این زبان مشکلی ندارید (و تا حد قابل قبولی با این زبان آشنایی دارید) احساس خرسندی و رضایت می‌کنید. همان‌طور که می‌دانید با ارائه‌ی ویندوز جدید مایکروسافت، رابط کاربری مترو محبوبیت زیادی پیدا کرده و با وجود نوظهور بودن آن، حجم بسیار زیادی از برنامه‌ها برای این رابط کاربری (که بسیار جذاب و دوست‌داشتنی است) روزانه در حال ارائه شدن هستند.

همچنین ابزارهای خیلی کاربردی و بسیار زیادی برای کمک به توسعه برنامه‌های این رابط کاربری ارائه  شده‌اند که به کمک آن‌ها می‌توانید کارهای خیلی جالبی انجام دهید و برنامه‌های پربارتری بنویسید. مسلماً تا چند سال آینده در ایران، ویندوز ۸ (که هم روی دستگاه‌های لمسی و هم پی‌سی ارائه می‌شود) محبوبیت زیادی پیدا می‌کند و می‌توانید در کنار ارائه برنامه‌های ویندور فرم، ساخت اپلیکیشن‌های مترو را نیز تجربه کنید.

همین‌طور می‌توانید در محیط وب و موبایل، بازی‌های رایانه‌ای و بازی‌های موبایل، Xbox و Kinect مایکروسافت و یا در شاخه‌ی برنامه‌نویسی هوش مصنوعی با زبان سی‌شارپ و… فعالیت داشته باشید.

کافی است که برای یادگیری کاری که می‌خواهید انجام دهید پشت‌کار لازم را داشته باشید و به این راحتی‌ها دست برندارید تا بتوانید به‌زودی در محیط‌های دل‌خواه خود با سی‌شارپ برنامه‌نویسی کنید. خوشبختانه آن‌قدر حجم اطلاعات ارائه شده در مورد سی‌شارپ و فعالیت‌های مرتبط به آن زیاد هستند که اگر پا به دنیای بزرگ آن بگذارید برای انجام هرکاری، به سرعت مطلب و راه حل مورد نیاز را پیدا می‌کنید. تصور کنید که در سایت stackoverflow پرسش خود را مطرح می‌کنید و در کمتر از ۱۵ دقیقه حدود ۱۰ پاسخ و راهنمایی متنوع دریافت می‌کنید که همه‌ی پاسخ‌ها به نحوی برای شما مفید هستند. این می‌تواند برای کار و تجربه‌ی شما بسیار سودمند باشد. در واقع شما در این مسیر هیچ‌گاه تنها نیستید، بلکه یاران بسیار زیادی هستند که به شما کمک می‌کنند تا در این راه موفق و موفق‌تر شوید.

در این قسمت قصد نداریم مطلب جدیدی ارائه دهیم بلکه به تمرین مباحث مطرح شده می‌پردازیم. اکنون دیگر با متد و کلاس آشنایی دارید و می‌توانید برنامه‌هایی که می‌نویسید را تا حدودی شی‌گرا کنید. متد را مثل یک دستگاه مکانیکی فرض کنید که یک کار خاص را برای شما انجام می‌دهد. گاهی این دستگاه ورودی می‌گیرد، گاهی نمی‌گیرد. گاهی چیزی را به شما برمی‌گرداند و گاه چیزی برنمی‌گرداند. به‌عنوان مثال، متدی می‌نویسیم که دو عدد را در هم ضرب می‌کند و حاصل را بر می‌گرداند (به همان‌جایی که متد صدا زده شده است):

using System;
class Example
{
    static void Main()
    {
        int result;
        result = Multipliction(5, 5);
        Console.WriteLine(result);
    }

    static int Multiplication(int a, int b)
    {
        int res;
        res = a * b;
        return res;

        // Or
        // return a * b;
    }
}

در این برنامه در کلاس Example دو متد قرار دارد. متد ()Main که نقطه‌ی شروع برنامه است و متد ()Multiplication که هر دوی این متدها به‌صورت static تعریف شده‌اند. اگر به‌یاد داشته باشید ذکر شد که یک متد static فقط می‌تواند (به‌صورت مستقیم) به اعضای static دسترسی داشته باشد و همچنین دانستید که یک عضو static وابسته به هیچ شیء‌ای نیست. متد ()Main که حتماً باید static باشد، بنابراین برای این‌که بتوانیم درون متد ()Main مستقیماً به متد ()Multiplication دسترسی داشته باشیم باید این متد را نیز به‌صورت static تعریف کنیم. درون متد ()Main، متد ()Multiplication را صدا زده‌ایم و دو مقدار را به آن داده‌ایم. این دو مقدار در هم ضرب می‌شوند و نتیجه‌ی آن return شده و در متغیر result ذخیره می‌شود.

در مثال بعد قصد داریم یک Amplifier را شبیه‌سازی کنیم. این Amplifier یک سری اطلاعات مثل نام، مدل، وات و… دارد.

class Amplifier
{
    private string Name;
    private string Model;
    private int Watt;
    private int Multichannel;
    private int EffectivePower;
    private bool ThreeDSurroundSound;
    private int CurrentVolume;
    private int MaxVolume;

    public Amplifier(string name, string model, int watt, int multichannel,
        bool threeDSurroundSound, int maxVolume)
    {
        Name = name;
        Model = model;
        Multichannel = multichannel;
        Watt = watt;
        ThreeDSurroundSound = threeDSurroundSound;
        EffectivePower = watt * multichannel;
        CurrentVolume = 0;
        MaxVolume = maxVolume;
    }
}

در ابتدا برای این کلاس یک constructor تعریف کرده‌ایم تا فیلدهای آن حتماً در لحظه‌ی ساخت شیء، مقداردهی شوند. در مرحله‌ی بعد قصد داریم یک شیء از این کلاس بسازیم و چند متد به کلاس نیز اضافه کنیم:

using System;
class AmpDemo
{
    static void Main()
    {
        Amplifier Kenwood = new Amplifier("KENWOOD", "RA-5000", 120, 5, true, 50);

        Console.WriteLine("Amplifier simulation ");
        Console.WriteLine("  Name and Model: " + Kenwood.GetNameAndModel());
        Console.WriteLine("  Effictive Power: " + Kenwood.GetEffectivePower());
        Console.WriteLine("  Multichannel: " + Kenwood.GetMultichannel());
        Console.WriteLine("  3D Surround Sound: " + Kenwood.GetThreeDSurroundSound());
    }
}
class Amplifier
{
    private string Name;
    private string Model;
    private int Watt;
    private int Multichannel;
    private int EffectivePower;
    private bool ThreeDSurroundSound;
    private int CurrentVolume;
    private int MaxVolume;

    public Amplifier(string name, string model, int watt, int multichannel,
        bool threeDSurroundSound, int maxVolume)
    {
        Name = name;
        Model = model;
        Multichannel = multichannel;
        Watt = watt;
        ThreeDSurroundSound = threeDSurroundSound;
        EffectivePower = watt * multichannel;
        CurrentVolume = 0;
        MaxVolume = maxVolume;
    }

    public int GetEffectivePower()
    {
        return EffectivePower;
    }

    public string GetNameAndModel()
    {
        return Name + " " + Model;
    }

    public int GetMultichannel()
    {
        return Multichannel;
    }

    public string GetThreeDSurroundSound()
    {
        if (ThreeDSurroundSound)
            return "Yes";
        else
            return "No";
    }
}

همان‌طور که می‌بینید، ابتدا یک شیء از این کلاس ساخته و مقادیر مربوطه را به آن داده‌ایم. سپس متدهای ساده‌ای تعریف کرده‌ایم تا بتوانیم مقدار فیلدهای private را بخوانیم. همین‌طور که می‌دانید فیلدهای private خارج از کلاس خودشان در دسترس نیستند و ما از طریق یک متد public توانستیم مقدار آن‌ها را به خارج از کلاس نشان دهیم. با این‌کار مقدار بعضی از فیلدهای private را از طریق یک متد public به‌صورت read-only در آوردیم.

همان‌طور که می‌دانید یکی از وظایف آمپلی‌فایر، بلند کردن و کم کردن صدا است. در این‌جا صدای آمپلی‌فایر ابتدا روی صفر تنظیم شده و حداکثر صدای آن ۵۰ در نظر گرفته شده است. در مرحله‌ی بعد دو متد به این کلاس اضافه می‌کنیم که وظیفه‌ی بلند کردن و کم کردن صدا را بر عهده دارند. این دو متد همچنین بررسی می‌کنند که صدا از عدد ۵۰ بیشتر و از عدد صفر کمتر نشود:

using System;
class AmpDemo
{
    static void Main()
    {
        Amplifier Kenwood = new Amplifier("KENWOOD", "RA-5000", 25, 5, true, 50);

        Console.WriteLine("Amplifier simulation");
        Console.WriteLine("  Name and Model: " + Kenwood.GetNameAndModel());
        Console.WriteLine("  Effictive Power: " + Kenwood.GetEffectivePower());
        Console.WriteLine("  Multichannel: " + Kenwood.GetMultichannel());
        Console.WriteLine("  3D Surround Sound: " + Kenwood.GetThreeDSurroundSound());

        Console.WriteLine();
        // Increase Volume
        Kenwood.IncreaseVolume(10);
        Kenwood.IncreaseVolume(20);
        Kenwood.IncreaseVolume(10);
        Kenwood.IncreaseVolume(5);
        Kenwood.IncreaseVolume(20);

        // Decrease Volume
        Kenwood.DecreaseVolume(10);
        Kenwood.DecreaseVolume(30);

        // Increase again...
        Kenwood.IncreaseVolume(20);
        Kenwood.IncreaseVolume(10);
    }
}
class Amplifier
{
    private string Name;
    private string Model;
    private int Watt;
    private int Multichannel;
    private int EffectivePower;
    private bool ThreeDSurroundSound;
    private int CurrentVolume;
    private int MaxVolume;

    public Amplifier(string name, string model, int watt, int multichannel, 
        bool threeDSurroundSound, int maxVolume)
    {
        Name = name;
        Model = model;
        Multichannel = multichannel;
        Watt = watt;
        ThreeDSurroundSound = threeDSurroundSound;
        EffectivePower = watt * multichannel;
        CurrentVolume = 0;
        MaxVolume = maxVolume;
    }

    public void IncreaseVolume(int increaseValue)
    {
        if (CurrentVolume + increaseValue <= MaxVolume)
        {
            CurrentVolume += increaseValue;
            Console.WriteLine("Increaseing Volume\n  Current Volume: " + CurrentVolume);
            Console.WriteLine();
        }
        else
        {
            Console.ForegroundColor = ConsoleColor.Red;
            Console.WriteLine("Danger!\nloud volume can hurt your ears!");
            Console.WriteLine("Max Volume is {0}. You can't violate this", MaxVolume);
            Console.ForegroundColor = ConsoleColor.Gray;
            Console.WriteLine();
        }
    }

    public void DecreaseVolume(int decreaseValue)
    {
        if (CurrentVolume - decreaseValue >= 0)
        {
            CurrentVolume -= decreaseValue;
            Console.WriteLine("Decreaseing Volume\n  Current Volume: " + CurrentVolume);
            Console.WriteLine();
        }
        else
        {
            CurrentVolume = 0;
            Console.WriteLine("Decreaseing Volume\n  Current Volume: " + CurrentVolume);
            Console.WriteLine();
        }
    }

    public int GetEffectivePower()
    {
        return EffectivePower;
    }

    public string GetNameAndModel()
    {
        return Name + " " + Model;
    }

    public int GetMultichannel()
    {
        return Multichannel;
    }

    public string GetThreeDSurroundSound()
    {
        if (ThreeDSurroundSound)
            return "Yes";
        else
            return "No";
    }
}

خروجی:

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

تمرین

تمرین شماره ۱۳: در تمرین شماره ۱۲ دفترچه تلفن ساده‌ای ساختیم که شی‌گرا نبود. در تمرین شماره ۱۳ باید دفترچه تلفنی بسازید که در آن فقط از متد static استفاده شده باشد. برای انجام این تمرین نیازی به ساختن کلاس و شیء نیست (در تمرین‌های بعد کلاس و شیء می‌سازید). برای حل این تمرین می‌توانید از الگوی زیر پیروی کنید:

using System;
class SimplePhoneBook
{
    static void Main()
    {
        while (true)
        {
            ShowMenu();

            // Use methods to build a phonebook

            Console.ReadLine();
        }
    }

    // You can use void methods or some ret-type else
    static void ShowMenu()
    {
        Console.Clear();
        Console.WriteLine("---- Simple Phonebook ----");
        Console.WriteLine();
        Console.WriteLine("1. Add");
        Console.WriteLine("2. Search");
        Console.WriteLine("3. Show all");
        Console.WriteLine("4. Exit");
        Console.WriteLine();
        Console.Write("Choose a number: ");
    }

    static void Add()
    {
        // Add statements
    }

    static void Search()
    {
        // Search statements
    }

    static void ShowAll()
    {
        // Show statements
    }
}


نویسنده / مترجم : مسعود درویشیان

علاقه مند به موسیقی و برنامه نویسی بازی


۳۶ دیدگاه برای این نوشته ثبت شده است


  1. داوود
    ۱۵ دی ۱۳۹۱

    قبل از خوندن این درس فقط میتونیم بگیم دستتون درد نکنه + و خدا حفظتون کنه!




  2. حمید
    ۱۷ دی ۱۳۹۱

    سلام و ممنون بابت آموزش ها
    سوال داشتم

    for (int i = 0; i < words.Length; i += 2)
    {
        if (i == words.Length - 2)
        {
            Console.Write(words[i]);
            break;
        }
        else
            Console.Write(words[i] + " -- ");
    }
    

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




  3. حمید
    ۱۷ دی ۱۳۹۱

    فراموش کردم بگم سوال قبلی مربوط به درس ۱۸ (صفحه ۵) و فرهنگ لغت به روش دوم




    • مسعود درویشیان
      ۱۷ دی ۱۳۹۱

      این‌جا به این دلیل از if-else استفاده کردم تا برای جداکردن کلمات از علامت -‌- استفاده کنم و if رو برای این گذاشتم تا بعد از کلمه آخر دیگه -‌- رو نذاره




      • رضوان
        ۲۷ اردیبهشت ۱۳۹۴

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




  4. سعید
    ۲۰ دی ۱۳۹۱

    ممنون




  5. داوود
    ۲۳ دی ۱۳۹۱

    سلام مسعود جان؛
    در این تکه کد:
    [C#]
    public Amplifier(string name, string model, int watt, int multichannel,
    bool threeDSurroundSound, int maxVolume)
    [C#/]
    اگه به جای متغیرهایی مثل name ، model ،watt از این متغیرها استفاده می کردیم: Name ، Model ، Watt می بایست از کلمه کلیدی this نیز استفاده می کردیم.
    درسته ؟
    حالا چرا شما این کار رو نکردید؟




    • مسعود درویشیان
      ۲۳ دی ۱۳۹۱

      سلام. آره درسته
      سی‌شارپ یه سری قواعد (یه جور خوش‌نویسی) برای نام‌گذاری داره. مثلاً متدها رو باید این‌طوری نام‌گذاری کرد: MyMethod که حروف اول هر کلمه بزرگه. نام‌گذاری کلاس هم همین‌طوره: MyClass اما پارامترها حرف اولشون کوچیکه و حرف اول کلمه‌های بعدش بزرگه مثل این: myParam

      به یکی از این حالت‌ نام‌گذاری‌ها می‌گن Pascal case. نمونه: MyClass یا MyMethod
      به اون حالت دیگه‌ی نام‌گذاری می‌گن Camel case. نمونه: myParam یا myLocalVar

      توی این مثال هم من پارامترهام به‌صورت Camel case هست اما Field ها Pascal case هستن




      • داوود
        ۲۳ دی ۱۳۹۱

        ممنونم ازت؛ دستت درد نکنه.




  6. داوود
    ۲۳ دی ۱۳۹۱

    آقا مسعود در خصوص تمرین این قسمت ازتون چند تا سوال داشتم که اگه اشکال نداشته باشه یکی یکی ازتون می پرسم؛
    سوال اول) ببینید ما باید چه جوری عددی رو که انتخاب کردیم پاس بدیم به کلاس اصلیمون؟
    ببینید من اومدم و برای اینکار در ابتدا یک متغیر که public هم بود به ابتدای برنامه و در اینجا اضافه کردم:
    [#C]
    using System;
    class SimplePhoneBook
    {
    public int b;
    static void Main()
    {
    while (true)
    {
    ..
    [#C/]
    هدفم این بود که در متد ()show بتونم اونو پاس بدم به بالا؛
    بعد در این قسمت اومدم و این کار رو کردم:
    [#C]

    static int ShowMenu(int b)
    {
    Console.Clear();
    Console.WriteLine(“—- Simple Phonebook —-“);
    Console.WriteLine();
    Console.WriteLine(“1. Add”);
    Console.WriteLine(“2. Search”);
    Console.WriteLine(“3. Show all”);
    Console.WriteLine(“4. Exit”);
    Console.WriteLine();
    Console.Write(“Choose a number: “);
    b = int.Parse(Console.ReadLine());
    return b;
    }

    [#C/]
    بعدش بطور نمونه و اینکه ببینم آیا متدم کار میکنه یا نه ؛ اومدم در متد اول این یک خط کد رو نوشتم:
    [#C]
    static void Add()
    {
    Console.WriteLine(“asdasd”);
    // Add statements
    }
    [#C/]
    و در ابتدای برنامه هم این تغییرات رو اعمال کردم:
    [#C]
    public int b;
    static void Main()
    {
    while (true)
    {
    ShowMenu(1);
    Add();

    Console.ReadLine();

    // Use methods to build a phonebook

    //int a=int.Parse(Console.ReadLine());
    //switch (a)
    //{
    // case 1:
    // Add();
    // break;
    // case 4:
    // Exit();
    // break;
    //}
    }
    }
    [#C/]
    اولش هدم این بود که عددی رو که به این قسمت پاس میدم با دستورات switch و case هدایتش کنم به متد مورد نظر ولی دیدم براحتی که فکر می کردم نیست و برای نمونه الان خودم عدد ۱ رو جلو متد ShowMenu(1); گذاشتم که برنامه کار کنه.
    حالا میشه یه راهنمایی بکنید که چطور بعنوان مثال اگه کاربر عدد یک رو وارد کرد برم وارد متد اول بشم؟
    و سوال دوم) اینکه چطور در متد ۴ بتونم از برنامه خارج بشم؟
    این دستور رو با search جستجوش کردم ولی جواب نداد: Environment.Exit();
    و سوال سوم) آیا نباید به جای while (true) از متغییری بولین استفاده کنیم که اگه به متد ۴ رفت false بشه و بیاد بیرون؟؟ اینجوری که همیشه true است و داخل حلقه همیشه خواهیم بود.
    ببخشید اگه سوالام زیاد شد و شایدم از سهل انگاری خودم که وقت شما رو گرفتم.




    • مسعود درویشیان
      ۲۴ دی ۱۳۹۱

      سلام. ممنون که همیشه با جدیت مقالات رو دنبال می‌کنی و همیشه سوال‌های خوب می‌پرسی
      در مورد سوال اول که می‌گی “چه‌جوری عددی رو که انتخاب کردیم پاس بدیم به کلاس اصلیمون” توی قسمت بعد من حل تمرین رو با توضیح کامل قرار دادم. ببینش و اگه دیدی هنوز موضوع نامفهومه تا توضیح بیشتری در موردش بدم.
      سوال دومت دستور خروج از برنامه بود که باید این دستور رو بنویسی: (۰)Environment.Exit که فکر کنم صفرش رو یادت رفته
      در مورد سوال سومت هم باید بگم که برنامه رو توی حلقه‌ی بی‌نهایت گذاشتم تا برنامه بسته نشه و هرقت خواستم با زدن عدد ۴ برنامه رو ببندم.
      حتماً با دیدن جواب تمرین خیلی از سوالاتت حل می‌شه اما اگه بازم مشکلی بود من در خدمتم

      موفق باشی




      • داوود
        ۲۴ دی ۱۳۹۱

        ” و همیشه سوال‌های خوب می‌پرسی”
        سلام مسعود عزیز؛
        خواهش می کنم ؛ این نظر لطف و بزرگی شماست. راستش رو بخواین من میدونم برای تهیه هر یک از این مقالات حداقل نیاز به ۲ ساعت وقت هست که آماده کرده و روی سایت بذارید؛ همچنین از سختی و پرکار بودن این کار شما کاملا آگاهم.
        شاید ظاهراً از منظر خوانندگان به چشم نیاید ولی برای هر خط آن و اینکه جملات به اصطلاح جور در بیایند ساعتها وقت نیاز است.
        همچنین ببخشید که زیاد سوال می پرسم؛ گاها با خودم میگم شاید با خودتون بگید من چقدر سوال می پرسم و حالیم نیست ولی راستش رو بخواین میخوام از دانسته های شما نهایت استفاده رو بکنم و کم سوادی خودم رو تا حدودی جبران کنم.
        خوشحال میشم اگه بتونم بطریقی زحمات شما رو جبران کنم.
        دوستدار همیشگی شما : داوود.
        ===
        آقا مسعود اینکه گفتید قسمت بعدی رو ببینم و بعدش اگه سوالی بود مزاحمتون بشم؛ آخه اینجوری باعث نمیشه که ما به نوعی تنبل بار بیایم و همیشه دنبال لقمه آماده باشیم؟ آخه وقتی که آدم بدونه حل یه تمرینی رو داره شاید دیگه زیاد به ذهنش فشار نیاره برای حل اون تمرین؟؟
        نظرتون چیه؟ یا شاید هم با توجه به تجربه بیشتر شما ، هنوز برای رسیدن به اون مرحله با توجه به آموزشهای پربار شما زمان هست؟
        یک دنیا ممنون و تشکر




        • مسعود درویشیان
          ۲۴ دی ۱۳۹۱

          سلام خواهش می‌کنم لطف دارید

          اتفاقاً میخواستم بگم که نیاز نیست هربار برای سوال‌هاتون عذرخواهی کنید! پرسیدن عیب نیست، ندانستن عیب است پس تا می‌تونید بپرسید… من این‌طور برداشت می‌کنم که شما با سوال پرسیدن نشون می‌دید که چقدر فعالید، نه این‌که نمی‌فهمید! خب مسلمه شما در حال آموزشید، قرار نیست یه دفعه همه‌ی موضوع رو بفهمید و حتماً سوالاتی هم براتون پیش میاد!
          اول سعی کنید خودتون تمرین رو حل کنید و برای حلش از تمام توان‌تون استفاده کنید. اگه حل کردید که خیلی عالی اما اگه سعی‌تون رو کردید و نتونستید هیچ مشکلی نداره… حل تمرین رو ببینید و همون رو خوب چندین بار تمرین کنید تا با حلش آشنا بشید…

          موفق باشید




          • داوود
            ۲۵ دی ۱۳۹۱

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




  7. داوود
    ۲۷ دی ۱۳۹۱

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

    using System;
    class SimplePhoneBook
    {
        //All My Values
        public static int Choice;
        public static string MySeach;
        public static bool IsFound = false;
        //My Array List(Just for Name And Phone)
        public static string[] Name = new string[3];
        public static int[] PhoneNumber = new int[3];
        static void Main()
        {
            while (true)
            {
                ShowMenu();
                switch (Choice)
                {
                    case 1:
                        Add();
                        break;
                    case 2:
                        Search();
                        break;
                    case 3:
                        ShowAll();
                        break;
                    case 4:
                        Exit();
                        break;
                }
            }
        }
        // You can use void methods or some ret-type else
        static int ShowMenu()
        {
            //Console.Clear();
            Console.WriteLine("—- Simple Phonebook —-");
            Console.WriteLine();
            Console.WriteLine("1. Add");
            Console.WriteLine("2. Search");
            Console.WriteLine("3. Show all");
            Console.WriteLine("4. Exit");
            Console.WriteLine();
            Console.ForegroundColor = ConsoleColor.Red;
            Console.Write("Choose a number: ");
            Console.ForegroundColor = ConsoleColor.Gray;
            Choice = int.Parse(Console.ReadLine());
            return Choice;
        }
        static void Add()
        {
            Console.WriteLine("You Can add 3 Names and Phones");
            for (int i = 0; i < Name.Length; i++)
            {
                Console.ForegroundColor = ConsoleColor.Yellow;
                Console.WriteLine("Name{0}:", i + 1);
                Console.ForegroundColor = ConsoleColor.Gray;
                Name[i] = Console.ReadLine();
                Console.ForegroundColor = ConsoleColor.Yellow;
                Console.WriteLine("Phone{0}:", i + 1);
                Console.ForegroundColor = ConsoleColor.Gray;
                PhoneNumber[i] = int.Parse(Console.ReadLine());
            }
        }
        static void Search()
        {
            Console.ForegroundColor = ConsoleColor.Yellow;
            Console.WriteLine("You Can Search With Names,please Enter your Name:");
            Console.ForegroundColor = ConsoleColor.Gray;
            MySeach = Console.ReadLine();
            for (int i = 0; i < Name.Length; i++)
            {
                if (Name[i] == MySeach)
                {
                    IsFound = true;
                    Console.ForegroundColor = ConsoleColor.Red;
                    Console.WriteLine("congratulation!Your search is found");
                    Console.ForegroundColor = ConsoleColor.Yellow;
                    Console.WriteLine("your Name is:{0}\n your Phone Number is:{1}", Name[i], PhoneNumber[i]);
                    Console.ForegroundColor = ConsoleColor.Gray;
                }
            }
            if (!IsFound)
            {
                Console.ForegroundColor = ConsoleColor.Red;
                Console.WriteLine("sorry,Not Result for your Search!");
            }
        }
        static void ShowAll()
        {
            Console.WriteLine("All Phone Note is:");
            for (int i = 0; i < Name.Length; i++)
            {
                Console.WriteLine("name{0}is: {1} and Phone{0}: {2}", i + 1, Name[i], PhoneNumber[i]);
            }
        }
        static bool Exit()
        {
            Environment.Exit(0);
            return false;
        }
    }
    



    • مسعود درویشیان
      ۱ بهمن ۱۳۹۱

      خیلی خوبه. آفرین




      • داوود
        ۱ بهمن ۱۳۹۱

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




  8. محمد فر
    ۱۷ فروردین ۱۳۹۲

    با سلام و خسته نباشید و تشکر از زحمات جنابعالی.
    من از ظهر تا الان داشتم تمرین مربوط به این درس رو حل میکردم می دونم که خیلی دیره ولی همه اش رو خودم حل کردم و یک مقدار خیلی کم هم از تمرین قبلی شما کمک گرفتم.اگر اشکال نداره بذارم و شما راجبش نظر بدهید؟




    • مسعود درویشیان
      ۱۷ فروردین ۱۳۹۲

      بله حتماً




  9. محمد فر
    ۱۷ فروردین ۱۳۹۲

    تمرین رو گذاشتم.لطف کنید بهم اشتباهاتم رو بگید.ممنون




    • مسعود درویشیان
      ۱۸ فروردین ۱۳۹۲

      اگه پروژه رو آپلود کنی بهتره، کدهایی که گذاشته بودی بهم ریخته شده




  10. محمد فر
    ۲۱ فروردین ۱۳۹۲

    من پروژه رو ۱۸ گذاشتم به دستتون نرسیده؟




  11. محمد فر
    ۲۷ فروردین ۱۳۹۲

    سلام.اگر جوابم روبدید ممنون میشم




    • مسعود درویشیان
      ۲۸ فروردین ۱۳۹۲

      ببخشید پروژه به دستم نرسیده لطفاً دوباره بفرستید.




  12. محمد فر
    ۲۸ فروردین ۱۳۹۲


  13. محمد فر
    ۲۸ فروردین ۱۳۹۲

    اومد؟




    • مسعود درویشیان
      ۲۸ فروردین ۱۳۹۲

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




  14. محمد فر
    ۲۹ فروردین ۱۳۹۲

    اخه لینکش رو می زارم ولی ارسال نمیشه




    • مسعود درویشیان
      ۲۹ فروردین ۱۳۹۲

      لینک رو دیدم، سیستم وردپرس لینک رو جای دیگه قرار داده بود :)




  15. محمد
    ۶ شهریور ۱۳۹۳

    نمی دونم این چه مشکلی داره هر کار می کنم ارور می ده :
    using System;

    class MyClass
    {
    static void main()
    {

    while (true)
    {
    Wellcom();
    Console.ReadLine();
    }
    }

    static void Wellcom()
    {
    Console.BackgroundColor = ConsoleColor.Yellow;

    string[] wellArray = {
    “welcom to my app thats for waste of time”,
    “۱٫search”,
    “۲٫add”,
    “۳٫list”,
    “۴٫Exite”,
    };
    for (int i = 0; i < wellArray.Length; i++)
    {
    Console.WriteLine(wellArray[i]);
    }
    Console.BackgroundColor = ConsoleColor.Gray;
    }

    }

    error=Error ۱ Program 'c:\Users\someone\Documents\Visual Studio 2013\Projects\educates2\educates2\obj\Debug\educates2.exe' does not contain a static 'Main' method suitable for an entry point c:\users\someone\documents\visual studio 2013\Projects\educates2\educates2\CSC educates2
    دیوونه شدم




    • مسعود درویشیان
      ۶ شهریور ۱۳۹۳

      main رو با M بزرگ بنویسید. ()Main




      • محمد
        ۶ شهریور ۱۳۹۳

        خیلی ممنون واقعا ولی چرا همینو خود ویژوال نمی فهمه که بهم بگه انگار سنتکس ارور نیست آیا این دوتا مین با هم فرق دارن؟




        • مسعود درویشیان
          ۶ شهریور ۱۳۹۳

          اگه دقت کنی می‌بینی که توی خطا بهت گفته
          نقطه‌ی شروع همه برنامه‌ها توی سی‌شارپ متد Main با M بزرگ هست. اگه جور دیگه بنویسی انگار از این متد استفاده نکردی!




  16. رضوان
    ۲۷ اردیبهشت ۱۳۹۴

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




  17. عارف
    ۲۸ بهمن ۱۳۹۵

    سلام ، خیلی ممنون بابت آموزش های عالیتون.
    یه مشکل برای من پیش اومده؛ من آرایه public نمیتونم بسازم و توی متد های static بهش مقدار بدم !

    class Program
    {
    public byte counter = 0;
    public string names[];
    public string numbers[];

    .
    .
    .
    .
    static void add(string name, string number)
    {
    Program gettin = new Program ;

    for (int i = 0; i<= 20; i++)
    {
    gettin .names = name ;
    gettin .numbers = number ;

    }
    checkwhattodo();

    }




    • عارف
      ۲۹ بهمن ۱۳۹۵

      مسئله حل شد، آرایه ها رو از نوع استاتیک و نه public تعریف کردم.
      شما توی ۳ تا درس قبل فرمودین در کلاسی که هم اعضای استاتیک و هم غیر استاتیک وجودر داشته باشند تنها میتوان به اعضای استاتیک آن دست داشت مگر آنکه از نوع کلاس یک شی بسازیم.



دیدگاه خود را بنویسید





نشانی ایمیل شما منتشر نخواهد شد.

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

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

شما میتوانید با مراجعه به سایت گراواتار یک آواتار اختصاصی برای خود تعریف کنید، تا در کنار نام شما نمایش داده شود

برای قرار دادن کدهای نمونه می توانید از تگ های [php] ، [html] ، [css] و [js] استفاده کنید.
به عنوان مثال کدهای php را می توان به صورت زیر قرار داد:
[php] var $whoLoveIranians = "WebTarget!"; [/php]



کلیه حقوق مادی و معنوی برای وب سایت وب تارگت محفوظ است ©2017 وب‌تارگت

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