تبليغاتX
تحقيق
مغولی                                چاویدان

سعادتی                         وفا زاده

تا جیک                            آکنده

همت آبادی                        ایروانی                           

بوژمهرانی                            کافی

+ نوشته شده در  شنبه بیست و ششم اردیبهشت 1388ساعت 12:49  توسط   | 

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

بعدها اروپاییها سرعت نور را محاسبه کردند و کم کم بحث ها در مورد ماهیت نور به جریان افتاد و بالاخره ماهیت موجی برای نور تثبیت شد. اما همین ماهیت موجی هم به اشکالاتی برخورد.

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

در متن زیر

ناظر ساکن ، نسبت به منبع موج ساکن می باشد (ناظر0)

ناظر از منبع دور می شود (ناظر1)

ناظر به منبع نزدیک می شود (ناظر 2)

می دانیم که موج آب دارای سرعت نسبی است و اگر از نگاه ناظر1 نگاه کنیم، سرعت موج را کمتر از ناظر 0 محاسبه می کنیم. اگر ناظر2 موج را مورد بررسی قرار دهد، سرعت نور را بیشتر از ناظر 0 محاسبه خواهد کرد. به این نوع جمع نسبی سرعتها تبدیلات گالیله ای می گویند.

دانشمندان مدتها فکر می کردند که موج نور مثل موج آب در دریایی از جنس اتر می باشد. اتر نیز چهارچوب لخت جهانی در نظر گرفته شده بود و در مورد سرعت نور تبدیلات گالیله ای را بکار می بردند یعنی اگر ما به عنوان ناظر1 یا 2 یا 0 باشیم برای نور سرعتی متفاوت بدست خواهیم آورد.

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

متن آزمایش بدین قرار بود:

آینه نیمه شفاف: مثلا شیشه سیاه که نصف نور را منعکس می کند و نصف آنرا عبور می دهد

از منبع نور به اینه نیمه شفاف نوری می تابد، از این نور تابیده پرتوهایی از سطح آینه نیمه شفاف بازتاب شده و به آینه 1 می رسد و پرتوهایی نیز از آینه نیمه شفاف رد شده به آینه 2 خواهند رسید. این پرتوهای نور پس از بازتاب از سطح آینه 1 و 2 به سمت تداخل شنج باز می تابد تا میزان تداخل امواج سنجیده شود . با محاسباتی که روی مقدار بدست آمده، انجام شود ؛ می توان سرعت زمین را نسبت به اتر محاسبه کرد.

این آزمایش برای اثبات نظریه اتر جان گرفت و موفق شد که جان نظریه اتر را بگیرد! این آزمایش کاملا اساس نظریه اتر را سست کرد و سر انجام از هم فرو پاشید. در واقع اولین تبر سنگین به تنه فیزیک نیوتونی بود.

 

 

 

اتر

از ویکی‌پدیا، دانشنامهٔ آزاد.

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

هر ترکیبی که ساختارR-O-R داشته باشد؛ اتر نیست.

 

] ویژگی‌های فیزیکی

روش معمولی نامگذاری اترها به شکل آلکوکسی آلکان است. برای نمونه :(اتوکسی‌اتان, CH3-CH2-O-CH2-CH3). هر چند که روش کم‌کاربردتری نیز برای نامگذاری اترها هست که در آن نخست نام دو گروه آلکیلی که با اکسیژن پیوند دارند آمده و سپس نام اتر می‌آید. اتر نامبرده در روش دوم دی‌اتیل اتر نامگذاری می‌شود.] اترهای نوع اول، دوم و سوم

اترها بسته به گروه کربنی که به اکسیژن آن‌ها پیوند داشته باشد در این سه گروه جای می‌گیرند. در این‌جا از هر نوع یک نمونه آورده شده است. یک اتر نوع اول: دی‌اتیل اترCH3-CH2-O-CH2-CH3. یک‌اتر نوع دوم:دی‌ایزوپروپیل اتر (CH3)2CH-O-CH(CH3)2 و یک اتر نوع سوم: دی‌ترسیوبوتیل اتر (CH3)3C-O-C(CH3)3.


دی‌متیل اتر، یک اتر نوع اول، نوع دوم، نوع سوم

 

 

 

 

 

فرضیه اتر

 

 

اطلاعات اولیه

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

+ نوشته شده در  شنبه بیست و ششم اردیبهشت 1388ساعت 12:44  توسط   | 

در زبان انگلیسی «کامپیوتر» به کسی می‌گفتند که محاسبات ریاضی را (بدون ابزارهای کمکی مکانیکی) انجام می‌داد. بر اساس «واژه‌نامه ریشه‌یابی Barnhart Concise» واژه کامپیوتر در سال ۱۶۴۶ به زبان انگلیسی وارد گردید که به معنی «شخصی که محاسبه می‌کند» بوده‌است و سپس از سال ۱۸۹۷ به ماشین‌های محاسبه مکانیکی گفته می‌شد. در هنگام جنگ جهانی دوم «کامپیوتر» به زنان نظامی انگلیسی و آمریکایی که کارشان محاسبه مسیرهای شلیک توپ‌های بزرگ جنگی توسط ابزار مشابهی بود، اشاره می‌کرد.

در اوایل دهه ۵۰ میلادی هنوز اصطلاح ماشین‌ حساب (computing machines) برای معرفی این ماشین‌ها به‌کار می‌رفت. پس از آن عبارت کوتاه‌تر کامپیوتر (computer) به‌جای آن به‌کار گرفته شد. ورود این ماشین به ایران در اوائل دهه ۱۳۴۰ بود و در فارسی از آن زمان به آن «کامپیوتر» می‌گفتند. واژه رایانه در دو دهه اخیر در فارسی رایج شده و به‌تدریج جای «کامپیوتر» را گرفت.


