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




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

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

صفحه 3 از 5 اولیناولین 12345 آخرینآخرین
نمایش نتایج: از شماره 21 تا 30 از مجموع 43

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

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

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

    پیش فرض

    قسمت سوم
    کنترل برنامه ها
    کنترل برنامه ها
    عملگر های شرطی
    مثالا می خواهید برنامه ای برایحساب پرداخت ها بنویسیم.این مقدار طلب هر فروشنده را که با آن معادله دارید محاسبه می کند و چک مربوط را چاپ می نماییم.حال اگر با یکی از فروشندگان مبادله نداشته باشد چه رخ می دهد.
    می خواهیم یک چک به مبلغ صفر دلار چاپ کنیم؟؟؟ مطمئنا پاسخ منفی است. تا اینجا همه کد های که درون روال دیده ایددستور به دستور اجرا می شوند. اما به کمک عملگرهای شرطی و دستور های مر بوط می توانید. برنامه ای بنویسید. که اگر لازم بود ترتیب اجرای دستورات تغییر نکند. بنابراین برنامه شما می تواند فقط چکهایی را چاپ کند که به فروشندگان آنها مبلغیبدهکار هستند.
    ویژال بیسیک از 6 عملگرها شرطی پشتیبانی می کند.
    عملگرها:=|<|>|=<|=>|<>
    توضیح:مساوی|بزرگتر از|کوچکتر از|بزرگتر یا مساوی|کوچکتر یا مساوی|نا مساوی
    مثال:2=7|3<6|11>5|23=<23|21=>4|3<>3
    نتیجه:غلط|درست|درست|درست|در �ت|غلط
    داده های شرطی
    همیشه دو مقدار را با هم مقایسه کنید که از یک نوع داده باشند. مثلا می توانید دو عدد از یک نوع را با هم مقایسه کنید تا ببینید کدام بزرگتر است. همچنین می توانید رشته های را با هم و انواع boolean را نیز با هم دیگه مقایسه کنید.
    اما هیچ وقت سعی نکنید یک رشته را با یک عدد مقایسه کنید چون نتیجه معمولا اشتباه در می آید.

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

    If conditional then
    Block of one or more visual basic statements
    End if
    Conditional عبارتی است که نتیجه آن true یا false می باشد. در نتیجه conditional می تواند یک متغیر بولی بشد.می تواند یک کنترل معادل با مقدار true یا false باشد یا حتی ممکن است یک عبارت طولانی تر باشد که شامل عملگرهای شرطی و امتحان یک یا چند عملگر منطقی است.
    وقتی که ما از دستور if استفاده می کنید دستور اگر می باشد مثالا می گوییم اگر فلان چیز را زد یا ...
    فلا چیز بعدی اجرا یا ... اعمال شود این دستور یکی از دستور های است که در اکثر زبان های دیگر کا می کند. و اگر از این دستور در ویبی نخواهید استفاده کنیم یه جای کار می لنگه.
    بدنه یک دستور if باید بصورت تو رفته باشد تا بتواند با یک نگاه نقاط شروع و خاتمه این دستور را تشخیص دهید . کلیه دستورات if چند خطی دارای مجموعه متناظری از دستورات end if در جایی از برنامه می باشند . دستور end if همیشه با آخرین دستور if مرتبط است بدون توجه به اینکه چقدر تو رفته باشد.
    مقایسه داده ها به وکمک if

    If (cursales > cursalesgoal) then
    Cursalarybonus=100.00
    Lblsalesnote.caption="maji"
    Lblsalesnote.backcolor=red
    Lblsalesnote.fontbold=true
    End if
    تکمیل دستور if با لغت کلیدی else
    در قسمت های بالا در مورد شکل دستور ifآشنا شدید. اما برنامه نویسان غالب اوقات از شکل توسعه یافته آن استفاده می کنند.
    که فرمت زیر را دارد.

    If conditional then
    Block of one or more visual basic statements
    Else
    Block of one or more visual basic statements
    End if
    ادامه دارد

    __________________

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

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

    پیش فرض

    ادامه قسمت سوم
    در اینجا نیز مانند کلیه دستورهای چند خطی برای واضح شدن بدنه دستور بصورت تو رفته می باشد.
    اما به خاطر داشته باشید. که این شیوه ضروری نیست. اولین فرمت if که قبلا دیدید کدی را نشان می داد که اگر شرط درست باشد این کد اجرا می شد.
    در این فرمت اگر شرط غلط باشد کدی برای اجرا وجود نخواهد داشت. Else بدین منظور به کار می رود.
    دستور if…elseاز آنکه if … else خاتمه یافت اجرای بقیه برنامه ادامه یافت پیدا می کند.
    دستورات if تو در تو

    If text.text="hiphop" then
    If text.text="hiphop" then
    Text2.text="hiphop"
    Else
    Text2.text="hiphop3"
    End if
    End if

    گاهی اوقات بر اساس داده های مختلف ممکن است بخواهد یک رویداد یا نوع از روال ها را زودتر از موعد مقرر خاتمه دهید. برای انجام این کار می توانید دستور if را با دستور exit ترکیب کنید.
    Exit sub|function|do|for
    استفاده از دستور exit sub برای ختم زودرس یک روال
    دستورات if…elseتودرتو
    چنمانچه بخواهیم یک دستور if…else را درون یک دستور دیگر if……else قرار دهید باید برای شروع دستور if تو در تو از elseif استفاده کنید.
    Elseif کمک می کند تا دو یا چند دستور if….else تو در تو با هم ترکیب شوند.

    If text1.text="hiphop" then
    Text2.text="hiphop"
    Elseif text12.text="hiphop"
    Text3.text="ddd"
    End if

    همانطور که دیدید ما در قسمت if می گفتیم اگر وelse را در بین if می گزاشتیم که اگر خواستیم بگویید ویا
    حال دستور elseif می گوید ویا اگر که هم ویا است و هم اگر یعنی دستور ویا دستو استفاده می شود.
    انتخاب از طریق دستور select case
    مناسب ترین موقعیت برای استفاده ار دستور select case هنگام انتخاب با وجود چند شرط است . مسلما اگر بیشتر از سه یا چهار دستور if…else تودرتو داشته باشید نتیجه یک برنامه پیچیده خواهد بود.بعبارت دیگر وارد یک منطق در هم و برهم بصورت زیر می شوید : اگر این درست باشد. بعد اگر این درست باشد.
    بعد اگر این هم درست باشد آنگاه کاری را انجام بده در غیر این صورت ... فرمت select case بصورت زیر است.

    Select case expression
    Case expressionmatch
    Block of one or more visual basic statements
    [ case expressionmatch1
    Block of one or more visual basic statements]
    [ case expressionmatch2
    Block of one or more visual basic statements]
    [ case expressionmatch3
    Block of one or more visual basic statements]
    End select

    Select caseیک مورد را از میان چند مورد انتخاب می کند. تعداد شرایطی که امتحان می شوند به نیاز شما بستگی دارد. این شرایط بصورت[case expressionmatch#...] نشان داده می شوند. فرض کنید که هیچکدام از این شرایط بر قرار نباشند.علیرغم فرمت پیچیده استفاده از دستور select case ساده است. به مثال زیر توجه کنید.

    Select case txtgrade.text
    Case "a"
    Lblannounce.caption="ma"
    Case "b"
    Lblannounce.caption="maa"
    Case "c"
    Lblannounce.caption="maj"
    Case "d"
    Lblannounce.caption="maji"
    Case "f"
    Lblannounce.caption="majid"
    Case else
    Lblannounce.caption="majid rahimy"
    End select

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

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

    پیش فرض

    ادامه قسمت سوم
    اگر بنا به دلایلی حروفی غیز ازa|b|c|d|f درون متن ظاهر شود دستور case else اجرا شود و با تنظیم مقدار برچسب . خطایی را اعلام می کند.
    بقیر از دستورات select case دستوراتی دیگر در مورد همین مانند محدودها و.... می باشد.
    حلقه do
    ویژوال بیسیک یک دستور چند خطی به نام حلقه do دارد. در اینجا نیز مانند دستور if دستورات حلقه do با فرمت های مختلفی می آیند.
    Do while condition
    Block of one or more visual basic statements
    Loop
    Do
    Block of one or more visual basic statements
    Loop while condition
    Block of one or more visual basic statements
    Loop
    Do
    Block of one or more visual basic statements
    Loop while condition
    منظور از condition در حلقه do یک عبارت کنترل یا مقدار بولی است که درست یا غلط می باشد. فرمتی را که انتخاب می کنید اصولا به سلیقه شما بستگی دارد. اما تفاوت هایی نیز بین آنها وجود دارد.
    شما می توانید از هر شکل حلقه do استفاده کنید.
    Do while intctr <=10
    Lblout.caption=intctr
    Intctr=intctr +1
    Loop
    این قسمت ادامه دارد

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

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

    پیش فرض

    صفحه کلید و صفحه تصویر
    مقدمه ای بر توابع داخلی
    توابع نوعی روال هستند. تفاوت بین تابع و سابروتین آن است که تابع پس از اتمام کار خود(یعنی اجرای کد بدنه تابع)یکم مقدار را به قسمت دیگری از برنامه می فرستند. در فصل بعد یاد می گیرید که چگونه توابع را بنویسید و نیز با طرز کار آنها با تمام جزئیات آشنا می شوید.
    آشنایی با توابع داخلی:
    توابع هیچ . یک یا چند مقدار را می گیرند و یک مقدار را بر می گردانند.
    تابع داخلی internal function یا توبع ذاتی intrinisic function تابعی است که همراه ویژوال بیسیک ارایه می شود و یک کار خاص مثل محاسبه یا عملیات ورودی/خروجی را انجام می دهد.قبل از آنکه بتوانید از یک تابع داخلی استفاده کنید باید نام و پیش نیازهای آن را بدانید. با وجودی که کد درون یک تابع داخلی را نمی بینید. اما می توانید از این توابع در برنامه های خودتان استفاده کنید. توابع داخلی نیز مثل if قسمتی از زبان ویژوال بیسیک هستند
    شما از توابع برای کارهای زیادی استفاده خواهید کرد. هر چه بیشتر با توابع در این فصل و خصوصا فصل بعد آشنا شوید بهتر می توانید از آنها استفاده کنید. فعلا موضوعات زیر را بخاطر بسپارید.
    معمولا یک یا چند مقدار به یک تابع منتقل می شود و به ندرت تابعی را می بینید که به هیچ مقداری نیاز نداشته باشد. این مقادیر که به تابع منتقل می کنید آرگان می گویند.
    آرگمانargumentمقداری است که یک تابع منتقل می شود.
    هموراه بعد از نام تابع باید پرانتز بیاید البته به استثنای توابعی که هیچ آرگمانی نیاز ندارند.
    آرگمان های تابع درون پرانتز قرار می گیرند. در صورتی که چند آرگمان را منتقل می کنید باید آنها را کاملا از هم جدا نمایید.
    در ادامه این قسمت برای سادگی از اصطلاح تابع بجای تابع داخلی استفاده می شود. در این قسمت یک کنترل تصویر را روی فرم نصب کردید و برای بار کردن یک تصویر درون آن از یک تابع استفاده نمودید.
    در اینجا آن خط کد را می بینید. که برای سادگی آرگمان تابع تا حدی خلاصه شده است.
    Image1.picture=loadpicture ("\taknik.bmp")
    نام تابعloadpicture است. در این کتاب هنگام بحث راجع به توابع از پرانتزهای خالی بعد از نام تابع استفاده شده است.
    تا بتواند به راحتی نام توابع متغیر و کنترل ها را از هم تشخیص دهید. تابع فوق یک آرگومان رشته ای دارد.
    ...
    امکان پاسخ دادن کاربر از طریق تابع msgbox()
    تابع msgboxیک تابع پیغام می باشد مثالا وقتی ما یک دستوری داریم که می خواهیم کاربر بعد از انجام آن دستور یک msgbox اجرا شود و بعد از اجرا شدن این دستور کاربر با انتخاب یک یا.. از دستور از تابع msgbox .. که بطور مثال ما یک کار اشتباهی در برنامه انجام می دهیم و برنامه یک پیغام شما اشتباه بودن ما را می گوید و یا ما دکمه خروج را می زنیم پیغامی حاوی آیا شما مطمئن هستید که می خواهید از برنامه خارج شوید ک 2 راه را پیش روی شما می گزارد یکی بله و دیگری خیر با زدن بله شما از برنامه خارج می شوید ولی بازدن خیر داخل برنامه خواهید ماند.
    تابع msg box شمال:
    شمایل
    پیغام
    و دکمه ها می باشد
    نام پروژه
    به کد زیر دقت کنید
    Msgbox=("click for exit")
    کد بالا فقط ما متن اریه شده را نوشتیم و اصلا برای دکمه و شمایل چیزی ننوشتیم.
    خود msgbox اولیه شامل یک دکمه است که با زدن دکمه دستور بعدی اجرا می شود . ولی ما برای دستور کدی ننوشتید خود برنامه با زدن دکمه هر دستوری باشد اجرا می کند
    دستور msgbox("…..") فقط برای یک مطن ارایه می شود ولی اگر بخواهیم دکمه نام پروژه شمایل اضافه کنیم باید قبل از زدن msg box بنویسیم intresponse= ماننده
    Intresponse=msgbox("ms",….,……,….")
    حال برای یاد گیری بهتر یک کد کامل می نویسم
    Intresponse=msgbox("text",vbok+vbquestion+vbdefaul tbutton2," title")
    برای اینکه ببینید کاربر کدام کلیک را انتخاب کرده باید این مقادیر استفاده کنید.
    به ترتیب
    مقدار>ثابت نامگزاری شده>توضیح
    1
    2
    3
    4
    5
    6
    7
    Vbok
    Vbcancel
    Vbabort
    Vbretry
    Vbignore
    Vbyes
    Vbno
    کاربر دکمه ok را کلیک کرده
    کاربر دکمهcancelرا انتخاب کرده است
    کاربر دکمهabortرا انتخاب کرده است
    کاربر دکمهretry را انتخاب کرده است.
    کاربر دکمه yes را انتخاب کرده است
    کاربر دکمه no را انتخاب کرده است.
    ثابت های نامگزاری شده.
    شمایل
    به ترتیب
    مقدار>ثابت های نامگزاری شده>توضیح>شمایل
    16
    32
    48
    64
    Vbcritical
    Vbquestion
    Vbexclamation
    Vbinformation
    پیغام جدی
    علامت سوال
    علامت هشدار
    اطلاعات
    نام دکمه ها
    Vbokonly
    Vbokcancel
    Vbabortretryignore
    Vbyesnocancel
    Vbyesno
    Vbretrycancel

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

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

    پیش فرض

    آشنايي با BitBlt


    هدف از اين مبحث آموزشي ، آشنايي با تابع BitBlt و برخي ديگر از توابع کتابخانه Win32 GDI براي انجام برخي عمليات گرافيکي مثل double buffering و خواندن sprite از فايل است .
    نکته : sprite به کاراکترهاي متحرکي گفته مي شود که در بازيها وجود دارد .
    اولين چيزي که به آن نياز داريد ايجاد يک فرم است . خاصيت ScaleMode آنرا برابر 3-Pixel قرار دهيد . پيشنهاد مي کنم که هميشه در هنگام استفاده از فرم بهمراه API از pixel براي scalemode استفاده کنيد .
    سپس سايز فرم را به اندازه اي افزايش دهيد تا ScaleWidth برابر 320 و ScaleHeight برابر 256 شود . توجه کنيد که خاصيت HasDC فرم را True قرار دهيد . همچنين از خاصيت AutoRedraw براي فرم استفاده نمي کنيم زيرا مي خواهيم از Double Buffering استفاده کنيم که بسيار سريعتر و کارامدتر مي باشد .
    مرحله بعدي declare کردن API هايي است که به آنها نياز داريم :

    'blitting
    Private Declare Function BitBlt Lib "gdi32" (ByVal hDestDC As Long, ByVal x As Long, ByVal y As Long, ByVal nWidth As Long, ByVal nHeight As Long, ByVal hSrcDC As Long, ByVal xSrc As Long, ByVal ySrc As Long, ByVal dwRop As Long) As Long
    'code timer
    Private Declare Function GetTickCount Lib "kernel32" () As Long
    'creating buffers / loading sprites
    Private Declare Function CreateCompatibleBitmap Lib "gdi32" (ByVal hdc As Long, ByVal nWidth As Long, ByVal nHeight As Long) As Long
    Private Declare Function CreateCompatibleDC Lib "gdi32" (ByVal hdc As Long) As Long
    Private Declare Function GetDC Lib "user32" (ByVal hwnd As Long) As Long
    'loading sprites
    Private Declare Function SelectObject Lib "gdi32" (ByVal hdc As Long, ByVal hObject As Long) As Long
    'cleanup
    Private Declare Function DeleteObject Lib "gdi32" (ByVal hObject As Long) As Long
    Private Declare Function DeleteDC Lib "gdi32" (ByVal hdc As Long) As Long


    سوال : DC چيست ؟ DC و يا بعبارت ديگر Device Context ، hDC يک عدد است که به يک آدرس در حافظه اشاره مي کند که داده اي در آن ذخيره شده است . در هنگام استفاده از BitBlt براي اشاره کردن به آدرسي که داده گرافيکي در آنجا ذخيره شده ، استفاده مي شود .
    در مرحله بعدي نياز به ذخيره آدرسهاي DC داريم که مي سازيم . آدرسهاي DC مقادير Long هستند همچنين آنها را بصورت Public تعريف مي کنيم :

    'our Buffer's DC
    Public myBackBuffer As Long
    Public myBufferBMP As Long
    'The DC of our sprite/graphic
    Public mySprite As Long
    'coordinates of our sprite/graphic on the screen
    Public SpriteX As Long
    Public SpriteY As Long


    حال بايد تابعي بسازيم که تصاوير گرافيکي درون حافظه load کند . نکته مهمي که بايد به آن توجه کنيد اينست که يک device context خودش به تنهايي هيچ داده گرافيکي ندارد و بايستي يک bitmap موجود باشد تا درون آن load شود براي مثال يک فايل bmp يا يک bitmap خالي که از آن بعنوان back buffer استفاده مي کنيد .
    تابعي که خواهيم نوشت يک device context منطبق با صفحه مي سازد سپس فايلهاي گرافيکي مورد نظر را درون device context قرار مي دهد :

    Public Function LoadGraphicDC(sFileName As String) As Long
    'temp variable to hold our DC address
    Dim LoadGraphicDCTEMP As Long
    'create the DC address compatible with
    'the DC of the screen
    LoadGraphicDCTEMP = CreateCompatibleDC(GetDC(0))
    'load the graphic file into the DC...
    SelectObject LoadGraphicDCTEMP, LoadPicture(sFileName)
    'return the address of the file
    LoadGraphicDC = LoadGraphicDCTEMP
    End Function


    سوال : double-buffering چيست ؟ زمانيکه يک محيط گرافيکي مي سازيد تا درون آن چيزي را ترسيم کنيد ، شما sprite ها / گرافيکها / متن را درون حافظه blit مي کنيد ( offscrean ) سپس نتيجه نهايي را روي صفحه blit مي کنيد . اين عمل از لرزش تصوير يا flickering جلوگيري مي کند ( زماني رخ مي دهد که چندين sprite مستقيماً روي صفحه blit شوند ) و بسيار سريعتر از AutoRedraw است .
    قبل از اينکه مثالي براي اين تابع ذکر کنم تابع BitBlt را توضيح خواهم داد :
    BitBlt تابعي از کتابخانه dll “gdi32  است . اين تابع يک انتقال bit-block از داده هاي مرتبط به يک مستطيل از پيکسلها به يک device context مقصد انجام مي دهد . بعبارت ديگر داده هاي گرافيکي را از محيط گرافيکي ( يک bitmap ) به محيط گرافيکي ديگري ( screen يا يک form ) کپي مي کند . فرم کلي اين تابع بصورت زير است :

    Declare Function BitBlt Lib "gdi32" Alias "BitBlt" _
    (ByVal hDestDC As Long, _
    ByVal x As Long, _
    ByVal y As Long, _
    ByVal nWidth As Long, _
    ByVal nHeight As Long, _
    ByVal hSrcDC As Long, _
    ByVal xSrc As Long, _
    ByVal ySrc As Long, _
    ByVal dwRop As Long) As Long


    اولين خط بيان مي کند که ما بوسيله gdi32 DLL به تابع BitBlt دسترسي خواهيم داشت . خطوط ديگر پارامترهايي هستند که اين تابع مي گيرد :
    hDestDC : hDC مربوط به محيط مقصد ( اگر مي خواهيد مقصد يک فرم باشد از form.hDC استفاده کنيد و يا اينکه آدرس يک backbuffer را که ساخته ايد بدهيد )
    x : مختصات افقي محلي که مي خواهيد گرافيک شما ظاهر شود .
    y : مختصات عمدي محلي که مي خواهيد گرافيک شما ظاهر شود .
    nWidth : عرض گرافيک شما
    nHeight : ارتفاع گرافيک شما
    hSrcDC : hDC مربوط به محيط مبدا
    xSrc : افست x . 0 زماني استفاده مي شود که بخواهيد از سمت چپترين گوشه گرافيک مبدا عمل blit را انجام دهيد .
    ySrc : افست y
    dwRop : مد draw اي که در زمان blitting گرافيکتان مي خواهيد استفاده کنيد ( Raster Operations يا ROP ) . اين پارامتر مقادير زير را مي تواند بگيرد :
    - vbSrcCopy : داده تصوير مبدا را مستقيماً در مقصد کپي مي کند .
    - vbSrcPaint : داده هاي تصاوير مبدا و مقصد را با هم OR مي کند ( pseudo-alphablending effect )
    - vbSrcAnd : داده هاي تصاوير مبدا و مقصد را با هم AND مي کند ( pseudo-gamma effect )
    - vbSrcInvert : داده هاي تصاوير مبدا و مقصد را با هم XOR مي کند
    - vbSrcErase : ابتدا داده تصوير مقصد را invert مي کند سپس آنرا با داده تصوير مبدا AND مي کند .
    - vbDstInvert : داده تصوير مقصد را invert مي کند و داده تصوير مبدا را در نظر نمي گيرد .
    - vbNotSrcCopy : داده تصوير مبدا را invert مي کند و آنرا مستقيماً در مقصد کپي مي کند .
    - vbNotSrcErase : داده تصاوير مبدا و مقصد را OR کرده و نتيجه را invert مي کند .

    مثالي از کاربرد BitBlt :
    BitBlt Form1.hDC, PlayerX, PlayerY, 48, 48, picPlayer.hDC, 0, 0, vbSrcCopy

    حال مي خواهيم از BitBlt در يک حلقه استفاده کنيم تا يک image را در فرم حرکت دهيم :
    1 – يک فايل bmp با ابعاد 32x32 بسازيد و با نام sprite1.bmp در دايرکتوري پروژه ذخيره کنيد .
    2 – يک دکمه در فرم قرار دهيد و نام آنرا cmdTest بگذاريد .
    3 – دکمه را در گوشه بالايي فرم و در سمت راست قرار دهيد .
    4 – کد زير را براي event مربوط به کليک شدن دکمه بنويسيد :

    'Timer variables...
    Dim T1 As Long, T2 As Long
    ساخت DC براي backbuffer’
    myBackBuffer = CreateCompatibleDC(GetDC(0))
    ساخت يک سطح bitmap براي DC’
    myBufferBMP = CreateCompatibleBitmap(GetDC(0), 320, 256)
    load کردن سطح bitmap خالي درون buffer’
    SelectObject myBackBuffer, myBufferBMP
    قبل از blit کردن درون بافر بايد آنرا با black پر کنيم’
    BitBlt myBackBuffer, 0, 0, 320, 256, 0, 0, 0, vbWhiteness
    load کردن split توسط تابعي که در بالا نوشتيم’
    mySprite = LoadGraphicDC(App.Path & "\sprite1.bmp")
    cmdTest.Enabled = False
    == شروع حلقه اصلي ==’
    خواندن tickcount جاري’
    T2 = GetTickCount
    Do
    DoEvents
    T1 = GetTickCount
    اگر 15 ميلي ثانيه گذشته بود فريم بعدي شروع شود’
    If (T1 - T2) >= 15 Then
    پاک کردن محل قبلي sprite بوسيله پر کردن آنجا با black ‘
    BitBlt myBackBuffer, SpriteX - 1, SpriteY - 1,32, 32, 0, 0, 0, vbBlackness
    Blit کردن sprite درون back buffer’
    BitBlt myBackBuffer, SpriteX, SpriteY, 32, 32,mySprite, 0, 0, vbSrcPaint
    Blit کردن backbuffer روي فرم’
    BitBlt Me.hdc, 0, 0, 320, 256, myBackBuffer,0, 0, vbSrcCopy
    حرکت دادن sprite روي صفحه’
    SpriteX = SpriteX + 1
    SpriteY = SpriteY + 1
    'update timer
    T2 = GetTickCount
    End If
    Loop Until SpriteX = 320

    سپس بايد يک cleanup code بنويسيد تا حافظه هاي را که براي نگهداري تصاوير گرافيکي و buffer ها استفاده کرده ايد آزاد کنيد :

    Private Sub Form_Unload(Cancel As Integer)
    DeleteObject myBufferBMP
    DeleteDC myBackBuffer
    DeleteDC mySprite
    End
    End Sub

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

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

    پیش فرض

    کنترل Internet Transfer - قسمت دوم


    اتصالات FTP

    پروتکل FTP علاوه بر نقل و انتقال فايل بين دو کامپيوتر ، مي تواند نوعي مديريت فايل ( مثل حذف فايل يا ايجاد پوشه ) روي کامپيوتر مقصد را انجام دهد . FTP در انتقال فايل بسيار قويتر از HTTP است ولي به مراتب پيچيده تر از HTTP مي باشد اما کنترل IT اين پيچيدگيها را از ديد برنامه نويس مخفي کرده است .
    براي کار با سرورهاي FTP بايد به آنها Login نمود . نوع خاصي از Login به نام Anonymous Login ( ورود ناشناس ) وجود دارد که با آن کاربران مي توانند بدون محدوديت از سايت FTP استفاده کنند . توجه کنيد که حتي براي ورود ناشناس هم نياز به نام کاربر و کلمه عبور است . براي ارسال نام کاربر و کلمه عبور از خواص username و password کنترل IT استفاده مي شود . اگر خاصيت username خالي باشد ( blank ) ، کنترل IT بطور خودکار از anonymous استفاده مي کند و آدرس email کاربر بعنوان passowrd استفاده مي شود .
    استفاده از متد OpenURL : متد OpenURL ساده ترين راه انجام عمليات FTP است . دستور زير از يک سايت FTP ليست مي گيرد :


    Text.text=Inet.OpenURL("ftp://ftp.microsoft.com",icString)x

    براي خواندن فايل از يک سايت FTP بايد در حالت باينري کار کرد :

    b()=Inet.OpenURL("ftp://ftp.microsft.com/test.zip",icByteArray)x


    استفاده از متد Execute : متد Execute قابليتهاي بيشتري دارد و اجرای آن در FTP نياز به دو پارامتر دارد :

    Inet.Execute(url,operation)x


    که url آدرس سايت FTP بهمراه نام و مسير فايل و پارامتر operation يک فرمان FTP است . کنترل IT با داده هاي خوانده شده FTP به دو طريق رفتار مي کند :
    برخي از داده ها مثل پاسخ فرمان DIR در بافر کنترل IT قرار مي گيرد و بايد آنها را با متد GetChunk خواند .
    برخي ديگر از داده ها مثل فايل خوانده شده با فرمان GET مستقيماً روي ديسک نوشته مي شوند و ديگر نيازي به استفاده از متد GetChunk نيست .
    فرامين FTP بسيار قوي هستند و حتي به شما اين امکان را مي دهند که فايلها را به روي کامپيوتر مقصد کپي کنيد ، به پوشه هاي کامپيوتر مقصد برويد ، فايلها را حذف کنيد و يا تغيير نام دهيد . البته بايد توجه داشت که فرامين قابل اجرا به نوع ورود به سيستم FTP بستگي دارد . اگر با کاربر anonymous به يک سايت FTP وارد شويد تنها مي تواند فايلها را ببيند و آنها را download کنيد .
    مهمترين فرامين FTP عبارتند از :
    CD path : به دايرکتوري path مي رويد .
    CDUP : به يک دايرکتوري بالاتر مي رود .
    CLOSE : بستن اتصال FTP
    DELETE file1 : حذف فايل file1
    DIR file1 : جستجوي فايل file1 روي دايرکتوري جاري
    MKDIR path : ايجاد يک دايرکتوري با نام path
    PUT file1 file2 : فايل file1 را از کامپيوتر مبدا روي فايل file2 در کامپيوتر مقصد کپي مي کند .
    PWD : نام دايرکتوري جاري در کامپيوتر مقصد را برمي گرداند .
    QUIT : قطع اتصال FTP
    GET file1 file2 : فايل file1 را از کامپيوتر مقصد روي فايل file2 در کامپيوتر مبدا کپي مي کند .
    RENAME file1 file2 : تغيير نام فايل file1 به file2
    RMDIR path : حذف دايرکتوري path در کامپيوتر مقصد
    SIZE file1 : بدست آوردن تعداد بايتهاي فايل يا دايرکتوري file1

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

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

    پیش فرض

    مباحث پيشرفته Direct3D - مقدمه


    موضوع : مروري بر مباحث قبلي - ساخت يک موتور گرافيکي سه بعدي

    قبل از شروع مباحث جديد برنامه نويسي Direct3D ، با هم مروري بر مباحث قبلي خواهيم داشت . ( مباحث قبلي در آرشيو موجود مي باشند ) .
    در اين درس با استفاده از مطالب قبلي يک Engine سه بعدي ساخته و از امکانات آن در يک برنامه نمونه استفاده خواهيم کرد .
    اين engine داراي دو کلاس است :
    1 – کلاس MainD3D
    2 – کلاس D3Dobject
    در کلاس MainD3D متغيرها و توابع لازم براي ساخت يک device سه بعدي ، تنظيمات ماتريسي ، تابع رندر و غيره موجود مي باشد .
    متغيرهاي عمومي اين کلاس عبارتند از :
    Public g_DX As New DirectX8
    Public g_D3D As Direct3D8
    Public g_D3DX As New D3DX8
    Public g_D3DDevice As Direct3DDevice8
    Public NTextures As Long
    روتين ها و توابع اين کلاس عبارتند از :
    1 - InitD3D : اين روتين ، اشيا D3D و D3Ddevice را مي سازد و پارامترهاي آنها را تنظيم مي کند .
    2 – ApplyCameraChanges : روتين ايجاد ماتريس View
    3 – SetupMatrices : روتين ايجاد ماتريس Projection
    4 – StartRender : در اين روتين عمليات لازم براي شروع عمل رندر صورت مي گيرد .
    5 – RenderObject : اين تابع ، يک شي سه بعدي از نوع کلاس D3Dobject را مي گيرد و بردارهاي مورد نياز و نيز بافت شي را تنظيم مي کند و در پايان شي را ترسيم مي کند .
    6 – FinishRender : در اين روتين به عمليات رندر پايان داده مي شود .
    7 – Cleanup: روتين از بين بردن اشيا Direct3D
    8 – CreateVector : تابع ساخت يک بردار سه بعدي
    9 – CreateTextures : روتين ساخت يک بافت جديد
    10 – InitTexture: تابع مقداردهي به يک بافت
    در کلاس D3Dobject متغيرها و توابع لازم براي ايجاد يک شي سه بعدي و اختصاص بافت به آن موجود مي باشد .
    در اين کلاس دو type عمومي تعريف شده است :
    1 - NormalVERTEX
    2 - TeturedVERTEX
    همچنين روتين ها و توابع اين کلاس عبارتند از :
    1 – InitObject : تابعي که تنظيمات اوليه vertex ها و بافت شي را انجام مي دهد .
    2 – Vertex : روتين ايجاد vertex هاي مورد نياز
    3 – GetRenderingMode: تابعي که مد رندر را مشخص مي کند .
    و نيز يکسري تابع ساخت vertex نرمال و ساخت vertex داراي بافت و غيره

    اين دو کلاس در يک پروژه ويژوال بيسيک قرارداده شده و پروژه با نام D3Dengine.dll کامپايل شده است .
    حال با استفاده از اين engine مي خواهيم يک منظره سه بعدي را ايجاد کنيم :
    اين منظره شامل سه object است : ديوار ، آسمان و زمين.




    ابتدا بايد يک شي از کلاس MainD3D تعريف کنيم :

    Dim D3D8Main As MainD3D8

    در متد Form Load نيز سه شي Floor ، Sky و Wall را بصورت زير تعريف مي کنيم :

    Dim Floor As D3DObject
    Dim Sky As D3DObject
    Dim Walls As D3Dobject


    سپس اين سه شي را به اضافه شي D3D8Main ، ايجاد مي کنيم :

    Set D3D8Main = New D3DEngine.MainD3D8
    Set Floor = New D3DEngine.D3DObject
    Set Sky = New D3DEngine.D3DObject
    Set Walls = New D3DEngine.D3Dobject

    در ابتدا شي MainD3D را Initial مي کنيم و سپس بافتهاي مورد نيز خود را مي سازيم :

    D3D8Main.InitD3D True, Me.hWnd
    D3D8Main.CreateTextures 3
    D3D8Main.InitTexture 1, App.Path + "\floor.jpg"
    D3D8Main.InitTexture 2, App.Path + "\sky.bmp"
    D3D8Main.InitTexture 3, App.Path + "\wall.bmp"


    حال به سراغ ايجاد و مقداردهي vertex هاي floor مي رويم . floor شامل شش vertex مي باشد و بنابراين دو face مثلثي دارد :

    Floor.InitObject 6, 2, TriangleList, True, 1

    Floor.Vertex 0, -55, -2, -55, vbWhite, 0, 10
    Floor.Vertex 1, 55, -2, -55, vbWhite, 10, 10
    Floor.Vertex 2, 55, -2, 55, vbWhite, 10, 0
    Floor.Vertex 3, -55, -2, -55, vbWhite, 0, 10
    Floor.Vertex 4, 55, -2, 55, vbWhite, 10, 0
    Floor.Vertex 5, -55, -2, 55, vbWhite, 0, 0

    سپس به سراغ ايجاد و مقداردهي vertex هاي wall مي رويم . wall شامل بيست و چهار vertex مي باشد و بنابراين هشت face مثلثي دارد :

    Walls.InitObject 24, 8, TriangleList, True, 3

    Walls.Vertex 0, -55, -2, -55, &HBCE8FC, 0, 1
    Walls.Vertex 1, 55, -2, -55, &HBCE8FC, 5, 1
    Walls.Vertex 2, 55, 8, -55, &HBCE8FC, 5, 0
    Walls.Vertex 3, -55, -2, -55, &HBCE8FC, 0, 1
    Walls.Vertex 4, 55, 8, -55, &HBCE8FC, 5, 0
    Walls.Vertex 5, -55, 8, -55, &HBCE8FC, 0, 0

    Walls.Vertex 6, -55, -2, 55, &HBCE8FC, 0, 1
    Walls.Vertex 7, 55, -2, 55, &HBCE8FC, 5, 1
    Walls.Vertex 8, 55, 8, 55, &HBCE8FC, 5, 0
    Walls.Vertex 9, -55, -2, 55, &HBCE8FC, 0, 1
    Walls.Vertex 10, 55, 8, 55, &HBCE8FC, 5, 0
    Walls.Vertex 11, -55, 8, 55, &HBCE8FC, 0, 0

    Walls.Vertex 12, -55, -2, 55, &HBCE8FC, 0, 1
    Walls.Vertex 13, -55, -2, -55, &HBCE8FC, 5, 1
    Walls.Vertex 14, -55, 8, -55, &HBCE8FC, 5, 0
    Walls.Vertex 15, -55, -2, 55, &HBCE8FC, 0, 1
    Walls.Vertex 16, -55, 8, -55, &HBCE8FC, 5, 0
    Walls.Vertex 17, -55, 8, 55, &HBCE8FC, 0, 0

    Walls.Vertex 18, 55, -2, 55, &HBCE8FC, 0, 1
    Walls.Vertex 19, 55, -2, -55, &HBCE8FC, 5, 1
    Walls.Vertex 20, 55, 8, -55, &HBCE8FC, 5, 0
    Walls.Vertex 21, 55, -2, 55, &HBCE8FC, 0, 1
    Walls.Vertex 22, 55, 8, -55, &HBCE8FC, 5, 0
    Walls.Vertex 23, 55, 8, 55, &HBCE8FC, 0, 0


    حال به سراغ ايجاد و مقداردهي vertex هاي sky مي رويم . sky شامل شش vertex مي باشد و بنابراين دو face مثلثي دارد :

    Sky.InitObject 6, 2, TriangleList, True, 2

    Sky.Vertex 0, -55, 8, -55, &HBCE8FC, 0, 1
    Sky.Vertex 1, 55, 8, -55, &HBCE8FC, 0, 1
    Sky.Vertex 2, 55, 8, 55, &HBCE8FC, 0, 1
    Sky.Vertex 3, -55, 8, -55, &HBCE8FC, 0, 1
    Sky.Vertex 4, 55, 8, 55, &HBCE8FC, 0, 1
    Sky.Vertex 5, -55, 8, 55, &HBCE8FC, 0, 1


    در پايان تابع رندر را صدا مي کنيم . البته در هر بار عمل رندر کردن ، دوربين يک درجه در صفحه X-Z دوران مي کند تا کل ديوار قابل مشاهده باشد :

    Dim Angle As Double
    PI = 3.1415
    Angle = 0
    Do
    DoEvents
    D3D8Main.StartRender vbBlack
    D3D8Main.RenderObject Sky
    D3D8Main.RenderObject Floor
    D3D8Main.RenderObject Walls
    D3D8Main.FinishRender
    If Sqr(Angle ^ 2) = 360 Then Angle = 0
    Angle = Angle + 1
    D3D8Main.CamLookAtX = Sin((Angle * 2 * PI) / 360)
    D3D8Main.CamLookAtZ = Cos((Angle * 2 * PI) / 360)
    D3D8Main.ApplyCameraChanges
    loop

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

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

    پیش فرض

    آشنايي با مفاهيم پايگــاه داده هـــا

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

    • نوع و ماهيت فايلي که اطلاعات در آن ذخيره ميشد ( بعضيهااز نوع باينري و بعضي TXT و... بودند )
    • الگوريتم و روش ذخيره سازي داده ها در فايل
    • نام توابع ( فرضا تابع مربوط به جستجو در هر برنامه نامي مطابق با سليقه برنامه نويس داشت )

    تمام اين برنامه ها در واقع نوعي بانک اطلاعاتي هستند که براي اهداف خاص ايجاد شده اند . لذا به منابع داده در هر برنامه به جز در همان برنامه در جاي ديگري کاربرد نداشت و به هيچ درد ديگري نميخورد حتي برنامه هايي که مشابه بودند ( مانند دفترچه تلفن ) نيز ( بنا به دلايل ذکر شده ) نميتوانستند با هم تبادل اطلاعات داشته باشند و اگر ميخواستيم از فايل حاوي داده هاي يک دفترچه تلفن در دفترچه تلفن ديگري استفاده کنيم هيچ راهي وجود نداشت . در ضمن در تمام اين برنامه ها به جز فايل و برنامه نوشته شده توسط برنامه نويس هيچ چيز ديگري وجود نداشت که بتواند امنيت داده ها را تضمين کند . و به طور کلي داده ها را کنترل و مديريت کند . مشکل ديگري که اين برنامه ها داشتند اين بود که اين برنامه ها تنها قابليت اين را داشتند که يک کاربر از آنها استفاده کند و استفاده به صورت اشتراکي از منابع داده ها امکان پذير نبود .
    با گسترش روز افزون اطلاعات و نياز روز افزون کاربران براي ذخيره و بازيابي اطلاعات و دسترسي سريع به اطلاعات و لزوم تامين امنيت اطلاعات ، لازم بود برنامه هاي تخصصي و ويژه اي براي اين منظور ايجاد شوند . لذا چندين شرکت تصميم به طراحي و توليد چنين برنامه هايي را گرفتند که از شرکتهاي IBM و Microsoft و چند شرکت ديگر به عنوان پيشگامان اين امر ميتوان نام برد .
    برنامه هاي مذکور پايگاه داده ها نام گرفتند . شرکتهاي مذکور بايد برنامه هايي را ايجاد ميکردند که قابليت استفاده براي مصارف گوناگون را داشته باشد . در ضمن اين برنامه ها بايد داراي قسمتي باشند که به عنوان واسط بين برنامه کاربردي و فايلها (منابع داده ) قرار بگيرد و عملياتهاي مربوط به ايجاد ، حذف و تغيير و ... را در منابع داده را کنترل و مديريت کند . اين برنامه واسط را DBMS ناميدند .
    DBMS اختصار (DATABASE MANANGMENT SYSTEM ) ميباشد که معناي لغوي آن سيستم مديريت پايگاه داده يا سيستم مديريت داده ها ميباشد .
    بايد خدمتتون عرض کنم که بزرگترين جهشي که پايگاه داده ها در راستاي رشد و تکامل داشت مربوط به همين قسمت يعني توليد و تکامل DBMS ميباشد . گفتيم که وظيفه DBMS اين است که بين برنامه کاربردي و منابع داده ها قرار بگيرد و کليه عملياتهاي مربوط به( ايجاد ، تغيير ، حذف و .... ) منابع داده ها را کنترل و مديريت کند . کنترل و مديريت منابع داده ها بسيار کلي و ميباشد و اگر بخواهيم منظور از کنترل و مديريت را کامل شرح دهيم بايد ساعتها وقت صرف کنيم و دهها صفحه مطلب بنويسيم که قطعا در اين مجموعه نخواهد گنجيد ضمن آنکه اين مطالب کاربردي نيط نيستند و تنها جنبه اطلاعاتي دارند لذا تنها چند نکته مهم را ذکر ميکنم و در صورتي که علاقمند بوديد بيشتر بدانيد ميتوانيد به کتابهاي موجود در اين زمينه مراجعه فرماييد .
    منظور از کنترل و مديريت :

    • مصون کردن برنامه هاي کاربردي در قبال تغييرات در سخت افزار ذخيره سازي .
    • مديريت رکوردهاي سرريز که پس از لود اوليه بايد در فايل وارد شوند .
    • ايجاد فايل با ساختارهاي گوناگون
    • فراهم کردن امکاناتي براي دستيابي مستقيم و ترتيبي به رکوردها و فيلدها .
    • جدا کردن ساختار فيزيکي و منطقي فايلها از يکديگر
    • تامين ايمني و حفاظت داده ها
    • جلوگيري از تکرار ذخيره سازي داده ها ( تاحدي )
    • فراهم کردن امکاناتي براي پردازش بلادرنگ (real time ) بسته به نوع سيستم عامل
    • تامين صحت داده هاي ذخيره شده ( تاحدي )
    • فراهم کردن امکاناتي براي بازيابي بکمک چند کليد
    • فراهم کردن امکاناتي براي استفاده چند کاربر به صورت همزمان از منبع داده و کنترل آن
    • کنترل و مديريت مسائل مربوط به همزماني و سطح دسترسي کاربران به منبع داده ها
    • و .....

    با توجه به موارد ذکر شده شرکتها سيستمهاي گوناگوني را به اين منظور طراحي و توليد کردند که هر سيستم داراي يک رابط گرافيکي براي گرفتن و انجام فرامين کاربر و يک DBMS بود که تمام مطالب ذکر شده در بالا در اين سيستمها لحاظ شده بودند . علاوه بر اين دو دفترچه اي نيز به همراه سيستم ارائه ميشد که حاوي نام و کاربرد توابع موجود در سيستم بود . برنامه نويسان در صورت نياز ميتوانستند از اين توابع در برنامه هاي خود استفاده کنند و دستوري را به سيستم ارسال کنند . رابطه اين توابع با سيستم مورد نظر دقيقا مانند رابطه توابع API موجود در ويندوز و خود ويندوز ميباشد . اندک زماني پس از توليد اين سيستمها کنسرسيومي تشکيل شد که اقدام به تهيه استانداردهايي در زمينه توليد نرم افزارهاي بانک اطلاعاتي کرد و از آن پس تمام شرکتهاي توليد کننده ملزم به رعايت اين استانداردها بودند . يکي از اين تصميمات و استانداردها يکسان سازي نام توابع در تمام سيستمها بود . ديگر آنکه قرار بر آن شد که يکسري کلمات و عبارات ويژه درنظر گرفته شوند که هر يک معرف عملياتي ويژه باشند و برنامه اي به تمام سيستمها اضافه شود که وظيفه آن دريافت ، تفسير و اجراي اين عبارات (دستورات ) باشد . مجموعه اين کلمات و برنامه اي که وظيفه تفسير آنها را داشت ، منجر به توليد زبان مشترکي براي بانکهاي اطلاعاتي شد . اين زبان برنامه نويسي زبان پايه تمام بانکهاي اطلاعاتي ميباشد که آن را T-SQL مينامند که اختصار (Transact Structured Query Language ) ميباشد .
    در واقع وظيفه اين کلمات و عبارات فراخواني توابع موجود در سيستم ميباشد . دستورات زبانSQL به دوبخش تقسيم ميشود :

    • دستورات مربوط به کار با داده ها ( DML)
    • دستورات مربوط به تعريف داده ها ( DDL )

    تمامي سيستمهاي ارائه شده در DML دستورات کاملا مشابهي را دارا ميباشند اما در بخش DDL داراي تفاوتهاي جزئي ميباشند . در ضمن سيستمهاي مختلف ارائه شده علاوه بر دستوراتي که کار يکساني را انجام ميدهند ممکن است دستورات اضافه تري نيز داشته باشند که وظيفه اين دستورات اضافي انجام عملياتهاي ترکيبي ميباشد . جلوتر بيشتر با اين زبان برنامه نويسي و دستورات آن آشنا خواهيم شد و در مثالهاي مختلف از دستورات مختلف اين زبان استفاده خواهيم کرد . خوب تا اينجا با تاريخچه پايگاه داده ها به صورت کلي و ساده آشنا شديم . در زير چکيده اي از مطالب بالا را به همراه مزيتهاي بوجود آمدن تکنولوژي بانک اطلاعاتي را ذکر خواهم کرد .و از اين پس ميرويم سراغ مفاهيم کاربردي پايگاه داده ها . دقت کنيد که مفاهيم و کلمات مهم را به صورت زير خط دار و زردرنگ نوشته ام .
    از مجموعه مطالب ذکر شده در بالا فهميديم که :
    با گسترش روز افزون اطلاعات و نياز کاربران به ذخيره و بازيابي اطلاعات سيستمهايي طراحي شدند که قابليت استفاده براي مصارف گوناگون را دارا ميباشند . همچنين اين برنامه ها امکان استفاده اشتراکي از منابع داده را نيز فراهم کردند . در اين سيستمها ما به هر فايلي که اطلاعاتي با ساختار معين در آن قرار گرفته است را منبع داده ميناميم. اين سيستمها به صورت تخصصي براي ذخيره و بازيابي اطلاعات طراحي و ساخته شده اند از اين رو به اين سيستمها پايگاه داده ها يا همان بانک اطلاعاتي ميگوييم . تمامي پايگاه داده هاي موجود داراي بخشي با عنوان DBMS يا سيستم مديريت داده ها ميباشند که به عنوان واسط مابين برنامه کاربردي و منبع داده قرار ميگيرد و کليه موارد مربوط به ذخيره و بازيابي لطلاعات را به صورت خودکار کنترل ميکند . اين سيستم همچنين مسئول تامين امنيت داده هاي ذخيره شده نيز ميباشد . سيستمهاي ارائه شده محصول هر شرکتي که باشند از استاندارد واحدي براي ذخيره و بازيابي اطلاعات تبعيت ميکنند . در ضمن تمامي پايگاه داده هاي موجود داراي يک زبان پايه و مشترک با نامT-SQL مبباشند که برنامه نويسان در اکثر موارد بدون آنکه نوع بانک مورد نظر مهم باشد ميتوانند از اين زبان براي انجام امور بانکي در برنامه هاي خود استفاده کنند . علاوه بر مطالب ذکر شده بايد خدمتتون عرض کنم که بانکهاي اطلاعاتي داراي مزيتهاي بينظيري ميباشند که اين مزيتها به تدريج به اين تکنولوژي اضافه شدند .از جمله اين مزيتها ميتوان کنترل متمرکز روي تمام داده هارا نام برد که يکي از مزاياي اين امر کاهش ميزان افزونگي در ذخيره سازي داده ها ميباشد .در واقع در تکنولوژي بانکهاي اطلاعاتي تکرار ذخيره سازي داده ها به حداقل ميرسد که اين امر خود داراي مزاياي فراواني ميباشد که صرفه جويي در فضاي ذخيره سازي و کاهش عمليات سيستم از جمله مهمترين آنها ميباشد . يکي ديگر از مزيتهاي مهم بانکهاي اطلاعاتي اين است که با گسترش اين تکنولوژي مفهوم چند سطحي بودن و معماري چند لايه به تدريج قوت يافت و بسط پيدا کرد . از ديگر مزاياي اين تکنولوژي اين است که مفاهيمي چون منطق صوري ، سيستمهاي خبره ، مفاهيم هوش مصنوعي و ... نيز در اين تکنولوژي رخنه کرده اند که اين امر موجب ميشود که سيستم قادر به استنتاج منطقي از داده هاي ذخيره شده باشد . و به عنوان آخرين مزيت نيز ميتوان اين مورد را ذکر کرد که در اين سيستمها کاربران در يک محيط انتزاعي (ABSTRACTIVE) و مبتني بر يک ساختار داده يي تجريدي کار ميکنند و بکمک احکام زباني خاص ، عمليات مورد نظر خود را انجام ميدهندو بدين ترتيب برنامه هاي کاربردي ازداده هاي محيط فيزيکي کاملا مستقل ميشوند .من گفتم آخرين مزيت اما اين آخرين مزيت نيست بلکه آخرين مزيتي است که من ذکر ميکنم و مزيتهاي استفاده از بانک اطلاعاتي نيز آنقدر زياد است که از حوصله اين مقاله خارج ميباشد .
    تا اينجا بحث بارها به کلمات داده ها و اطلاعات برخورد کرده ايم . اما مفهوم واقعي اين دو چيست ؟ در زير تعريف اين دو واژه را براي شما ذکر خواهم کرد و با تفاوتهاي اين دو آشنا خواهيم شد .
    توجه : مطالبي که از اينجا به بعد ذکر خواهند شد بسيار بسيار مهم و حياتي ميباشند لذا خواهشمندم تا زماني که هر خط را کاملا متوجه نشده ايد هرگز سراغ خط بعدي نرويد . حتي اگر صد بار يک خط را تکرار کنيد .

    مفهوم داده :
    داده عبارت است از مقادير صفات خاصه (ATTRIBUTES) انواع موجوديت ها .
    خوب با ارائه تعريفي براي داده با دو واژه ديگر نيز برخوردکرديم که احتمالا براي شما نامفهوم ميباشد لذا تعريفي براي اين دو نيز ارائه خواهم داد .
    نوع موجوديت : مفهوم کلي يک پديده ، شي و يا فرد که در ورد آنها ميخواهيم اطلاع داشته باشيم .
    صفت خاصه : ويژگي جداساز يک نوع موجوديت از نوع ديگر را گويند .
    ببينيد دوستان اگر ما يک فرد يا يک شي يا يک پديده را درنظر بگيريم و بخواهيم در مورد آن اطلاعاتي کسب کنيم آن شي ، يا فرد يا پديده را موجوديت ميناميم . فرض کنيد ما انسان را در نظر ميگيريم و از بين انسانها فردي را انتخاب ميکنيم و ميخواهيم در مورد اين فرد اطلاعاتي کسب کنيم . فردي که ما انتخاب کرده ايم موجوديت ميباشد . فرض کنيد اين موجوديت من هستم . خوب من حتما داراي آيتمهايي هستم که من را از شما متمايز ميکند . هر يک از اين آيتمها را نيز صفت خاصه ميگوييم .
    خوب اگر من يک موجوديت باشم قطعا يکي از صفات خاصه من نام من ميباشد و ديگري نام پدرم و ديگري شماره شناسنامه ام و .... درست ؟ حالا مقدار هريک از اين صفات خاصه من را داده ميگويند . به عنوان مثال نام من عليرضا است پس عريضا يک داده است . شماره شناسنامه من 1912 ميباشد پس عدد 1912 داده بعدي من ميباشد و ...
    پس موجوديت ما يک انسان در نظر گرفته شد که اين انسان توسط يـکسري صفاتي دارد که مختص انـسـان اسـت ( صفات خاصه ) و هر يک از اين صفات خاصه داراي مقداري هستند که اين مقدار نيز همان داده است
    اطلاع : اطلاع از داده حاصل ميشود و در حل مسائل به کار ميرود .
    ببينيد هر داده هنگامي که در يک موقعيت مشخص براي حل مساله اي به کار گرفته شود به اطلاع تبديل ميشود . در بالا موجوديت ما انسان بود که بنده بودم خوب من به جز نام و شماره شناسنامه و ... صفات خاصه ديگري نيز دارم که يک نمونه از آنها معدل ديپلم من است . فرض کنيد معدل ديپلم من 17 باشد . پس 17 نيز يک داده است . حال اگر بخواهيم بالاترين معدل را در بين دانش آموزان ديپلم گرفته تهران پيدا کنيم چون از داده هاي موجود در فرمول پيدا کردن ماکزيمم استفاده ميکنيم لذا عدد 17 که تاکنون داده بود به اطلاع تبديل ميشود
    ميدانم که احتمالا درک اين مطالب احتمالا کمي مشکل به نظر ميآيد اما اگر کمي دقت کنيم ميبينيم که اتفاقا بسيار ساده هستند . از طرفي اگر کسي اين مفاهيم را نفهمد قطعا از اينجا به بعد هيچ چيز ديگري را نيز نخواهد فهميد چون از اين واژه ها و مفاهيم آنها بارها و بارها استفاده خواهيم کرد و پايه تمام مطالب جديذي که جلوتر ذکر خواهم کرد .
    يک بار ديگر و براي آخرين بار اين مطالب را با مثال شرح ميدهم و سپس به سراغ مطالب بعدي خواهيم رفت .
    در کل چهار تا واژه بسيار مهم و کاربردي داريم :
    • داده
    • موجيديت
    • صفت خاصه
    • اطلاع

    در اين کره خاکي و اين جهان هستي ما سه تا دسته بيشتر نداريم . يعني هر چيزي که ما ميتوانيم نام ببريم يا يک شي (مانند قابلمه ) است يا يک فرد ( مانند شما ) است يا يک پديده ( مانند زلزله ) . ما به هريک از اجزاء اين سه دسته موجوديت ميگوييم . چرا چون وجود دارد . يعني قابلمه وجود دارد پس قابلمه يک موجوديت ميباشد . حالا ما چندين و چند مدل قابلمه داريم که اين قابلمه ها با هم فرقهايي دارند . خوب عامل اين تفاوتها چيست ؟ درسته هر قابلمه داراي يکسري خصوصيتها و صفاتي ميباشد که اين قابلمه را از قابلمه ديگر جدا ميکند و علاوه بر آن همان صفات باعث ميشنود تا بين من و قابلمه هم فرقي بوجود آيد جون قابلمه صفاتي دارد که من ندارم و اين صفات مخصوص قابلمه است نه انسان ! پس قابلمه داراي يکسري صفات است که مخصوص قابلمه است که ما به هر يک از اين صفات صفت خاصه ميگوييم . هر صفت خاصه اين قابلمه داراي يک مقدار است . مثلا اگر رنگ قابلمه را به عنوان يکي از صفات خاصه آن در نظر بگيريم قطعا اين صفت خاصه مقداري دارد که ما فرض ميکنيم نارنجي است . خوب نارنجي هم شد داده ما . حالا اگر ما در يک پردازش يا در حل يک مساله از نارنجي استفاده کنيم نارنجي از داده به اطلاع تبديل ميشود . اميدوارم ديگه همه اين مفاهيم را فهميده باشند .
    پس در حالت کلي موجوديت هر شي يا عين قابل تميز است که ما ميخواهيم داده هاي آن را در بانک بريزيم و در صورت نياز از آن اطلاعات داشته باشيم /. اگر ما مجموعه اي از موجوديت ها را در نظر بگيريم به ان مجوعه محيط عملياتي ميگويند . فرضا اگر موجوديت ما دانشجو باشد محيط عملياتي ما ميشود دانشگاه . محيط عملياتي بر اساس نوع برنامه اي که قرار است درست کنيم تغيير ميکند . اگر بخواهيم برنامه کتابخانه بنويسيم موجوديت ما کتاب است و محيط عملياتي ما نيز کتابخانه . اگر بخواهيم برنامه اي براي انتخاب واحد دانشجويان بنويسيم موجوديت ما ميشود دانشجو و محيط عملياتي ما نيز دانشگاه ميباشد .
    محيط عملياتي هر چيزي که باشد موجوديتهاي آن با هم ارتباطاطي دارند . به عنوان مثال بين دانشجو و درس ارتباطاطي وجود دارد که دانستن اين ارتباطات در طراحي برنامه نقش حياتي دارند . ارتباط بين موجوديت ها انواع مختلفي دارد که در زير ذکر خواهم کرد :
    • ارتباط يک به يک
    • ارتباط يک به چند
    • ارتباط چند به يک
    • ارتباط چند به چند

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

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

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

    پیش فرض

    Api هاي ويندوز


    امروز قصد دارم در مورد API هاي ويندوز و چگونگي استفاده از آنها در ويژوال بيسيک بطور خلاصه توضيح دهم و همچنين دو مثال پراستفاده را نيز در اين زمينه بيان کنم که عبارتند از چگونگي پخش فايلهاي Wav و ساخت يک تايمر با دقت بالا :

    ۱ - آشنايي با Windows API : واژه API مخفف Application Programming Interface مي باشد . API هاي ويندوز مجموعه اي از توابع از پيش آماده موجود در سيستم عامل هستند که شما مي توانيد آنها را در برنامه هاي خود فراخواني کنيد . اين توابع در چندين کتابخانه DLL ويندوز ذخيره شده اند . براي دسترسي به اين توابع در ويژوال بيسيک ابتدا بايد آنها را برنامه خود declare کنيد . براي مثال :

    Declare Function sndPlaySound Lib "winmm.dll" Alias "sndPlaySoundA" (ByVal lpszSoundName As String, ByVal uFlags As Long) As Long


    همانطور که مي بينيد مثال فوق يک Declare از تابع sndPlaySound مي باشد که اين تابع در کتابخانه Winmm.dll موجود است . کلمه Alias نشان مي دهد که اين تابع نام ديگري در dll دارد . ساير بخشها مربوط به تعريف پارامترهاي تابع مي باشند که در مورد مثال فوق ، اين تابع دو پارامتر ورودي و يک خروجي از نوع Long دارد .
    پس از Delare کردن API در برنامه مي توانيد از آن استفاده نمائيد .

    ۲ - پخش فايلهاي Wav : تابعي که براي پخش فايلهاي Wav استفاده مي شود تابع sndPlaySound است که در بالا با آن آشنا شديد . پارامتر lpzSoundName نام و مسير فايل Wavو پارامتر uFlags چگونگي پخش فايل را مشخص مي کند . مقادير ممکن اين پارامتر عبارتند از :
    - SND_ASYNC : اجازه مي دهد طوري فايل Wav پخش شود که آنرا بتوان وقفه داد . بعبارت ديگر قادر خواهيد بود فايل Wav تان را هر زمان که بخواهيد پخش کنيد و مطمئن باشيد که حتماً شنيده مي شود .
    - SND_LOOP : فايل Wav را بطور ممتد پخش مي کند .
    - SND_NODEFAULT : اگر فايل Wav پيدا نشود صداي ديگري پخش نخواهد شد ( مثلاً برخي صداهاي default ويندوز )
    - SND_SYNC : در طول پخش فايل Wav کنترل به برنامه داده نمي شود . اين پارامتر در زمانيکه مي خواهيد فايل Wav اي را در پس زمينه برنامه تان پخش کنيد مناسب نمي باشد .
    - SND_NOSTOP : اگر فايل Wav اي قبلاً در حال پخش باشد ، فايل Wav شما آنرا دچار وقفه نمي کند . از اين پارامتر زماني استفاده مي شود که بخواهيم فايل Wav مان هيچوقت در وسط کار قطع نشود .
    اگر بخواهيد از بيش از يکي از اين پارامترها استفاده کنيد توسط Or آنها را ترکيب نمائيد مثال :

    sndPlaySound App.path & "\ding.wav", SND_ASYNC or SND_LOOP



    نکته : براي استفاده از توابع صوتي پيچيده تر بايستي از DirectSound که يکي از اجزاي DirectX مي باشد استفاده کنيد . در مورد DirectSound بعداً صحبت خواهم کرد .

    ۳ - ساخت يک تايمر با دقت بالا : شايد تا بحال از کنترل تايمر موجود در نوار ابزار ويژوال بيسيک استفاده کرده باشيد . اين تايمر داراي دقت حدود ۵۵ ميلي ثانيه است . براي دستيابي به زمانهاي با دقت بالاتر اين کنترل مفيد نخواهد بود .
    تابع GetTickCount يک API موجود در کتابخانه Kernel32.dll است . اين تابع طول زماني را که سيستم شروع به کار کرده است را برحسب ميلي ثانيه برمي گرداند :

    Private Declare Function GetTickCount Lib "kernel32" () As Long

    براي بررسي طي شدن يک مدت زماني خاص شما ابتدا بايد مقدار اين تابع را در يک متغير کمکي مثل TempTime قرار دهيد سپس در يک حلقه Do-Loop بايد اختلاف زمان GetTickCount جديد و زمان TempTime را با مقدار زماني که مي خواهيد سپري شود مقايسه کنيد :

    TempTime = GetTickCount()x
    Do While DesiredTime < GetTickCount() - TempTime
    Do some things'
    Loop


    توسط کد بالا مي توان يک عمليات خاص را براي يک مدت زماني مشخص اجرا کرد .
    کد زير نشان مي دهد که چگونه مي توان دستورات خاصي را در فواصل زماني خاص اجرار کرد :

    ExitFunction = False
    TempTime = GetTickCount()x
    Do While not(ExitFunction)x
    If DesiredTime < GetTickCount() - TempTime then
    Reset the temporary variable'
    TempTime = GetTickCount()x
    Do some things'
    End If
    Loop


    همچنين از تابع GetTickCount مي توان براي benchmark برنامه ها استفاده کرد . بعبارت ديگر مي توان زمان اجراي يکسري دستورات خاص را بدست آورد .

  10. #30
    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 ) و نشان دهنده انتهاي ساختار داده است .

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

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

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