آموزش q-basic

Qbasic - کیوبیسیک


BASIC مخفف کلمات ( Beginner'S All – Purpose Symbolic Instruction Code به معنی کد حاوی دستورات نمادین همه منظوره مخصوص نوآموزان ) میباشد . این زبان درکالج Dartmouth بین سالهای 1963 و 1964 توسط پروقسور John Kemeny و Thomas Kurts به عنوان یک زبان آموزشی ایجادگشت .علت اصلی ایجاد این زبان را می توان در پیچیدگی های زبان های متداول از قبیل Fortran و Assembly وغیره جستجو کرد .
QBASIC مفسر بیسیکی است که به همراه سیستم عامل MS-DOS نگارش 5 و بالاتر ارائه گردید. شرکت مایکروسافت تولید کننده QBASIC ، با تکمیل این محصول ، نگارش های دیگری از بیسیک را روانه بازار کرده است که نمونه دیگری از آنها Quick Basic می باشد .
Quick Basic : نرم افزاری است که فایل های بیسیک را به فایل های قابل اجرا در محیط سیستم عامل تبدیل می کند .
دستورات QBASIC :
CLS : این دستور زمانی بکار می رود که نیاز باشد صفحه نمایش پاک گردد . معمولا در ابتدای هر برنامه نوشته می شود .

LET : برای انجام کارهای جایگزینی و محاسباتی

MOD : باقیمانده تقسیم بصورت 10 mod 2 جواب صفر است

\ ( Back Slash ) علامت کسر وارونه : تقسیم جزء صحیح بصورت 10 \ 3 که جواب 3 می شود

INPUT : برای ورودی ( متغییر عددی مانند x , a , b ,n , m ,Max , Min , Sum, و ... . متغییر نشانه ای( جلوی متغییر عددی علامت $ اضافه می شود مانند a$ , b$ , Name$ , City$ )

GOTO n:برو به خط n در اول خطی که قرار است دستور از آنجا اجرا شود عدد دلخواه n را مینویسیم

PRINT : دستور خروجی برای به نمایش در آوردن نتیجه برنامه ( همانند متغییر عددی با این تفاوت که در جلوی متغییر علامت $ باشد ).


برنامه مساحت مستطیل
کد:
Cls
Input a , b
Let S= a * b
Print S
End
برنامه تبدیل Ngr (وزن یک جسم ) به Kg و Gr
کد:
Cls
Input Ngr
Let Kg = Ngr \ 1000
Let Gr = Ngr Mod 1000
Print Kg , Gr
End
برنامه مجموع ارقام عدد طبیعی دو رقمی N
کد:
Cls
Input N
Let D2 = N \ 10
Let D1 = N Mod 10
Let SD = D1 + D2
Print SD
End
برنامه چاپ نام ورودی
کد:
Cls
Input Name$
Print Name$
End


IF ● در بیسیک چند نوع دستور شرطی از نوع IF داریم :

شرط : یک عبارت منطقی است که ارزش آن یا درست یا نادرست باشد . اگر شرط برقرار باشد ( یعنی ارزش عبارت منطقی بعد از IF درست باشد ) ؛ دستور(ات) بعد از Then اجرا می شود والا دستور بعد از خط Then … Then … اجرا می شود .
عبارات منطقی : در دستور شرطی بعد از کلمه IF یک عبارت منطقی است .که دارای دو ارزش درست یا نادرست است . عبارات منطقی دو گونه است 1- رابط های منطقی ( AND - OR - NOT ) 2- عملگرهای رابطه ای ( = , , = , )

IF … Then … ( در یک خط ): صورت کلی آن دستور(ات ) Then شرط IF
برنامه Max بین دو عدد
کد:
Cls
Input a , b
Let Max = a
If b > Max Then Let max = b
Print Max
End

IF بلوکی ( بیش از یک خط ) : صورت کلی آن Then شرط IF
دستور (1)
دستور (2)
... .... ...
دستور (...)
END IF
برنامه چاپ زوج ( EVEN ) یا فرد ( ODD ) ؛ عدد ورودی N
کد:
Cls
Input N
If N / 2 = Int ( N / 2 ) Then 
Print N ; “ Is EVEN “
End
End IF
Print N ; “ Is ODD “
End

IF … Then … ELSE ( یک خط و بیش از یک خط ) در صورتی که شرط برقرار باشد دستور(ات) بعد از Then اجرا می شود . والا دستور(ات) بعد از Else اجرا خواهد شد . اگر نتوان دستور فوق را دریک خط نوشت ؛ باید از IF بلوکی استفاده کرد.

دستور(ات) Else دستور(ات) Then شرط IF

Then شرط IF
دستور (1)
دستور (2)
... .... ...
دستور (...)
ELSE
دستور (1)
دستور (2)
... .... ...
دستور (...)
END IF
در یک موسسه ؛ مالیات حقوق کارمندان را به قرار زیر محاسبه می شود .
الف : تا 50000 ریال معاف از مالیات
ب : از 50001 تا 70000 ریال چهار درصد مازاد 50000
ج : از 70001 به بالا ده درصد
کد:
Cls
Input W
If W 

● فرایندهای تکراری ( حلقه تکرار )

اجرای تعدادی دستور به دفعات معین ؛ یا تا برقراری شرایطی جهت رسیدن به جواب مسئله است . دستوراتی که به دفعات تکرار می شود ؛ یک حلقه تکرار راتشکیل می دهند .
FOR - NEXT : در صورتی استفاده می شود که دفعات تکرار معین و یا بتوان فرایند تکرار را با متغییری کنترل کرد .

چاپ اعدا متوالی تا 20
کد:
Cls
For I=1 To 20
Print I ;
Next I
End
STEP : در حلقه For - Next قدمهای تکرار یکی ؛ یکی رو به جلو تعریف شده در بقیه حالت ها چه مثبت چه منفی باید در مقابل For - To Step معلوم گردد .
چاپ نزولی از 20 تا 1
کد:
Cls
For I = 20 to 1 Step - 1
Print I
Next I
End
با توجه به دانسته های بالا برای مسئله های داده شده در بخش الگوریتم برنامه بنویسید . در صورتیکه نرم افزار QBASIC را در کامپیوترتان ندارید در بخش نظزات وبلاگ آدرس E-Mail خودتان ار بنویسید تا برایتان نرم افزار را ارسال کنم . هرچند این نرم افزار برای محیط DOS تعریف شده اما بدون هیچگونه مشکلی در محیط ویندوز XP کار می کند . جهت اطلاع می گویم برای مشاهده تمام صفحه محیط QBASIC از کلید ترکیبی Alt + Enter استفاده کنید . برای برگشت هم از همان کلید ترکیبی استفاده کنید .
چند نمونه برنامه
برنامه چاپ زوج یا فرد بودن عدد ورودی
کد:
Cls
Input N
Let r = N Mod 2
If r = 0 Then Print N ; " is Even " Else Print N ; " is Odd "
End

برنامه تبدیل ثانیه به ساعت ؛ دقیقه و ثانیه
کد:
Cls 
Input S
Let H = S \ 3600
Let S = S Mod 3600
Let M = S \ 60
Let Se = S Mod 60
Print H , M , Se
End

چاپ مقسوم علیه های عدد 12
کد:
Cls 
Let I = 1
8 Let r = 12 Mod I
If r = 0 Then Print I
Let I = I + 1
If I 
چاپ مقسوم علیه های عدد 12 بکمک دستور For – Next
کد:
Cls
For I = 1 To 12
R = 12 Mod I
If r = 0 Then Print I
Next I
End

چاپ تعداد مقسوم علیه های عدد 12
کد:
Cls
Let K = 0
For I = 1 To 12
R = 12 Mod I
If r = 0 Then Let K = K = 1
Next I
Print K
End
چاپ مجموع مقسوم علیه های عدد 12
کد:
Cls
Let S = 0
For I = 1 To 12
R = 12 Mod I
R = 0 Then Let S = S + I
Next I
Print S
End
چاپ مقسوم علیه های عدد ورودی
کد:
Cls
Input N
For I = 1 To N
R = N Mod I
If r = 0 Then Print I
Next I
End

چاپ عدد ورودی به شرط اول بودن عدد ( به کمک تعداد مقسوم علیه )
کد:
Cls 
Let K = 0
Input N
For I = 1 To N
R = N Mod I
If r = 0 Then Let K = K + 1
Next I
If K = 2 Then Print N ; " is Aval "
End
چاپ عدد ورودی به شرط اول بودن عدد ( به کمک مجموع مقسوم علیه )
کد:
Cls
Let S =0
Input N
For I = 1 To N 
R = N Mod I
If r = 0 Then Let S = S + I
Next I
If S = N + 1 Then Print N ; " is Aval "
End
چاپ عدد ورودی به شرط تام بودن عدد
کد:
Cls
Let S = 0
Input N
For I = 1 To N/2
R = N Mod I
If r = 0 Then S = S + I
Next I
If S = N Then Print N ; " is TAM "
End
چاپ عددهای زوج بین دو عدد ورودی به شرط اینکه عدد اول از دوم کوچکتر باشد( معلوم نیست عدد اول زوج باشد )
کد:
Cls 
Input m , n
Let r = m Mod 2
If r > 0 Then Let m = m + 1
7 Print m
Let m = m + 2
If m 
کد:
Cls
Input N
Let r = N Mod 7
For I = 0 To 5
If r = I Then Print I ; " Shanbe" : End
Next I
Print " Joomae "
End
چاپ تعداد ارقام عدد ورودی
کد:
Cls
Let K = 0
Input N
3 Let M = N \ 10
If M > 0 Then Let K = K + 1
Let N = M
If N > 0 Then Goto 3
Print K
End
چاپ مجموع ارقام عدد ورودی
کد:
Cls
Let S = 0
Input N
3 Let R = N Mod 10
Let M = N \ 10
If M > 0 Then Let S = S + r
Let N = M
If N > 0 Then Goto 3
Print S
End
تولید عددهای فرد دو رقمی
کد:
Cls
For I = 1 To 9 Step 2
For K = 1 To 9 Step 2
Sum = I * 10 + K
Prin Sum
Next k
Next I
End
تعداد دفعات ممکن خرد کردن اسکناس 2000 ریالی بکمک سکه های 50 ؛ 100 و 250 ریالی به شرط اینکه از هر سکه حداقل یکی باشد .
کد:
Cls 
K = 0
For P = 1 To 33
For S = 1 To 17
For D = 1 To 7
Let sum = P * 50 + S * 100 + d * 250
If Sum = 2000 Then k = k + 1
Next D
Next S
Next P
Print K
End
● دستور DATA , READ , RESTORE

گاهی اوقات بهتراست به جای گرفتن یکی،یکی داده ها از طریق صفحه کلید ؛ آنها را در دستوری معرفی کنیم.
حتما کار خسته کننده وارد کردن یکی،یکی اعداد در بعضی از برنامه ها کلافه تان کرده بخصوص هنگامی که گرفتن اعداد زیاد باشد . برای این منظور و همچنین پنهان کردن مطالبی از دید کاربر ؛ می توان داده ها را در دستور DATA قرار داده سپس به کمک دستور READ آنها را یکی،یکی در موارد مورد لزوم فرا خواند.(دستور RESTORE برای برگشت به اولین داده است ویابهتر بگیم این دستور ؛دستور READ را مجبور می کند که داده ها را از اول شروع به خواندن کند.)
مثال : چاپ مجموع 5 عدد ورودی
روش حل متداول
کد:
CLS
SUM = 0
FOR I=1 TO 5
INPUT a
SUM = SUM + a
NEXT I
PRINT SUM
END
حل به کمک دستور DATA , READ

کد:
CLS
SUM = 0
DATA 210 , 20 , 70 , 50 , 150
FOR I=1 TO 5
READ a
SUM = SUM + a
NEXT I
PRINT SUM
END
برنامه بالا را به این شکل تغییر میدهیم علاوه بر چاپ مجموع اعداد ( 8 عدد ) ؛ تعدا عددهای بزرگتر از میانگین را هم بنویسد . ( NGMax تعداد عددهای بزرگتر ازمیانگین ؛ میانگین 100 خواهد شد )
کد:
CLS
SUM = 0
Aver = 0
NGMax = 0
DATA 210 , 20 , 70 , 50
FOR I=1 TO 8
READ a
SUM = SUM + a
NEXT I
PRINT SUM
Aver = SUM / 8
RESTORE
FOR I=1 TO 8
READ a
IF a > Aver THEN NGMax = NGMax + 1
NEXT I
DATA 150 , 105 , 80 , 115
PRINT Aver
PRINT NGMax
END
نکته : همانطور که در مثال بالا مشاهده کردید . داده ها می تواند در یک و یا چند خط نوشته شود و همچنین محل آن می تواند در هرکجای برنامه باشد ؛ اما موقع خواند اولویت با داده های از بالا به پائین برنامه است .
نکته : در برنامه بالا اجرای برنامه وقتی به خط RESTORE می رسد دستور READ را وادار می کند داده ها را از اول بخواند .
برنامه ای بنویسید که عدد طبیعی بین 1 و 7 را بگیرد وبا فرض اینکه این عدد شماره روزی از هفته باشد ، نام روز را به لاتین چاپ کند ( چند شنبه است )
کد:
CLS
DATA Satur , Sun , Mon , Tues 
DATA Wednes , Thurs , Fri
INPUT n
FOR I = 1 TO n
READ a$
NEXT I
PRINT a$ + “Day “
END
● تابع RND
RND از کلمه Random به معنی تصادفی گرفته شده . این تابع در بیسیک بدون متغییر است؛یک عدد تصادفی بزرگتر از صفر و کوچکتر از یک تولید می کند.هر بار که این تابع به کار رود کامپیوتر یک عدد تصادفی بین صفر ویک تولیدمی کند. با این تابع کارهای علمی و تفریحی زیادی می توان انجام داد . برنامه زیر را اجرا کنید
کد:
CLS
FOR I = 1 TO 5
PRINT RND
NEXT I
END
وقتی این برنامه را چند بار متوالی اجرا کردید متعجب شدید اینکه 5 عدد تصادفی در تمام اجراها کاملا شبیه هم است ؛ اینکه نمی شود .
نکته : در هر بار اجرای دستور RND زمان صفر در نظر گرفته می شود . برای بر طرف کردن این مشکل ما می توانیم دستور RANDOMIZE TIMER را در ابتدای برنامه بنویسیم .



کد:
CLS
RANDOMIZE TIMER
FOR I=1 TO 5
PRINT RND
NEXT I
END
حالا درست شد . چه اتفاقی افتاد ؛ با اضافه کردن دستور فوق به برنامه گفتیم به ساعت کامپیوتر نگاه کن . چون در هر لحظه ساعت کامپیوتر با لحظه قبل فرق دارد. (حتی چند میلیونیم ثانیه )
نکته : چطور می توان عدد صحیح تولید کرد .
بین 0 تا 9 اصلاح خط چاپ 10* PRINT INT( RND ) کار تابع INT(x) حذف اعشار است (جزء صحیح ).
بین 1 تا 10 1 + 10 * PRINT INT( RND )
بین 0 تا 99 100 * PRINT INT( RND )
فرض کنید N عددی طبیعی باشد INT( N * RND ) + 1 یک عدد طبیعی بین 1 و N است .
مثال جالب
کد:
CLS
FOR I=1 TO 9
A= INT( RND * ( I + 1 ))
B= INT( RND * ( I + 1 ))
C= A * B
PRINT A ; “ * “ ; B ; “ = “
INPUT D
IF D = C THEN
PRINT “ GOOD “
CLSE PRINT “ WRONG “
END IF
NEXT I
END

● دستور WHILE - WEND
هرگاه لازم باشد مجموعه ای از دستورات بیسیک تا برقراری شرط یا شرایطی اجرا شوند می توان از دستور WHILE – WEND استفاده کرد . صورت کلی دستور :
شرطWHILE
-----------
-----------
دستورات بیسیک
-----------
WEND
مثال : برنامه چاپ اعداد زوج طبیعی کوچکتر از 20
کد:
CLS
I = 2
WHILE I 
برنامه ای بنویسید که عدد طبیعی N را بگیرد و مجموع ارقام عدد ورودی را محاسبه و چاپ کند .( رقم = DIGIT )
کد:
CLS
SD = 0
INPUT n
WHILE n > 0
M = INT( N / 10 )
DIGIT = n – 10 * M
SD = SD + DIGIT
N = M
WEND
PRINT SD
END
نکته : اجرای دستورات بین WHILE و WEND مادامی که شرط بعد از WHILE بر قرار ( درست ) باشد ادامه د ارد .
برنامه ای بنویسید که دو عدد طبیعی M و N را گرفته و بزرگترین مقسوم علیه مشترک آنها را تعیین و چاپ کند .( بزرگترین مقسوم علیه مشترک = GCD ) . اعداد 27 و 15 دارای GCD=3 و اعداد 28 و 10 دارای GCD=2 است.

کد:
CLS
INPUT n , m 
WHILE m > 0
R = n – m * INT( n / m )
n = m
m = R
WEND
PRINT “ GCD = “ ; n
END
● دستور SELECT CASE

دستور IF یک دستور شرطی بود که بررسی شد . یکی دیگر از دستورات شرطی ، SELECT CASE است.
شکل کلی :
عبلرت SELECT CASE
عبارت CASE 1
مجموعه دستورات 1
عبارت CASE 2
مجموعه دستورات 2
..........................
..........................
عبارت CASE (n)
مجموعه دستورات (n)
CASE ELSE
مجموعه دستورات
END SELECT
توضیح : ابتدا عبارت مقابل SELECT CASE ارزیابی می شود و عبارت مقابل اولین CASE 1 را بررسی می کند در صورتی که عبارت آن ، شرایط مقابل SELECT CASE را داشته باشد ؛ دستورات آن CASE را اجرا خواهد کرد . اگر عبارت مقابل CASE 1 آن را نداشته باشد به ترتیب به CASE های بعدی نگاه می کند درصورت برقراری شرط ؛ دستورات آن CASE اجرا سپس کنترل اجرا به دستور بعد از END SELECT منتقل می گردد. درصورتی که عبارتی برابر شرط پیدا نشد ؛ دستورات بعد از CASE ELSE اجرا خواهد شد .
نکته : تفاوت SELECT CASE با IF دراین استه که در SELECT CASE فقط یک عبارت مورد ارزیابی قرار می گیرد ؛ اما در IF چندین شرط مورد ارزیابی قرار می گیرد .

مثال :
کد:
CLS
INPUT " From 1 to 6 : ", num
SELECT CASE num
CASE 1
PRINT " Black "
CASE 2
PRINT " Red "
CASE 3
PRINT " Green "
CASE 4
PRINT " Blue "
CASE 5
PRINT " Orange "
CASE 6
PRINT " Brown "
CASE ELSE
PRINT " Invalid Number ! "
END SELECT
END
عبارت مقابل CASE دارای حالت های زیر است
a) شامل یک یا چند مقدار که با ویرگول از هم جدا می شوند .
ثابت عددی یا رشته ای : "Davood" یا 2.5
متغییر عددی یا رشته ای I یا Name$
b) یک محدوده به شکل X to Y که در آن X,Y ثابت ، متغییر یا عبارت مباشند
c) عملگرهای رابطه ای که پیش از آن IS و پس از آن یک ثابت ، متغییر یا عبارت باشد .