برابر این واژه در زبان‌های دیگر حتما همان واژه زبان انگلیسی نیست. در زبان فرانسوی واژه "ordinateur"، که معادل «سازمان‌ده» یا «ماشین مرتب‌ساز» می‌باشد به‌کار می‌رود. در اسپانیایی "ordenador" با معنایی مشابه استفاده می‌شود، همچنین در دیگر کشورهای اسپانیایی زبان computadora بصورت انگلیسی‌مآبانه‌ای ادا می‌شود. در پرتغالی واژه computador به‌کار می‌رود که از واژه computar گرفته شده و به معنای «محاسبه کردن» می‌باشد. در ایتالیایی واژه "calcolatore" که معنای ماشین حساب بکار می‌رود که بیشتر روی ویژگی حسابگری منطقی آن تاکید دارد. در سوئدی رایانه "dator" خوانده می‌شود که از "data" (داده‌ها) برگرفته شده‌است. به فنلاندی "tietokone" خوانده می‌شود که به معنی «ماشین اطلاعات» می‌باشد. اما در زبان ایسلندی توصیف شاعرانه‌تری بکار می‌رود، «tölva» که واژه‌ایست مرکب و به معنای «زن پیشگوی شمارشگر» می‌باشد. در چینی رایانه «dian nao» یا «مغز برقی» خوانده می‌شود. در انگلیسی واژه‌ها و تعابیر گوناگونی استفاده می‌شود، به‌عنوان مثال دستگاه داده‌پرداز («data processing machine»).

[ویرایش] معنای واژه‌ی فارسی رایانه

واژه‌ی رایانه از مصدر رایانیدن ساخته شده که در فارسی میانه به شکلِ rāyēnīdan و به معنای «مرتّب کردن، نظم بخشیدن و سامان دادن» بوده است. این مصدر در زبان فارسی میانه یا همان پهلوی کاربرد فراوانی داشته و مشتق‌های زیادی نیز از آن گرفته شده بوده. در زبان فارسی نو یا همان فارسی (دری) این فعل و مشتق‌هایش به کار نرفته‌اند. برایِ مصدر رایانیدن/ رایاندن در لغتنامه‌ی دهخدا چنین آمده:

رایاندن . [ دَ ] (مص) رهنمائی نمودن به بیرون . هدایت کردن . (ناظم الاطباء). اما در مآخذ دیگر دیده نشد.

و گویا تنها در واژه‌نامه‌ی ناظم‌الاطبّا آمده است.

شکلِ فارسی میانه‌ی این واژه rāyēnīdan بوده و اگر می‌خواسته به فارسی نو برسد به شکل رایانیدن/ رایاندن درمی‌آمده. (بسنجید با واژه‌یِ فارسیِ میانه‌یِ āgāhēnīdan که در فارسیِ نو آگاهانیدن/ آگاهاندن شده است).

این واژه از ریشه‌یِ فرضیِ ایرانیِ باستانِ –radz* است که به معنایِ «مرتّب کردن» بوده. این ریشه به‌صورتِ –rad به فارسیِ باستان رسیده و به شکلِ rāy در فارسیِ میانه (پهلوی) به‌کار رفته. از این ریشه ستاک‌هایِ حالِ و واژه‌هایِ زیر در فارسیِ میانه و نو به‌کار رفته‌اند:

  • -ā-rādz-a*یِ ایرانیِ باستان > -ā-rāy ِ فارسی میانه که در واژه‌یِ آرایشِ فارسیِ نو دیده می‌شود.
  • -pati-rādz-a*یِ ایرانیِ باستان > -pē-rāy ِ فارسی میانه که در واژه‌یِ پیرایشِ فارسیِ نو دیده می‌شود؛ و
  • -rādz-ta*یِ ایرانیِ باستان > rāst ِ فارسی میانه که در واژه‌یِ راستِ فارسیِ نو دیده می‌شود.

این ریشه‌یِ ایرانی از ریشه‌یِ هندواروپاییِ -reĝ* به معنایِ «مرتّب کردن و نظم دادن» آمده است. از این ریشه در

  • هندی rāj-a به معنیِ «هدایت‌کننده، شاه» (یعنی کسی که نظم می‌دهد)؛
  • لاتینی rect-us به معنیِ «راست، مستقیم»،
  • فرانسه di-rect به معنیِ «راست، مستقیم»،
  • آلمانی richt به معنیِ «راست، مستقیم کردن» و
  • انگلیسی right به معنیِ «راست، مستقیم، درست»

برجای مانده است.


در فارسیِ نو پسوندِ -ـه (= /e/ در فارسی رسمی ایران و /a/ در فارسی رسمی افغانستان و تاجیکستان) را به ستاکِ حالِ فعل‌ها می‌چسبانند تا نامِ ابزارِ آن فعل‌ها به‌دست آید (البته با این فرمول مشتق‌های دیگری نیز ساخته می‌شود، امّا در اینجا تنها نامِ ابزار مدِّ نظر است)؛ برای نمونه از

  • مالـ- (یعنی ستاکِ حالِ مالیدن) + -ـه، ماله «ابزار مالیدنِ سیمان و گچِ خیس»
  • گیر- (یعنی ستاکِ حالِ گرفتن) + -ـه، گیره «ابزار گرفتن»
  • پوشـ- (یعنی ستاکِ حالِ پوشیدن) + -ـه، پوشه «ابزار پوشیدن» (خود را جایِ کاغذهایی بگذارید که پوشه را می‌پوشند!)
  • رسانـ- (یعنی ستاکِ حالِ رساندن) + -ـه، رسانه «ابزار رساندنِ اطّلاعات و برنامه‌هایِ دیداری و شنیداری»

حاصل می‌گردد.

در فارسیِ نو پسوندِ -ـه (= e- یا همان a-) را به ستاکِ حالِ "رایانیدن" یعنی رایانـ- چسبانده‌اند تا نامِ ابزارِ این فعل ساخته شود؛ یعنی "رایانه" به معنایِ «ابزارِ نظم بخشیدن و سازماندهی ( ِ داده‌ها)» است.

احتمال می‌رود که سازندگان این واژه به واژه‌یِ فرانسویِ این مفهوم، یعنی ordinateurتوجّه داشته‌اند که در فرانسه از مصدرِ ordre «ترتیب و نظم دادن و سازمان بخشیدن» ساخته شده. به هرحال، معنادهیِ واژه‌یِ رایانه برایِ این دستگاه جامع‌تر و رساتر از کامپیوتر است. یادآور می‌شود که computerبه معنایِ «حسابگر» است، حال آن‌که کارِ این دستگاه براستی فراتر از "حساب کردن" است.

+ نوشته شده در  چهارشنبه بیست و سوم اردیبهشت 1388ساعت 15:41  توسط   | 

