وبلاگ محمد طاهری

موارد کاربردی در مورد موضوعات مختلف

وبلاگ محمد طاهری

موارد کاربردی در مورد موضوعات مختلف

تبلیغات
Blog.ir بلاگ، رسانه متخصصین و اهل قلم، استفاده آسان از امکانات وبلاگ نویسی حرفه‌ای، در محیطی نوین، امن و پایدار bayanbox.ir صندوق بیان - تجربه‌ای متفاوت در نشر و نگهداری فایل‌ها، ۳ گیگا بایت فضای پیشرفته رایگان Bayan.ir - بیان، پیشرو در فناوری‌های فضای مجازی ایران
آخرین نظرات
نویسندگان

آموزش Qbasic(ساختار های شرطی)

جمعه آبان ۲۳ ۱۳۹۳، ۱۰:۵۴ ق.ظ

ساختار های شرطی:

تمرین : برنامه ای بنویسید که ۳ عدد را دریافت کند

الف) حاصل جمع آنها را چاپ کند .

ب) میانگین آنها را چاپ کند .

نکته : اگر برنامه بالا را بنویسید و اجرا نمایید متوجه می شوید که اگر برای متغیرها علامت خاصی قرار ندهید QBasic آنها را به عنوان عدد صحیح (integer) می شناسد و در نتیجه میانگین نیز مقدار صحیحی نمایش داده می شود . برای دقیق تر شدن خروجی برنامه و اینکه میانگین عددی اعشاری باشد باید متغیرهای مربوط به سه عدد دریافتی , حاصل جمع و میانگین از نوع اعشاری باشد . یعنی باید متغیرها را مانند !a یا #a به کار ببرید تا خروجی برنامه دقیق و برابر مقدار واقعی میانگین باشد .

برای خواندن کامل اموزش qbasic به ادامه ی مطلب بروید

حل تمرین . راه اول این بود که متغیر ها را به صورت !a به کار ببریم ( مانند برنامه زیر ) و راه دوم این بود که با توجه به درس جلسه دوم در ابتدای برنامه تمام متغیرها را از نوع اعشاری تعریف نماییم برای مثال عبارت DIM a AS SINGLE را در ابتدای برنامه بنویسیم تا هرجا از a استفاده کردیم نوع آن اعشاری باشد .در این روش نیازی نیست در هر بار استفاده از متغیر علامت نوع را در انتهای آن بنویسیم.

***REM ***program number 1
"PRINT "enter three number
!INPUT a! , b! , c
!sum! = a! + b! + c
!PRINT "Sum is : ";sum
PRINT "Average is : ";sum!/3
END

حال بررسی ساختارهای کنترلی که یکی از پرکاربردترین دستورها هستند را شروع می کنم .

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

1- ساختار IF
این دستور برای انجام کاری در صورت درست بودن شرطی به کار می رود . شکل کلی آن به صورت زیر است :


THEN شرط 1 IF
کارهایی که در صورت برقرار بودن شرط 1 باید انجام شود .
THEN شرط 2 ELSE IF
کارهایی که در صورت برقرار بودن شرط 2 باید انجام شود .
...
ELSE
کارهایی که در صورت برقرار نبودن هیچ یک از شرط های بالا باید انجام شود .
END IF

