|
|
|
|
|
ثابت ها : ثابت ها در طول يک برنامه تغيير نمي کنند و به دو دسته ثابت هاي عددي و ثابت هاي نشانه اي تقسيم مي شوند .ثابت عددي خو به ثابت عددي صحيح و اعشاري تقسيم مي شود .نمونه هايي از ثابت عددي صحيح : -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 براي برگشت به اولين داده است ويابهتر بگيم اين دستور ؛دستور 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
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 براي برگشت به اولين داده است ويابهتر بگيم اين دستور ؛دستور 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
|
||
|
+
نوشته شده در پنجشنبه هفدهم خرداد 1386ساعت 12:17 توسط رسول فضلی
|
|
||