برنامه ای بنویسید که یک عدد را از کاربر دریافت کرده و منفی یا مثبت بودن آن بررسی می نماید . شرط خروج وارد کردن عدد صفر است .

کد:
CLS
PRINt " Type 0 To EXIT "
BEGIN :
INPUT num
SELECT CASE num
CASE IS = 0
PRINT " Program ha Finished "
CASE IS 
برنامه ای بنویسید که بتواند نمره دانش آموز را از ورودی دریافت کرده ؛ سپس با توجه نمره پیام مناسب را نمایش دهد .
0 --- 9 è Very Bad
10 --- 14 è Not Bad
15 --- 17 è Good
18 --- 20 è Very Good
شرط خروج ورود عدد -1 است .
کد:
CLS
PRINT " Type -1 to EXIT "
BEGIN
INPUT " 0 - 20 " ,num
SELECT num
CASE 0 to 9
PRINT " Very Bad "
GOTO BEGIN
CASE 10 to 14
PRINT " Not Bad "
GOTO BEGIN
CASE 15 to 17
PRINT " Good "
GOTO BEGIN
CASE 18 to 20
PRINT " Very Good "
GOTO BEGIN
CASE IS = -1
PRINT " Program has Finished "
END SELECT 
END
● دستور DO --- LOOP