اتحاد جماهیر شوروی آن زمان موشكی با نام «اسپونیك» (Spotnik) را به فضا می فرستد و نشان می دهد دارای قدرتی است كه می‌تواند شبكه های ارتباطی آمریكا را توسط موشك‌های بالستیك و دوربرد خود از بین ببرد. آمریكایی‌ها در پاسخگویی به این اقدام روس‌ها, موسسه پروژه های تحقیقی پیشرفته “ARPA” را به‌وجود آوردند. هدف از تاسیس چنین موسسه ای پژوهش و آزمایش برای پیدا كردن روشی بود كه بتوان از طریق خطوط تلفنی, كامپیوترها را به هم مرتبط نمود. به طوری كه چندین كاربر بتوانند از یك خط ارتباطی مشترك استفاده كنند. در اصل شبكه‌ای بسازند كه در آن داده ها به صورت اتوماتیك بین مبدا و مقصد حتی در صورت از بین رفتن بخشی از مسیرها جابه‌جا و منتقل شوند. در اصل هدف “ARPA” ایجاد یك شبكه اینترنتی نبود و فقط یك اقدام احتیاطی در مقابل حمله احتمالی موشك های اتمی دوربرد بود. هر چند اكثر دانش امروزی ما درباره شبكه به‌طور مستقیم از طرح آرپانت “ARPPA NET” گرفته شده است. شبکه ای که همچون یک تار عنکبوت باشد و هر کامپیوتر ان از مسیرهای مختلف بتواند با همتایان خود ارتباط دااشته باشد واگر اگر یک یا چند کامپیوتر روی شبکه یا پیوند بین انها از کار بیافتاد بقیه باز هم بتوانستند از مسیر های تخریب نشده با هم ارتباط بر قرار کنند.

این ماجرا با وجودی كه بخشی از حقایق به‌وجود آمدن اینترنت را بیان می‌كند اما نمی‌تواند تمام واقعیات مربوط به آن را تشریح كند. باید بگوییم افراد مختلفی در تشكیل اینترنت سهم داشته اند آقای “Paul Baran” یكی از مهمترین آنهاست. آقای باران كه در دوران جنگ سرد زندگی می‌كرد می‌دانست كه شبكه سراسری تلفن آمریكا توانایی مقابله با حمله اتمی شوروی سابق را ندارد. مثلا اگر رییس جمهور وقت آمریكا حمله اتمی متقابل را دستور دهد, باید از یك شبكه تلفنی استفاده می‌كرد كه قبلا توسط روس‌ها منهدم شده بود. در نتیجه طرح یك سیستم مقاوم در مقابل حمله اتمی روس‌ها ریخته شد.آقای باران (Baran) تشكیل و تكامل اینترنت را به ساخت یك كلیسا تشبیه كرد و معتقد بود, طی سال های اخیر هر كس سنگی به پایه ها و سنگ های قبلی بنا اضافه می كند و انجام هر كاری وابسته به كارهای انجام شده قبلی است. بنابراین نمی توان گفت, كدام بخش از كار مهمترین بخش كار بوده است و در كل پیدایش اینترنت نتیجه كار و تلاش گروه كثیری از دانشمندان است. داستان پیدایش اینترنت با افسانه و واقعیت در هم آمیخته شده است.

در اوایل دهه 60 میلادی آقای باران طی مقالاتی پایه كار اینترنت امروزی را ریخت. اطلاعات و داده‌ها به صورت قطعات و بسته های كوچكتری تقسیم و هر بسته با آدرسی كه به آن اختصاص داده می‌شود به مقصد خاص خود فرستاده می‌شود. به این ترتیب بسته‌ها مانند نامه‌های پستی می توانند از هر مسیری به مقصد برسند. زیرا آنها شامل آدرس فرستنده و گیرنده هستند و در مقصد بسته‌ها مجددا یكپارچه می‌شوند و به صورت یك اطلاعات كامل درمی‌آیند.

آقای باران (Baran) طی مقالاتی اینچنینی ساختمان و ساختار اینترنت را پیش‌گویی كرد. او از كار سلول های مغزی انسان به عنوان الگو استفاده كرد, او معتقد بود: وقتی سلول‌های مغزی از بین بروند, شبكه عصبی از آنها دیگر استفاده نمی كند و مسیر دیگری را در مغز انتخاب می‌كند. از دیدگاه وی این امكان وجود دارد كه شبكه‌ای با تعداد زیادی اتصالات برای تكرار ایجاد شوند تا در صورت نابودی بخشی از آن, همچنان به صورت مجموعه ای به هم پیوسته كار كند. تا نیمه دهه 60 میلادی كسی به نظرات او توجه‌ای نكرد. تا اینكه در سال 1965 نیروی هوایی آمریكا و«آزمایشگاه های بل» به نظرات او علاقه‌مند شدند و پنتاگون با سرمایه‌گذاری در طراحی و ساخت شبكه ای براساس نظریات او موافقت كرد.

ولی آقای باران (Baran) بنابر دلایلی حاضر با همكاری با نیروی هوایی آمریكا نشد. در این میان دانشمندی با نام تیلور (Tailon) وارد موسسه آرپا (ARPA) شد. او مستقیما به آقای هرتسفلد رییس موسسه پیشنهاد كرد: (ARPA) آرپا هزینه ایجاد یك شبكه آزمایشی كوچك با حداقل چهار گره را تامین كند كه بودجه آن بالغ بر یك میلیون دلار می‌شد. با این پیشنهاد تیلور تجربه ای را آغاز كرد كه منجر به پیدایش اینترنت امروزی شد. او موفق شد در سال 1966, دو كامپیوتر را در شرق و غرب آمریكا به هم متصل كند. با این اتصال انقلابی در نحوه صدور اطلاعات در دنیای ارتباطات رخ داد كه نتیجه آن را امروز همگی شاهد هستیم. این شبکه به بسته هایی (packet) از داده ها که به وسیله کامپیوتر های مختلف ارسال میشدند اتکا داشت. پس از انکه ازمایشها سودمندی انرا مشخص کردند سایر بخش های دولتی و دانشگاهها پژوهشی تمایل خود را به وصل شدن به ان اعلام کردند . ارتباطات الکترونیکی به صورت روشی موثر برای دانشمندان و دیگران به منظور استفاده مشترک از داده ها در امد. در همان زمان که ARPAnet در حال رشد بود تعدادی شبکه پوشش محلی (LAN) در نقاط مختلف امریکا به وجود امد. مدیران LAN ها نیز به وصل کردن کامپیوتر های شبکه های خود به شبکه های بزرگتر اقدام کردند . پروتوکل اینترنت ARPAnet IP زبان استاندارد حکمفرما برای برقراری ارتباط کامپیوتر های شبکه های مختلف به یکدیگر شد.تاریخ تولد اینترنت به طور رسمی اول سپتامبر 1969 اعلام شده است. زیرا كه اولین “IMP” در دانشگاه “UCLA” واقع در سانتاباربارا در این تاریخ بارگذاری شده است.

