Урок 15. Подпрограми и функции
Един от важните подходи при програмирането е модулния подход. При него задачата се разделя на по-малки задачи, които представялват функционално или технологично обособени единици от някоя по-сложна система. В самата програма всеки модул може да се изпълнява толкова пъти, колкото е необходимо. Този подход ни дава възможност да изграждаме програма от вече готови програми, наречени подпрограми, които могат да бъдат настройвани според конкретния случай.
Ние ще използваме два вида подпрограми – процедури и функции.
Когато подпрограмата изчислява една стойност, тя се нарича подпрограма-функция. Тези подпрограми, които не могат да се характеризират като функции се наричат процедури.
Обявяването на подпрограма става така :
Sub Име
Действия
EndSub
Думата Sub (от англ. subprogram — подпрограма показва, че след нея следват инструкциите на подпрограмата, а думата EndSub отбелязва нейния край. Самата подпрограма се идентифицира под името, което се записва директно след Sub.
Да си припомним алгоритъма за размяна стойностите на две промениливи / алгоритъма с използване на третата чаша, както образно го нарекохме/.
Задача:
Напишете програма, която въвежда две числа и извежда по-голямото.
Ще решим задачата като направим подпрограма FindMax с помощта на която запомняме в променливата max винаги по-голямата стойност
Sub FindMax
If (num1 > num2) Then
max = num1
Else
max = num2
EndIf
EndSub
TextWindow.Write("Въведете первото число: ")
num1 = TextWindow.ReadNumber()
TextWindow.Write("Въведете второто число: ")
num2 = TextWindow.ReadNumber()
FindMax()
TextWindow.WriteLine("По-голямото число : " + max)
Ето още един пример. В следващата програма ние ще изчисляваме различни координати на точки и ще ги съхраняваме в променливите х и у. Ще да дадем такова име, за да ни говори какво прави подпрограмата – чертае кръг като използва точката с координатите за център. Нейното име ще бъде DrawCircleUsingCente. С помощта на тази процедура ще изместваме центъра на окръжността с 40 и по х и по у. Стойностите на х и у получаваме с помощта на функцията sin и cos . и тъй като тя е между [0,1] умножаваме по 100 и за да центрираме в графичния прозорец прибавяме . Броячът може да приема стойности от 0 до 6,28 / т.е от 0 до 360 градуса/. Определяме стъпка 0,17, което е приблизително равно на 10 градуса.
Sub DrawCircleUsingCenter
startX = x - 40
startY = y - 40
GraphicsWindow.DrawEllipse(startX, startY, 120, 120)
EndSub
GraphicsWindow.BackgroundColor = "Black"
GraphicsWindow.PenColor = "LightBlue"
GraphicsWindow.Width = 480
For i = 0 To 6.28 Step 0.17
x = Math.Sin(i) * 100 + 200
y = Math.Cos(i) * 100 + 200
DrawCircleUsingCenter()
EndFor
Ще получите следния резултат:
Подобни фигури се наричат фрактали.
Фракталът представлява компютърно изображение, което се получава обикновено от повтаряща се схема.
В нашия пример имаме фигурата е получена от множество окръжности с един радиус и равномерно изместен център .
Процедурите или функциите се записват пред главната програма, която се обръща към тях като използва името. Обикновено главната програма съдържа меню, от което потребителя избира необходимото.
Нека да решим следната задача.
Да направим програма която да превръща / конвертор/ килограми във фурове и обратно.
Ще използваме това че 1фунт / паунд/ = 453,6 грама.
Ще разработим 2 процедури – едната да превръща футове в килограми, аа другата – от килограми във футове.
И в двете процедури ще поставим подходящи съобщения за потребителя. В главната програма задаваме подходяща стойност на променливата, управляваща цикъла, за та да може той да се изпълни поне веднъж. Потребителят може да излезе от програмата само ако въведе 0. Той избира 1 – за превръщане на фунтове в килограми и 2 – за килограми във фунтове.
Решение
' Конвертор.
' 1 фунт = 453,6 гр.
TextWindow.Title= "Конвертор"
' Превръщане на фунтове в килограми
Sub FuntToKg
TextWindow.Clear()
TextWindow.WriteLine("Превръщане на фунтове в килограми")
TextWindow.Write("Тегло във фунтове -> ")
fnt = TextWindow.ReadNumber()
kg = fnt * 0.4536
TextWindow.Write(fnt + "ф. = ")
TextWindow.WriteLine(kg + "кг.")
TextWindow.WriteLine("")
TextWindow.Write(" За да се върнете в менюто натиснете <Enter>")
TextWindow.Read()
EndSub
' Превръщане на килограми във фунтове
Sub KgToFunt
TextWindow.Clear()
TextWindow.WriteLine("Превръщане на килограми във фунтове")
TextWindow.Write("Тегло в килограми-> ")
kg = TextWindow.ReadNumber()
fnt = kg / 0.4536
TextWindow.Write(kg + "кг. = ")
TextWindow.WriteLine(fnt + "ф.")
TextWindow.WriteLine("")
TextWindow.Write("За да се върнете в менюто натиснете <Enter>")
TextWindow.Read()
EndSub
' основна програма
p = 1 ' за да влезем в цикъл While
While (p <> 0)
' Меню
TextWindow.Clear()
TextWindow.WriteLine("== КОНВЕРТОР ==")
TextWindow.WriteLine("1 – фунтове в килограми ")
TextWindow.WriteLine("2 – килограми във фунтове")
TextWindow.WriteLine("0 - изход")
TextWindow.WriteLine("")
TextWindow.Write("Вашия избор-> ")
p = TextWindow.ReadNumber()
' Възможнст на потребителя да избира
If (p = 1) Then
' превръщане от фунт в килограм
FuntToKg()
else
If (p = 2) then
' превръщане от килограм във фунт
KgToFunt()
EndIf
endif
EndWhile
Задача 2.
Напишете програма която чертае по избор от потребителя квадрат, окръжност и триъгълник.
Помислете как ще се върнете в Текстовия прозорец за да направите съответния избор
Задачи за упражнение:
Напишете програма която да конвертира
а) левове в евро и обратно.
б) левове в долари и обратно
в) левове в паунди / английски лири/ и обратно.
Помислете как можете да организирате всичко в една програма.
Напишете програма за изчисляване на лица на триъгълник, успоредник и трапец. Потребителят избира на каква фигура ще изчислява лицето.