|
|
|
|
|
چگونه از يك تابع بيش از يك خروجي دريافت كنيم. ظاهرا به نظر مي رسد كه توابع فقط مي توانند يك return داشته باشند و بلافاصله پس از فراخواني return كار تابع پايان يافته است. در سي شارپ دو كلمه ي كليدي به نام هاي ref و out اضافه شده اند كه اين امر را ساده تر مي كنند. استفاده از كلمه ي كليدي out : از out در تعريف تابع قبل از معرفي نوع آرگومان ورودي استفاده مي كنيم . در اين حالت بجاي اينكه به اين آرگومان ، آرگومان ورودي بگوييم ، مي توان آنرا آرگومان خروجي ناميد. تا يك مثال را در اين زمينه با هم مرور نكنيم اين مورد مفهوم نخواهد بود : مثال : يك برنامه ي سي شارپ جديد console را در VS.NET باز كنيد و نام آنرا درابتدا ex15 انتخاب نماييد. سپس كد زير را درون آن بنويسيد : using System; namespace ex15 { class Class1 { public static int TestOut(out char i) { i = 'b'; return -1; } [STAThread] static void Main(string[] args) { char i; // variable need not be initialized Console.WriteLine(TestOut(out i)); Console.WriteLine(i); Console.ReadLine(); } } } توضيحاتي در مورد كد فوق : 1- در تابع TestOut آرگومان i از با كلمه ي كليدي out مشخص شده است. يعني اينكه درون تابع هر گونه تغييري روي i انجام شود ، خارج از تابع قابل دسترسي است. 2- توابعي كه داراي آرگومانهايي تعريف شده با كلمه ي كليدي out هستند نيز مي توانند از return هم استفاده كنند. همانند مثال فوق. استفاده از كلمه ي كليدي ref : اين كلمه ي كليدي نيز دقيقا همانند out عمل مي كند و نحوه ي تعريف و استفاده از آن نيز مشابه است با اين تفاوت كه آرگوماني كه به اين نوع توابع فرستاده مي شود بايد مقدار دهي اوليه شده باشد. مثال : يك برنامه ي سي شارپ جديد console را در VS.NET باز كنيد و نام آنرا درابتدا ex16 انتخاب نماييد. سپس كد زير را درون آن بنويسيد : using System; توضيحاتي در مورد كد فوق : namespace ex16 { class Class1 { public static void FillArray(ref int[] arr) { // Create the array on demand: if (arr == null) arr = new int[10]; // Otherwise fill the array: arr[0] = 123; arr[4] = 1024; } [STAThread] static void Main(string[] args) { // Initialize the array: int[] myArray = {1,2,3,4,5}; // Pass the array using ref: FillArray(ref myArray); // Display the updated array: Console.WriteLine("Array elements are:"); for (int i = 0; i < myArray.Length; i++) Console.WriteLine(myArray[i]); Console.ReadLine(); } } } 1- همانطور كه ملاحظه مي كنيد در اينجا هنگام استفاده از تابع FillArray بايد آرگوماني را كه مي خواهيم به آن پاس كنيم مقدار دهي اوليه كنيم. 2- پس مي توان نتيجه گرفت آرگومانهايي كه با out تعريف مي شوند به صورت خالص خروجي هستند و نيازي به مقدار دهي اوليه هنگام استفاده از آنها وجود ندارد. از ref هنگامي استفاده مي كنيم كه بخواهيم روي متغير موجود و مقدار دهي شده ي خارج از تابع ، درون تابع عملياتي صورت گيرد و سپس همان متغير دستكاري شده ، عودت داده شود. تعريف تابعي با تعداد آرگومانهاي نامعلوم : گاهي از اوقات نياز است تا تابعي تعريف كنيم كه تعداد آرگومانهاي آن متغير باشند .براي اين منظور از كلمه ي كليدي params استفاده مي شود. دونكته در اينجا حائز اهميت است: 1- در هر تابعي تنها مي توان يكبار از params استفاده كرد. 2- پس از بكار بردن params ديگر نمي توان هيچ آرگوماني را تعريف كرد. يكي از مثالهايي كه در اين زمينه مي توان ارائه داد استفاده از آرايه ها به عنوان آرگومان ورودي است. در اين حالت يا مي توان يك آرايه را به صورت كامل به تابع معرفي كرد و يا تنها نام آنرا به تابع پاس كرد. مثال زير را ملاحظه كنيد : مثال : يك برنامه ي سي شارپ جديد console را در VS.NET باز كنيد و نام آنرا درابتدا ex17 انتخاب نماييد. سپس كد زير را درون آن بنويسيد : using System; توضيحاتي در مورد كد فوق : namespace ex17 { class Class1 { public static void UseParams(params int[] list) { for ( int i = 0 ; i < list.Length ; i++ ) Console.WriteLine(list[i]); Console.WriteLine(); } [STAThread] static void Main(string[] args) { UseParams(1, 2, 3); int[] myarray = new int[3] {10,11,12}; UseParams(myarray); Console.ReadLine(); } } } 1- در تابع main به دو صورت از تابع UseParams ما استفاده شده است. يا اينكه خيلي ساده هر تعداد آرگومان را مي توان به تابع فرستاد و يا اينكه در ادامه آرايه ايي رسما تعريف و سپس به تابع فرستاده شود. 2- نحوه ي تعريف و استفاده از آرايه ها به صورت آرگومان ورودي را نيز مي توان در مثال فوق آموخت |
||
|
+
نوشته شده در شنبه 31 تیر1385ساعت 21:44 توسط لوتوس
|
|
||
|
|
|
|
|
pcAnywhere نام محصول مشهور و بسيار قدرتمند كمپاني سيمانتك است كه به تازگي نسخه ي 12.0 خود را عرضه نموده است . بهجرات مي توان گفت Symantec pcAnywhere يكي از چند نرم افزار برتر جهان در زمينه ي كنترل از راه دور انواع سيستم هاست .اين نرم افزار به شما امكان ان را مي دهد تا به آساني و در كمال امنيت از راه دور به طور كامل به كنترل سيستم هاي گوناگون خود بپردازيد . سازگاري نرم افزار با اكثر سيستم عامل هاي ارائه شده از سوي كمپاني هاي برتر ديگر ويژگي خوب و منحصر به فرد اين محصول است .
برخي ويژگي هاي نرم افزار قدرتمند Symantec pcAnywhere 12.0 : توانايي بسيار قدرتمند در انتقال و رد و بدل كردن اطلاعات به طور همزمان با چند سيستم . توانايي تعيين رمز عبور براي اتصال به سيستم ها براي تامين امنيت هرچه بيشتر . امكان ايجاد ارتباطي امن, سريع و بسيار آسان با سيستم هاي ديگر . توانايي پيدا كردن خودكار قدرت پهناي باند براي استفاده از حداكثر توان موجود . ابزارهاي مناسب و قدرتمند كنترل از راه دور كه توانايي ارتباطي پويا را با ابزارهاي اصلي سيستم عامل برايتان مهيا مي كند . سازگاري با سيستم عامل هاي ويندوز, لينوكس و مكينتاش |
||
|
+
نوشته شده در چهارشنبه 21 تیر1385ساعت 22:19 توسط لوتوس
|
|
||
|
|
|
|
|
با سلام خدمت دوستان خودم
قربونتون برم من تاحالا معمولا هر زبانی که دوست داشتم نوشتم.اما از حالا می خوام هرچی شما بخواین بنویسم.اکه سوال خاصی . برنامه خاصی . زبان برنامه نویسی ویا هر سوالی داشتین بپرسین. ممنون که سر میزنید فدای همتون |
||
|
+
نوشته شده در چهارشنبه 14 تیر1385ساعت 18:20 توسط لوتوس
|
|
||
|
|
|
|
|
تعريف متدها در سي شارپ در اين قسمت به يكي از مهمترين مباحث برنامه نويسي سي شارپ مي رسيم. متدها در سي شارپ و يا همان توابع در زبان C ، اعضاي يك شيء يا كلاس هستند و مجموعه اي از يك سري از كارها را انجام مي دهند. فرض كنيد در برنامه ي شما ، قسمتي بايد يك عمليات رياضي خاص را انجام دهد و اين قسمت از كد كه شامل چندين خط نيز مي گردد بايد بارها و بارها در برنامه صدا زده شود. براي نظم بخشيدن به برنامه ، آنها را مي توان به صورت توابع بسته بندي كرد و بجاي نوشتن چندين خط تكراري، فقط نام اين بسته ( تابع ) و پارامترهاي آن را فراخواني نمود. در سي شارپ يك تابع به صورت زير تعريف مي شود : (نوع و اسامي پارامترها) نام تابع نوع خروجي تابع سطح دسترسي به تابع } بدنه ي تابع { براي تعريف يك متد يا تابع ابتدا سطح دسترسي به آن مانند public و private سپس نوع خروجي تابع مانند void ( هيچي ) ذكر مي گردد كه داخل اين پرانتزها مي توان ورودي هاي تابع يا بقولي آرگومان هاي ورودي را معرفي كرد. سپس تابع بايد با { شروع و با يك } خاتمه يابد. براي مثال : public int myFunc( int x ) { ...…. } هر تابعي مي تواند صفر تا تعداد بيشماري آرگومان ورودي و صفر تا تعداد بيشماري خروجي داشته باشد. بوسيله يك تابع مي توان پيچيدگي كار را مخفي كرد و صرفا با صدا زدن نام آن ، يك سري از عمليات را انجام داد. گاهي از اوقات لازم مي شود دو يا چند تابع با يك نام داشته باشيم بطوريكه پارامترهاي ورودي يا مقادير خروجي و يا نوع آرگومان هاي ورودي آنها با هم متفاوت باشد به اين كار overloading مي گويند. بسياري از كلاس هاي دات نت فريم ورك متدها و يا توابع مفيد حاضر و آماده اي را دارند. براي مثال كلاس DateTime ، متدي به نام ToLongDatastring دارد كه تاريخ را به صورت يك رشته طولاني بر مي گرداند. توابع void : توابعي كه با نوع void معرفي مي شوند هيچ خروجي ندارند و در زبان ويژوال بيسيك به آْنها sub و در دلفي به آنها procedure مي گويند. بازگرداندن يك مقدار از يك تابع : پس از اينكه عمليات يك مجموعه از كدها درون تابع به پايان رسيد با استفاده از كلمه ي return مي توان خروجي تابع را معرفي كرد. لازم به ذكر است ، هرجايي اين كلمه ي return ذكر شود كار تابع خاتمه مي يابد. بهتر است موارد فوق را با چند مثال مرور كنيم : مثال : يك برنامه ي سي شارپ جديد console را در VS.NET باز كنيد و نام آنرا درابتدا ex13 انتخاب نماييد. در اينجا مي خواهيم تابعي را تعريف كنيم كه سه برابر جذر يك عدد را بر مي گرداند. using System; توضيحاتي در مورد كد فوق : namespace ex13 { class Class1 { [STAThread] static void Main(string[] args) { Console.WriteLine( int3SQL(3) ); Console.ReadLine(); } public static double int3SQL( double intInput ) { double i=0; i = Math.Sqrt( intInput ); return i; } } } 1- از شيء Math در سي شارپ مي توان براي انجام يك سري عمليات رياضي ابتدايي استفاده كرد. در اينجا از متد جذر گرفتن آن استفاده شده است. 2- در تعريف تابع خودمان از كلمه ي كليدي static استفاده شده است. درون تابع Main نمي توان توابع غير استاتيك را فراخواني كرد. فعلا اين نكته را بخاطر را داشته باشيد تا در مقالات بعدي بيشتر راجع به آن صحبت شود. 3- بد نيست تابع تعريف شده را كمي بيشتر آناليز كنيم : public static double int3SQL( double intInput ) ابتدا سطح دسترسي به تابع ذكر شده است. پابليك ، يعني اين تابع خارج از كلاس يك برنامه نيز قابل دسترسي است. سپس از كلمه ي static استفاده گرديده كه توضيح مختصري را در مورد آن ملاحظه كرديد. در ادامه نوع خروجي تابع كه در اينجا double مي باشد معرفي گرديده است. دقت كنيد كه حتما بايد نوع تعريف شده با مقداري كه يك تابع بر مي گرداند يكسان باشد و گرنه با يك خطا برنامه متوقف مي شود. سپس نام تابع تعريف شده است. داخل پرانتز ها نوع و نام آرگوماني ارائه شده است كه در بدنه ي تابع استفاده مي گردد. اگر به تعداد بيشتري پارامتر و يا آرگومان نياز بود مي توان آنها را با , از هم جدا كرد. { double i=0; i = Math.Sqrt( intInput ); return i; } پس از اينكه عمليات تابع خاتمه مي يابد با استفاده از return اين خروجي را معرفي مي نماييم. براي استفاده از اين تابع به سادگي نام تابع و سپس پرانتزها به همراه يك عدد دلخواه را مي نويسم كه آنرا در متد Main برنامه مي توان مشاهده كرد. تعريف توابع در كلاس هاي ديگر برنامه و نحوه ي استفاده از آنها : يكي از زيبايي هاي برنامه نويسي شيء گرا نظم و ترتيب و بسته بندي كارها مي باشد كه اصطلاحا در اينجا به آن encapsulation مي گويند. يعني ما يك سري از توابع و خواص را درون كپسولي به نام كلاس قرار مي دهيم تا به سادگي بارها و بارها از آن استفاده نماييم. براي اينكار به سادگي يك توابع را به صورت معمول درون كلاس تعريف مي نماييم و سپس همانند خواص كه در مورد آنها صحبت شد ، از توابع مي توان استفاده كرد با اين تفاوت كه هنگام كار با توابع حتي اگر آنها هيچ آرگومان و يا پارامتر ورودي هم نداشته باشند ذكر پرانتزها الزامي است. مثالي ديگر در اين زمينه : مثال : يك برنامه ي سي شارپ جديد console را در VS.NET باز كنيد و نام آنرا درابتدا ex14 انتخاب نماييد. سپس از منوي پروژه يك كلاس جديد را به برنامه اضافه نماييد (نام آنرا clsTools بگذاريد) . using System; سپس در متد Main برنامه مي توان به صورت زير از آن استفاده كرد : namespace ex14 { public class clsTools { public clsTools() { } public uint intCalc ( uint a , uint b ) { uint c = Math.Min (a,b); double x = Math.Sqrt(c) ; uint w = Convert.ToUInt32 ( x); return w; } } } using System; توضيحاتي در مورد كد فوق : namespace ex14 { class Class1 { [STAThread] static void Main(string[] args) { clsTools m_var = new clsTools(); Console.WriteLine( m_var.intCalc(4,9)); Console.ReadLine(); } } } 1- تابع intCalc ما دو عدد صحيح مثبت را مي گيرد و سپس جذر كوچكترين دو عدد ورودي را محاسبه مي كند. 2- براي تبديل نوع هاي عددي مختلف به هم مي توان از شيء Convert استفاده كرد. 3- بدون استفاده از شيء Convert يكبار برنامه را اجرا كنيد و دليل خطاي بوجود آمده را بيان نماييد |
||
|
+
نوشته شده در چهارشنبه 14 تیر1385ساعت 18:17 توسط لوتوس
|
|
||
|
|
|
|
|
دو مورد تكميلي در مورد حلقه ها در سي شارپ : 1- هر جايي خواستيد به هر دليلي حلقه را پايان دهيد مي توانيد از دستور break; استفاده كنيد. در اين حالت به صورت آني حلقه خاتمه يافته و كدهاي ادامه ي برنامه پس از حلقه اجرا مي شوند. 2- نحوه ي استفاده از دستور continue : فرض كنيد حلقه ي شما در راند 15 خودش است! حالا در اين راند شما مي خواهيد يك سري از دستورات درون حلقه اجرا نشوند و حلقه به راند بعدي منتقل شده و كارش را ادامه دهد. اينجا است كه از دستور continue استفاده مي شود. بهتر است به يك مثال ساده در اين زمينه توجه كنيم. مثال : يك برنامه ي سي شارپ جديد console را در VS.NET باز كنيد و نام آنرا درابتدا ex11 انتخاب نماييد. سپس كد زير را درون آن بنويسيد : using System; موارد تكميلي مربوط به رد و بدل كردن مقادير به/از كلاس ها : namespace ex11 { class Class1 { [STAThread] static void Main(string[] args) { Console.WriteLine( "for (int i = 1; i <= 100; i++) -> break at i==5" ); for (int i = 1; i <= 100; i++) { if (i == 5) break; Console.WriteLine(i); } Console.ReadLine(); Console.WriteLine( "for (int i = 1; i <= 10; i++) -> continue if i<9" ); for (int i = 1; i <= 10; i++) { if (i < 9) continue; Console.WriteLine(i); } Console.ReadLine(); } } } در قسمت بعدي مي خواهيم خاصيتي را تعريف كنيم كه يك مقدار را از كاربر مي گيرد و در برنامه مي توان توسط قسمت هاي ديگر از آن استفاده كرد. ابتدا يك متغير عمومي بايد در سطح كلاس تعريف كرد تا مقدار دريافت شده توسط set را در خود نگاه داري كند (در مورد scope متغيرها ( متغيرهاي عمومي و محلي و امثال اينها) در هنگام معرفي توابع بيشتر بحث خواهد شد) . سپس از طريق كلمه ي كليدي value مقدار دريافت شده به متغير انتساب مي يابد و چون در سطح كلاس عمومي است در تمام كلاس قابل درسترسي است. مثال : يك برنامه ي سي شارپ جديد console را در VS.NET باز كنيد و نام آنرا درابتدا ex12 انتخاب نماييد. سپس از منوي پروژه يك كلاس جديد به آن اضافه نماييد (به نام clsDate) و كد زير را درون آن بنويسيد : using System; براي استفاده از آن در متد main برنامه به صورت زير عمل مي كنيم: namespace ex12 { public class clsDate { private int Year; public clsDate() { } public int setYear { set { Year = value; } } public bool IsLeapYear { get { return System.DateTime.IsLeapYear(Year); } } } } using System; توضيحاتي در مورد كد فوق: namespace ex12 { class Class1 { [STAThread] static void Main(string[] args) { clsDate m_var = new clsDate(); m_var.setYear = 1990; if (m_var.IsLeapYear) Console.WriteLine("1990 is a leap year."); else Console.WriteLine("1990 is not a leap year."); Console.ReadLine(); } } } 1- نحوه ي تعريف متغير از يك كلاس جزو اساسي ترين قسمت هاي كار با يك كلاس محسوب مي شود كه در قسمت هاي پيشين نيز معرفي گرديد. 2- هنگامي كه از if استفاده مي كنيم لزومي ندارد حتما بنويسيم m_var.IsLeapYear==true . همين كه اين خاصيت ذكر مي شود در وهله ي اول true بودن آن چك خواهد شد. 3- نحوه ي مقدار دهي به يك خاصيت را هم در كد فوق ملاحظه مي نماييد. در هنگام استفاده از خاصيت ها نيازي به آوردن پرانتزها () در مقابل نام آنها وجود ندارد. 4- براي مرور ، نحوه ي معرفي خاصيت ها با get نيز بيان گرديد. با استفاده از set و get مي توان به كلاس ها ، مقادير متغيرها را پاس كرد و يا مقداري را دريافت نمود. |
||
|
+
نوشته شده در چهارشنبه 14 تیر1385ساعت 18:15 توسط لوتوس
|
|
||
|
|
|
|
|
کامپيوترهای جديد دارای يک و يا بيش از يک کانکتور Universal Serial Bus)USB) می باشند. کانکتورهای فوق امکان اتصال تجهيزات جانبی متفاوتی نظير : چاپگر، اسکنر ، دوربين های وب و ... را فراهم می نمايند.سيستم های عامل پورت های USB را حمايت کرده و بدين ترتيب نصب درايور مربوطه بسرعت و بسادگی انجام خواهد يافت . USB چيست ؟ همواره اتصال يک دستگاه به کامپيوتر و پيکربندی مناسب آن برای استفاده ، يکی از چالش های اصلی در رابطه با بخدمت گرفتن تجهيزات جانبی در کامپيوتر بوده است : - چاپگرها به پورت موازی متصل شده و اغلب کامپيوترها دارای يک پورت هستند . فرض نمائيد که دارای يک Zip drive باشيم . درايوهای فوق نيازمند يک اتصال با سرعت بالا با کامپيوتر می باشند. در صورت استفاده از پورت موازی، از لحاظ سرعت خواسته يک Zip Drive تامين نخواهد گرديد - مودم ها از پورت های سريال استفاده می نمايند. اغلب کامپيوترها دارای دو پورت سريال بوده و در اکثر موارد سرعت مناسبی را دارا نمی باشند. - دستگاههائی که به سرعت بالائی نياز دارند بهمراه کارت های خود عرضه می گردند.اين نوع کارت ها می بايست در يکی از اسلات های برد اصلی نصب گردند.متاسفانه تعداد اسلات های موجود محدود بوده و در برخی حالات نصب نرم افزار مربوط به کارت دردسرآفرين نيز است . هدف USB خاتمه بخشيدن به تمام موارد و مشکلات موجود در زمينه بخدمت گرفتن تجهيزات جانبی در کامپيوتر است .USB يک روش آسان و استاندارد را برای اتصال 127 دستگاه به کامپيوتر، فراهم می کند. هر دستگاه می تواند شش مگابيت در ثانيه پهنای باند داشته باشد. پهنای باند فوق برای اکثر دستگاههائی که می خواهيم به کامپيوتر متصل نمائيم ، مناسب خواهد بود. اکثر تجهيزات جانبی که جديدا" توليد می گردند، دارای يک پورت USB می باشند. چاپگر، اسکنر، موس، دوربين های ديجيتال، دوربين های وب ،مودم، بلندگو، تلفن، رسانه های ذخيره سازی، اتصالات شبکه و ... نمونه هائی از اين نوع دستگاهها می باشند. اتصال يک دستگاه USB به کامپيوتر ساده است . کانکنورهای USB را می توان در پشت سيستم مشاهده و در ادامه کانکنور USB را به آنها متصل کرد. شکل زير کانکنورهای USB را در پشت سيستم نشان می دهد. در صورتيکه دستگاهی برای اولين مرتبه ( بار اول ) نصب گردد، سيستم عامل مربوطه آن را تشخيص و با نصب درايور ، عملا" زمينه استفاده از دستگاه فراهم خواهد شد. دستگاههای USB را می توان بدفعات به سيستم متصل و يا آنها را از سيستم جدا کرد.اغلب دستگاههای USB بهمراه کابل اختصاصی خود ارائه می گردند . کابل های فوق دارای اتصالی از نوع A می باشند.شکل زير يک کانکنور USB را که از نوع A است نشان می دهد. در صورتيکه دستگاه USB دارای کانکتور A نباشد بهمراه آن سوکتی ارائه شده که می تواند يک کانکنور از نوع B را قبول نمايد. از کانکتور نوع A برای اتصال به کامپيوتر و از کانکتور نوع B برای اتصال دستگاههای خاص استفاده می گردد. اغلب کامپيوترهای جديد بهمراه يک و يا بيش از يک سوکت USB ارائه می گردند. با توجه به وجود دستگاههای متعدد که دارای پورت USB می باشند، می توان بسادگی دستگاه مورد نظر را ازطريق پورت USB به يکی از سوکت های USB کامپيوتر متصل نمود.مثلا" می توان به کامپيوتر يک چاپگر USB ، يک اسکنر USB ، يک دوربين وب USB و يک کارت شبکه USB را متصل نمود. در صورتيکه کامپيونر دارای صرفا" يک کانکتور USB باشد و بخواهيم تجهيزات USB گفته شده را به آن متصل نمائيم چه کار بايد کرد؟ برای حل مشکل فوق می بايست يک USB hub را تهيه کرد. USB استاندارد قادر به حمايت از 127 دستگاه است . هاب USB بخشی از استاندارد فوق محسوب می گردد. شکل زير يک هاب USB را بهمراه چهار کانکنور از نوع A نشان می دهد. يک هاب ممکن است چهار و يا بيش از چهار پورت داشته باشد. هاب به کامپيوتر متصل شده و هر يک از دستگاهها به يکی از پورت های هاب متصل خواهند شد. هاب ها می توانند با برق و يا بدون برق باشند. استاندارد USB اين امکان را فراهم می سازد که دستگاهها برق مورد نياز خود را از طريق اتصال USB مربوطه تامين نمايند. يک دستگاه با مصرف برق بالا نظير اسکنر دارای منبع تغذيه اختصاصی خود است ولی دستگاههای با مصرف برق پايين نظير موس و دوربين های ديجيتال ، برق مورد نياز خود را می توانند از گذرگاه مربوطه تامين نمايند. در صورتيکه از دستگاههائی نظير چاپگر و يا اسکنر استفاده می گردد که خود دارای منبع تغذيه اختصاصی می باشند، نيازی به هاب با برق نخواهد بود در صورتيکه از دستگاههای فاقد منبع تغذيه نظير موس و دوربين استفاده می گردد ، به هاب برق دار نياز خواهد بود. هاب دارای ترانسفورماتور اختصاصی خود بوده و برق مورد نياز گذرگاه را تامين خواهد کرد. ويژگی های USB USB دارای ويژگی های زير است : - حداکثر 127 دستگاه را می توان متصل نمود. ( مستقيما" و يا توسط هاب های USB) - کابل های USBبتنهائی قادر به حمايت از طول 5 متر می باشند. در صورت استفاده از هاب حداکثر طول 30 متر خواهد بود. - نرخ انتقال اطلاعات گذرگاه دوازده مگابيت در ثانيه است . - هر دستگاه قادر به درخواست شش مگابيت در ثانيه است . عملا" بيش از يک دستگاه در هر لحظه نمی تواند درخواست شش مگابيت در ثانيه را داشته باشد چراکه از پهنای باند گذرگاه تجاوز خواهد کرد. - يک کابل USB دارای دو سيم برای برق ( 5+ ولت و Ground) و يک سيم بهم تابيده برای حمل داده است . - بر روی سيم برق، کامپيوتر قادر به تامين برق با حداکثر پانصد ميلی آمپر و پنج ولت است . - دستگاههای با مصرف برق پايين نظير موس می توانند برق مورد نياز خود را مستقيما" از طريق گذرگاه تامين نمايند. - دستگاههای USB را می توان هر زمان متصل و مجددا" از سيستم جدا کرد. - اکثر دستگاههای USB می توانند توسط کامپيوتر و در زمان حالت Power-saving ، به خواب ( غيره استفاده گردند) روند. دستگاههائی که به پورت USB متصل می گردند از يک کابل USB که حامل برق و داده است استفاده می نمايند. دو سيم حامل برق ( قرمز - پنج ولت و قهوه ای ( زمين ) يک زوج کابل بهم تابيده برای حمل داده ( زرد و آبی ) زمانيکه کامپيوتر روشن می گردد ، عمليات پرس و جو در رابطه با دستگاههای متصل به گذرگاه انجام شده و به هر يک از آنها يک آدرس خاص ، نسبت خواهد شد . فرآيند فوق "سرشماری" ناميده می شود. دستگاهها نيز زمانيکه به گذرگاه متصل می گردند شمارش می گردند. کامپيوتر از نحوه انتقال اطلاعات توسط دستگاهها با استناد بر يکی از روشهای زير ، آگاهی می يابد. - وقفه : دستگاهی نظير موس يا صفحه کليد که داده های کمی را ارسال می دارند از روش " وقفه " استفاده می نمايند. - Bulk ( توده ای ) . يک دستگاه نظير چاپگر که حجم بالائی از اطلاعات را در يک بسته دريافت می دارد، از روش فوق استفاده می نمايد. يک بلاک از داده ها برای چاپگر ارسال و صحت آنها نيز بررسی می گردد. - Isochronous ( همزمان ) . دستگاههای نظير بلندگو از روش فوق استفاده می نمايند. جريان پيوسته ای از داده ها بين دستگاه و کامپيوتر برقرار می گردد. USB پهنای باند موجود را به مجموعه ای از فريم ها تقسيم و کامپيوتر فريم ها را کنترل خواهد کرد. فريم ها شامل 1500 بايت بوده و هر ميلی ثانيه يک فريم جديد، بوجود می آيد اخيرا" استاندارد USB نسخه دو، مطرح شده است . بر اساس استاندارد فوق ، سرعت ده تا بيست برابر افزايش خواهد يافت . با رسيدن به سرعت های فوق می توان تقريبا" هر نوع دستگاهی را از طريق USB به کامپيوتر متصل کرد. هارد ديسک های خارجی و دوربين های فيلم برداری نمونه هائی در اين زمينه می باشند. فایل این مقاله رو هم میتونید از لینک زیر دانلود کنید |
||
|
+
نوشته شده در سه شنبه 6 تیر1385ساعت 17:33 توسط لوتوس
|
|
||
|
|
|
|
|
حلقه ها در سي شارپ : مقدمه : اگر نياز باشد تا قطعه اي از كد بيش از يكبار اجرا شود نياز به استفاده از حلقه ها مي باشد. براي مثال فرض كنيد آرايه اي به طول 1000 تعريف كرده ايد. اكنون مي خواهيد آنرا با هزار عدد متوالي پركنيد. بديهي است كه روش زير كارآمد نيست! : int[] intData = new int[1000]; نوشتن اين خطوط متوالي احتمالا با كپي و پيست و اصلاح آن حداقل نيم ساعت طول مي كشد! بنابراين نياز به وسيله اي حس مي شود كه بتوان بوسيله ي آن امثال اينگونه كارها را انجام داد. intData[0]=0; . . . intData[999]=1000; تعريف حلقه ها و استفاده از آنها : براي تعريف حلقه ها ابزارهاي متعددي مانند while, do , for , foreach وجود دارند. استفاده و انتخاب آنها بستگي به سليقه ي شما و منطق برنامه دارد. در هر حال يك مساله بديهي است كه همواره بيش از يك راه حل براي يك مساله وجود خواهد داشت. استفاده از حلقه ي for : عموما كدنويسي را با كد نويسي مي توان آموخت! بنابراين در مورد انواع حلقه ها مثالهايي ارائه خواهد گرديد. يك برنامه ي سي شارپ جديد console را در VS.NET باز كنيد و نام آنرا درابتدا ex07 انتخاب نماييد. سپس كد زير را درون آن بنويسيد : using System; توضيحاتي در مورد كد فوق : namespace ex07 { class Class1 { [STAThread] static void Main(string[] args) { int[] intData = new int[1000]; for (int i=0 ; i<1000 ; i++ ) intData[i]=i; for(int i=0 ; i< intData.Length ; i++) { int j = intData[i]; Console.WriteLine("intData[" + i + "]=" + j); } Console.ReadLine(); } } } 1- براي تعريف حلقه ي for همانطور كه مي بينيد بايد تعداد بار اجراي حلقه ( اينجا از 0 تا 999 است ) و همچنين نحوه ي رسيدن از 0 به 1000 را مشخص كرد ( در اينجا i++ است يعني هر بار يك واحد به شمارشگر حلقه اضافه مي شود. ) 2- در زبان سي i++ يعني i=i+1 و i-- يعني i=i-1 و كلا i-=n يعني i=i-n و به همين ترتيب. براي مثال i*=n يعني i=i*n و i+=n يعني i=i+n و ... 3- اگر پس از حلقه ي for يك خط كد داشته باشيم نيازي به آكولاد نيست (مانند قسمت اول كد). ولي اگر تعداد خطوط مربوط به بدنه ي for زياد بود بايد حتما از آكولاد استفاده شود (مانند قسمت دوم كد). (اين قاعده اي كلي است در زبانهاي مشتق شده از زبان سي در مورد هر چيزي!) 4- فرض كنيد در قسمت اول كد بالا بجاي 1000 مي نوشتيد 1001 . سريعا با يك خطاي زمان اجرا مواجه مي شديد. زيرا مي خواستيد به عضوي از آرايه دسترسي پيدا كنيد كه تعريف نشده است. راه مدرن چك كردن اين مسائل استفاده از خاصيت Length آرايه است كه در قسمت دوم كد در عمل مشاهده مي نماييد. هميشه از اين روش استفاده كنيد. 5- حلقه ي اول يعني اينكه كار پر كردن آرايه intData را از صفر تا 999 يكي يكي (i++) انجام بده. استفاده از حلقه ي while : يك برنامه ي سي شارپ جديد console را در VS.NET باز كنيد و نام آنرا درابتدا ex08 انتخاب نماييد. سپس كد زير را درون آن بنويسيد : using System; توضيحاتي در مورد كد فوق : namespace ex08 { class Class1 { [STAThread] static void Main(string[] args) { int n = 1; while (n < 6) { Console.WriteLine("Current value of n is {0}", n); n++; } Console.ReadLine(); } } } 1- حلقه ي while در بالا كار انجام حلقه را تا هنگامي انجام مي دهد كه شرط ذكر شده در ابتداي آن صادق و برقرار باشد. يعني در حلقه ي فوق تا وقتي n<6 است اين حلقه ادامه خواهد يافت. 2- حلقه ي while صفر يا بيشتر بار ممكن است اجرا شود. 3- در كد فوق از {0} استفاده گرديده است. متد WriteLine به شما اين اجازه را مي دهد كه n تا آرگومان براي آن تعريف كنيد و مقادير هر كدام را كه خواستيد در كد نمايش دهيد از {x} استفاده كنيد. در اين مورد مقدار آرگومان x ام نمايش داده مي شود. استفاده از حلقه ي do : يك برنامه ي سي شارپ جديد console را در VS.NET باز كنيد و نام آنرا درابتدا ex09 انتخاب نماييد. سپس كد زير را درون آن بنويسيد : using System; توضيحاتي در مورد كد فوق : namespace ex09 { class Class1 { [STAThread] static void Main(string[] args) { int x; int y = 0; do { x = y++; Console.WriteLine(x); }while(y < 5); Console.ReadLine(); } } } 1- اين حلقه به حلقه ي do…while معروف است و هر دو جزء آن بايد ذكر گردد. 2- اين حلقه تا زماني كه شرط ذكر شده در قمست while صحيح است ادامه مي يابد. 3- اين حلقه در ابتداي كار بدون توجه به قسمت while حداقل يكبار اجرا مي شود. (مثال زير را اجرا نماييد) int n = 10; استفاده از حلقه ي foreach : do { Console.WriteLine("Current value of n is {0}", n); n++; } while (n < 6); يك برنامه ي سي شارپ جديد console را در VS.NET باز كنيد و نام آنرا درابتدا ex10 انتخاب نماييد. سپس كد زير را درون آن بنويسيد : using System; توضيحاتي در مورد كد فوق : namespace ex10 { class Class1 { [STAThread] static void Main(string[] args) { int odd = 0, even = 0; int[] arr = new int [] {0,1,2,5,7,8,11}; foreach (int i in arr) { if (i%2 == 0) even++; else odd++; } Console.WriteLine( "Found {0} Odd Numbers, and {1} Even Numbers.", odd, even) ; Console.ReadLine(); } } } 1- از foreach براي حركت در بين اعضاي يك آرايه (مانند مثال بالا) و يا مجموعه ايي از اشياء استفاده مي شود (روشي شكيل ، مدرن و مطمئن! و تقريبا به ارث رسيده از ويژوال بيسيك!!). 2- در زبانهاي مشتق شده از C ، عملگر % ، باقيمانده را محاسبه مي كند. 3- در كد فوق با استفاده از حلقه ي foreach تك تك اعضاي آرايه در مورد زوج و يا فرد بودند مورد بررسي قرار گرفته اند و تعداد اعضاي زوج و فرد در آخر نمايش داده مي شود |
||
|
+
نوشته شده در پنجشنبه 1 تیر1385ساعت 21:36 توسط لوتوس
|
|
||