از اوایل دهه 1990 رشد استفاده از اینترنت به صورت تصاعدی افزایش یافت . یکی از علل چنین استقبالی ابزار جستجویی مانند Gopher و archie بوده است اما اینها در سال 1991 تحت تاثیر word wide web قرار گرفتند که به وسیله CERN یا ازمایشگاه فیزیک هسته ای اروپا ساخته شد . با ان که اینترنت از ابتدا طوری بود که مبادله اطلاعات برای تازه واردان بسیار ساده باشد. بزرگترین جهش در وب در سال 1993 با عرضه نرم افزار موزاییک mosaic که نخستین برنامه مرورگر وب گرافیکی بود به وجود امد. برنامه موزاییک محصول تلاش دانشجویان و استادان بخش "مرکز ملی کاربردهای ابر کامپیوتر " در دانشگاه ایلینویز امریکا بود. برای نخستین بار موزاییک امکانات اشاره و کلیک (به وسیله موش) را فراهم کرد. کاربران می توانستند صفحات وب (web page) یا مجموعه ای از متن و گرافیک را کنار هم بگذارند تا هر کسی که میخواست انها را بتواند روی اینترنت ببیند. وقتی با موش روی کلمه ها یا تصاویر خاصی که hyper link نامیده میشد کلیک میکردند برنامه موزاییک به طور خود کار یک صفحه دیگر باز میکرد که به کلمه یا تصویر خاص و کلیک شده اختصاص داشت. بهترین بخش این سیستم انجا بود که hyper link ها میتوانستند به صفحاتی روی همان کامپیوتر یا هر کامپیوتر دیگر اینترنت با خدمات وب اشاره کنند. صفحات وب هر روز متولد میشدند و مفهوم موج سواری یا surfing روی وب متولد شد. اواسط سال 1994 سه میلیون کامپیوتر به اینترنت وصل شده بود و در ان هنگام اجرای عملیات اهسته نشده بود. صفحات جدید وب که شامل همه چیز از اسناد دولتی تا مدارک شرکت ها و مدل های جدید لباس بود در سراسر دنیا چندین برابر شد . موزاییک و جانشینان ان مانند navigator محصول شرکت " نت اسکیپ " اینترنت را از قلمرو علمی به میان مردم اوردند. طبق اخرین امار 51 درصد کاربران بعد از سال 1995 وارد این محیط شده اند. میلیون ها انسانی که از اینترنت استفاده میکنند نیازی ندارند که نکات فنی مانند TCP/IP را بدانند . امروزه شرکتهای خدمات دهنده اینترنت یا ISP این کار را به عهده دارند.رشد روز افزون ان و ساده تر شدن استفاده ان همچنان ادامه دارد . هر چه تعداد مردم بیشتری به اینترنت رجوع کنند تعداد شرکت های سازنده برنامه های اینترنت بیشتر میشود.با انکه بعضی از عاشقان اینترنت ان را نوعی شیوه زندگی میدانند. در نظر بیشتر کاربران منبع سرگرمی اطلاعات است ولی بیشترین مصرف ان پست الکترونیکی یا همان email است که یکی از ابزار های ارتباطی کار امد به شمار میرود. پیامها از کامپیوتری به کامپیوتر دیگر با سرعت پرواز میکنند و منتظر میمانند تا شخص فرصت خواندن انها را پیدا کند . وب امکانات خوبی برای کپی از نرم افزارهای مجاز از لحاظ کپی فراهم میسازد. وقتی كه می بینیم كه در مدت كوتاهی اینترنت به چنین رشدی نایل آمده است, مطمئنا دشوار خواهد بود كه آینده او را پیش بینی كنیم. طبق نظر كارشناسان ماهانه 10 درصد به تعداد كاربران اینترنت افزوده می‌شود ولی تعداد دقیق كاربران كه روزانه از آن استفاده می كنند مشخص نیست. هرچند كه پاره ای از كارشناسان تعداد آنها را تا 900 میلیون نفر حدس می‌زنند. تعداد رسمی كاربران اینترنتی را در سال 2000 كارشناسان 500 میلیون نفر اعلام كرده بودند.

قطعا در سال های آینده تحولات شگرفی را در زمینه شبكه های اینترنتی شاهد خواهیم بود. به‌وسیله اینترنت انسان به راه های جدیدی دست پیدا كرد. در كنار این شانس جدید توسط اینترنت,‌ باید بگوییم خطراتی نیز در رابطه با سیاست و اقتصاد و علم به دنبال خواهد داشت. فرم امروزی اینترنت مدیون همكاری تمام كاربران اینترنت در سرتاسر گیتی است كه با این تصور كه اطلاعات موجود در سطح جهان را به راحتی با یكدیگر مبادله كنند. این تصوری بود كه آقای باران(Baran) از اینترنت داشت و امیدواریم در آینده نیز تكامل اینترنت در این مسیر باشد.

+ نوشته شده در  دوشنبه بیست و یکم اردیبهشت 1388ساعت 13:24  توسط   | 