نوعی حلقه تکرار در برنامه نویسی معمولا به دو روش زیر استفاده می شود .
a)
شرط UTIL یا DO WHILE

بلوک حلقه .. دستور العمل های حلقه
LOOP
b)
DO
بلوک حلقه .. دستور العمل های حلقه
شرط UNTIL یا LOOP WHILE
فرق دو روش ؛ در روش اول ابتدا شرط بررسی می شود و بعد دستورالعمل ها اجرا می گردد . در روش دوم شرط در انتهای حلقه کنترل می شود به زبان ساده دستورالعمل ها حداقل یک بار اجرا خواهد شد .
فرق عبارت WHILE , UNTIL این است ؛ در WHILE دستورات بلوک حلقه با درستی شرط اجرا می گردد. بعد از عدم برقراری اجرای برنامه به دستور بعد از LOOP منتقل می شود . اما UNTIL برعکس عمل می کند یعنی تا زمانی که شرط نادرست است دستورات بدنه حلقه اجرا و درستی شرط باعث انتقال اجرای برنامه به بعد از دستور LOOP می گردد .
نکته : به کار بردن عبارت WHILE , UNTIL به همراه شرط در DO --- LOOP اختیاری است.
برنامه ای بنویسید اعدادی که مجذور آن ها کوچک تر یا مساوی 25 است را به همراه مجذورشان نمایش داده شود .

