وبلاگ فرهاد مرتضی پور

Farhad Mortezapour's Blog

وبلاگ فرهاد مرتضی پور

Farhad Mortezapour's Blog

مسابقات برنامه نویسی ACM

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

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

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

1- باید به یکی از زبانهای برنامه نویسی متداول و اعلام شده توسط کمیته اجرایی مسابقات تسلط کامل داشته باشند. این زبانها عموما C++ ، C و یا جاوا  می باشند.

2- اعضای تیم باید تسلط کافی بر مفاهیم طراحی الگوریتم ، بهینه سازی الگوریتم ، پیچیدگی الگوریتم ، ساختمان داده ها و ... داشته باشند.

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

4- حداقل یکی از اعضا باید دست به تایپ خوبی داشته باشد تا بتواند الگوریتمهای طراحی شده را سریعا به کد تبدیل کند. (تمامی مراحل این مسابقات به صورت عملی و در پشت کامپیوتر برگزار می شود.)

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

برای آشنایی بیشتر شما با این مسابقات دو نمونه سوال اینجا قرار شده :

منبع aachp

پارامتر ها در ADO.NET

اگر تجربه استفاده از نگارشهای قدیمی تر ASP کلاسیک را داشته باشید احتمالا با ساختار زیر آشنا هستید. این مثال با استفاده از مقادیر بدست آمده از یک فرم، یک عبارت SQL می سازد:

 

 MySQL = "SELECT CustomerID, CompanyName, ContactName, City, Country, Phone " & _
"FROM Customers " & _
"WHERE " & _
"Country IN (" & _
" ' " & Request("Country1") & "', " & _
" ' " & Request(Country2") & "')" & _
CompanyName >='" & Request("StartRange") "' " & _
"OREDR By CompanyName"

 

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

 ASP.NET با معرفی عبارتهای SQL پارامتری شده این فرآیند را حذف می کند. کافی است با استفاده از مجموعه Parameters  از کلاس Command پارامترهای مورد نظر خود را تعریف کنید.

پارامتری کردن کلاس Command چند فایده دارد. به سنجش اعتبار داده ها کمک می کند، خوانائی کد را تقویت می کند، انعطاف پذیری طراحی شئ گرا را به همراه می آورد، و از همه مهمتر این که امکان تعریف صریح نوع داده را فراهم می کند. از آنجائی که اطلاعات نوع داده در کد ASP.NET کامپایل می شود، تعیین نوع داده در زمان اجرا توسط سرویس دهنده SQL انجام نمی شود، و این باعث افزایش سرعت اجرا می گردد. جهت آشنائی با کلاس های SQLParameters و SQLParameter به راهنمای مربوطه مراجعه نمائید.

اکنون با استفاده از این دو کلاس مثال اولیه SQL فوق را بصورت پارامتری می سازیم. به خاطر داشته باشید که ابتدا فضانام های ضروری را در برنامه تان وارد کنید. در این مثال خاص ما قصد داریم که از فضا نام SqlClient استفاده کنیم. لذا فضا نام های زیر را باید تعریف کنیم:

 

<%@ Import Namespace="System.Data" %>
<%@ Import Namespace="System.Data.SqlClient" %>


حالا باید متغیرها را تعریف و مقداردهی اولیه کنیم:

 

Dim MyConnection As SQLConnection
Dim MyCommand As SQLCommand
Dim MySQL As String

 

برای ساخت دستور SQL، شناسه های متغیر را درج می کنیم که با علامت @ در جاهای مناسب نشان داده می شوند (یک بار دیگر تاکید می کنیم که برای ساخت مؤثر برنامه های کاربردی وب مبتنی بر داده ها داشتن درکی کامل از SQL ضروری است). سپس مقادیر این شناسه ها را با استفاده از متدها و خصوصیتهایی که قبلا توصیف شدند مشخص می کنیم:

 

MyConnection = New SQLConnection("server=localhost;uid=sa;pwd=;dsn=Northwind")
MySQL = "SELECT CustomerID, CompanyName, ContactName, City, Country, Phone " & _
"FROM Customers " & _
"WHERE " & _
"Country IN (@Country1, @Country2) AND " & _
"CompanyName >= @StartRange " & _
"ORDER BY Country, CompanyName"

'Create the SQLCommand using the connection and SQL string.
MyCommand = New SQLCommand(MySQL, MyConnection)

 

در این لحظه پارامترهای SQL را به مجموعه Parameters از شئ SQLCommand که نمونه سازی کرده ایم اضافه می کنیم:

 

' Specify the name, type and size of the parameters to add to the collection
MyCommand.Parameters.Add(New SQLParameter("@Country1", SQLDataType.VarChar, 50))
MyCommand.Parameters.Add(New SQLParameter("@Country2", SQLDataType.VarChar, 50))
MyCommand.Parameters.Add(New SQLParameter("@StartRange", SQLDataType.VarChar, 1))

'Assign values to these parameters... in many situations this would be requested from the form object
'and would not actually be hard coded as we do in this example.
MyCommand.Parameters("@Country1").Value = "
Germany"
MyCommand.Parameters("@Country1").Value = "
UK"
MyCommand.Parameters("@StartRange").Value = "D"

 

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

در زیر یک ترکیب نحوی دیگر برای انجام همین کار می آوریم و آن هم عبارت است از افزودن سه پارامتر به شئ SQLCommand. فرق بین این دو تنها در خوانایی و ترجیح برنامه نویس است.

 

Dim pCountry1 As New SQLParameter("@Country1", SQLDataType.VarChar, 50)
Dim pCountry2 As New SQLParameter("@Country2", SQLDataType.VarChar, 50)
Dim pStartRange As New SQLParameter("@StartRange", SQLDataType.VarChar, 1)

MyCommand.Parameters.Add(pCountry1)
MyCommand.Parameters.Add(pCountry2)
MyCommand.Parameters.Add(pStartRange)

pCountry1.Value = "Germany"
pCountry1.Value = "
UK"
pStartRange.Value = "D"

 

برای دیدن نتایج عبارت SQL پارامتری شده، از شئ SQLDataReader و برای نشان دادن نتایج صفحه نمایش، از کنترل DataGrid استفاده کرده ایم:

 

MyConnection.Open()
Dim myDR As SQLDataReader = myCommand.ExecuteReader()
MyDataGrid.DataSource = myDR
MyDataGrid.DataBind()
MyConnection.Close()


برگرفته از کتاب آموزشی ASP.NET از انتشارات کانون نشر علوم