ساخت اولین برنامه
برای درک آسان بودن نرم افزار بیسیک
الان می خواهم برایتان یک برنامه ساده بنویسم که فقط با چند خط ساده نوشته شده است .
چون الان تازه اول کار هستیم از توابع و کارهای دیگرش شروع نمی کنم.
ابتدا 2 عدد Taxtboxگزاشته از جعبه ابزار
کد زیر را در Text1 قرار داده.
If Text1.text="majid" Then
Text2.text="rahimi"
End If
کد بسیار راحتی بود.
خط اول گفتیم که اگر در Text1 نوشتند Majid
د خط دوم نوشتیم در Text2 بنویسد Rahimi
و در آخر گفتیم پایان
درک کد بالا باید آسان باشد.
ما از دستور If استفاده کردیم که در درسهای آینده خواهم گفت.
دستور بالا يك آموزش بود براي اينكه به شما نشان بدهيم كه ويژوال بيسيك چه قدر آسان مي باشد.
__________________معرفی بری فراخوانی کامپننت ها یا شیئی ها که در قسمت toolbar میتوانید دید.
البطه خودتان هم می توانید چنین شیئی یا کامپوننت های بسازید ولی الان وقتش نیست در قسمت های بعدی آموزش می دهم.
با زدن کلید ctrl+t یا از پنجره projectبر روی coomponntes کلیک کرده .
پنجره componntes قابل مشاهده است. پنجره control کنترل ها یا کامپوننت های از قبل تعریف شده برای کار است که با کلید بر روی هر کدام اعمال خواصی را انجام می دهد.
و با کلیک بر روی browse..امکان انتخاب از داخل هارد را امکان پذیر می باشد.
فرمت این کامپوننت های ocxمی باشد.
insertabel قسمت مخصوص کامپوننت های برنامه های مختلف می باشد . مانند ماکرومدیا فلش و.....
که با انتخاب هر کدام می توانید مثالا می خواهید یک فایل فلش را در برنامهه خود بگزارید. به وسیله این کامپوننت های امکان پذیر است.مانند گزاشتن فیلم. صدا. تصاویر متحرک و ...... . . . .
که با انتخاب هر کدام در کنار toolbar نمایان می شودمقدمه

بعلت عدم وجود اشاره گر در ويژوال بيسيک عمليات کار با فايلها در آن نسبتاً ساده می باشد .
بطور کلی فايلها بر دو نوع هستند :
1 - فايلهای متنی Text File : اين فايلها فقط شامل کاراکترهای اسکی و برخی کاراکترهای خاص مانند انتهای خط و انتهای فايل هستند .
۲ - فايلهای باينری Binary File : شامل هر نوع کاراکتری می توانند باشند و کاربردهای گسترده ای دارند مانند بانک های اطلاعاتی ، فايلهای اجرائی ، فايلهای گرافيکی و غيره
ويژوال بيسيک می تواند با هر دو نوع فايل کار کند .

چگونگی باز کردن فايلها

قبل از اينکه بتوان عمليات ورودی/خروجی را روی يک فايل انجام داد ابتدا بايستی آنرا باز کرد . باز کردن فايلها در ويژوال بيسيک توسط دستور Open انجام می شود . فرمت کلی اين دستور بصورت زير است :