کد:
CLS 
Num = 1
DO WHILE Square 
توابع :
ریاضی
تابع ABS( … ) مقدار قدر مطلق عدد یا عبارت داخل پرانتز را باز می گرداند.
تابع SQR( … ) محاسبه ریشه دوم ععد یا عبارت داخل پرانتز
تابع INT( … ) جزء صحیح عدد یا عبارت داخل پرانتز.
تابع LOG( … ) محاسبه لگاریتم طبیعی عدد یا عبارت عددی داخل ...

مثلثاتی
تابع SIN( … ) مقدار سینوس یک زاویه را باز می گرداند . عدد داخل پرانتز برحسب رادیان است
تابع COS( … ) مقدار کسینوس یک زاویه را باز می گرداند . عدد داخل پرانتز برحسب رادیان است
تابع TAN( … ) مقدار تانژانت یک زاویه را باز می گرداند . عدد داخل پرانتز برحسب رادیان است
تابع ATN( … ) مقدار آرک تانژانت نسبت دو ضلع مثلث قائم الزاویه را برمی گرداند

رشته ای
تابع LEN( x$ ) طول یک رشته را مشخص کرده و باز می گرداند.
تابع LEFT$( x$ , n ) از سمت چپ یک عبارت رشته ای یا متغیر رشته ای . تعداد معینی(n) کاراکتر را جدا کرده و به صورت رشته باز می گرداند .
تابع RIGHT$( x$ , n ) از سمت راست یک عبارت رشته ای یا متغیر رشته ای . تعداد معینی(n) کاراکتر را جدا کرده و به صورت رشته باز می گرداند .
تابع MID$( x$ , m , n ) از درون یک عبارت رشته ای یا متغیر رشته ای ؛ تعداد معینی (n) از کاراکتر(m) جدا کرده و به صورت رشته باز می گرداند.
تابع STR$( n ) یک عدد یا متغیر عددی را به صورت رشته باز می گرداند .
تابع INPUT$ دریافت ورودی رشته ای
تابع RND تولید عدد تصادفی بین صفر و یک
تابع RANDOMIZE همراه تابع RND جهت تولید سری های مختلف اعداد تصادفی بین صفر و یک به کار می رود .

