نام کاربری: گذرواژه‌:
انجمن فناوری اطلاعات دانشگاه پیام نور تبلیغات


تعرفه تبلیغات در IT98

آموزش گام به گام ویژوال بیسیک6.0

برچسب‌های کلیدی این موضوع:
کاربران در حال بازدید از این موضوع: 1 مهمان
آخرین ارسال کننده: *setayesh
ارسال‌ها: 1
بازدیدها: 1776
امتیاز دهید
 
  • 0 رأی - میانگین امیتازات: 0
  • 1
  • 2
  • 3
  • 4
  • 5
در گوگل محبوب کنید
انجمن فناوری اطلاعات دانشگاه پیام نور


آموزش گام به گام ویژوال بیسیک6.0

کاربر فعال
تاریخ عضویت: آذر ۱۳۹۲
رشته: کامپیوتر نرم افزار
ترم: شش
دانشگاه: پیام نور
اعتبار: 17
ارسال‌ها: 72
وضعیت : آفلاین
جنسیت: دختر
سپاس ها 116
سپاس شده 33 بار در 25 ارسال
ارسال: #1
ایجاد شده در تاریخ: ۱۸-۹-۱۳۹۳ ۱۱:۲۳ عصر
(آخرین ویرایش در این ارسال: ۱۸-۹-۱۳۹۳ ۱۱:۳۶ عصر، توسط *setayesh.)
آشنایی با ویژوال بیسیک 6

تاریخچه ویژال بیسیک.

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

شرکت مایکروسافت ویژوال بیسیک را براساس یک زبان برنامه نویسی به نام بیسیک که برای مبتدیان نوشته شده است ساخت.

زبان ویژوال بیسیک بیشتر از 35 سال به اشکال مختلف رایج بوده. در واقع
طراحان این زبان می خواستند یک زبان برنامه نویسی برای استفاده مبتدیان
طراحی کنند.برنامه نویسان جدید می توانند با استفاده ازبیسیک به سرعت به
شرع برنامه نویسی های حرفه ای با زبان های cobol .fortran . assembler

در مقایسه به بیسیک کار بیشتری نیاز داشت.

طبیعت بصری ویژوال بیسیک

دیدید که ویژال بیسیک 6 چیزی بیشتر از یک زبان برنامه نویسی است. از ویژوال
بیسیک در نام آن visualبه معنای بصری یا محیط نمایشی . است.

کار با ویژال بیسیک 6

در اولین بار که برنامه را باز می کنید با پنجره new project روبه رو می شوید در این قسمت

نوع فورم خود را انتخاب کرده ماننده activex|standardو....

این پنجره شامل 3 قسمت بوده

New:در این پنجره امکان انتخاب فورم مورد نظر شما امکان پذیر می باشد.

Existing:در این پنجره امکان انتخاب project های مختلف که در مکانهای مختلف ذخیره یا... امکان انتخاب می باشد.

Recent:در این قسمت هر projectرا که ذخیره می کنید به صورت دسته ای جمع می شود حالا یک فایلی

در درایو Dباشد حالا چه در درایو c.

DON.T SHOW THIS DIALOG IN THE FUTURE

این قسمت جلو گیری از باز شدن پینجره NEW PRIJECT می باشد.

HELP:از این قسمت وقتی امکان استفاده می باشد که نرم افزار MSDN را نصب کرده باشید.

معرفی قسمت های بیسیک.

نوار ابزار:TOOLBAR:نوار ابزار VB زیر منو قرار دارد. ویژال بیسیک کلا چهار نوار ابزار دارد:

STANDARD:این نوار ابزار زیر منو ظارهر است و پیش فرض است.

DEBUG:وقتی از ابزارهای رفع اشکال برای ردیابی و اصلاح اشکالات استفاده می کنید. این نوار ابزار ظاهر می شود.

EDIT:این نوار ابزار برای تنظیم کردن اشیاء بر روی فرم می باشد

