در این پست به شما انواع روش های جستجو آموزش داده می شود. سپس طریقه نوشتن برنامه برای این روش ها کاملا شرح داده خواهد شود و در انتها با دادن نمونه تست ها مربوط به این بخش مطلب به پایان خواهد رسید . برای مطالعه این متن به ادامه مطلب مراجعه کنید .
آموزش کامل بیسیک برای کسانی که می خواهند در المپیاد اول بشوند
برای کسانی که می خواهند در کلاس درس نمره خوبی بگیرند
مخصوص رشته های کامپیوتر و سال سوم ریاضی و فیزیک
همچنین کسانی که تازه می خواهند برنامه نویس بشند
و با لا خره برای همه
از این بهتر مطلب نخواهی یافت
ثابت ها :
ثابت ها در طول یک برنامه تغییر نمی کنند و به دو دسته ثابت های عددی و ثابت های نشانه ای تقسیم می شوند .ثابت عددی خو به ثابت عددی صحیح و اعشاری تقسیم می شود .نمونه هایی از
ثابت عددی صحیح : -4 , 0 , +27 , -347 , 19000 , -7496 , -56
ثابت عددی اعشاری : 12.84 , -113.01 , 0.0024 , 0.000012
در صورتی که ثابت اعشاری بسیار بزرگ یا بسیار کوچک باشد ، به صورت توانی نمایش داده می شود مثلا 0.000000012 = 12E-9 , 190000000 = 1.9E+8 , .0001 = .01E-2 عددبعد از E باید صحیح باشد. وظیفه ثابت ها ، دادن مقدار اولیه به متغیرها ویا در حین اجرای برنامه است .
تمرین : درعبارات زیر ثابت های عددی را مشخص کنید و علت ثابت نبودن بقیه را بیان کنید .
.200 , 0.1 , -0.0 , +0 , 1.98$ , 12E3.4 , 1+37 , 1340.E-47 , 1.2E30. , 1492.16E-04 , 9.48m , 17E-38 , E+17
ثابت های نشانه ای : معمولا در متن برنامه به کار می روند و کاربرد انها در گویا نمودن خروجی برنامه است . ثابت نشانه ای باید در داخل یک جفت علامت نقل قول “ “ قرار داده می شود نمونه هایی
“ ALI-REZA” , “ YOU WON” , “TELEPHONE No. 3339152” , “HI, How are you” , “ Try again”
طول ثابت نشانه ای نباید از 255 نشانه بیشتر باشد .
متغیرها :
آنچه که در طول برنامه بتواند تغیر محتوی دهد متغیر نامیده می شود . در هر زبان برنامه نویسی برای متغیر نامی اختیار کرد . بدین وسیله می توان از محتوای آن استفاده کرد یا محتوایش را تغییر داد. تشخیص متغیرهای یک مسئله ، انتخاب نام مناسب برای آن ها و اصولا کار کردن با متغیرها از عوامل مهم برنامه نویسی به زان های طح بالا است .
برای انتخاب نام متغیر نکات زیر را مد نظر گرفت :
الف ) نام متغیر تنها از تعدادی حرف و رقم تشکیل می شود که اولین نشانه از سمت چپ باید حرف باشد ، نشانه بعد از متغیر می تواند یک از علائم زیر باشد .
% برای متغیرهای صحیح کوتاه ( از -32768 تا 32767 )
& برای متغیرها یا ثابت های صحیح بلند ( از -2147483648 تا 2147483647 )
! برای متغیرهای اعشاری معمولی
# برای متغیرهای اعشاری با دقت مضاعف
$ برای متغیرهای نشانه ای ( رشته ای )
اگر از علائم استفاده نشود ، در زبان بیسیک اعشاری معمولی تلقی می شود .
ب ) انتخاب نام مناسب برای یک متغیر در خوانا بودن ، فهمیدن و سهولت مراجعات بعدی بسیار اهمیت دارد . نام متغیر تا حدودی معنای مفهومی آنرا داشته باشد .
ج ) نام متغیر نباید از کلمات کلیدی بیسیک انتخاب ( مثل از دستورات ویا رابط های ریاضی )
مثال : NUMBER , N$ , MAX , AVREGE , SIDE , AREA , SUM , A$ , B20 , A1B2 , M
تمرین : متغیرهای عددی و نشانه ای و آنهایی که نمی توانند نام متغیر باشند را مشخص کنید .
ABCD , ITEM , VARIABLE , NO. , A**2 , DOLLAR , A.B , NAME$ , BLA$
نمادهای عملیاتی :
+ برای عمل جمع زدن
- برای عمل تفریق
/ برای عمل تقسیم
* برای عمل ضرب
^ برای توان رسانی
برای تقسیم با خارج قسمت صحیح
MOD برای تعیین باقی مانده تقسیم
اولویت انجام عملیات :
الف ) کلیه اعمال ریاضی را از چپ به راست انجام می دهیم
ب ) ابتدا داخل پرانتز ها حساب می شوند .
پ ) توان رسانی
ت ) قرینه سازی
ث ) ضرب و تقسیم هم اولویت هستند ( آنکه سمت چپ قرار دارد)
ج ) تقسیم با خارج قسمت صحیح ( )
چ ) باقیمانده تقسیم ( MOD )
ح ) جمع و تنفریق هم ارزش هستند .
تمرین : اولویت عبارات زیر را مشخص کرده معادل ریاضی آنرا نیز بنویسید .
عبارات ریاضی زیر را ابتدا به عبارات زبان بیسیک تبدیل سپس برای هر عبارت اولویت تعیین کنید .
توابع :
اغلب برنامه نویسان از توابع ریاضی استفاده می کنند . این توابع به صورت تعریف شده در نرم افزار زبان بیسیک موجود است( در بخش های قبلی معرفی شده است ). کاربرها می توانند با توجه به خصوصیات آنها از توابع در برنامه خود استفاده نمایند .
مثال :
عدد پی ? را در زبان بیسیک این گونه معرفی می کنند . می دانیم که تانژانت پی چهارم برابر یک است بنابراین آرک تانژانت یک برابر با پی چهارم می شود . بنابراین پی برابراست با 4 * ATN ( 1 )
تمرین : عبارات زیر را به زبان بیسیک بتویسید .
خطوط مثلثاتی x درجه را چگون می توان توسط کامپیوتر حساب کرد ؟ توجه دارید که ? ( پی ) تقریبا 3.141593 است . برای اینکه خطوط مثلثاتی زوایای برحسب درجه را حساب کنید ؛ ابتدا اندازه آن زاویه را به رادیان تبدیل کنید . مثلا /3 ? 60o = یعنی 1.47198 رادیان است .
زیر برنامه
زیر برنامه یا برنامه فرعی ، بخشی مستقل از برنامه اصلی را تشکیل می دهد . هر زیر برنامه مجموعه ای از دستورالعمل هاست که هدف خاصی را دنبال کرده و به دفعات در برنامه اصلی فراخوانده شده و اجرا گردد.به دلیل استقلال زیر برنامه در یک برنامه اصلی می تواند تعدادی زیر برنامه باشد .یکی از ویژگی های زیر برنامه این است که از مقادیر متغیرهای برنامه اصلی می توانند استفاده کنند .
با تقسیم یک برنامه به چند زیر برنامه می توان برنامه اصلی را قابل فهم و خوانتر نمود .
نکته : زیر برنامه بعد از دستور END برنامه اصلی قرار می گیرند .
دستور SUB
با استفاده از این دستور می توان یک برنامه فرعی ایجاد کرد ، شکل کلی زیر برنامه :
( لیست پارامترها ) نام زیر برنامه SUB
محتوای زیر برنامه
END SUB
لیست پارامترها : متغیرهایی هستند که باید از برنامهاصلی به زیر برنامه منتقل شوند .
فرا خوانی یک زیر برنامه : فراخوانی یک زیر برنامه به معنای اجرای زیر برنامه می باشد . دستور CALL این کار را انجام می دهد . شکل کلی دستور ( آرگومان ها ) نام زیر برنامه CALL
آرگومان : به مجموعه متغیرهای مختلف که موقع فراخوانی به زیر برنامه منتقل می شوند ، آرگومان گفته مشود .
نکته : متغیرهای زیر برنامه ، مقادیر خود را فقط در داخل آن زیر برنامه حفظ می کنند به چنین متغیرهایی متغیر محلی می گویند.
برنامه ای بنویسید که بتواند عددی را از ورودی خوانده سپس با استفاده از برنامه فرعی FACT فاکتوریل آنرا محاسبه کرده نمایش دهد .
CLS
INPUT n
CALL FACT(n)
END
----------------
SUB FACT (n)
Mul = 1
FOR I = 1 To n
Mul = Mul * I
NEXT I
PRINT n”!”,Mul
END SUB
دستور GOSUB , RETURN
از دستور GOSUB به منظور انتقال کنترل به زیر برنامه استفاده می گردد و دستور RETURN کنترل را به دستور بعد از GOSUB هدایت می نماید . شکل کلی
شماره خط یا برچسب GOSUB
--
--
--
شماره خط یا برچسب RETURN
شماره خط یا برچسب : برچسب یا شماره خط ، خطی از برنامه اصلی را مشخص می کند که زیر برنامه مربوطه از آنجا آغازمی گردد و ذکر آن در این دستور اجباری است .
نکته : شماره خط نمی تواند به صورت متغیر یا عبارت بیان شود .
اجرای زیر برنامه تا زمان برخورد به اولین دستور RETURN ادامه می یابد ؛ سپس کنترل به دستور بعد از دستور GOSUB هدایت می شود . اگر در دستور RETURN برچسب یا شماره خطی ذکر شود کنترل بعد از اجرای زیر برنامه به شماره خط یا برچسب انتقال می یابد.
مثال : نمایش سه رشته کنار یکدیگر با اجرای یک زیر برنامه
CLS
GOSUB 40
END
---------------
40 PRINT “ SubrotINE” ;
PRINT “ IN” ;
PRINT “ Progress”
RETURN
مثال 2: برنامه زیر نام چهار نفر را از ورودی دریافت کرده سپس حروف دوم آن ها را کنار هم قرداده و نمایش می دهد .
CLS
GOSUB 100
PRINT y$
END
--------------
100 FOR I = 1 To 4
INPUT x$
Y$ = y$ MID$( x$ , 2 1 )
NEXT I
RETURN
دستور ON … GOSUB
از این دستور برای انشعاب یا کنترل برنامه به چند زیر برنامه دلخواه بر اساس مقادیر مختلف یک عبارت محاسباتی یا یک متغیر استفاده می شود . شکل کلی دستور :
شماره خطوط یا برچسب ها GOSUN عبارت یا متغیر ON
شماره خطوط یا برچسب ها : اولین خطوطی از زیر برنامه ها را مشخص می کند که انشعاب به آنها براساس مقدار متغیر یا عبارت محاسباتی که در دستور فوق گنجانده شده ، انجام مب پذیرد .اگر مقدار عبارت یا متغیر یک باشد کنترل برنامه به اولین شماره خط یا برچسب منتقل می شود و اگر مقدار عبارت یا متغیر دو باشد کنترل برنامه به دومین شماره خط یا برچسب منتقل می شود و به همین ترتیب ادامه پیدا می کند .
مقدار عبارت یا متغیر : می تواند هر عددی از 1 تا 255 باشد .
مثال 1:
CLS
FOR I = 1 TO 2
ON I GOSUB ONE , TWO
NEXT I
END
ONE : PRINT “ ONE “
RETURN
TWO : PRINT “ TWO “
RETURN
مثال 2 : محاسبه مجموع ، تفاضل ،حاصل ضرب و یا تقسیم دو عدد دلخواه با انتخاب شماره یک گزینه توسط کاربر از منوی نمایش داده شده .
DO
CLS
INPUT A , B
INPUT “ SELECT No. ( 1 - 4 )” ; N
ON N GOSUB 100 , 200 , 300 , 400
IF (N = 5) THEN
END
END IF
LOOP
100 PRINT A ;” + ”; B; “=”; A + B
RETURN
200 PRINT A ;” - ”; B; “=”; A - B
RETURN
300 PRINT A ;” * ”; B; “=”; A * B
RETURN
400 PRINT A ;” / ”; B; “=”; A / B
RETURN
آرایه :
مجموعه ای از متغییر های هم نوع است که با یک نام در حافظه نگهداری می شود . هرمتغیر درون آرایه با یک اندیس قابل دسترسی می باشد که این اندیس مکانی از آرایه را که آن متغیر اشغال کرده است مشخص می نماید . متغیرهای مجزا از هم نیز عناصر آرایه نامیده می شوند .
آرایه ها می توانند داری یک یا چند بعد باشند. آرایه های یک بعدی برای نگهداری لیستی از مقادیر مورد استفاده قرار می گیرند. عناصر درون آرایه یک بعدی با دنباله ای از اعداد صحیح یا عبارت صحیح اندیس گذاری می شوند.
آرایه یک بعدی 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 < = High )
MIDDLE = INT(( Low + High ) / 2)
IF ( KEY$ > name$ ( MIDDLE )) THEN
Low = MIDDLE – 1
ELSEIF (KEY$ < name$ ( MIDDLE )) THEN
High = MIDDLE – 1
ELSE
PRINT MIDDLE
END
END IF
WEND
PRINT “ Not Found “
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
PRINT ' Negative "
GOTO BEGIN
CASE ELSE
PRINT " Positive "
END SELECT
END
برنامه ای بنویسید که بتواند نمره دانش آموز را از ورودی دریافت کرده ؛ سپس با توجه نمره پیام مناسب را نمایش دهد .
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 < 25
Square = num ^ 2
PRINT num , Square
Num = num + 1
LOOP
END
برنامه بالا به کمک UNTIL
CLS
Num = 1
DO UNTIL Square = 25
Square = num ^ 2
PRINT num , Square
Num = num + 1
LOOP
END
توابع :
ریاضی
تابع 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 جهت تولید سری های مختلف اعداد تصادفی بین صفر و یک به کار می رود .
دستور 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 < 20
PRINT I ;
I = I + 2
WEND
END
برنامه ای بنویسید که عدد طبیعی 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
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 < = 50000 Then
Print “ Tax = 0 Rial ‘
End
End If
If W = 70000 Then
Let Tax = 4 * ( W – 50000 ) / 100
Else
Let Tax = 800 + 10 * ( W - 70000 )
End If
Print “ Tax = “ ; Tax ; “ Rials “
End
فرایندهای تکراری ( حلقه تکرار )
اجرای تعدادی دستور به دفعات معین ؛ یا تا برقراری شرایطی جهت رسیدن به جواب مسئله است . دستوراتی که به دفعات تکرار می شود ؛ یک حلقه تکرار راتشکیل می دهند .
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 Then Goto 8
End
چاپ مقسوم علیه های عدد 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 < = N Then Goto 7
End
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 < 20
PRINT I ;
I = I + 2
WEND
END
برنامه ای بنویسید که عدد طبیعی 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
PRINT ' Negative "
GOTO BEGIN
CASE ELSE
PRINT " Positive "
END SELECT
END
برنامه ای بنویسید که بتواند نمره دانش آموز را از ورودی دریافت کرده ؛ سپس با توجه نمره پیام مناسب را نمایش دهد .
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 < 25
Square = num ^ 2
PRINT num , Square
Num = num + 1
LOOP
END
برنامه بالا به کمک UNTIL
CLS
Num = 1
DO UNTIL Square = 25
Square = num ^ 2
PRINT num , Square
Num = num + 1
LOOP
END
توابع :
ریاضی
تابع 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 < = High )
MIDDLE = INT(( Low + High ) / 2)
IF ( KEY$ > name$ ( MIDDLE )) THEN
Low = MIDDLE – 1
ELSEIF (KEY$ < name$ ( MIDDLE )) THEN
High = MIDDLE – 1
ELSE
PRINT MIDDLE
END
END IF
WEND
PRINT “ Not Found “
END
زیر برنامه
زیر برنامه یا برنامه فرعی ، بخشی مستقل از برنامه اصلی را تشکیل می دهد . هر زیر برنامه مجموعه ای از دستورالعمل هاست که هدف خاصی را دنبال کرده و به دفعات در برنامه اصلی فراخوانده شده و اجرا گردد.به دلیل استقلال زیر برنامه در یک برنامه اصلی می تواند تعدادی زیر برنامه باشد .یکی از ویژگی های زیر برنامه این است که از مقادیر متغیرهای برنامه اصلی می توانند استفاده کنند .
با تقسیم یک برنامه به چند زیر برنامه می توان برنامه اصلی را قابل فهم و خوانتر نمود .
نکته : زیر برنامه بعد از دستور END برنامه اصلی قرار می گیرند .
دستور SUB
با استفاده از این دستور می توان یک برنامه فرعی ایجاد کرد ، شکل کلی زیر برنامه :
( لیست پارامترها ) نام زیر برنامه SUB
محتوای زیر برنامه
END SUB
لیست پارامترها : متغیرهایی هستند که باید از برنامهاصلی به زیر برنامه منتقل شوند .
فرا خوانی یک زیر برنامه : فراخوانی یک زیر برنامه به معنای اجرای زیر برنامه می باشد . دستور CALL این کار را انجام می دهد . شکل کلی دستور ( آرگومان ها ) نام زیر برنامه CALL
آرگومان : به مجموعه متغیرهای مختلف که موقع فراخوانی به زیر برنامه منتقل می شوند ، آرگومان گفته مشود .
نکته : متغیرهای زیر برنامه ، مقادیر خود را فقط در داخل آن زیر برنامه حفظ می کنند به چنین متغیرهایی متغیر محلی می گویند.
برنامه ای بنویسید که بتواند عددی را از ورودی خوانده سپس با استفاده از برنامه فرعی FACT فاکتوریل آنرا محاسبه کرده نمایش دهد .
CLS
INPUT n
CALL FACT(n)
END
----------------
SUB FACT (n)
Mul = 1
FOR I = 1 To n
Mul = Mul * I
NEXT I
PRINT n”!”,Mul
END SUB
دستور GOSUB , RETURN
از دستور GOSUB به منظور انتقال کنترل به زیر برنامه استفاده می گردد و دستور RETURN کنترل را به دستور بعد از GOSUB هدایت می نماید . شکل کلی
شماره خط یا برچسب GOSUB
--
--
--
شماره خط یا برچسب RETURN
شماره خط یا برچسب : برچسب یا شماره خط ، خطی از برنامه اصلی را مشخص می کند که زیر برنامه مربوطه از آنجا آغازمی گردد و ذکر آن در این دستور اجباری است .
نکته : شماره خط نمی تواند به صورت متغیر یا عبارت بیان شود .
اجرای زیر برنامه تا زمان برخورد به اولین دستور RETURN ادامه می یابد ؛ سپس کنترل به دستور بعد از دستور GOSUB هدایت می شود . اگر در دستور RETURN برچسب یا شماره خطی ذکر شود کنترل بعد از اجرای زیر برنامه به شماره خط یا برچسب انتقال می یابد.
مثال : نمایش سه رشته کنار یکدیگر با اجرای یک زیر برنامه
CLS
GOSUB 40
END
---------------
40 PRINT “ SubrotINE” ;
PRINT “ IN” ;
PRINT “ Progress”
RETURN
مثال 2: برنامه زیر نام چهار نفر را از ورودی دریافت کرده سپس حروف دوم آن ها را کنار هم قرداده و نمایش می دهد .
CLS
GOSUB 100
PRINT y$
END
--------------
100 FOR I = 1 To 4
INPUT x$
Y$ = y$ MID$( x$ , 2 1 )
NEXT I
RETURN
دستور ON … GOSUB
از این دستور برای انشعاب یا کنترل برنامه به چند زیر برنامه دلخواه بر اساس مقادیر مختلف یک عبارت محاسباتی یا یک متغیر استفاده می شود . شکل کلی دستور :
شماره خطوط یا برچسب ها GOSUN عبارت یا متغیر ON
شماره خطوط یا برچسب ها : اولین خطوطی از زیر برنامه ها را مشخص می کند که انشعاب به آنها براساس مقدار متغیر یا عبارت محاسباتی که در دستور فوق گنجانده شده ، انجام مب پذیرد .اگر مقدار عبارت یا متغیر یک باشد کنترل برنامه به اولین شماره خط یا برچسب منتقل می شود و اگر مقدار عبارت یا متغیر دو باشد کنترل برنامه به دومین شماره خط یا برچسب منتقل می شود و به همین ترتیب ادامه پیدا می کند .
مقدار عبارت یا متغیر : می تواند هر عددی از 1 تا 255 باشد .
مثال 1:
CLS
FOR I = 1 TO 2
ON I GOSUB ONE , TWO
NEXT I
END
ONE : PRINT “ ONE “
RETURN
TWO : PRINT “ TWO “
RETURN
مثال 2 : محاسبه مجموع ، تفاضل ،حاصل ضرب و یا تقسیم دو عدد دلخواه با انتخاب شماره یک گزینه توسط کاربر از منوی نمایش داده شده .
DO
CLS
INPUT A , B
INPUT “ SELECT No. ( 1 - 4 )” ; N
ON N GOSUB 100 , 200 , 300 , 400
IF (N = 5) THEN
END
END IF
LOOP
100 PRINT A ;” + ”; B; “=”; A + B
RETURN
200 PRINT A ;” - ”; B; “=”; A - B
RETURN
300 PRINT A ;” * ”; B; “=”; A * B
RETURN
400 PRINT A ;” / ”; B; “=”; A / B
RETURN