ПОДАЛГОРИТМИ И ПОДПРОГРАМИ – 11 урок


Отделните части на един алгоритъм могат да бъдат отделени и представени като подалгоритми. В случаите, когато се налага група от едни и същи действия да се изпълнява на различни места в алгоритъма, тяхното оформяне като подалгоритъм може да съкрати в голяма степен усилията по съставянето на този алгоритъм и да съкрати записването му. Един алгоритъм се разделя на подалгоритми в два случая – когато е сложен и разделянето улеснява неговото съставяне и програмиране, или когато разполагате с готови подалгоритми, които можете да използвате.

Пр. 1 Подреждане на три реални числа в намаляващ ред

Алгоритъмът за решаване на задачата е следният:

  1. Въведете три реални числа и ги запомнете (в променливи a, b и c).
  2. Ако a<b, разменете стойностите на a и b.
  3. Ако b<c, разменете стойностите на b и c.
  4. Ако a<b, разменете стойностите на a и b.
  5. Изведете стойностите на a, b и c (вече подредени).
  6. Край на работата.

В алгоритъма се повтарят многократно две действия – сравняване и размяна на стойностите на две променливи. Следователно, ако предварително съставим тези подалгоритми, можем да ги използваме за описанието му.

Коя е основната разлика между един подалгоритъм и алгоритъма, който го използва? В повечето случаи основният алгоритъм получава от потребителя стойности за началните данни и съобщава крайните резултати отново на потребителя. Докато подалгоритъмът обикновено получава началните си данни от основния алгоритъм и му връща крайните си резултати. Например подалгоритъмът за сравняване на две числа получава стойностите, които се сравняват, от основния алгоритъм, а резултатът от сравнението се връща отново към основния алгоритъм, за да се използва в следващите му действия.

Подпрограми

Програмата, реализираща основния алгоритъм за решаването на определена задача, се нарича главна (или основна) програма.

Всяка подпрограма, съдържаща се в главната програма, реализира подалгоритъм на основния алгоритъм. Изпълнението на подпрограмата се предизвиква с указване на нейното име и списък от съответни параметри. Подпрограмата може да се изпълни за различни стойности на входните данни (зададени чрез параметри от списъка)  и да върне различни резултати (отново зададени в същия списък).

Например ако подалгоритъмът за размяна на стойностите на две променливи е реализиран като подпрограма, то неговите параметри трябва да са два – променливите, чиито стойности се разменят.

Основната програма обикновено си взаимодейства с потребителя за въвеждането и извеждането на данни, докато подпрограмите ползват данни от главната програма и връщат в нейната среда получените резултати.

  • Възможно е някои подпрограми, подобно на основната програма, да ползват описани в тях други подпрограми.
  • Вече създадена и проверена, една подпрограма може да се използва в различни програми.

Подпрограми в Java

В езика Java се допускат два вида подпрограми, наречени съответно процедури и функции т.е. подпрограмите, това са всъщност методите, реализиращи съответния алгоритъм.

Подпрограмите-функции служат за описание на подалгоритми, при изпълнението на които се получава един единствен резултат, който се присвоява на функцията.

Подпрограмите-процедури могат да се използват за получаване на произволен брой резултати, но самата процедура не приема стойност.

Методите на класа имат следният синтаксис:

<служебна дума> тип <име> ([параметър1];[параметър2] ;…])

{

тяло;

}

Служебната дума може да бъде една или повече.

В следващата таблица ще обясним приложението на служебните думи:

Служебна дума
Приложение
рublic Показва, че метода е достъпен навсякъде, където е достъпен класа, в който е описан.
рrivate Показва, че метода не е достъпен за подкласовете.
рrotected Показва, че метода е достъпен само за класа, неговите подкласове и пакета.
рrivate protected Показва, че метода е достъпен само за класа и неговите подкласове.
final Показва, че метода не може да се предефинира в подклас.
аbstract Показва, че метода няма тяло (реализация).
native Показва, че реализацията на метода е направена на език, различен от Java.
synchronized Показва, че в един момент само една програма може да изпълнява дадения метод.

