فصل نهم : زیربرنامه ها

زیربرنامه ها

اغلب در هنگام نوشتن برنامه‌ها با مواردی برخورد می کنیم که مجبور می‌شویم مجموعه‌ای از مراحل را بارها و بارها اجرا کنیم.

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

یک زیر برنامه، بخشی از کدهای نوشته شده از یک برنامه بزرگتر است که معمولاً کار خاصی را انجام می دهد و می تواند از هر جایی در برنامه فراخوانی شود.

زیربرنامه ها با نامی که پس از کلمه کلیدی Sub قرار می گیرد شناسایی می شوند و با کلمه کلیدی EndSub به پایان می رسند.

به عنوان مثال، در ادامه زیربرنامه ای به نام PrintTime را می بینید که کار چاپ زمان جاری در TextWindow را انجام می دهد:

Sub PrintTime

TextWindow.WriteLine(Clock.Time)

EndSub

 

حال برنامه ای را می نویسیم که در داخل خود، دو بار برنامه فوق را فراخوانی کرده است:

()PrintTime

TextWindow.Write(“Enter your name: “)

()name = TextWindow.Read

TextWindow.Write(name + “, the time now is: “)

()PrintTime

 

 Sub PrintTime

TextWindow.WriteLine(Clock.Time)

EndSub

 

شکل 1-9 – فراخوانی یک زیربرنامه ساده

شکل ۱-۹ : فراخوانی یک زیربرنامه ساده

 

شما با فراخوانی ()SubroutineName یک زیربرنامه را اجرا می کنید.

وجود نشانه‌های پرانتز “()” ضروری هستند تا به رایانه بگویید که می‌خواهید یک برنامه فرعی را اجرا کنید.

 

مزایای استفاده از زیربرنامه ها

همانطور که در بالا دیدیم، زیربرنامه ها به کاهش مقدار کد نوشته شده توسط برنامه نویس، کمک می کند.

بعد از نوشتن زیربرنامه PrintTime ، می توانیم آن را از هر جایی در برنامه خود فراخوانی کرده و زمان فعلی را چاپ کنیم.

 

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

 

علاوه بر این، برنامه های فرعی (زیربرنامه ها) می توانند به تجزیه مسائل پیچیده به قطعات ساده تر کمک کنند.

فرض کنید یک معادله مختلط برای حل دارید، می توانید چندین زیر روال بنویسید که قطعات کوچکتری از معادله مختلط را حل می کند. سپس می توانید نتایج را کنار هم قرار دهید تا جواب معادله مختلط اصلی را بدست آورید.

 

زیربرنامه ها همچنین می توانند به بهبود خوانایی یک برنامه کمک کنند. به عبارت دیگر، اگر برای بخش‌هایی که معمولاً اجرا می‌شوند، زیرروال‌هایی با نام خوب داشته باشید، خواندن و درک برنامه‌تان آسان می‌شود.

اگر می خواهید برنامه شخص دیگری را درک کنید یا اگر می خواهید برنامه شما توسط دیگران درک شود، انتخاب نام مناسب برای آن بسیار مهم است.

گاهی اوقات، حتی زمانی که می خواهید برنامه خود را بعد از مدتی بازخوانی کنید، این موضوع بسیار مفید می باشد.

 

استفاده از متغیرها در زیربرنامه ها

شما می توانید از داخل یک زیربرنامه به هر متغیری که در برنامه دارید دسترسی داشته باشید و از آن استفاده کنید.

به عنوان مثال، برنامه زیر دو عدد را دریافت کرده و عدد بزرگتر را چاپ می کند. توجه داشته باشید که متغیر max هم در داخل و هم در خارج از زیربرنامه استفاده می شود.

TextWindow.Write(“Enter first number: “)

()num1 = TextWindow.ReadNumber

TextWindow.Write(“Enter second number: “)

()num2 = TextWindow.ReadNumber

()FindMax

TextWindow.WriteLine(“Maximum number is: ” + max)

 

Sub FindMax

If (num1 > num2) Then

max = num1

Else

max = num2

EndIf

EndSub

خروجی این برنامه به شکل زیر است:

 

شکل 2-9 – بازگرداندن عدد بزرگتر از بین دو عدد توسط زیربرنامه

شکل ۲-۹ : بازگرداندن عدد بزرگتر از بین دو عدد توسط زیربرنامه

 

بیایید به مثال دیگری نگاه کنیم که استفاده از زیربرنامه را نشان می دهد.

این بار از یک برنامه گرافیکی استفاده می کنیم که مختصات نقاط مختلفی را محاسبه و در متغیرهای x و y ذخیره می کند.

سپس زیربرنامه DrawCircleUsingCenter را فراخوانی کرده که مسئول رسم دایره ای است که مختصات مرکز آن x و y می باشد.

“GraphicsWindow.BackgroundColor = “Black

“GraphicsWindow.PenColor = “LightBlue

