به انجمن های تخصصی دانلود رایگان خوش آمدید

تالار گفتمان اف دی ال - انجمن تخصصی دانلود رایگان / انجمن طراحی وب - برنامه نویسی / تالار برنامه نويسي عمومی / Visual Basic ویژوال بیسیک v / آموزش گام به گام ویژوال بیسیک6.0

نام کاربری یا ایمیل:  
پسورد:     
ثبت نام | بازیابی پسورد
ثبت نام راهنما لیست اعضا مشاهده ارسال های جدید مشاهده ارسال های امروز
X اطلاعات تالار نشان میدهد که شما عضو نیستید. لطفا از این لینک در کمتر از 1 دقیقه ثبت نام کنید



ارسال موضوع  موضوع بسته شده است 
 
امتیاز موضوع:
  • 1 رأی - میانگین امیتازات : 5
  • 1
  • 2
  • 3
  • 4
  • 5

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

نویسنده پیام
*
ارسال ها: 351
اعتبار: 0
سپاس کرده: 0
سپاس شده: 95 در 81 موضوع

امتياز: 101.00

ارسال: #1
آموزش گام به گام ویژوال بیسیک6.0
آشنایی با ویژوال بیسیک 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:
این پنجره امکان تنضیمات لازم برای هر شیئی را مشخص می کنید.
نویسنده مجید رحیمی
چهار شنبه ۲۵ بهم ۱۳۸۵ ۲۳:۵۳ عصر
یافتن تمامی ارسال های این کاربر
*
ارسال ها: 351
اعتبار: 0
سپاس کرده: 0
سپاس شده: 95 در 81 موضوع

امتياز: 101.00

ارسال: #2
RE: آموزش گام به گام ویژوال بیسیک6.0
قسمت دوم
ساخت اولین برنامه
برای درک آسان بودن نرم ا�?زار بیسیک
الان می خواهم برایتان یک برنامه ساده بنویسم که �?قط با چند خط ساده نوشته شده است .
چون الان تازه اول کار هستیم از توابع و کارهای دیگرش شروع نمی کنم.
ابتدا 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 نمایان می شود
چهار شنبه ۲۵ بهم ۱۳۸۵ ۲۳:۵۴ عصر
یافتن تمامی ارسال های این کاربر
*
ارسال ها: 351
اعتبار: 0
سپاس کرده: 0
سپاس شده: 95 در 81 موضوع

امتياز: 101.00

ارسال: #3
RE: آموزش گام به گام ویژوال بیسیک6.0
کار با �?ايل در ويژوال بيسيک - بخش اول

مقدمه

بعلت عدم وجود اشاره گر در ويژوال بيسيک عمليات کار با �?ايلها در آن نسبتاً ساده می باشد .
بطور کلی �?ايلها بر دو نوع هستند :
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
چهار شنبه ۲۵ بهم ۱۳۸۵ ۲۳:۵۴ عصر
یافتن تمامی ارسال های این کاربر
*
ارسال ها: 351
اعتبار: 0
سپاس کرده: 0
سپاس شده: 95 در 81 موضوع

امتياز: 101.00

ارسال: #4
RE: آموزش گام به گام ویژوال بیسیک6.0
کار با �?ايل در ويژوال بيسيک - بخش دوم


خواندن از �?ايل :

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
چهار شنبه ۲۵ بهم ۱۳۸۵ ۲۳:۵۵ عصر
یافتن تمامی ارسال های این کاربر
*
ارسال ها: 351
اعتبار: 0
سپاس کرده: 0
سپاس شده: 95 در 81 موضوع

امتياز: 101.00

ارسال: #5
RE: آموزش گام به گام ویژوال بیسیک6.0
کار با �?ايل در ويژوال بيسيک - بخش سوم

ساير عمليات کار با �?ايل :

۱ - حذ�? �?ايل : برای حذ�? يک يا چند �?ايل از دستور 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
چهار شنبه ۲۵ بهم ۱۳۸۵ ۲۳:۵۵ عصر
یافتن تمامی ارسال های این کاربر
*
ارسال ها: 351
اعتبار: 0
سپاس کرده: 0
سپاس شده: 95 در 81 موضوع

امتياز: 101.00