● آرایه :

مجموعه ای از متغییر های هم نوع است که با یک نام در حافظه نگهداری می شود . هرمتغیر درون آرایه با یک اندیس قابل دسترسی می باشد که این اندیس مکانی از آرایه را که آن متغیر اشغال کرده است مشخص می نماید . متغیرهای مجزا از هم نیز عناصر آرایه نامیده می شوند .
آرایه ها می توانند داری یک یا چند بعد باشند. آرایه های یک بعدی برای نگهداری لیستی از مقادیر مورد استفاده قرار می گیرند. عناصر درون آرایه یک بعدی با دنباله ای از اعداد صحیح یا عبارت صحیح اندیس گذاری می شوند.
آرایه یک بعدی ID(0) , ID(1) , ID(2) , ID(3) , ID(4) این آرایه یک جدول با یک سطر(ID) و پنج ستون(0 – 4)است
نکته : کلیه عناصر یک آرایه باید از یک نوع داده باشند . یک خانه آرایه نمی تواند از نوع عددی صحیح و خانه دیگر از نوع رشته ای باشند .
کاربرد آرایه ها :
فرض کنید می خواهیم ده عدد را به طور صعودی مرتب کنیم . برای ذخیره سازی این اعداد باید ده متغیر به نام های num1 , … , num10 تعریف نمائیم .نوشتن برنامه ای که بتواند این ده متغیر را مرتب کند مشکل است . درچنین مواردی ، زبان های برنامه نویسی راه حل ساده ای به نام آرایه در اختیار ما قرار می دهند . به کمک آرایه ها می توان ده عدد را در متغیری به نام num از نوع آرایه ای با یک سطر (num) و ده ستون (0 , … , 9) ذخیره کرد.