FORM EDITOR:این نوار ابزار برای تنظیم کردن اشیاء بر روی فرم می باشد.

جعبه ابزار:TOOLBOX:

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

پنجرهPROJECT:در این پنجره فرم های انتخبی شما با هر گروه و هر فرم مشخص شده است.

پنجرهPROPERTISE:

این پنجره امکان تنضیمات لازم برای هر شیئی را مشخص می کنید.

نویسنده مجید رحیمی.
قسمت دوم

ساخت اولین برنامه

برای درک آسان بودن نرم افزار بیسیک

الان می خواهم برایتان یک برنامه ساده بنویسم که فقط با چند خط ساده نوشته شده است .

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

ابتدا 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







در بخش سوم نمونه برنامه ای را با استفاده از اين کلاسها خواهيم ساخت .

ايجاد ساختارهاي داده اي در ويژوال بيسيک - بخش سوم

مثالی از استفاده از کلاسهای ليست پيوندی :

ابتدا کلاسهايي که در جلسه قبل معرفی شد را به پروژه تان اضافه کنيد . سپس
در بخش کدنويسی فرمتان ، ابتدا يک شی از نوع کلاس Clist بصورت زير تعريف
کنيد :



Dim list as New Clist





در فرمتان سه CommandButton با نامهای AddFirst ، AddLast و ShowList و نيز يک TextBox با نام ListMember قرار دهيد .

کد زير را برای رويداد کليک شدن دکمه AddFirst بنويسيد :



Call list.InsertAtFront(ListMember.text)x





کد زير را برای رويداد کليک شدن دکمه AddLast بنويسيد :



Call list.InsertAtBack(ListMember.text)x





کد زير را برای رويداد کليک شدن دکمه ShowList بنويسيد :



Dim elements as New ClistIterator

Set elements=list.Iterator

If elements.HasMoreItems=false then msgbox ("list is empty")x

Else

While elements.HasMoreItems

Msgbox(elements.NextItem)x

Wend

end if







پشته :

پشته نوعي ليست پيوندي است که گره هاي جديد ، فقط به انتهاي آن مي توانند
اضافه شوند . بهمين دليل به پشته ، ساختمان داده LIFO مي گويند . قسمت لينک
آخرين گره پشته با Nothing مقدار دهي مي شود که نشان دهنده پايين پشته است
.

روالهاي اصلي پشته Push و Pop هستند .

Push يک گره جديد به بالاي پشته اضافه مي کند و Pop از بالاي پشته گره اي را حذف کرده و مقدار داده آن را بر مي گرداند .





در بخش چهارم کلاسی را برای کار با پشته معرفی خواهم کرد .



ايجاد ساختارهاي داده اي در ويژوال بيسيک - بخش چهارم

کد:



کلاس پشته :

همانطور که در بخش قبل گفته شد پشته نوعی ليست پيوندی است که گره هاي جديد
فقط به انتهاي آن اضافه شوند . روالهاي اصلي پشته Push و Pop هستند .

Push يک گره جديد به بالاي پشته اضافه مي کند و Pop از بالاي پشته گره اي را حذف کرده و مقدار داده آن را بر مي گرداند .

يک کلاس پشته را با استفاده از کلاس Clist و بصورت زير پياده سازي مي کنيم :



Private list As New Clist

Public Sub Push(value as Variant)x

List.InsertAtFront(value)x

End sub

Public Function Pop As Variant

Pop=list.RemoveFromFront()x

End Function

Public Function IsStackEmpty() As Boolean

IsStackEmpty=list.IsEmpty()x

End function

Public Property Get Iterator() as variant

Set Iterator=list.Iterator

End Property





در اين کلاس ابتدا يک شی از نوع کلاس Clist تعريف شده است . سپس متدهای
Push توسط متد InsertAtFront و Pop توسط متد RemoveFromFront پياده سازی
شده اند .

يک برنامه نمونه :

