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




 دانلود نمونه سوالات نیمسال دوم 93-94 پیام نور

 دانلود نمونه سوالات آزمونهای مختلف فراگیر پیام نور

صفحه 1 از 5 123 ... آخرینآخرین
نمایش نتایج: از شماره 1 تا 10 از مجموع 43

موضوع: آموزش ویژوال بیسیک 6

  1. #1
    TAHA آواتار ها
    • 9,180
    مدير بازنشسته

    عنوان کاربری
    مدير بازنشسته
    تاریخ عضویت
    Mar 2009
    محل تحصیل
    PNU-CLUB
    شغل , تخصص
    PNU-CLUB
    رشته تحصیلی
    PNU-CLUB
    راه های ارتباطی

    New 2 آموزش ویژوال بیسیک 6

    آشنایی با ویژوال بیسیک 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. #2
    TAHA آواتار ها
    • 9,180
    مدير بازنشسته

    عنوان کاربری
    مدير بازنشسته
    تاریخ عضویت
    Mar 2009
    محل تحصیل
    PNU-CLUB
    شغل , تخصص
    PNU-CLUB
    رشته تحصیلی
    PNU-CLUB
    راه های ارتباطی

    پیش فرض

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

  3. #3
    TAHA آواتار ها
    • 9,180
    مدير بازنشسته

    عنوان کاربری
    مدير بازنشسته
    تاریخ عضویت
    Mar 2009
    محل تحصیل
    PNU-CLUB
    شغل , تخصص
    PNU-CLUB
    رشته تحصیلی
    PNU-CLUB
    راه های ارتباطی

    پیش فرض

    کار با فايل در ويژوال بيسيک - بخش اول

    مقدمه

    بعلت عدم وجود اشاره گر در ويژوال بيسيک عمليات کار با فايلها در آن نسبتاً ساده می باشد .
    بطور کلی فايلها بر دو نوع هستند :
    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

  4. #4
    TAHA آواتار ها
    • 9,180
    مدير بازنشسته

    عنوان کاربری
    مدير بازنشسته
    تاریخ عضویت
    Mar 2009
    محل تحصیل
    PNU-CLUB
    شغل , تخصص
    PNU-CLUB
    رشته تحصیلی
    PNU-CLUB
    راه های ارتباطی

    پیش فرض

    کار با فايل در ويژوال بيسيک - بخش دوم


    خواندن از فايل :

    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

  5. #5
    TAHA آواتار ها
    • 9,180
    مدير بازنشسته

    عنوان کاربری
    مدير بازنشسته
    تاریخ عضویت
    Mar 2009
    محل تحصیل
    PNU-CLUB
    شغل , تخصص
    PNU-CLUB
    رشته تحصیلی
    PNU-CLUB
    راه های ارتباطی

    پیش فرض

    کار با فايل در ويژوال بيسيک - بخش سوم

    ساير عمليات کار با فايل :

    ۱ - حذف فايل : برای حذف يک يا چند فايل از دستور 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

  6. #6
    TAHA آواتار ها
    • 9,180
    مدير بازنشسته

    عنوان کاربری
    مدير بازنشسته
    تاریخ عضویت
    Mar 2009
    محل تحصیل
    PNU-CLUB
    شغل , تخصص
    PNU-CLUB
    رشته تحصیلی
    PNU-CLUB
    راه های ارتباطی

    پیش فرض

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

    مقدمه :

    ساختارهاي داده اي از نظر تعداد اعضا به دو دسته استاتيک و ديناميک تقسيم مي شوند . ساختارهاي استاتيک مثل آرايه هاي يک بعدي و آرايه هاي دو بعدي ، تعداد اعضاي آنها در زمان طراحي برنامه مشخص مي شود و در طول اجراي برنامه ثابت است اما تعداد اعضاي ساختارهاي داده اي ديناميک در طول اجراي برنامه تغيير مي کند . ليست پيوندي ( 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 ) و نشان دهنده انتهاي ساختار داده است .

  7. #7
    TAHA آواتار ها
    • 9,180
    مدير بازنشسته

    عنوان کاربری
    مدير بازنشسته
    تاریخ عضویت
    Mar 2009
    محل تحصیل
    PNU-CLUB
    شغل , تخصص
    PNU-CLUB
    رشته تحصیلی
    PNU-CLUB
    راه های ارتباطی

    پیش فرض

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

    ليست پيوندي

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



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

  8. #8
    TAHA آواتار ها
    • 9,180
    مدير بازنشسته

    عنوان کاربری
    مدير بازنشسته
    تاریخ عضویت
    Mar 2009
    محل تحصیل
    PNU-CLUB
    شغل , تخصص
    PNU-CLUB
    رشته تحصیلی
    PNU-CLUB
    راه های ارتباطی

    پیش فرض

    کلاس پشته : همانطور که در بخش قبل گفته شد پشته نوعی ليست پيوندی است که گره هاي جديد فقط به انتهاي آن اضافه شوند . روالهاي اصلي پشته Push و Pop هستند .Push يک گره جديد به بالاي پشته اضافه مي کند و Pop از بالاي پشته گره اي را حذف کرده و مقدار داده آن را بر مي گرداند . يک کلاس پشته را با استفاده از کلاس Clist و بصورت زير پياده سازي مي کنيم :Private list As New ClistPublic Sub Push(value as Variant)xList.InsertAtFront(value)xEnd subPublic Function Pop As VariantPop=list.RemoveFromFront()xEnd FunctionPublic Function IsStackEmpty() As BooleanIsStackEmpty=list.IsEmpty()xEnd functionPublic Property Get Iterator() as variantSet Iterator=list.IteratorEnd Propertyدر اين کلاس ابتدا يک شی از نوع کلاس Clist تعريف شده است . سپس متدهای Push توسط متد InsertAtFront و Pop توسط متد RemoveFromFront پياده سازی شده اند .يک برنامه نمونه :برای نوشتن يک برنامه برای کار با پشته ابتدا کلاس Stack را که کد آن را در بالا ديديد به پروژه تان اضافه کنيد . سپس در بخش کد مربوط به فرمتان ابتدا يک شی از نوع کلاس Stack بصورت زير تعريف کنيد im mStack as New Stackسپس در فرمتان سه CommandButton با نامهای Push و Pop و ShowStack و نيز يک TextBox با نام StackMember قرار دهيد . کد زير را برای کليک شدن دکمه Push بنويسيد :mStack.push(StackMember.text)xکد زير را برای کليک شدن دکمه Pop بنويسيد :StackMember.text=mStack.Pop()xکد زير را برای کليک شدن دکمه ShowStack بنويسيد im elements as New ClistIteratorSet elements=mStack.IteratorIf elements.HasMoreItems=false then msgbox "stack is empty"xElseWhile elemets.HasMoreItemsMsgbox elements.NextItemWend

  9. #9
    TAHA آواتار ها
    • 9,180
    مدير بازنشسته

    عنوان کاربری
    مدير بازنشسته
    تاریخ عضویت
    Mar 2009
    محل تحصیل
    PNU-CLUB
    شغل , تخصص
    PNU-CLUB
    رشته تحصیلی
    PNU-CLUB
    راه های ارتباطی

    پیش فرض

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

    صف :
    صف نوعي ساختار داده اي است که گره ها از ابتداي صف ( سر صف 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 گفته مي شود .
    درختهاي جستجوي باينري درخت هايي هستند که در آنها مقدار فرزند چپ هر گره کمتر از گره پدر و مقدار فرزند سمت راست هر گره بيشتر از گره پدر مي باشد .




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

  10. #10
    TAHA آواتار ها
    • 9,180
    مدير بازنشسته

    عنوان کاربری
    مدير بازنشسته
    تاریخ عضویت
    Mar 2009
    محل تحصیل
    PNU-CLUB
    شغل , تخصص
    PNU-CLUB
    رشته تحصیلی
    PNU-CLUB
    راه های ارتباطی

    پیش فرض

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

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

    برای ايجاد درختهای جستجوی باينری در ويژوال بيسيک نياز به ايجاد دو کلاس داريم :
    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

صفحه 1 از 5 123 ... آخرینآخرین

برچسب برای این موضوع

مجوز های ارسال و ویرایش

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