● دستور DIM
با استفاده از این دستور می توان یک آرایه تعریف کرد شکل کلی آن :
نوع داده AS (دامنه یا تعداد عناصر) نام متغیر آرایه DIM
نام متغیر آرایه : همان نام اشتراکی است که توسط آن می توانید به عناصر آرایه دسترسی پیداکنید .
دامنه یا تعداد عناصر : حداکثر خانه های لازم (حد اکثر یک آرایه) جهت ذخیره سازی مقادیر را در آرایه تعیین می کند. تعداد می تواند بصورت عدد یا دامنه ای به شکل حد پائین به سمت حد بالا باشد.
نوع داه : نوع آرایه را مشخص می کند و می تواند INTEGER =% صحیح LONG =& , صحیح بلند SINGLE =! , اعشاری با دقت معمولی DOUBLE =# , اعشاری با دقت مضاعف STRING =$ , رشته ای باشد .
DIM B(20) آرایه B از نوع اعشاری معمولی با 21 عنصر ( از صفر تا 20 )
DIM N(5 To 45) آرایه N اعشاری معمولی با 41 عنصر
DIM A%(10) آرایه A از نوع عددی صحیح با 11 ( از صفر تا 10) عنصر
DIM C$(5) آرایه C از نوع رشته ای با 6 عنصر
DIM num(1 To 5) AS SINGLE آرایه num اعشاری معمولی دارای 5 عنصر
DIM N(10 , 10) آرایه دو بعدی با نام N اعشاری معمولی دارای 11 سطر ( صفر تا 10) و 11 ستون (از صفر تا 10) .