برای نوشتن يک برنامه برای کار با پشته ابتدا کلاس Stack را که کد آن را در
بالا ديديد به پروژه تان اضافه کنيد . سپس در بخش کد مربوط به فرمتان
ابتدا يک شی از نوع کلاس Stack بصورت زير تعريف کنيد :



Dim mStack as New Stack





سپس در فرمتان سه CommandButton با نامهای Push و Pop و ShowStack و نيز يک TextBox با نام StackMember قرار دهيد .

کد زير را برای کليک شدن دکمه Push بنويسيد :



mStack.push(StackMember.text)x





کد زير را برای کليک شدن دکمه Pop بنويسيد :



StackMember.text=mStack.Pop()x





کد زير را برای کليک شدن دکمه ShowStack بنويسيد :



Dim elements as New ClistIterator

Set elements=mStack.Iterator

If elements.HasMoreItems=false then msgbox "stack is empty"x

Else

While elemets.HasMoreItems

Msgbox elements.NextItem

Wend




ايجاد ساختارهاي داده اي در ويژوال بيسيک - بخش پنجم

صف :

صف نوعي ساختار داده اي است که گره ها از ابتداي صف ( سر صف head ) حذف مي
شوند و از انتهاي صف ( ته صف tail ) اضافه مي شوند . بنابر اين ، صف يک
ساختار داده اي FIFO است . صف دارای دو متد به نامهای AddQueue و DelQueue
است که اولین متد ، عنصری را به انتهای صف اضافه می کند و دومين متد ،
عنصری را از ابتدای صف حذف می کند .

براي ايجاد کلاس Cqueue از کلاس Clist استفاده مي کنيم :



Private list as New Clist



Public Sub AddQueue(value as Variant)x

List.InsertAtBack(value)

End sub



Public Function DelQueue() as Variant

DelQueue=list.RemoveFromFront

End function



Public property Get Iterator() as Variant

Set Iterator=list.Iterator

End Property





درخت :

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

درختهاي جستجوي باينري درخت هايي هستند که در آنها مقدار فرزند چپ هر گره
کمتر از گره پدر و مقدار فرزند سمت راست هر گره بيشتر از گره پدر مي باشد .









در بخش ششم يک کلاس برای پياده سازی درختهای جستجوی باينری ايجاد خواهيم کرد .

کلاس درختهای جستجوی باينری

برای ايجاد درختهای جستجوی باينری در ويژوال بيسيک نياز به ايجاد دو کلاس داريم :
1 - کلاس CTreeNode که هر ند درخت دودويي را توصيف می کند . اين کلاس دارای يک متغير به نام mNodeData از نوع Variant برای نگهداری داده هر گره است . همچنين دارای دو متغير اشاره گر به نامهای mLeft و mRight می باشد که به ترتيب به فرزند چپ و فرزند راست درخت اشاره می کنند .
متد Get Data مقدار داده هر گره را بر می گرداند و متد Let Data مقدار داده هر گره را تنظيم می کند .
متد Get Left آدرس فرزند چپ هر گره را برمی گرداند و متد Let Left فرزند چپ هر گره را تنظيم می کند .
متد Get Right آدرس فرزند راست هر گره را برمی گرداند و متد Let Right فرزند راست هر گره را تنظيم می کند .
متد Insert برای اضافه کردن فرزند به يک گره به کار می رود . اگر مقدار گره ای که می خواهيم بعنوان فرزند به درخت اضافه کنيم کوچکتر از مقدار خود گره باشد بعنوان فرزند چپ و در غير اينصورت بعنوان فرزند راست به گره اضافه می شود . اضافه شدن نيز بدين صورت است که ابتدا بررسی می شود آیا گره قبلاً فرزندی داشته است يا نه ؟ اگر نداشته باشد ( mLeft و يا mRight برابر Nothing باشد ) اين گره جديد مستقيماً به گره متصل می شود اما اگر گره قبلاً فرزندی داشته باشد متد Insert برای آن فرزند اضافه می شود و اينکار تا جايی ادامه می يابد که به گره ای برسيم که فرزندی نداشته باشد :