ارسال: #6
RE: آموزش گام به گام ویژوال بیسیک6.0
ايجاد ساختارهاي داده اي در ويژوال بيسيک - بخش اول

مقدمه :

ساختارهاي داده اي از نظر تعداد اعضا به دو دسته استاتيک و ديناميک تقسيم مي شوند . ساختارهاي استاتيک مثل آرايه هاي يک بعدي و آرايه هاي دو بعدي ، تعداد اعضاي آنها در زمان طراحي برنامه مشخص مي شود و در طول اجراي برنامه ثابت است اما تعداد اعضاي ساختارهاي داده اي ديناميک در طول اجراي برنامه تغيير مي کند . ليست پيوندي ( 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 ) و نشان دهنده انتهاي ساختار داده است .
چهار شنبه ۲۵ بهم ۱۳۸۵ ۲۳:۵۵ عصر
یافتن تمامی ارسال های این کاربر
*
ارسال ها: 351
اعتبار: 0
سپاس کرده: 0
سپاس شده: 95 در 81 موضوع

امتياز: 101.00

ارسال: #7
RE: آموزش گام به گام ویژوال بیسیک6.0
ايجاد ساختارهاي داده اي در ويژوال بيسيک - بخش دوم

ليست پيوندي

همانطور که گ�?ته شد ليست پيوندي مجموعه اي از يکسري داده است که اين داده ها از نوع اشيا خودارجاعي هستند . ( هر شي خودارجاعي داراي يک متغير نوع 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



در بخش سوم نمونه برنامه ای را با است�?اده از اين کلاسها خواهيم ساخت .
چهار شنبه ۲۵ بهم ۱۳۸۵ ۲۳:۵۶ عصر
یافتن تمامی ارسال های این کاربر
*
ارسال ها: 351
اعتبار: 0
سپاس کرده: 0
سپاس شده: 95 در 81 موضوع

امتياز: 101.00

ارسال: #8
RE: آموزش گام به گام ویژوال بیسیک6.0
ايجاد ساختارهاي داده اي در ويژوال بيسيک - بخش سوم

مثالی از است�?اده از کلاسهای ليست پيوندی :
ابتدا کلاسهايي که در جلسه قبل معر�?ی شد را به پروژه تان اضا�?ه کنيد . سپس در بخش کدنويسی �?رمتان ، ابتدا يک شی از نوع کلاس 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 از بالاي پشته گره اي را حذ�? کرده و مقدار داده آن را بر مي گرداند .
چهار شنبه ۲۵ بهم ۱۳۸۵ ۲۳:۵۶ عصر
یافتن تمامی ارسال های این کاربر
*
ارسال ها: 351
اعتبار: 0
سپاس کرده: 0
سپاس شده: 95 در 81 موضوع

امتياز: 101.00

ارسال: #9
RE: آموزش گام به گام ویژوال بیسیک6.0
ايجاد ساختارهاي داده اي در ويژوال بيسيک

ص�? :
ص�? نوعي ساختار داده اي است که گره ها از ابتداي ص�? ( سر ص�? 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 گ�?ته مي شود .
درختهاي جستجوي باينري درخت هايي هستند که در آنها مقدار �?رزند چپ هر گره کمتر از گره پدر و مقدار �?رزند سمت راست هر گره بيشتر از گره پدر مي باشد .
پنج شنبه ۲۶ بهم ۱۳۸۵ ۱۲:۰۷ عصر
یافتن تمامی ارسال های این کاربر
*
ارسال ها: 351
اعتبار: 0
سپاس کرده: 0
سپاس شده: 95 در 81 موضوع

امتياز: 101.00

ارسال: #10
RE: آموزش گام به گام ویژوال بیسیک6.0
ايجاد ساختارهاي داده اي در ويژوال بيسيک

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

برای ايجاد درختهای جستجوی باينری در ويژوال بيسيک نياز به ايجاد دو کلاس داريم :
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
پنج شنبه ۲۶ بهم ۱۳۸۵ ۱۲:۱۰ عصر
یافتن تمامی ارسال های این کاربر
ارسال موضوع  موضوع بسته شده است 






تالار گفتمان اف دی ال - انجمن تخصصی دانلود رایگان - تالار گفتگوی ایرانیان © 1396.