دستور OPTION BASE برای تعریف کوچکترین اندیس آرایه برای شروع به شکل OPTION BASE m
M عدد شروع که می تواند صفر یا 1 باشد .

کد:
CLS
OPTION BASE 1
DIM x(4) 
DIM name$(3)
X(1) = 10 : x(2) = 20 : x(3) = -70 : x(4) = 12.35
Name$(1) = " Ali" : name$(2) = " Hamid " : name$(3) = " Davood "
در مثال بالا ابتدا آرایه های X و name$ تعریف شده سپس عناصر آنها مقدار دهی شده اند مثلا دستور X(2) = 20 باعث می شود عدد 20 در خانه دوم آرایه X ذخیره گردد.

استفاده از دستور INPUT
برنامه ای بنویسید که بتواند 10 نمره یک دانشجو را از ورودی دریافت نمده سپس آنها را درون آرایه ه ای به نام SCORE قرار دهد.
کد:
CLS
OPTION BASE 1
DIM score(10)
For k = 1 To 10
INPUT score(k)
NEXT K
END
استفاده از دستور DATA READ
برنامه ای بنویسید که بتواند بکمک دستور DATA … READ 5 نمره یک دانشجو را درون آرایه score قرار داهد .
کد:
CLS
OPTION BASE 1
DATA 7 , 17 , 15 , 18 , 3
DIM score(5)
For I = 1 To 5
Read score(I)
NEXT I
End
در برنامه اگر I=2 باشد READ score(2) باعث می شود داده دوم دستور DATA یعنی عدد17 در خانه دوم score ذخیره می شود .
برنامه ای بنویسید که 10 نمره یک دانش آموز را از ورودی دریافت کرده و مجموع و میانگین نمرات آن ها را محاسبه و چاپ کند .