Private mLeft as CtreeNode
Private mRight as CtreeNode
Private mNodeData as Variant

Public Property Get Data() as variant
Data=mNodeData
End property
Public Property Let Data(Byval vNewValue as Variant)x
MNodeData=vNewValue
End property
Public Property Get Left() as variant
Set Left=mLeft
End property
Public Property Let Left(Byval vNewValue as variant)x
Set mLeft=vNewValue
End property

Public Property Get Right() as variant
Set Right=mRight
End Property
Public Property Let Right(Byval vNewValue as variant)x
Set mRight=vNewValue
End Property

Public Sub Insert(value as variant)x
If valueIf mLeft Is Nothing Then
Set mLeft=New CtreeNode
MLeft.Data=value
Else
MLeft.Insert(value)x
End if
Elseif value>mNodeData then
If mRight Is Nothing then
Set mRight=New CtreeNode
MRight.Data=value
Else
MRight.Insert(value)x
End if
End if
End sub


2 - کلاس CTree : اين کلاس برای ايجاد درخت بکار می رود . اين کلاس دارای متغيری بنام mRoot از نوع CTreeNode برای تعريف ريشه درخت است . همچنين يک متغير mOutputString برای نمايش دادن اعضای درخت دارد .

Private mRoot as CtreeNode
Private mOutputString as String

Public Sub InsertNode(value as Varaint)x
If mRoot Is Nothing then
Set Mnode=New CtreeNode
MRoot.Data=value
Else
MRoot.Insert(value)x
End if
End sub

Public PreorderTraversal()x
MOutputString=””x
Call PreorderHelper(mRoot)x
End sub

Private Sub PreorderHelper(node As CtreeNode)x
If node Is nothing Then
Exit sub
End if
MOutputString=mOutputString & node.Data & “ “x
Call PreorderHelper(node.left)x
Call PreorderHelper(node.right)x
End sub

Public Sub InorderTraversal()x
MOutputString=””x
Call InorderHelper(mRoot)x
End sub

Private Sub InorderHelper(node as CtreeNode)x
If node Is nothing then
Exit sub
End if
Call InorderHelper(node.Left)x
MOutputString=mOutputString & node.Data & “ “x
Call InorderHelper(node.Right)x
End sub

Public PostorderTraversal()x
MOutputString=””x
Call PostorderHelper(mRoot)x
End sub

Private Sub PostorderHelper(node as CtreeNode)x
If node Is Nothing then
Exit sub
End if
Call PostorderHelper(node.Left)x
Call PostorderHelper(node.Right)x
MOutputString=mOutputString & node.Data & “ “x
End sub

Public Property Get Output() as Varaint
Output=mOutputString
End Property

امضا *setayesh
آنکه دنبال حیات ابدی می گردید

کاش یک تا دو قدم

به سوی ظلمت چشم تو قدم بر می داشت

و به یک جرعه ی آن

ابدی می گردید

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


پرش به انجمن:

شبکه‌های اجتماعی درباره ما لینک‌های مهم ابزار
انجمن فناوري اطلاعات دانشگاه پيام‌نور در سال 1389 با هدف رشد و ارتقاي علمي دانشجويان آغاز بکار کرد. در IT98 شما قادرید از کاملترین و بروزترین آرشیو نمونه‌سوالات، جزوات، حل تمرینات، گزارش آزمایشگاه، گزارش کارآموزی، پروژه، مقالات و پایان‌نامه استفاده کنید. IT98.ir با عنوان بزرگترین انجمن دانشجویی رشته کامپیوتر دانشگاه پیام‌نور شناخته میشود.
Copyright (c) 2010-2016 it98.iR, all rights reserved
Template designed by : Mehdi Dastkhosh , Powered by MyBB
صفحه اصلی جستجو بازیهای آنلاین لیست اعضا