Когато се посочва тип се реализира подпрограма-функция, а типът се нарича тип на функцията (т.е. типът на резултата, който ще бъде върнат). За да бъде върнат резултат на функцията, то в тялото й, трябва да зададем return(<израз>). Когато връщаме число, като стойност на функцията, не е необходимо да пишем скоби.

Когато вместо тип се използва служебната дума void – се реализира подпрограма-процедура. Служебна дума void, показва че на самият метод не се присвоява стойност т.е. това е подпрограма-процедура.

Структурата на подпрограмата е аналогична на структурата на основната програма.

Параметрите в скобите се наричат формални параметри. Те служат за задаване на входните (началните) и изходните данни (резултати) на подпрограмите. Поради тази причина тези параметри се наричат формални. Обикновено резултатът на функцията е само една стойност. За име на тази стойност се счита името на самата функция, а списъкът от формални параметри на функцията определя само входните данни.

Параметрите, които дефинираме в тялото на подпрограмата се наричат локални параметри, а тези, дефинирани в тялото на класа – глобални.

Ако в подпрограма искаме да използваме някой от глобалните параметри, то трябва да укажем това с помощта на служебната дума this.

Пр. 2  Нека е даден следният фрагмент от програма:

class Fragment {

int x;  // глобални параметри

int y;

int z;

void Exampl (int x; int a) {

//локален параметър с име като на

// глобален и др. локален параметър

x=2;   //присвоява стойност на локален

//параметър

a=3;            //присвоява стойност на локален

// параметър

this.x=7;     //присвоява стойност на глобален

// параметър

this.y = 1;   //присвоява стойност на глобален

//параметър

this.z = 0;   //присвоява стойност на глобален

//параметър

}

}

Пр. 3   Деклариране на процедура и функция:

  1. Деклариране на процедура, която разменя стойностите на две променливи a и b:

, но смяната на тези два локални параметъра не засяга глобалните параметри, от които те са взели стойностите си.

  1. Деклариране на функция, която сравнява две реални числа х и у, и ако х<у връща стойност true, а в противен случай – false:

Допустими са подпрограми и без параметри. Например процедура, която отпечатва на екран текст “Добър ден” няма нужда от входни данни и не връща резултат, който да се използва от основната програма.

Изпълнение на подпрограми

Дефинирането на една подпрограма определя какво трябва да е нейното действие, но не и кога (при изпълнение на главната програма) да се изпълни това действие.

Изпълнението на подпрограма става чрез нейното извикване от главната програма. Това става чрез името на подпрограмата и списък от фактически параметри, за които тя трябва да бъде изпълнена.

Фактическите параметри, при извикване на подпрограмата, трябва да са толкова на брой, колкото са формалните параметри при нейното описание, като се запазва съответствието между типовете в реда на изброяването им.

Ако в програмата е указано активиране на подпрограма, то на това място се изпълняват операторите от блока на подпрограмата, като формалните параметри се заместват със зададените фактически параметри, т.е. ролята на фактическите параметри е да получат конкретните стойности на входните и изходни данни на подпрограмата.

Пр. 4 Активиране на процедури и функции:

1. void main() {

boolean b;

float x = 23.45;

float y = 23.455;

b=Little(x, y); //извикване (активиране) на функция

//Little и присвояване на нейната стойност на променлива b

}

2. Ако искаме да разменим местата на две променливи T и Р, то активирането на процедурата ще бъде:

change_a_b(Т, Р);

3. Ако искаме да отпечатаме резултата от сравнението на две числа 2*L и K:

System.out.println(Little(2*L, K));

Заместването на формалните параметри на подпрограмите с различни фактически параметри при активиране на подпрограмата се нарича механизъм за предаване на параметри. Механизмът за предаване на параметри позволява подпрограмата да се изпълнява за различни входни данни и да получава различни изходни резултати.

Пр. 5 Примерна програма за подреждане на три реални числа в намаляващ ред:

Popularity: 1% [?]

No related posts.

Related posts brought to you by Yet Another Related Posts Plugin.

You can leave a response, or trackback from your own site.

Leave a Reply

Задвижван с помощта на WordPress | Compare Cell Phone Plans at iCellPhonePlans.com | Thanks to Cheap Palm Pixi, Bromoney and Wordpress Themes