کد:
CLS
DIM score( 1 To 10 ) AS INTEGER
For I = 1 To 10
PRINT " score("; I ; ") = ";
INPUT "" , score(I)
NEXT I
Sum = 0
For I = 1 To 10
Sum = sum + score(I)
NEXT I
AVERAGE = sum / 10
PRINT " sum = " ; sum
PRINT " AVERAGE = " ; average !
END
● مرتب کردن عناصر آرایه ها:

مرتب سازی از مهم ترین الگوهای برنامه نویسی است که به کمک آرایه ها انجام می گیرد . مرتب سازی می تواند به صورت صعودی ( از کوچک به بزرگ ) یا نزولی ( از بزرگ به کوچک ). الگوی مرتب سازی هم روی اعدا و هم روی حروف صورت می گیرد .
برنامه ای بنویسید که بتواند 5 عدد را از ورودی دریافت کرده سپس با استفاده از الگوریتم مرتب سازی آن ها را به صورت صعودی مرتب کرده نمایش دهد .
کد:
CLS
OPTION BASE 1
DIM array(5) AS SINGLE
FOR I = 1 To 5
PRINT I ; 
INPUT array( I )
NEXT I
FOR I = 1 To 4
FOR J = 1 To 5 –I
IF ( array( J ) > Arraay( J + 1 )) THEN 
SWAP array( J ) , array( J +1 ) 
END IF
NEXT J
NEXT I
FOR I = 1 To 5
PRINT array( I )
Next I
● دستور SWAP

برای جابجائی مقدار دو متغیر با هم دستور SWAP رابه شکل متغیر 2 . متغیر 1 SWAP استفاده می کنیم .
حال اگر در مثال بالا در شرط به جای علامت بزرگتر (> ) در عمل مقایسه از علامت (برنامه ای بنویسید که 5 نام را از ورودی دریافت کرده درون یک آرایه ذخیره کند . آن گاه با دریافت یک نام از ورودی مشخص کند که نام ورودی در آرایه موجود است یا خیر ؟
کد:
CLS
DIM name$(5)
For I = 1 To 5
INPUT name$(I)
NEXT I
FOR I = 1 To 4
SORTED$ = “ Yes “
FOR J = 1 To 5 – I
IF name$(J) > name$(j – 1)) THEN
SWAP name$(J) , name$(J +1)
SORTED$ = “ No “
END IF
NEXT J
IF SORTED$ = “ Yes “ THEN
I = 4
END IF
NEXT I
FOR I = 1 To 5
Low = 1
High = 5
WHILE ( Low  name$ ( MIDDLE )) THEN
Low = MIDDLE – 1
ELSEIF (KEY$