در بیسیک اسپکتروم نکاتی وجود دارد که دانستن آنها ، شما را در بسیاری از موارد یاری می کند و باعث پیدایش ایده های جدید می شود . در این مقاله به بررسی چند نکته جالب از این نکات می پردازیم ...

 

درباره INK , PAPER

همانطور که میدانید محدوده تغییرات این دو دستور بین صفر تا 7 است که هرکدام نمایانگر رنگ معادل آن عدد هستند ، اما دستوراتی به صورتهای : INK 8 , INK 9 , PAPER 8 , PAPER 9 وجود دارند که مفاهیم دیگری را دربر میگیرند که آنها را در زیر توضیح میدهیم :

1-      دستور INK 8 :

این دستور به معنی حفظ رنگ یک محل از صفحه تصویر است . فرض کنید در حال حاضر رنگ متن(INK) برابر صفر (مشکی) باشد و شما فرمان زیر را به کامپیوتر دهید :

 

INK 8:PRINT AT 10,9;”TEHRAN”

 

در این صورت کامپیوتر به مختصات (9 و 10) مراجعه خواهد کرد و کلمه “TEHRAN” را با رنگ جاری موجود در آن مختصات چاپ خواهد کرد .

یعنی در رنگ INK  و PAPER آن مختصات تغییری حاصل نمیشود . برنامه زیر کمک می کند تا موضوع را بهتر بفهمید :

10 INK 0

20 PRINT AT 10,9;INK 4;”ALI”

30 PAUSE 0

40 INK 8:PRINT AT 10,9; “TEHRAN”

 

در این برنامه ، کامپیوتر ابتدا طبق فرمان موجود در خط 10 رنگ مشکی را انتخاب کرده و در خط 20 با رنگ موقت سبز در مختصات (9 و 10) کلمه ALI را می نویسد . در خط 30 طبق فرمانPAUSE  منتظر فشرده شدن یک کلید می شود و سپس کلمه TEHRAN  را در همان مختصات چاپ میکند ، اما 3 حرف اول آنرا با رنگ سبز و حروف بعدی را با رنگ مشکی چاپ خواهد کرد ، علت اینست که چون فرمان INK 8 داده شده است ، کامپیوتر در رنگهای موجود در صفحه تغییری ایجاد نمیکند ، بدین معنی که چون قبلا در آن مختصات یک کلمه سه حرفی (ALI) با رنگ سبز چاپ شده بود ، کامپیوتر سه حرف کلمه TEHRAN  را با رنگ سبز چاپ میکند و چون در مختصات دیگر قبلاً چیزی نوشته نشده بود ، کامپیوتر برای آن رنگ مشکی را انتخاب میکند ...

 

2-      دستور INK 9 :

این دستور به معنی کتنراست است ، بدین معنی که اگر کامپیوتر با دستور فوق روبرو شود ، رنگPAPER  را سنجیده و برای INK رنگ مناسبی انتخاب میکند .

برای مثال ، اگر رنگ زمینه مشکی باشد ، کامپیوتر در فرمان INK 9 ، رنگ سفید را برای متن انتخاب خواهد کرد زیرا رنگ سفید در زمینه مشکی بهتر دیده میشود و بالعکس اگر رنگ زمینه سفید باشد ، کامپیوتر رنگ مشکی را برای متن انتخاب خواهد کرد ...

 

3-      دستور PAPER 8 :

مانند دستور INK 8 ...

 

4-      دستور PAPER 9  :

مانند دستور INK 9  ...

 

******************************

 

آیا میتوان در قسمت گزارشات مطلبی نوشت ؟

 

همانطور که دوستان وبلاگ کمودور-آمیگا دات بلاگفا دات کام ، میدانند ، صفحه تصویر اسپکتروم به دو قسمت جدا تقسیم میشود ، قسمت اصلی (22 سطر بالای صفحه) و قسمت گزارشات (2 سطر پایین صفحه) و با روشهای معمولی نمیتوان در قسمت گزارشات چیزی نوشت . اکنون ما روشی را برای شما توضیح میدهیم که بتوانید به سادگی مطلب مورد نظر خود را در این قسمت بنویسید ...

 

درواقع نوشتن در قسمت گزارشات کار ساده ای است و با دستور PRINT #0 انجام میگیرد ، اما مسئله اصلی حفظ این نوشته در این قسمت است ، برای روشن شدن موضوع برنامه زیر را امتحان کنید :

 

10 PRINT #0; “MESSAGE AREA”

 

اگر این برنامه را اجرا کنید ، کامپیوتر دستور شما را اجرا میکند و مطلب مورد نظر را در بخش گزارشات مینویسد ، اما بلافاصله گزارش OK جای آنرا میگیرد ، و شما تنها لحظه ای بسیار کوتاه فرصت خواهید داشت که نوشته خود را مشاهده کنید ، برای حفظ این نوشته در این قسمت باید کاری کنید که کامپیوتر هیچ گزارشی چاپ نکند ، برای مثال خط 20 را بصورت زیر به برنامه خود بیافزایید :

 

20 PAUSE 0

 

اکنون با اجرای دوباره برنامه ، مطلب خود را در قسمت گزارشات مشاهده خواهید کرد ، اگر میخواهید کاملا متوجه شوید که مطلب شما در قسمت گزارشات نوشته شده است ، خط زیر را به برنامه خود بیافزایید :

 

5 BORDER 5

 

حتی میتوانیم از امکانات تابع TAB نیز در قسمت گزارشات استفاده کنیم ، خط 10 را بصورت زیر اصلاح کنید :

 

10 PRINT #0; TAB 10; “MESSAGE AREA”

 

همانطور که تا کنون آموختیم بخش گزارشات دارای دو ردیف است که مختصات مخصوص به خود را داراست . یعنی ردیف بالایی آن ردیف صفر و ردیف دیگر ، ردیف 1 نامیده می شود . در این مورد میتوان از تابع AT نیز استفاده کرد . برنامه زیر را امتحان کنید :

 

10 BORDER 5

20 PRINT #0;AT 0,5; “THIS IS LINE NO. 0”

30 PRINT #0;AT 1,5; “THIS IS LINE NO. 1”

40 PAUSE 0

 

آیا قسمت گزارشات واقعا دو ردیف دارد ؟

 

اجازه دهید که آموخته های خود را در این مورد کمی تصحیح کنیم و این مطلب را بصورت زیر یاد بگیریم :

بخش گزارشات حداقل 2 ردیف و حداکثر 23 ردیف دارد و بخش اصلی صفحه حداقل 1 ردیف و حداکثر 22 ردیف دارد ...

برنامه زیر این موضوع را اثبات میکند :

 

10 BORDER 5

20  PRINT #0;AT 0,5; “THIS IS LINE NO. 0”

30 PRINT #0;AT 0,5; “THIS IS LINE NO. 1”

40 PRINT #0;AT 0,5; “THIS IS LINE NO. 2”

50 PAUSE 0

 

این برنامه را اجرا کنید . مشاهده میکنید که بخش گزارشات گسترش پیدا میکند و ردیف 21 بخش اصلی را بتصرف خود درمیآورد ، اکنون بالاترین ردیف ، یعنی ردیف 21 قسمت اصلی ، ردیف صفر قسمت گزارشات محسوب میشود . و دو ردیف دیگر به ترتیب ، ردیفهای 1 و 2 هستند .

بخش گزارشات میتواند تصرفات خود را گسترش دهد و تمام ردیفهای قسمت اصلی منهای بالاترین ردیف را اشغال کند . در اینصورت باز هم بالاترین ردیف قسمت گزارشات ، ردیف صفر نامیده میشود و ردیفهای دیگر بترتیب ردیفهای 1و2و3و ... و22 نامیده میشوند ، برای درک بهتر موضوع برنامه زیر را اجرا کنید :

 

 10 BORDER 5

20 FOR I=0 TO 22

30 PRINT #0;AT I,0 “LINE NO. “;I

40 NEXT I

50 PAUSE 0

 

اکنون که با این مطلب آشنا شدید میتوانید بخش اصلی صفحه را به اندازه دلخواه کوچک کنید ، برنامه زیر را آزمایش کنید ، خواهید دید که قسمت اصلی صفحه چقدر کوچک شده است :

 

10 BORSER 5

20 PRINT #0; AT 13,0

30 LET A=0

40 PRINT A ;””;

50 POKE 23692,255

60 LET A=A+1 GOTO 40

 

خط 50 این برنامه بخاطر این است که عمل SCROLL بصورت خودکار درآید تا از نوشتن هر نوع گزارشی در قسمت گزارشات جلوگیری به عمل آید . برای آزمایش ، این خط را حذف کرده و برنامه را دوباره اجرا کنید ...

 

************************************

 

درباره دستور INPUT

 

میدانیم که دستور INPUT از تمام امکانات دستور PRINT درباره محل چاپ و رنگ برخوردار است بجز امکانات تابع AT ...

اما اکنون می آموزیم که با شرایطی میتوان از این امکان بهره مند شد ...

به مثال زیر توجه کنید :

 

10 INPUT AT 0,0; “LINE 0”,A$;AT 0,1;”LINE 1”, B$ ;AT 2,0 ;”LINE 2”, C$ ;AT 3,0 ;”LINE 3”, D$

 