مثال 1: فرض کنید عددی از کاربر دریافت کرده و می خواهیم مثبت یا منفی بودن آن را مشابه تابع(sgn(xدر ریاضیات اعلام کنیم . ( در صورت مثبت بودن ، عدد 1 / منفی بودن ، عدد 1- / و اگر صفر وارد شد ، عدد ضفر چاپ می شود ) . دستور زیر این امکان را فراهم می سازد : (فرض کنید عدد در n ذخیره شده است )


IF n>0 THEN
"PRINT "1
ELSE IF n<0 THEN
"PRINT "-1
Else
"PRINT "0
END IF

نکته : اگر می خواهید فقط یک شرط را بررسی کنید (مثلا فقط در صورت مثبت بودن n عدد 1 چاپ شود و در غیر این صورت هیچ کاری انجام نشود ) می توانید دستورIF را در یک خط بدون نیاز به END IF بنویسید . مانند زیر :

"IF n>0 THEN PRINT "1

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

۲-حلقه ها

DO...WHILE
این ساختار کارهایی را تا زمانی که شرطی برقرار باشد انجام می دهد . شکل کلی آن به صورت زیر است :


شرط DO WHILE
کارهایی که باید انجام شوند
LOOP


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


DO
کارهایی که باید انجام شوند
شرط LOOP WHILE


می توان به جای عبارت WHILE از UNTIL استفاده کرد اما در این صورت باید نقیض شرط را بنویسیم .

مثال ۲: می خواهیم تا زمانی که کلمه وارد شده از طرف کاربر مخالف رمز عبور (مثلا kamyar ) است ، رمز دوباره دریافت شود . به روش های مختلف نوشتن این برنامه توجه کنید :

1)

$INPUT pass
"DO WHILE pass$<>"kamyar
$INPUT pass
LOOP
------------------------------------------
2)

$INPUT pass
"DO UNTIL pass$="kamyar
$INPUT pass
LOOP
------------------------------------------
3)

DO
$INPUT pass
"LOOP WHILE pass<>"kamyar
-------------------------------------------
4)

DO
$INPUT pass
"LOOP UNTIL pass$="kamyar

همانطور که مشاهده می کنید هر 4 بخش یک کار را انجام می دهند اما بخش های 3 و 4 از 1 و 2 بهترند زیرا متن برنامه آنها کوتاه تر است . بسته به منطق برنامه باید تشخیص دهید کدام روش بهتر است .

مثال ۳: برنامه ای بنویسید که مجموع اعداد از 1 تا 1000 را حساب کند .


counter = 1
sum = 0
DO WHILE counter<=1000
sum=sum+counter
counter=counter+1
LOOP
PRINT "Sum of numbers between 1 & 1000 is : ";sum
END

مثال ۴: برنامه ای بنویسید که میانگین نمرات را تا زمانی که عدد 1- وارد نشده ، حساب کند .


counter=1
sum=0
DO
INPUT "Enter grade",grade
sum=sum+grade
counter=counter+1
LOOP WHILE grade<>-1
IF sum<>-1 THEN
PRINT "average is";(sum+1)/counter
ELSE
"!PRINT "there isn't any grade
END IF
END

توضیح : در قسمت چاپ میانگین مقدار میانگین را برابرsum+1)/counter قرار دادیم زیرا وقتی عدد 1- وارد می شود ابتدا با sum جمع شده و سپس شرط چک می شود و از حلقه بیرون می آید پس برای محاسبه میانگین اعدادی که قبل از 1- وارد شده اند باید 1- را از sum حذف کرد یعنی به sum یک مقدار اضافه کنیم.

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

FOR
این ساختار شبیه ساختار WHILE است با این تفاوت که برای ایجاد حلقه هایی که دارای شمارنده هستند به کار می رود . می توانید شمارنده حلقه را درون این دستور مقدار دهی اولیه کنید . همچنین مقدار تغییر شمارنده (یکی یکی یا دوتا دوتا یا ... ) نیز با دستور STEP قابل تنظیم است . شکل کلی این دستور به شکل زیر است :


مقدار تغییر شمارنده STEP مقدار نهایی TO مقدار اولیه = شمارنده FOR
کارهایی که باید در طول حلقه انجام شود
متغیر شمارنده NEXT


مثال ۴ : مثال ۳ را با این دستور می نویسیم :

FOR i=1 TO 1000 STEP 1
sum=sum+i
NEXT i
PRINT "Sum of numbers between 1 & 1000 is : ";sum
END

نکته : اگر مقدار تغییر شمارنده برابر یک است ، می توانید STEP 1 را ننویسید .

