Три начина за записване на повтарящи се команди
Има3 начина за писане на команди, които се повтарятв програма: цикли, макроси (макроси)(макроси)(отворени подпрограми) и обикновени подпрограми (затворени подпрограми).
Ако повтарящите се команди са разположени в тялото на програмата на едно място,компактно(една след друга), тогава е възможно (необходимо) да се свият повтарящите се действия вцикъл(ако е намерен обобщен запис за повтарящите се действия).
s:=s+x3; за i:=1 до n направи
Ако повтарящите се действия са силноразпределени в цялото тяло на програмата(разположени на различни места в програмата), тогава е обичайно да се използват макроси (макроси) (макрокоманди) (отворени подпрограми) или обикновени подпрограми (затворени подпрограми), за да се съкратят тези повтарящи се действия. В този случай повтарящите се действия се записват (формулирани като подпрограма)веднъживсякопоявяване на повтарящи се действия трябва да бъде заменено сизвикване на подпрограма.
Подпрограмите са два типа:
- затворен (процедури и функции);
В случай наотворена подпрограма, когато се извика (макро извикване), текстът на макроса (макро заместване) се копира в извикващата точка (вместо извикването) и това се прави (от така наречения препроцесор в C) преди стартирането на компилатора.
Нека, например, е необходимо да добавите 3 числа на различни места в програмата3 пъти. За да добавите всяка тройка от числа, можете да направите прост макрос като този (на C препроцесора):
име на макросаофициални параметри на извикване (какво ви позволява да конфигурирате макроса за работа с
L AQItABQABgAIAAAAIQD/FrNIBQMAAHoGAAAOAAAAAAAAAAAAAAAC4CAABkcnMvZTJvRG9jLnht bFBLAQItABQABgIAAAAAAIQDmviZJ3wAAAAkBAAAPAAAAAAAAAAAAAAAAAF8FAABkcnMvZG93bnJl di54bWxQSwUGAAAAAAAQAB ADzAAAAawYAAAAAA "/>#define sum(x,y,z) ((x)+(y)+(z))
B Ai0AFAAGAAgAAAAhAABzHeEFAwAAegYAAA4AAAAAAAAAAAAAAAAALgIAAGRycy9lMm9Eb2MueG1s UEsBAi0AFAAGAAgAAAAhAIwPElfeAAAACAEAAA8AAAAAAAAAAAAAAAAAXwUAAGRycy9kb3ducmV2 LnhtbFBLBQYAAAAABAAEAPMAAABq Bg AAAAA="/>
какво да променякъм какво да променя
като се вземат предвид параметрите, посочени при повикване
Използвайки такъв макрос, добавянето на различни места в програмата на три тройки - (1,2,3), (4,5,6), (7,8,9) - може да се организира по следния начин: x y z
.
. сума (1,2,3). -->Оригиналнияткодще бъде заменен в точката за повикване, като се направи 1+2+3
действителни параметри на повикване (съответстващи на формалните x,y,z)
. сума (4,5,6). -->Оригиналнияткодще бъде заменен в точката за повикване, като се направи 4+5+6
. сума (7,8,9). -->оригиналниякодще бъде заменен в точката за повикване, като се направи 7+8+9
Достойнствона използването на макрос - по-голямабързинана работа (в сравнение със затворените)
Недостатък– повтаряне на един и същи изходен текст (текст на макро дефиниция) в програмата след всяко заместване на макрос.
В случай назатворена подпрограма (процедура или функция), както и в случай на отворена подпрограма, трябва да опишете подпрограмата веднъж и след това да я извикате няколко пъти. Само за разлика от отворена подпрограма, когато се извика затворена подпрограма, текстът на макроса не се копира в точката за повикване, а вместо това се прехвърля управлението от точката за повикване към подпрограмата - подпрограмата се изпълнява и след завършването си връща управлението на програмната точка, следваща точката за повикване.
Описание на затворена подпрограма (функция) =заглавка + блок:
име формални параметри на подпрограмата
тип връщане
функция sum(x,y,z: real):real;
Всички действия в тялотоподпрограмите (на мястото на тяхното описание) се изпълняват по формални параметри. |
Използвайки такава подпрограма, добавянето на три тройки на различни места в програмата - (1,2,3), (4,5,6), (7,8,9) - може да се организира по следния начин:
. s:=сума(1,2,3);. --> сумата ще бъде извикана истойносттана сумата 1+2+3 ще бъде заменена в извикващата точка
действителни параметри на разговора
. s:=сума(4,5,6);. --> сумата ще бъде извикана истойносттана сумата 4+5+6 ще бъде заменена в извикващата точка
. s:=сума(7,8,9);. --> сумата ще бъде извикана истойносттана сумата 7+8+9 ще бъде заменена в извикващата точка
Ето какво се случва с описаните извиквания на функции (затворена подпрограма) в програмната памет: прехвърляне на управление (от програма към подпрограма)
Функционален код SUM в паметта |
. връщане на управление (и стойност)
. връщане на управление (и стойност)
. връщане на управление (и стойност)
Програмна подпрограма сума
Недостатъкпри използването на затворени подпрограми - по-нискаскоростна работа (в сравнение с макро) - времето се изразходва за прехвърляне на управление (първо към подпрограмата и след това обратно) и за прехвърляне на параметри към / от подпрограмата.
Предимства (предимства) от използването на подпрограми в програма:
- спестяване на място (в програмата) - --- описваме само 1 път в програмата;
- спестяване на време (програмист) --- еднократно отстраняване на грешки;
- програмата се отстранява по-лесно (по-лесно се намира къде е грешката) --- ако е разделена на части;
- може да се използва за разработване на програма от няколко програмиста.
Концепция за блок
Затворена подпрограма (докато говорим за процедура ) се състои отЗаглавкаиБлок.
Заглавиесъдържа описание на името на процедурата и формалните параметри (аргументи - тези, които са дадени - и резултати - тези, които трябва да бъдат получени и предадени на точката за повикване).
Блокна процедурата съдържа описание на така наречените локални променливи и действията на подпрограмата (нейното тяло).
Дефиниция:Блок- фрагмент от подпрограма или програма, която съдържа действия върху определени конкретни обекти и описания на тези обекти. Действията в блок са оградени между думитеbeginиend(Pascal).
В C конструкцията може да се използва самостоятелно почти навсякъде, където може да се появи нормален оператор:
В Pascal, за разлика от C, блоковетене се използват самостоятелно, а само като част от подпрограми и програми (блок се добавя със заглавка и описания на променливи, локални за блока).
Забележка.Не бъркайте съставния оператор с блока. Съставният оператор включва само действия, докато блокът е пълна конструкция, където има както описания, така и действия.
Блоковете савъншни (обграждащи) ивътрешни (такова разделение е относително).
1Програма p1;блок1глобален