GraphicsWindow.Width = 480

For i = 0 To 6.4 Step 0.17

x = Math.Sin(i) * 100 + 200

y = Math.Cos(i) * 100 + 200

 ()DrawCircleUsingCenter

EndFor

 

Sub DrawCircleUsingCenter

startX = x – 40

startY = y – 40

GraphicsWindow.DrawEllipse(startX, startY, 120, 120)

EndSub

شکل 3-9 – مثال گرافیکی از زیربرنامه

شکل ۳-۹ : مثال گرافیکی از زیربرنامه

 

بهترین قالب نوشتن یک برنامه

در اینجا قالب کلی برای نوشتن یک برنامه استاندارد آمده است.

پیروی از این قالب باعث می شود که برنامه ها به درستی کار کنند و همچنین برای برنامه نویسان دیگر (و حتی مراجعات بعدی خودتان به برنامه) به راحتی قابل درک و پیگیری باشد.

در این قالب:

– متغیرها در بالای برنامه قرار می گیرند.

– سپس برنامه اصلی نوشته می شود.

– و در ادامه برنامه های فرعی (زیربرنامه ها) آورده می شوند.

 

فراخوانی زیربرنامه ها در داخل حلقه ها

گاهی اوقات زیر روال ها در داخل یک حلقه فراخوانی می شوند، در این مدت آنها مجموعه ای از دستورات یکسان را اما با مقادیر متفاوت در یک یا چند متغیر اجرا می کنند.

به عنوان مثال، زیربرنامه ای به نام PrimeCheck در برنامه زیر وجود دارد که تعیین می کند آیا یک عدد اول است یا خیر.

در اینجا به کاربر اجازه می‌دهید مقداری را وارد کند و سپس با استفاده از این زیر روال می‌توانید بگویید که آیااین عدد اول است یا نه:

TextWindow.Write(“Enter a number: “)

()i = TextWindow.ReadNumber

“isPrime = “True

()PrimeCheck

If (isPrime = “True”) Then

TextWindow.WriteLine(i + ” is a prime number”)

Else

TextWindow.WriteLine(i + ” is not a prime number”)

EndIf

 

Sub PrimeCheck

For j = 2 To Math.SquareRoot(i)

If (Math.Remainder(i, j) = 0) Then

isPrime = “False”

Goto EndLoop

EndIf

Endfor

:EndLoop

EndSub

در مثال فوق، زیربرنامه PrimeCheck مقدار i را گرفته و آن را بر اعداد کوچکتر تقسیم کند.

اگر باقیمانده هر کدام از این تقسیم ها صفر شود، نتیجه خواهیم گرفت که i بر عددی بخش پذیر است و در نتیجه یک عدد اول نیست و در این مرحله زیربرنامه مقدار isPrime را روی “False” تنظیم کرده و خارج می شود.

اگر عدد بر اعداد کوچکتر غیرقابل تقسیم بود، مقدار isPrime به صورت “True” باقی می ماند.

 

شکل 4-9 – چک کردن اول بودن یک عدد

شکل ۴-۹ : چک کردن اول بودن یک عدد

 

اکنون که زیربرنامه‌ای دارید که می‌تواند تست اول بودن یک عدد را برای ما انجام دهد، ممکن است بخواهید از آن برای فهرست کردن همه اعداد اول کوچکتر از یک عدد (مثلاً ۱۰۰) استفاده کنید.

 

انجام این کار ساده است و در ادامه نشان داده شده است. برنامه زیر تمام اعداد اول کوچکتر از ۱۰۰ را در خروجی چاپ می کند:

For i = 3 To 100

“isPrime = “True

()PrimeCheck

If (isPrime = “True”) Then

TextWindow.WriteLine(i)

EndIf

EndFor

 

 Sub PrimeCheck

For j = 2 To Math.SquareRoot(i)

If (Math.Remainder(i, j) = 0) Then

“isPrime = “False

Goto EndLoop

EndIf

Endfor

:EndLoop

EndSub

در برنامه بالا هر بار که حلقه اجرا می شود مقدار i تغییر می کند.

در داخل حلقه، فراخوانی زیربرنامه PrimeCheck انجام می شود که مشخص می کند که آیا i یک عدد اول است یا خیر و نتیجه در متغیر isPrime ذخیره می شود.

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

از آنجایی که حلقه از ۳ شروع می شود و تا ۱۰۰ ادامه می یابد، لیستی از تمام اعداد اول که بین ۳ تا ۱۰۰ هستند را در خروجی خواهیم دید.

در زیر نتیجه اجرای برنامه آمده است.

شکل 5-9 – نمایش اعداد اول کوچکتر از 100

شکل ۵-۹ : نمایش اعداد اول کوچکتر از ۱۰۰

 

ترجمه و تألیف : کامبیز حسامی

تهیه شده در : تیناسافت

 

 

بازگشت به صفحه اصلی آموزش اسمال بیسیک

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *