تبلیغات
سی شارپ کده - مطالب نکته های آموزشی

سی شارپ کده

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

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

این نرم افزار متن باز است و تحت مجوز LGPL انتشار یافته است و عضوی است از پروژه ی نرم  افزاری ihardware  .

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

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


سورس نرم افزار       source icon

شما به راحتی میتوانید در صغحه ی Github این نرم افزار سورس آن را دانلود کنید و یا در تب Downloads آخرین نسخه ی نرم افزار را دانلود کنید




کلیه ی حقوق متعلق به سایت ihardware-mag.com و csharhpouse.miahanblog.com میباشد .

نظرات() 

Get Microsoft Silverlight

نظرات() 
نظرات() 
نظرات() 

پنجشنبه 24 شهریور 1390

نحوه کنترل خطاها و استثناها

نویسنده: حمیدرضا مهدوی پناه   طبقه بندی: نکته های آموزشی، 

در برنامه نویسی تابع گرا یا شی گرا احتمال نوشتن برنامه هایی که در آن خطا رخ دهد خیلی زیاد است، و حتمال اینکه سیستم عامل نتواند مشکلی برای حل این خطا پیدا کند زیادتر است. پس باید در برنامه نوشتم حد الامکان تمام خطاهای احتمالی را شناسایی کرده و برای آنها پیغام مناسبی به کاربر نشان داد. برای این کار در سی شارپ دستوراتی (blocks)وجود دارد که آنها را تشریح می کنیم.

try

{

 }

catch (Exception ex)

{

}

finally

{

}

در بلاک try باید کد برنامه یا تابع را بنویسیم. اگر احیانا در این برنامه خطایی وجود داشته باشد، اجرای برنامه به قسمت catch می رود و در آنجا با توجه به کدهایی که برای تشخیص خطا می نویسیم، خطا کنترل شود که هیچ وگرنه در هر صورت برنامه به قسمت finally رفته و کدهای آنجا را اجرا می کند.

برای مثال: بخواهیم یک فایل در یک مسیر خاص ایجاد کنیم.

private void Button1_Click(object sender, System.EventArgs e)

{

         System.IO.File.Create("c:\\test2.txt");

}

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

try

{

     System.IO.File.Create("c:\\test2.txt");

}

catch

{

}

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

به مثالی دیگر توجه کنید:

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

private void Button1_Click(object sender, EventArgs e)

{

SqlConnection Connection = new SqlConnection("server=localhost;Integrated Security=False;Initial Catalog= MyDataBase;");

SqlCommand command =new SqlCommand ("insert into Tbl1(T_Id)values(100)", Connection);

Connection.Open();

command.ExecuteNonQuery();

Connection.Close();

}

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

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

SqlConnection Connection = new SqlConnection("server=localhost;Integrated Security=False;Initial Catalog= MyDataBase;");

try

{

SqlCommand command = new SqlCommand("insert into Tbl1(T_Id)values(100)", Connection);

Connection.Open();

command.ExecuteNonQuery();

Connection.Close();

}

catch (Exception ex)

{

Console.WriteLine(ex.Message);

}

finally

{

Connection.Close();

}

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


منبع : وبلاگ آموزش نکات کاربردی زبان سی شارپ

نظرات() 

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

نظرات() 

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

ادامه مطلب

نظرات() 

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

ادامه مطلب

نظرات() 

دوشنبه 21 شهریور 1390

کار با ریجستری در سی شارپ

نویسنده: حمیدرضا مهدوی پناه   طبقه بندی: نکته های آموزشی، 

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

1- DataBase
2- فایل های INI
3- رجیستری ( تنها در برنامه نویسی برای سیستم های ویندوزی کاربرد دارد )



استفاده از DataBase : به منظور نگهداری تعداد زیادی از مقادیر ، بهترین گزینه است . همچنین در صورتی که پای امنیت اطلاعات ذخیره شده در میان است ، در انجام این روش شک نکنید . در این روش میتوانید از قابلیت Password Protection که در تمامی بانک های اطلاعاتی وجود دارد ، استفاده کنید .

استفاده از فایل های INI : در بعضی موارد هم میتوان از این روش استفاده کرد . البته این روش همراه با پیچیدگی و امنیت پایین میباشد .

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



ادامه مطلب

نظرات() 

یکشنبه 20 شهریور 1390

الگوریتم های مرتب سازی

نویسنده: حمیدرضا مهدوی پناه   طبقه بندی: نکته های آموزشی، 


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



الگوریتم مرتب سازی انتخابی (Selection Sort ): در این روش، برنامه کوچکترین مقدار را یافته و آنرا در اولین خانه ی آرایه قرار می دهد. حال که کوچکترین عضو یافت شده است، برنامه به سراغ یافتن دومین عنصر کوچک در میان اعداد باقی مانده که از 2 تا n هستند می رود و دومین عدد کوچک را در خانه دوم قرار میدهد. حال به سراغ سومین عدد کوچک می رود و این رویه را تا یافتن آخر عدد و قرار دادن آن در جای خودش تکرار میکند. با توجه به اینکه برنامه باید n عدد را n بار با هم مقایسه کند مرتبه ی پیچیدگی این الگوریتم O (n2)است.

مرتب سازی حبابی (Bubble Sort ): در این روش هر عنصر با عنصر بعدی اش مقایسه میشود. در صورتی که عنصر دومی کوچکتر از عنصر اولی باشد، جای دو عنصر با هم عوض میشود. برنامه به کارش ادامه میدهد و عناصر دوم و سوم را با هم مقایسه میکند و این کار را تا اخر آرایه ادامه میدهد. دوباره الگوریتم ، پویش را از اول آرایه شروع میکند و مراحل قبل را تکرار میکند و این مراحل آنقدر تکرار میشوند تا آرایه کاملا مرتب شده باشد. مرتبه ی پیچیدگی این الگوریتم O(n2) است.

مرتب سازی درجی (Insertion Sort ): در این روش عنصر اول و دوم با هم مقایسه شده و در صورت نیاز مرتب میشوند و سپس سومین عنصر با عناصر اول و دوم مقایسه میشود. در صورتی که عنصر سوم از اولی کوچکتر باشد به جای اولین عنصر می نشیند و عناصر قبلی به سمت راست هل داده میشوند. اگر عنصر سوم از اولی بزرگتر و از دومی کوچکتر باشد، بین آنها درج میشود و عنصر دوم به بعد یکی به سمت راست هل داده میشود. (پس در این روش همیشه عناصر ِ قبل از عنصری که میخواهیم مرتبش کنیم، مرتب هشتند.) این روال برای بقیه عناصر نیز اجرا میشود و هر عنصر در جای خودش قرار می گیرد تا تمام عناصر مرتب شوند. مرتبه ی پیچیدگی این الگوریتم O (n2) است.

مرتب سازی سریع(Quick Sort ) : در این الگوریتم یک عنصر را بعنوان محور (pilot ) مرتب سازی انتخاب میکنیم. و تمام عناصر کوچکتر از آن را به سمت چپ آن برده و عناصر بزرگتر را به سمت راست اش می‌بریم. حالا بخش چپ خودش یک بخش جدید است که با الگوریتمی که گفتیم آنرا مرتب میکنیم و سمت راست را نیز همینطور. یعنی در سمت چپی ها دوباره یک عنصر را بعنوان pilot در نظر میگیریم و عناصر کوچکتر از pilot را به سمت چپ آن و عناصر بزرگتر از pilot این قسمت را ، به سمت راست pilot می بریم. دوباره الگوریتم را روی یک چهارم های به وجود آمده اجرا میکنیم و اینکار را آنقدر ادامه میدهیم تا کل آرایه مرتب شود. مرتبه پیچیدگی این الگوریتم در بدترین حالت O (n2) است. اما در حال نرمال O (n log n) است که کمترین مرتبه پیچیدگی برای مرتب سازی اعداد به حساب می آید.

مرتب سازی ادغام (Merge Sort ): این الگوریتم به روش بازگشتی (Recursive ) عمل میکند و آرایه را به چند آرایه ی دو عنصری تقسیم میکند و آنها را مرتب میکند. سپس آرایه های کوچک را دوبه‌دو با هم ادغام میکند تا آرایه های مرتب 4 عنصری ایجاد شوند و بعد آرایه های 8 عنصری و به همین ترتیب پیش می رود تا آرایه اصلی بصورت مرتب شده ظاهر شود. مرتبه پیچیدگی این الگوریتم O(n log n) است.

مرتب سازی هرمی (Heap Sort ): در این روش، برنامه از کل آرایه ی داده شده یک درخت MaxHeap می سازد. (درخت مکس هیپ درختی دودویی و کامل است که مقدار ذخیره شده در هر گره ، بزرگتر و یا مساوی مقدار ذخیره شده در گره فرزندانش است) سپس مقدار ماگزیمم را از درخت حذف میکند و آنرا در انتهای آرایه میگذارد و دوباره از بقیه اعداد یک درخت maxHeap میسازد و باز روش مذکور را روی آن نیز اعمال میکند تا دومین عدد بزرگ یافت شود. در این روش آرایه از آخر به اول مرتب میشود. مرتبه پیچیدگی این الگوریتم O (n log n)است.

 روش هایی وجود دارند که حداقل مرتبه ی پیچیدگی هر الگوریتم را با روابطی اثبات میکنند. بطور مثال برای الگوریتم های مرتب سازی ، میزان O (n Log n) حداقل است و کمتر از این میزان ممکن نیست و همانطور که میدانیم الگوریتم های ادغام و هرمی و سریع هر سه با همین میزان پیچیدگی مرتب سازی را انجام میدهند. بنابراین الگوریتمی نمیتوان نوشت که سریعتر از این حالت عمل کند و الگوریتم های مینیمم پیچیدگی در این زمینه ،قبلا کشف و ایجاد شده اند . اما مواردی هستند مانند ضرب دو ماتریس n در n که مرتبه ی پیچیدگی شانO(n3) است و روش های جدیدی مانند روش استراسن آنرا به O(n2.81) کاهش داده است. طبق روشهای اثبات شده امکان کمتر شدن این میزان وجود دارد. اما هنوز الگوریتمی که هزینه ی پیچیدگی کمتری از الگوریتم استراسن داشته باشد کشف نشده است. بنابراین هنوز شما میتوانید وقت خود را روی کاهش مرتبه ی پیچیدگی این الگوریتم و یافتن الگوریتم بهینه تر بگذارید.
الگوریتم های شبیه سازی در ویکی پدیا 
شبیه سازی و مقایسه الگوریتم ها در کنار هم در حالات مختلف 
شبیه سازی مرتب سازی های مختلف (توسط اپلت جاوا)
دموی دوم از الگوریتم های مرتب سازی (برای شروع به کار الگوریتم ها رویشان کلیک کنید.)
سورس کد زبان C برای الگوریتم های مرتب سازی
دموی اجرای کد ها و حلقه های تودرتوی هر الگوریتم

منبع:فرین سافت


نظرات() 

آمار وبلاگ

  • کل بازدید :
  • بازدید امروز :
  • بازدید دیروز :
  • بازدید این ماه :
  • بازدید ماه قبل :
  • تعداد نویسندگان :
  • تعداد کل پست ها :
  • آخرین بازدید :
  • آخرین بروز رسانی :