در واقع بسیاری از امکانات دستور PRINT را میتوان بوسیله دستور INPUT ایجاد کرد . به برنامه ساده زیر توجه کنید . این برنامه میتواند برای یاد دادن جدول ضرب به کودکان مورد استفاده قرار گیرد . در این برنامه از امکانات دستور PRINT استفاده شده است .

 

10 LET A$=””

20 LET A=INT (RND*10+1): LET B=(INT*10+1)

30 PRINT AT 19,0 ;A$ ;AT 21,0 ;”WHAT IS “ ;A;”*”;B;”?”

40 INPUT C: IF C=A*B THEN LET A$= “RIGHT. “: GOTO 20

50 LET A$=”WRONG. TRY AGAIN.”: GOTO 30

 

آیا میتوان این برنامه را فقط با امکانات دستورINPUT نوشت ؟ ... بله ، برنامه زیر شاهد این مدعاست :

 

10 LET A$=””

20 LET A= INT (RND*10+1): LET B=INT (RND*10+1)

30 INPUT (A$) ‘ ‘ “WHAT IS “;(A); “*” ; (B) ; “?” ; C

40 IF C=A*B THEN LET A$= “RIGHT. “ : GOTO 20

50 LET A$=”WRONG TRY AGAIN. “:GOTO 30

 

توجه کنید که در دستور PRINT و INPUT ، حروفی که داخل گیومه قرار گرفته باشند بطور مستقیم چاپ میشوند و حروفی که داخل پرانتز باشند مقادیر عددی آنها چاپ میشود و متغیرهاییکه داخل علامتی قرار نگرفته باشند ، مقادیرشان از صفحه کلید دریافت خواهد شد . همچنین توجه کنید که علامت  (روی کلید "7") به معنی یک خط خالی است . برای مثال اگر داشته باشیم :

A=44                      A$=”XXX”

 

در اینصورت با اجرای دستور :

 

INPUT “NO. “;(A)’’’(A$);N

 

برروی صفحه ابتدا کلمه .NO چاپ خواهد شد (زیرا کلمه .NO داخل گیومه قرار دارد) ، سپس بدون فاصله مقدار متغیر A چاپ خواهد شد (زیرا متغیر A درون پرانتز قرار دارد) و پس از 3 خط فاصله (بخاطر وجود 3 کاراکتر ) مقدار متغیر A$ چاپ میشود (زیرا متغیر A$ داخل پرانتز قرار دارد) و در آخر متغیر Nبدون فاطله از صفحه کلید دریافت خواهد شد .

 

*************************************

 

کوتاه کردن زمان SAVE و LOAD برنامه ها :

 

میدانیم مدت زمانی که طول میکشد تا یک برنامه SAVE و یا LOAD شود بستگی به این دارد که برنامه مورد نظر چه مقدار از حافظه را اشغال کرده باشد ...

احتمالا برای شما پیش آمده است که برنامه های کوتاهی نوشته باشید ، اما زمان SAVE و LOADکردن آنها زیاد شده باشد . مثلا برنامه کوتاه زیر را امتحان کنید :

 

10 DIM A (8000)

 

این برنامه را تایپ و اجرا و آنگاه آنرا SAVE نمایید . خواهید دید که این برنامه کوتاه برای SAVE شدن چندین دقیقه وقت صرف میکند . اکنون دستور زیر را اجرا کنید :

 

CLEAR : SAVE “ABC”

 

مشاهده خواهید کرد که زمان لازم برای SAVE شدن برنامه از چند دقیقه به چند ثانیه کاهش می یابد .

این شیوه را می توانید در مورد تمام برنامه هاییکه شامل آرایه ها (ARRAYS) –ی بزرگ و یا متغیرهای زیاد هستند امتحان کنید . علت این است که وقتی در یک برنامه از آرایه های طولانی یا متغیرهای زیاد استفاده می شود ، کامپیوتر مقدار زیادی از حافظه را برای آنها در نظر میگیرد ، و با اجرای دستورSAVE ، آنها نیز همراه برنامه بیسیک SAVE میشوند ، درصورتیکه لزومی به اینکار نیست ، چراکه هر برنامه در هنگام RUN شدن جای لازم را برای آرایه ها و متغیرها در حافظه باز میکند .

برای جلوگیری از ایجاد این اشکال میتوانیم قبل از دستور SAVE ، دستور CLEAR را اجرا کنیم تا برنامه خود را بطور خالص و کوتاه بر روی نوار ذخیره نماییم .

 

********************************

مرجع : مبانی بیسیک برای کامپیوترهای کوچک

گردآوری : بهمن ظفری فر

برگرفته از مجله کامپیوترهای خانگی ، شهریور 1371 ، صفحات 53 تا 55