تمرین :
1- برنامه ای بنویسید که مجموع اعداد زوج سه رقمی را چاپ کند .
2- برنامه ای بنویسید که ابتدا رمز عبور را از کاربر بخواهد . اگر رمزabc بود آنگاه ۱۰ عدد را بخواند و max آنها را چاپ کند . اگر رمز اشتباه بود ، پیغام مناسبی نمایش داده شده و رمز عبور دوباره خواسته شود .
3- برنامه ای بنویسید که رمز عبوری را از کاربر بخواهد . اگر رمز درست بود پیغام "your password is correct" را چاپ کند . برنامه باید فقط ۳ بار از کاربر رمز را بپرسد . اگر کاربر نتوانست رمز را در این 3 بار وارد کند پیغام "Sorry! you can't continue" چاپ شود .
1- برنامه بسیار ساده و به صورت زیر است :


sum=0
FOR i=100 TO 998 STEP 2
sum=sum+i
NEXT i
PRINT "Sum is :",sum
ـــــــــــــــــــــــــ ـــــــــــــــــــــــــ ـــــــــــــــــــــــــ ـــــــــــــــــــــــــ ــــــــــــــــــــ

2-
DO
$INPUT "Enter pass";pass
IF pass$<>"abc" THEN
"PRINT "Your password is not correct ! try again
END IF
"LOOP WHILE pass$max THEN max=a
NEXT i
END

*نکات : تا زمانی که کاربر رمز عبور را درست وارد نکرده ، حلقه تکرار می شود و تنها زمانی که رمز به درستی وارد شود ، برنامه به خط بعد از LOOP می رود و دستورات بعدی انجام می شود . برای تعیین max دسته ای از اعداد ، ابتدا اولین عدد ورودی را در max قرار می دهیم سپس بقیه اعداد را در یک حلقه از کاربر دریافت کرده ، بعد از دریافت هرکدام ، آنها با max مقایسه می شوند تا اگر بیشتر از max بودند ، در آن قرار گیرند . دقت کنید چون یک عدد بیرون حلقه دریافت کرده ایم ۹ عدد دیگر باقیمانده است (شرط حلقه ) برای به دست آوردن min نیز از همین روش استفاده می کنیم .
ـــــــــــــــــــــــــ ـــــــــــــــــــــــــ ـــــــــــــــــــــــــ ـــــــــــــــــــــــــ ــــــــــــــــــــ

3-
c=1
DO
$INPUT"Enter password",pass
c=c+1
LOOP WHILE pass$<>"123" AND c<=3
IF pass$="123" THEN
"!PRINT "your password is correct
ELSE
"PRINT "Sorry ! you can't continue
END


نکات : در شرط حلقه از عملگر منطقی AND استفاده شده زیرا استفاده از AND سبب می شود اگر یکی از شرطها هم غلط باشد ، کل عبارت نادرست شود . (عینا مانند استفاده از "و" در منطق ریاضی ) یعنی در هریک از دو صورتی که "pass$="abc (رمز درست وارد شود) یا c (شمارنده) بزرگتر از 3 شود ، برنامه از حلقه خارج می شود و با توجه این که بر اثر درست وارد شدن رمز از حلقه خارج شده ایم یا بر اثر تمام شدن تعداد حدس ها ، پیغام مناسب چاپ می شود .

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


دستور 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

منبع:http://www.qbasic0419.blogfa.com

نظرات (۰)

هیچ نظری هنوز ثبت نشده است
کاربران بیان میتوانند بدون نیاز به تأیید، نظرات خود را ارسال کنند.
اگر قبلا در بیان ثبت نام کرده اید لطفا ابتدا وارد شوید، در غیر این صورت می توانید ثبت نام کنید.
شما میتوانید از این تگهای html استفاده کنید:
<b> یا <strong>، <em> یا <i>، <u>، <strike> یا <s>، <sup>، <sub>، <blockquote>، <code>، <pre>، <hr>، <br>، <p>، <a href="" title="">، <span style="">، <div align="">
تجدید کد امنیتی