Open filename [For mode] [Access access][lock] As [#]filenumber [Len=reclen]x


[ پارامترهای داخل کروشه اختياری هستند . ]
filename نام فايلی است که می خواهيم آنرا باز کنيم .
mode حالت باز کردن فايل است . اين حالتها عبارتند از :
- Input : فايل بعنوان ورودی باز می شود .
- Output : فايل بعنوان خروجی باز می شود .
- Binary : فايل از نوع باينری باز می شود .
- Append : فايل طوری باز می شود که بتوان به انتهای آن چيزی اضافه کرد .
- Random
access نوع دسترسی به فايل را مشخص می کند . انواع دسترسيها عبارتند از :
- Read : خواندن فايل
- Write : نوشتن در فايل
- ReadWrite : خواندن و نوشتن فايل
lock نوع دسترسی ساير برنامه ها به اين فايل را مشخص می کند . انواع دسترسيها عبارتند از :
- Shared : دسترسی اشتراکی
- Lock Read
- Lock Write
- Lock Read Write
filenumber عددی است که ويژوال بيسيک از آن برای دسترسی به فايل استفاده می کند .اين عدد بايستی برای هر فايل منحصر بفرد و بين ۱ تا ۵۱۱ باشد . برای بدست آوردن اولين شماره آزاد می توان از تابع FreeFile استفاده کرد .
reclen :طول بافر فايل است . اين عدد بايستی از ۳۲۷۶۷ کو چکتر باشد .

در صورتی که فايلی که توسط filename مشخص شده وجود نداشته و فايل برای Append ، Binary ، Output و يا Random باز شده باشد در اينصورت يک فايل جديد با اين نام ساخته می شود .
در صورتی که فايل بصورت باينری باز شده باشد پارامتر Len ناديده گرفته می شود .

چگونگی بستن فايل

پس از پايان کار با فايل برای بستن آن از دستور Close استفاده می کنيم . فرمت اين دستور بصورت زير است :

Close #filenumber


دستور Close بدون هيچ پارامتری تمام فايلهای باز را می بندد .

کار با دايرکتوری

۱ - گرفتن Dir : توسط دستور Dir می توان نام فايلهای موجود در يک دايرکتوری را بر اساس پارامترهايي که به آن می دهيم پيدا کنيم . برای مثال :

Myfile=Dir$("c:\text\*.txt)"x


دستور فوق نام اولين فايل موجود در دايرکتوری C:\TEXT را که پسوند آنها txt باشد در متغير Myfile قرار می دهد . اگر دستور فوق را بدون پارامتر مجدداً اجرا کنيم نام دومين فايل برگرداننده می شد و الی آخر
Dir دارای يک پارامتر اختياری است که نوع فايلهای مورد نظر را نيز می توان با آن مشخص نمود . مثال :

Myfile=Dir$("c:\text\*.txt",vbNormal)x


مقادير ممکن اين پارامتر عبارتند از :
vbNormal ، vbHidden ، vbSystem ، vbDirectory
۲ - تغيير دايرکتوری : برای تغيير دايرکتوری از دستور ChDir استفاده می شود مثال :

ChDir "c:\windows\system32"x


۳ - تغيير درايو : برای تغيير درايو از دستور ChDrive استفاده می شود مثال :

ChDrive "E:"x


۴ - ساخت دايرکتوری : برای ايجاد دايرکتوری جديد از دستور MKDir استفاده می شود مثال :

MKDir "c:\MyFolder"x


۵ - حذف دايرکتوری : برای حذف دايرکتوری از دستور RmDir استفاده می شود مثال :

RmDir "C:\MyFoler"x خواندن از فايل :

1 - دستور Input : توسط دستورهای Input و Line Input می توان محتوای فايلهای متنی و باينری را خواند .
دستور Input به دو صورت بکار می رود :
Input #Filenumber,ReadData
ReadData=Input(Charnum,Filenumber)x
دستور اول کل يک فايل را خوانده و در متغير ReadData قرار می دهد . دستور دوم ، تعداد Charnum بايت از فايلی با شماره Filenumber را خوانده و در متغير ReadData قرار می دهد .
اين دو دستور تمام کاراکترهای موجود در فايل را می خوانند . برای اينکه بتوان فايل را خط به خط خواند ، از دستور Line Input استفاده کنيد :
Line Input #Filenumber,ReadData
البته از دستور Line Input بيشتر برای خواندن فايلهای متنی استفاده می شود زيرا ممکنست در فايل باينری هيچ کاراکتر انتهای خط ( CRLF ) وجود نداشته باشد و يکباره کل فايل خوانده شود .

۲ - دستور Get : از اين دستور برای خواندن فايلهای باينری با دسترسی تصادفی ( Random Access ) استفاده میشود :
Get #Filenumber,[Recordnum%],ReadData
اين دستور رکورد شماره Recordnum را از فايلی با شماره Filenumber می خواند و در متغير ReadData قرار می دهد . علامت کروشه نشان می دهد که پارامتر Recordnum اختياری است و در صورتيکه ذکر نشود داده ها از رکورد بعدی فايل ( جائيکه اشاره گر فايل آنجا قرار دارد ) خوانده می شوند .

نوشتن در فايل :

۱ - دستور Print : توسط اين دستور می توان اطلاعاتی را در فايل قرار داد :
Print #FileNumber,WriteData
دستور فوق محتويات متغير WriteData را در فايلی با شماره FileNumber می نويسد . بوسيله دستور Print می توان اطلاعات را بصورت خط به خط در فايل نوشت برای مثال :
Print #1,"Hello Visual Basic"+Vbcrlf
عبارت Vbcrlf نشان دهنده کاراکتر انتهای خط ( CRLF ) در ويژوال بيسيک می باشد .

۲ - دستور Put : اين دستور برای نوشتن داده ها در فايلهای باينری با دسترسی تصادفی بکار می رود :
Put #FileNumber,[Recordnum],WriteData
اين دستور محتويات متغير WriteData را در رکورد شماره Recordnum قرار می دهد .

تعيين محل رکورد در فايلهای با دسترسی تصادفی :

برای منتقل کردن اشاره گر فايل به يک رکورد در يک فايل باينری با دسترسی اتفاقی ، از دستور Seek استفاده می شود . اين دستور محل يک بايت را در فايل می گيرد و اشاره گر فايل را در آنجا قرار می دهد بنابراين دستورات Put و Get می توانند با اين رکورد کار کنند :
Seek #FileNumber,RecordNumber

تشخيص انتهای فايل :

برای اينکه متوجه شويم به انتهای يک فايل رسيده ايم از دستور EOF استفاده می کنيم . اين دستور يکی از مقادير True يا False را بر می گرداند که نشان می دهد به انتهای فايلرسيده ايم يا نه . از اين تابع در حلقه های Do-While استفاده می شود :
Do While Not (EOF(FileNumer))x
.
.
.
Loop
حلقه فوق تا زمانيکه فايل موردنظر به انتها نرسيده باشد اجرا خواهد شد .

بدست آوردن طول يک فايل :

بوسيله دستور LOF می توان طول محتويات يک فايل را بدست آورد :
FileSize=LOF(FileNumber)x

بدست آوردن محل اشاره گر فايل :

توسط دستور Loc می توان محل جاری اشاره گر فايل را بدست آورد . اجرا شدن اين دستور محل اشاره گر را تغيير نمی دهد :
FilePosition=Loc(FileNumber)x ۱ - حذف فايل : برای حذف يک يا چند فايل از دستور Kill استفاده می شود :
Kill "C:\Temp\MyFile.txt"x
Kill "C:\Temp\*.txt"x

۲ - انتقال فايل : برای انتقال يک فايل از يک دايرکتوری به دايرکتوری ديگر از دستور Name استفاده می شود . مبدا و مقصد بايستی روی يک درايو باشند . اگر دايرکتوری مبدا و مقصد يکی باشد فايل تغيير نام داده می شود :
Name "C:\Temp\File1.txt" To "C:\Temp2\File2.txt"x

۳ - کپی کردن فايل : برای کپی کردن يک فايل از يک دايرکتوری به دايرکتوری ديگر از دستور FileCopy استفاده می شود :
FileCopy "\File1.txt\ To "C:\Temp\File2.txt"x

۴ - بدست آوردن تاريخ و زمان آخرين تغيير فايل و يا زمان ايجاد فايل : برای اين کار از دستور FileDateTime استفاده می شود . ابتدا بايستی يک متغير از نوع Variant تعريف کرده و سپس توسط اين دستور تاريخ و زمان موردنظر را استخراج کنيم :
Dim FileInfo As Variant
FileInfo=FileDateTime("C:\Temp\MyFile.txt")x

۵ - استخراج طول فايل : برای بدست آوردن طول يک فايل بر حسب بايت از دستور FileLen استفاده می شود :
FileSize=FileLen("C:\MyFile.txt")x

۶ - تغيير صفت يک فايل : برای تغيير صفت يک فايل از دستور SetAttr استفاده می شود . پارامترهای اين دستور عبارتند از :
0 : فايل معمولی
2 : فايل مخفی
4 : فايل سيستمی

SetAttr FileNumber,FileAttrib

مقابله با خطاهای کار با فايل :

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

۵۲ : شماره يا نام فايل صحيح نيست
۵۳ : فايل پيدا نشد
۵۴ : حالت فايل صحيح نيست
۵۵ : فايل قبلاً باز شده
۵۸ : فايل از قبل وجود دارد
۵۹ : طول رکورد صحيح نيست
۶۱ : ديسک پر است
۶۲ : عبور از انتهای فايل
۶۳ : شماره رکورد صحيح نيست
۷۰ : دسترسی ممنوع است
۷۱ : ديسک آماده نيست
۷۶ : مسير پيدا نشد

در هنگام مقابله با خطا بهتراست از يک ساختار Select-Case استفاده کنيد :
Select Case Err
Case 71
MsgBox "Drive is Not Ready"x
.
.
.
End Select
ايجاد ساختارهاي داده اي در ويژوال بيسيک - بخش اول
مقدمه :

ساختارهاي داده اي از نظر تعداد اعضا به دو دسته استاتيک و ديناميک تقسيم مي شوند . ساختارهاي استاتيک مثل آرايه هاي يک بعدي و آرايه هاي دو بعدي ، تعداد اعضاي آنها در زمان طراحي برنامه مشخص مي شود و در طول اجراي برنامه ثابت است اما تعداد اعضاي ساختارهاي داده اي ديناميک در طول اجراي برنامه تغيير مي کند . ليست پيوندي ( LinkList ) ، پشته ( Stack ) ، صف ( Queue ) و درختهاي باينري ( Tree Binary) ، نمونه هايي از ساختارهاي داده اي ديناميک هستند .
ليست پيوندي شامل مجموعه اي از عناصر داده اي است که اضافه و حذف اعضا در هر جاي ليست ممکن است .
پشته يک ساختار داده اي مهم در کامپايلرها و سيستم هاي عامل است که عمل اضافه و حذف عناصر از ابتداي آن انجام مي شود .
صف يک ساختار داده اي است که عمل اضافه کردن از انتها و عمل حذف کردن از ابتداي آن انجام مي شود .
درختهاي دودويي براي جستجوي بسيار سريع ، ذخيره سازي داده ها و کامپايل عبارات استفاده مي شوند .

نوع داده Variant :

نوع داده variant براي متغيرهايي بکار مي رود که بطور صريح نوع آنها تعريف نشده است مثال :
Dim value As Variant
اين نوع داده مي تواند هر نوع داده اي را در خود ذخيره کند . همچنين براي ايجاد ساختارهاي داده اي مثل ليست هاي پيوندي ، صف ، پشته و درخت مناسب است .
نوع داده موجود در variant مي توان توسط توابع VarType و TypeName تعيين کرد . تابع VarType يک مقدار صحيح برمي گرداند که نشان دهنده نوع ذخيره شده در variant است .
مثال :
Dim value as Variant
value=”Hello”x
در اينصورت مقدار بازگشتي ( VarType( value برابر 4 خواهد بود .
تابع TypeName يک رشته برمي گرداند که نشان دهنده نام نوع داده ذخيره شده در variant است .

اخذ حافظه بطور ديناميک Dynamic Memory Allocation :

براي ايجاد و نگهداري ساختارهاي داده اي ديناميک بايستي در هنگام اجراي برنامه بتوان فضاي بيشتري براي نگهداري داده هاي جديد بدست آورد . با استفاده از کلمه کليدي New مي توان در ويژوال بيسيک حاقظه ديناميک گرفت :
Set NewNode=New ListNode
که ListNode يک شي از ساختار داده اي مورد نظر ماست .

کلاسهاي خود ارجاعي :

کلاس خودارجاعي نوعي کلاس است که داراي يک اشاره گر ( Pointer ) به يک شي از همان نوع کلاس باشد . براي مثال اگر کلاس ما به اسم ClistNode باشد و متغير زير را در آن تعريف کنيم ، اين کلاس يک کلاس خود ارجاعي است :
Private mNextNode as ClistNode
از mNextNode براي لينک دادن اعضاي يک ساختار داده اي ديناميک بهم استفاده مي شود ( بعبارت ديگر گره زدن يک شي از کلاس ClistNode به يک شي ديگر از همان کلاس ) . شي هاي خودارجاعي مي توانند به همديگر لينک شوند و ساختارهاي داده اي مثل ليست پيوندي ، صف ، پشته و درخت را ايجاد کنند .
شکل زير دو شي خود ارجاعي را نشان مي دهد که بصورت يک ليست بهم لينک شده اند . عبارت NULL بدين معنا است که شي خودارجاعي به شي ديگري اشاره نمي کند ( Nothing ) و نشان دهنده انتهاي ساختار داده است .
_______________ليست پيوندي

همانطور که گفته شد ليست پيوندي مجموعه اي از يکسري داده است که اين داده ها از نوع اشيا خودارجاعي هستند . ( هر شي خودارجاعي داراي يک متغير نوع variant براي نگهدار مقدار و يک اشاره گر به شي بعدي است ) . هر عضو ليست پيوندي را يک گره گويند . هر ليست پيوندي از طريق يک اشاره گر به اولين گره قابل دسترسي است . گره هاي بعدي از طريق قسمت لينک موجود در هر گره قابل دسترس هستند . همچنين لينک آخرين گره با Nothing تنظيم مي شود که انتهاي ليست را نشان مي دهد .
مزيت اصلي ليست هاي پيوندي نسبت به آرايه اينست که تعداد عناصر ليست پيوندي قابل تغيير است . بعبارت ديگر ليست هاي پيوندي بصورت ديناميک هستند و طول آنها قابل تغيير است اما سايز آرايه ثابت است . ( البته ويژوال بيسطک از آرايه هاي با سايز متغير نيز پشتيباني مي کند اما اين عمل تغيير سايز اتوماتيک نيست .)
عمل درج در ليست پيوندي ساده است و تنها بايستي دو اشاره گر تغيير يابد .
ليست هاي پيوندي را مي توان به سادگي با قراردادن هر عضو جديد در محل صحيح بصورت sortشده نگهداري کرد .
اعضاي ليست پيوندي در حافظه بصورت پيوسته ذخيره نمي شوند بنابراين نمي توان فوراً به هر عضو ليست دسترسي داشت ( بر خلاف آرايه ) .
براي ايجاد ليست پيوندي در ويژوال بيسيک نياز به سه کلاس است :

1 – کلاس ClistNode : کلاسي است که هر گره از ليست را توصيف مي کند :

private mNodeData as Variant
private mNextNode as ClistNode
public Property Get Data() as Variant
Data=mNodeData
End Property
Public Property Let Dta(ByVal vNewValue as Variant)x
MNodeData=vNewValue
End Property
Public Property Get NextNode() as ClistNode
Set NextNode=mNextNode
End Property
Public Property Let NextNode(Byval vNewValue as Variant)x
Set mNextNode=vNewValue
End Property



2 – کلاس Clist براي توصيف ليست پيوندي .
mFirstNode براي اشاره به اولين ClistNode و mLastNode براي اشاره به آخرين ClistNode در يک شي clist بکار می رود . زمانيکه يک Clsit ايجاد مي شود اين دو متغير با Nothing تنظيم مي شوند . روال Property Get Iterator يک شي ClistIterator برمي گرداند که مي توان از آن براي حرکت در بين اعضاي ليست استفاده کرد .

Private mFirstNode as ClistNode
Private mLastNode as ClistNode
Public Function IsEmpty() as boolean
IsEmpty=IIf(mFirstNode Is Nothing,True,False)x
End function
Public Sub InsertAtFront(insertItem as variant)x
Dim tempNode as ClistNode
If IsEmpty() then
Set mFirstNode=New ClistNode
Set mLastNode=mFirstNode
Else
Set tempNode=mFirstNode
Set mFirstNode=New ClistNode
MFirstNode.NextNode=tempNode
End if
MFirstNode.Data=insertItem
End sub
Public sub InsertAtBack(insertItem as Variant)x
Dim tempNode as ClistNode
If IsEmpty() then
Set mLastNode=New ClistNode
Set mFirstNode=mLastNode
Else
Set tempNode=mLastNode
Set mLastNode=New ClistNode
TempNode.NextNode=mLastNode
End if
MLastNode.Data=insertItem
End sub
Public function RemoveFromFront()x
Dim removeItem as Variant
If IsEmpty() then
Msgbox list is empty
RemoveFromFront=Null
Exit function
End if
RemoveItem=mFirstNode.Data
If mFirstNode Is mLastNode then
Set mFirstNode=Nothing
Set mLastNode=Nothing
Else
Set mFirstNode=mFirstNode.NextNode
End if
RemoveFromFront=removeItem
End function
Public Function RemoveFromBack()x
Dim removeItem as Variant
Dim current as ClistNode
If IsEmpty() then
Msgboc list is empty
RemovefromBack=Null
Exit function
End if
RemoveItem=mLastNode.Data
If mFirstNode Is mLastNode then
Set mFirstNode=nothing
Set mLastNode=Nothing
Else
Set current=mFirstNode
While Not current.NextNode Is mLastNode
Set current=current.NextNode
Wend
Set mLastNode=current
Current.NextNode=nothing
End if
RemoveFromBack=removeItem
End function
Public property Get Iterator() as variant
Dim iter as ClistIterator
Set iter=New ClistIterator
Iter.StartNode=mFirstNode
Set Iterator=iter
End property


عملکرد روال InsertAtFront :
a – فراخواني IsEmpty براي تعيين خالي بودن ليست
b – اگر ليست خالي باشد mFirstNode و mLastNode به New ClsitNode اشاره مي کنند .
c – اگر ليست خالي نباشد گره جديد توسط اشاره دادن tempNode به اولين گره ليست و سپس اشاره دادن mFirstNode به گره New ClsitNode و سپس اشاره دادن mFirstNode.NextNode به tempNode ساخته مي شود .
d – تنظيم mFirstNode.Data با مقدار مورد نظر
عملکرد روال InsertAtBack :
a – فراخواني IsEmpty براي تعيين خالي بودن ليست
b – اگر ليست خالي باشد mFirstNode و mLastNode به New ClsitNode اشاره مي کنند .
c – اگر ليست خالي نباشد گره جديد توسط اشاره دادن tempNode به آخرين گره ليست و سپس اشاره دادن mLastNode به گره New ClsitNode و سپس اشاره دادن tempNode.NextNode به mLastNode ساخته مي شود .
d – تنظيم mLastNode.Data با مقدار مورد نظر
عملکرد روال RemoveFromFront :
a – اگر ليست خالي باشد Null برگشت داده مي شود .
b – اگر ليست خالي نباشد داده mFirstNode به removeItem اختصاص داده مي شود .
c – اگر ليست فقط يک گره داشته باشد mFirstNode و mLastNode با Nothing مقدار دهي مي شوند و گره از ليست حذف مي شود .
d – اگر گره بيش از يک عضو داشته باشد mFirstNode برابر mFirstNode.NextNode مي شود .
e – مقدار removeItem برگشت داده مي شود .
عملکرد روال RemoveFromBack :
a – اگر ليست خالي باشد Null برگشت داده مي شود .
b – اگر ليست خالي نباشد داده mLastNode به removeItem اختصاص داه مي شود .
c – اگر ليست يک گره داشته باشد mFirstNode و mLastNode با Nothing مقدار دهي مي شوند و گره از ليست حذف مي شود .
d – اگر ليست بيش از يک گره داشته باشد متغير current برابر mFirstNode مي شود . سپس با استفاده از current روي گره هاي ليست حرکت مي کنيم تا به گره اي برسيم که به آخرين گره اشاره مي کند . سپس mLastNode را به گره اي که current به آن اشاره مي کند قرار مي دهيم و مقدار current.NextNode را Nothing مي کنيم تا بعنوان آخرين گزه ليست معرفي شود .
e – مقدار removeItem برگشت داده مي شود .

3 – کلاس ClistIterator : اين کلاس براي حرکت روي گره هاي ليست و دستکاري هر گره بکار مي رود . از حرکت کننده ها براي چاپ ليست و يا انجام دادن عملي بر روي هر عضو Clist مي توان استفاده کرد . اين کلاس داراي دو متغير از نوع ClistNode به نامهاي mBookmark و mFirstNode است . متغير mFirstNode به اولين گره در Clist اشاره مي کند و متغير mBookmark موقعيت فعلي حرکت کننده بر روي Clist را نشان مي دهد . روال Property Let StartNode اين دو متغير را مقدار دهي اوليه مي کند . تابع NextItem اگر مقدار mBookmark برابر Null باشد ، Null برگشت مي دهد و در غيراينصورت مقدار tempData را برابر mBookmark.Data و مقدار mBookmark را برابر mBookmark.NextNode قرار مي دهد . تابع HasMoreItems اگر ليست داراي چندين عضو باشد True برمي گرداند . روال ResetBookmark حرکت کننده را به ابتداي ليست منتقل مي کند .

Private mBookmark as ClistNode
Private mFirstNode as ClistNode
Public Property Let StartNode(Byval vNewValue as variant)x
Set mFirstNode=vNewValue
Set mBookmark=mFirstNode
End property
Public function NextItem()x
Dim tempData as varaint
If mBookmark Is nothing then
NextItem=Null
Else
TempData=mBookmark.Data
Set mBookmark=mBookmark.NextNode
NextItem=tempData
End if
End function
Public function HasMoreItems() as boolean
HasMoreItems=IIf(Not mBookmark Is nothing,True,False)x
End function
Public sub ResetmBookmark()x
MBookmark=mFirstNode
End sub



در بخش سوم نمونه برنامه ای را با استفاده از اين کلاسها خواهيم ساخت .
_____________________
__________
+ نوشته شده در  سه شنبه پانزدهم اردیبهشت 1388ساعت 22:2  توسط   |