Үй / Windows шолуы / Паскаль рекурсиясында процедуралар мен функцияларды көрсету. Паскаль тіліндегі процедуралар мен функциялар. Рекурсия. Ішкі бағдарламалар Көбінесе тапсырма бағдарламаның әртүрлі бөліктеріндегі операторлардың белгілі бір тізбегін қайталауды талап етеді. Өткізу параметрлері. Формальды параметрлер

Паскаль рекурсиясында процедуралар мен функцияларды көрсету. Паскаль тіліндегі процедуралар мен функциялар. Рекурсия. Ішкі бағдарламалар Көбінесе тапсырма бағдарламаның әртүрлі бөліктеріндегі операторлардың белгілі бір тізбегін қайталауды талап етеді. Өткізу параметрлері. Формальды параметрлер

Ішкі бағдарламалар Көбінесе тапсырма қайталауды қажет етеді белгілі бір реттілікбағдарламаның әртүрлі бөліктеріндегі операторлар. Бұл тізбекті бір рет сипаттау және оны бірнеше рет қолдану үшін бағдарламалау тілдері ішкі бағдарламаларды пайдаланады. Бағыныңқы программа – оны кейіннен негізгі бағдарламада қайталап қолдану үшін арнайы құрастырылған блок заманауи әдістерпрограммалау – құрылымдық программалау


Ішкі бағдарламалар программалауды айтарлықтай жеңілдететін үш маңызды мәселені шешеді: 1. олар бағдарлама мәтініндегі ұқсас фрагменттерді қайталап қайталау қажеттілігін жояды, яғни. бағдарламаның көлемін азайту; 2. талдау кезінде түсінуді жеңілдете отырып, бағдарлама құрылымын жақсартады; 3.қателердің ықтималдығын азайту, бағдарламалау қателеріне және өзгерту кезінде күтпеген салдарға төзімділікті арттыру.


Процедуралар мен функциялар Паскаль тілінде ішкі бағдарламалардың екі түрі бар: процедура (PROCEDURE) және функция (FUNCTION). Паскаль тіліндегі процедуралар мен функциялар айнымалылар бөлімінің артындағы декларация бөлімінде жарияланған. ProgramProgramName; VAR ... // негізгі программаның айнымалыларын сипаттайтын бөлім; процедура ProcedureName; var ... begin ...//Procedure body end; start // негізгі бағдарламаның соңы.


Функциялар мен процедуралардың параметрлері (мән беретін айнымалылар) болады. Олардың екі түрі бар: 1) Формальды – ішкі программаның сипаттамасында болатындар 2) Actual – негізгі программадан функцияға немесе процедураға ауыстырылатындар. Нақты параметрлер саны, реті және түрі бойынша формальды параметрлерге сәйкес келуі керек.




Процедуралар Процедуралар ішкі бағдарламада бірнеше нәтижелерді алу қажет болғанда пайдаланылады. Паскаль тілінде процедуралардың екі түрі бар: параметрлері бар процедуралар және параметрі жоқ процедуралар. Процедураға нақты параметрлерден кейін орындалуы мүмкін процедура аты арқылы қол жеткізіледі. Процедура шақырылған кезде нақты және формальды параметрлер арасында жеке сәйкестік орнатылады, содан кейін басқару процедураға ауысады. Процедура орындалғаннан кейін басқару процедураны шақырғаннан кейін шақырушы бағдарламаның келесі операторына беріледі.


1-мысал: 60 жұлдызды жолды басып шығаратын параметрлері жоқ процедура. процедура pr; var i: integer ; start for i:=1 - 60 do write (* "); writeln; end; begin pr; end.


Мысал 2. c=5 және d=7 екі сандарды ауыстыру программасын құрыңыз obmenDan бағдарламасы; var c,d:integer; процедура алмасу (a,b:integer); var m:integer; бастау m:=a; a:=b; b:=m; writeln(a,b); Соңы; begin writeln("2 санды енгізіңіз: "); readln(c,d); алмасу(c,d); writeln(c," ",d); Соңы. c5 d 7 a 5 b 7 1) 5 және 7 екі параметрі бар obmen процедурасын шақырған кезде a және b айнымалыларында сәйкесінше бірдей 5 және 7 сандары орналастырылады: 2) содан кейін процедурада жады мәндері a және b ұяшықтары қайта реттеледі: c5 d 7 a 7 b 5 3) бірақ c және d айнымалыларында деректер өзгерген жоқ, өйткені олар басқа жады жасушаларында болады


c және d, a және b айнымалылары бірдей жад ұяшықтарына сілтеме жасау үшін (егер a және b мәндері өзгерсе, онда c, d мәндері де өзгереді), формальды параметрлерді сипаттағанда, ол қажетті айнымалылардың алдында VAR сөзін қосу қажет: процедура алмасу (var a,b:integer); с5 d 7 a b


Мысал 3. Бүтін сандардың 3 түрлі массиві берілген (әрқайсысының өлшемі 15-тен аспайды). Әрбір массивте элементтердің қосындысын және арифметикалық ортаны табыңыз. бағдарлама процесі; var i, n, sum: бүтін; sr: нақты; процедура жұмысы (r:integer; var s:integer; var s1:real); var mas: integer массиві ; j:бүтін; бастау s:=0; for j:=1 to r do begin read read (mas[j]); s:=s+mas[j]; Соңы; s1:=s/r; Соңы;


(негізгі бағдарлама) start for i:=1 to 3 do begin write («Vvedite razmer»,i, «masiva: «); readln(n); жұмыс(n, қосынды, sr); (шақыру процедурасының жұмысы) writeln («Қосынды элементов = «,сома); writeln("Srednearifmeticheskoe = ",sr:4:1); Соңы; Соңы.


Бағдарламаның нәтижесі: Бағдарлама жұмыс процедурасын үш рет шақырады, онда r, s, s1 формальды айнымалылар нақты n, sum, sr ауыстырылады. Процедура массив элементтерін енгізеді, қосынды мен орташа мәнді есептейді. s және s1 айнымалылары негізгі программаға қайтарылады, сондықтан олардың сипаттамасының алдында var қызмет көрсету сөзі орналасады. Мас, j жергілікті параметрлері процедурада ғана жарамды. Global - i, n, sum, sr барлық бағдарламада қол жетімді.


Паскаль тіліндегі функциялар Паскаль тіліндегі кіріктірілген функциялар жиынтығы айтарлықтай кең (ABS, SQR, TRUNC және т.б.). Егер бағдарламаға жаңа, стандартты емес функция енгізілген болса, онда ол бағдарлама мәтінінде сипатталуы керек, содан кейін оған бағдарламадан кіруге болады. Тағайындау операторының оң жағында функция атауы мен нақты параметрлерін көрсететін функцияға қол жеткізіледі. Функцияның өзінің жергілікті тұрақтылары, түрлері, айнымалылары, процедуралары және функциялары болуы мүмкін. Паскаль тіліндегі функцияларды сипаттау процедураларды сипаттауға ұқсас.




Мысал 4. а х дәрежелі ішкі бағдарлама функциясын жазыңыз, мұндағы a, x кез келген сандар. Мына формуланы қолданайық: a x = e x ln p2 бағдарламасы; var f, b, s, t, c, d: нақты; (жаһандық айнымалылар) функциясы stp (a, x: real) : нақты; var y: нақты; ( жергілікті айнымалылар) begin y:= exp (x * ln (a)) ; stp:= y;(ішкі программалық есептеулер нәтижесіне функция атын тағайындау) end; (функцияның сипаттамасы аяқталды) begin d:= stp (2.4, 5); (әртүрлі сандар мен айнымалылардың дәрежелерін есептеу) writeln (d, stp (5,3.5)); оқу(f, b, s, t); c:= stp (f, s)+stp (b, t); writeln(c); Соңы.


Функциялар Ішкі бағдарлама жеке есептерді шешуге арналған жеке синтаксистік құрылым ретінде құрастырылған және атымен (тәуелсіз бағдарлама блогы) қамтамасыз етілген бағдарламаның бөлігі болып табылады. Процедураның сипаттамасы: процедура () (жергілікті атауларды орындау бөлімі) Begin (орындаушы операторларға арналған бөлім) Соңы; Функцияның сипаттамасы: функция (): түрі; (жергілікті атауларды сипаттайтын бөлім) Begin (орындалатын операторлар бөлімі) := ; (қажетті параметр) End; Процедураны шақыру: (); Функция шақыруы: := (); 1. Тағайындау операторының оң жағында. 2. Тармақталу операторының шартындағы өрнекте. 3. Шығару процедурасында, функцияның нәтижесі ретінде. Ішкі бағдарламалардың сипаттамасы Процедуралар


Рекурсия Паскаль тіліндегі процедуралар мен функциялар өздерін шақыра алады, яғни. рекурсивтілік қасиеті бар. Рекурсивті функция міндетті түрде бағдарламаның циклін тудырмау үшін рекурсивтілікті аяқтау шартын қамтуы керек. Әрбір рекурсивті шақыру жергілікті айнымалылардың жаңа жинағын жасайды. Яғни шақырылатын функциядан тыс орналасқан айнымалылар өзгертілмейді.


1 функциясы f (n: integer): бүтін; басталса, n = 1 болса, f:= 1 басқа f:= n * f (n -1); (f функциясы өзін шақырады" title="Мысалы 5. n санының факториалын келесідей есептейтін рекурсивті функцияны құрыңыз: n! = 1, егер n= 1 n!= (n -1))! · n егер n > 1 функциясы f (n: integer): integer, егер n = 1 болса, f:= 1 басқа f:= n * f (n -1);" class="link_thumb"> 19 !}Мысал 5. n санының факториалын келесідей есептейтін рекурсивті функцияны құрыңыз: n! = 1, егер n= 1 n!= (n -1)! · n, егер n > 1 функциясы f (n: integer): бүтін; басталса, n = 1 болса, f:= 1 басқа f:= n * f (n -1); (f функциясы өзін шақырады) end; 1 функциясы f (n: integer): бүтін; басталса, n = 1 болса, f:= 1 басқа f:= n * f (n -1); (f функциясы өзін шақырады"> 1 f функциясы (n: integer): бүтін; басталады, егер n = 1 болса, онда f:= 1 басқа f:= n * f (n -1); (f функциясы өзін шақырады) end; " > 1 функциясы f (n: integer): integer, егер n = 1 болса, онда f:= 1 басқа f:= n * f (n -1) (f функциясы өзін шақырады" title="Мысал 5); n санының факториалын келесідей есептейтін рекурсивті функцияны құрыңыз: n= 1 n!= (n -1) n, f (n: integer): бүтін сан; 1 онда f:= 1 басқа f:= n * f (n -1);"> title="Мысал 5. n санының факториалын келесідей есептейтін рекурсивті функцияны құрыңыз: n! = 1, егер n= 1 n!= (n -1)! · n, егер n > 1 функциясы f (n: integer): бүтін; басталса, n = 1 болса, f:= 1 басқа f:= n * f (n -1); (f функциясы өзін шақырады"> !}




Ішкі бағдарламалар В Турбо Паскаль


  • Ішкі бағдарлама Бұл бағдарламаның әртүрлі орындарынан кез келген рет орындауға шақырылатын, аталған, логикалық толық командалар тобы.

Күн тәртібін қолданудың себептері

  • тапсырманы бірнеше қосалқы тапсырмаларға бөлшектеу (бөлу) арқылы үлкен бағдарламаларды әзірлеуді жеңілдету;
  • бағдарламаның көбірек көрінуі;
  • жадты сақтау.

Ішкі программалардың түрлері

процедуралар

функциялары

  • Процедуранақты әрекеттерді орындауға арналған бағдарламаның тәуелсіз аталған бөлігі болып табылады.

Параметрлері жоқ процедуралар

  • Жазу форматы :

процедура ;

Соңы ;

  • Параметрлері жоқ процедураларда қолданылатын барлық айнымалылар негізгі бағдарламада (Var модулінде) сипатталған.

Мысал . Цилиндрдің көлемін табу программасын жаз.

Бағдарлама цилиндрі;

Var R, H, V: нақты;

Процедураны енгізу; (деректерді енгізу процедурасы)

Writeln('радиус мәнін енгізіңіз');

writeln('биіктік мәнін енгізіңіз');

Процедураның формуласы; { процедура есептеулер көлемі }

V: =PI*sqr(R)*H;

Procedure Output ; (нәтижені шығару процедурасы)

writeln('V=',V);


Процедуралар в параметрлері

  • Процедуралар тұрақты мәндерді, айнымалы мәндерді және басқа процедураларды сипаттай алады.
  • Процедуралардағы сипаттау бөлімі негізгі бағдарламадағыдай құрылымға ие.
  • Жергілікті айнымалылар– бұл процедура ішінде сипатталған айнымалылар.
  • Жергілікті айнымалыларға процедурадан тыс қол жеткізу мүмкін емес.
  • Процедураның ішіндегі жергілікті айнымалыларға болатын өзгерістер аттары бірдей айнымалылардың мәндеріне әсер етпейді, бірақ осы процедурадан тыс сипатталған.

Процедуралар в параметрлері

  • Ғаламдық айнымалылар

Мысал .

Бағдарлама задача;

Var a, b: бүтін;

Жергілікті процедура;

Var a, x: char; Үшін процедуралар жергілікті:

БАСТА айнымалы x – жергілікті айнымалы

a:=’! '; (бағдарлама өз мәнін өзгерте алмайды)

b:= b +1; айнымалы б – ғаламдық айнымалы

Соңы ; (процедурадағы осы айнымалы мәннің барлық өзгерістері

BEGIN процедурадан шыққаннан кейін де сақталады)

b:=100; айнымалы а негізгі бағдарламада тұтас түрі

жергілікті; ал процедурада – символдық тип. Айнымалы a

writeln('a =', a); бүтін сан түрі жергілікті процедурада қолжетімді емес.

writeln('b=',b);

Бағдарламаның орындалу нәтижесі: a=0; b =101.


); БАСТА ; Соңы ; "ені = 640"

Параметрлерді келесіге беру Турбо Паскаль

  • 1. Параметрлерді мән бойынша беру
  • Параметрлер-мәндер жақшадағы процедура атынан кейін сипатталған айнымалылар. Олардың алдында Var функционалды сөзі жоқ.
  • Жазу форматы :

процедура (:

айнымалы);

Соңы ;


  • формальды параметрлер .
  • нақты параметрлер .

Мысал .

Бағдарлама параметрлері;

Var m, n: бүтін;

Процедура қосындысы (a, b: бүтін сан);

writeln('S=',S);

жиынтық(m,n); немесе жиынтық(100,10);

Айнымалылар а Және б формальды параметрлер және айнымалылар болып табылады м Және n - нақты. Нақты параметр мәндері м =100 және n =10 формальды параметрлерге беріледі а Және б .

Нақты параметрлерге өзгертулер тек процедура ішінде болады және оларға процедурадан тыс әсер етпейді.


; Айнымалы:); БАСТА ; Соңы ; "ені = 640"

Параметрлерді келесіге беру Турбо Паскаль

  • 2. Параметрлерді аты бойынша беру
  • Айнымалы параметрлер жақшадағы процедура атынан кейін сипатталған айнымалылар және алдында Var қызметтік сөз.
  • Жазу форматы :

процедура (:

айнымалы; Var

айнымалы :)

Соңы ;



b онда мин:= b; егер min c онда min:= c; Соңы ; BEGIN writeln('үш санды енгізіңіз'); readln(a1, b1, c1); writeln('үш санды енгізіңіз'); readln(a2,b2,c2); минимум(a1,b1,c1, min1); минимум(a2,b2,c2, min2); S:= мин1 + мин 2; writeln('S=', S); СОҢЫ. Мысал. Сандардың екі үштігі берілген: a 1, b 1, c 1 және a 2, b 2, c 2. Қосындының мәнін табыңыз: S=min (a1, b1, c1) + min (a2, b2, c2) " ені = 640"

Var a1,b1,c1,a2,b2,c2, min1, min2, S: нақты;

Процедура минимумы (a,b,c: real; Var min: real);

мин b болса min:= b;

егер min c онда min:= c;

writeln('үш санды енгізіңіз');

readln(a1, b1, c1);

writeln('үш санды енгізіңіз');

readln(a2,b2,c2);

минимум(a1,b1,c1, min1);

минимум(a2,b2,c2, min2);

S:= мин1 + мин 2;

writeln('S=', S);

Мысал. Сандардың екі үштігі берілген: a 1, b 1, c 1 және a 2, b 2, c 2. Қосындының мәнін табыңыз: S=min (a1, b1, c1) + min (a2, b2, c2)


Функциянәтижесі белгілі бір мән болатын ішкі бағдарлама болып табылады.

  • Жазу форматы :

функциясы (:

Соңы ;

  • Функцияның денесінде функция атауы оның орындалу нәтижесіне тағайындалуы керек.
  • Функцияны шақыру кезінде оның аты нақты параметрлер тізімімен бірге операнд ретінде өрнекке қосылуы керек.

Бағдарламаны өзгерту;

функция модулі (a: real) : нақты;

writeln('айнымалы мәнді енгізіңіз');

y:= модуль(x-3) + модуль(x+6);

writeln('y=', y);

Мысал . Өрнектің мәнін есептеңіз: y = | x -3 | + | x +6 |

Слайд 1

Слайд 3

Ішкі бағдарламалар: ғаламдық және жергілікті айнымалылар Барлық ішкі бағдарламалар сипаттама бөлімінде сипатталуы керек. Әрбір ішкі бағдарламаның аты болуы керек. Негізгі программа мен ішкі бағдарламалар арасындағы ақпарат бағдарламаның кез келген бөлігінде жұмыс істейтін және негізгі бағдарламада сипатталған атауы бар ғаламдық параметрлер (айнымалылар) арқылы беріледі. Жергілікті параметрлерді (айнымалылар) ішкі бағдарлама ішінде пайдалануға болады - олардың атаулары мен мәндері тек берілген ішкі бағдарламаның шекараларында мағынаға ие және шақырушы бағдарлама үшін қол жетімді емес.

Слайд 4

Формальды және нақты параметрлер Ішкі бағдарламаларды сипаттауда параметрлер тек атаулармен көрсетіледі, сондықтан олар формалды деп аталады. Ішкі бағдарлама шақырылғанға дейін олардың мағынасы жоқ. Олар тек олардың саны мен деректер түрін белгілей отырып, нақты параметрлер үшін орынды сақтайды. Нақты параметрлердің түрлері: Мән параметрлері нақты ішкі бағдарлама параметріне қандай мән тағайындалу керектігін көрсетеді. Ішкі бағдарлама аяқталғаннан кейін олар ішкі бағдарламада өзгертілсе де, бұрынғы мәндерін қабылдайды. Ішкі программадағы айнымалы параметрлер формальдылардың орнын алады, олар ішкі программаның орындалу барысында мәнін өзгерте алады және ішкі бағдарламадан шыққанда өзгерістерді сақтай алады (айнымалы параметрлердің алдында Var түйінді сөзі болады).

Слайд 5

Слайд 6

Процедураның сипаттамасы Program Pr1; Const...Type...Var...Procedure(); Сипаттама бөлім Бастау Процедураның негізгі бөлігі Аяқтау; БАСТА...(); ... Соңы. Процедура шақырылған кезде формальды параметрлер нақтылармен ауыстырылады.

Слайд 7

pr1 бағдарламасы екі санның қосындысын есептеу тәртібі; Usescrt; Var a,b,s:real; процедура summa(x,y:real;var z:real); бастау z:=x+y; Соңы; clrscr бастау; writeln("a,b енгізіңіз"); readln(a,b); жиынтық(a,b,s); writeln("сандардың қосындысы ",a:3:1," және ",b:3:1," = ",s:3:1); readln; Соңы. x,y,z – формальды параметрлер, жергілікті айнымалылар a,b,s – ғаламдық айнымалылар a,b,s – нақты параметрлер x y z a b s Мән параметрлері Параметр айнымалысы

Слайд 8

Слайд 9

Слайд 10

a:=(3n!+2m!)/(m+n) өрнегінің мәнін есептеңдер! Факториалды табу үшін айнымалылардың қандай түрін қолданған дұрыс? pr2 бағдарламасы; Usescrt; Var m,n,x,y,z:бүтін; а: нақты; процедура фактісі(d:integer;var q:integer); var i:integer; бастау q:=1; for i:=1 to d do q:=q*i; Соңы; clrscr бастау; writeln («n, m мәндерін енгізіңіз»); readln(n,m); факт(n,x); факт(м,у); факт(m+n,z); a:=(3*x+2*y)/z; writeln("өрнектің мәні m= ",m:4," және n= ",n:4,"тең",a:8:3); readln; Соңы. N!=1·2·3·…· N

Слайд 11

Бір өлшемді массив элементтерінің кіріс шығысы Random(X) функциясы бүтін немесе нақты түрдегі 0-ден X-ке дейінгі кездейсоқ санды жасайды (функцияны шақырмас бұрын оны Randomize процедурасы арқылы инициализациялау керек). Егер X параметрі көрсетілмесе, нәтиже 0,0-ден 1,0-ге дейінгі аралықта Real типті болады. Кездейсоқ (В-А+1)+А ауқымынан кездейсоқ бүтін сандар массивін алу Тапсырма: Кездейсоқ сандар генераторын (мән диапазоны -10-нан 20-ға дейін) және бір өлшемді массивтің элементтерін енгізуді тұжырымдаңыз. элементтерді процедура ретінде шығару. A=-10 B=20 кездейсоқ(20-(-10)+1)+(-10) үшін

Слайд 12

Слайд 13

Слайд 14

Функцияның сипаттамасы Функциялар тек бір мәнді есептеуге арналған, 1. Сондықтан оның бірінші айырмашылығы процедурада бірнеше параметр үшін жаңа мәндер болуы мүмкін, бірақ функцияның тек бір мәні бар (ол нәтиже болады). 2. Екінші айырмашылық функция атауында. Ол FUNCTION сөзінен тұрады, одан кейін функция атауы, содан кейін жақшадағы формальды параметрлер тізімі, содан кейін қос нүкте арқылы бөлінген функция нәтижесінің түрі көрсетіледі. 3. Функция денесінде кем дегенде бір тағайындау операторы болуы керек, оның сол жағында функция атауы, ал оң жағында оның мәні болады. Функция (): Сипаттама Бастау Функцияның негізгі бөлігі:=; Соңы;

Слайд 15

a:=(3n!+2m!)/(m+n) өрнегінің мәнін есептеңдер! fn2 бағдарламасы; Usescrt; Var m,n:integer; а: нақты; function fact(d:integer) :longint; var i:integer; q:longint; бастау q:=1; for i:=1 to d do q:=q*i; факт:=q; Соңы; бастау clrscr; writeln («n, m мәндерін енгізіңіз»); readln(n,m); a:=(3*факт(n)+2*факт(м))/факт(m+n);; writeln("өрнектің мәні m= ",m:4," және n= ",n:4,"тең",a:8:3); readln; Соңы.

Слайд 16

ab табатын программа жазыңыз, яғни б дәрежесіпернетақтадан енгізілген A сандары, мұнда A және B бүтін сандар және B>0. Функцияны pr2 процедура бағдарламасымен алмастыру арқылы программа құру; Usescrt; Var a,b:integer; c: longint; Функция stepen(x,y:integer):longint; var i:integer; s:longint; бастау s:=1; i:=1 - y үшін s:=s*x; Қадам:=s; Соңы; бастау clrscr; writeln («a, b мәндерін енгізіңіз»); readln(a,b); C:=қадам(a,b); writeln("s=",s); readln; Соңы.

Слайд 17

Слайд 18

Функциялар мен процедураларға параметрлерді беру механизмі Процедура нені басып шығарады және бағдарлама нені басып шығарады? Ғаламдық айнымалылар Жергілікті айнымалылар a b 3 3 -3 Мекенжай c a b c 48 Мекенжай c A:=b+3 B:=3*a C:=a+b Күй C 24 5 8 Жауап

Слайд 19

Паскаль тіліндегі рекурсияМұғалім: Тілехурай Ю.В. «No8 лицей» коммуналдық білім беру мекемесі Суреттерден не көріп тұрсыңдар? Өнердегі бұл құбылыс деп аталады рекурсия «Рекурсияны түсіну үшін алдымен рекурсияны түсіну керек». рекурсия – объектіні өзі арқылы ішінара анықтау, бұрын анықталғандарды пайдаланып объектіні анықтау. Ғылыми тұрғыдан алғанда: Рекурсия - алдымен оның негізгі жағдайларының немесе әдістерінің біреуін немесе бірнешеуін (әдетте қарапайым) көрсету, содан кейін олардың негізінде анықталатын классты құру ережелерін көрсету арқылы объектілер немесе әдістер класын анықтау әдісі. Петер Дойч Питер Дойч

Адамның қайталануы.

Рекурсия Құдайдан.

Физикадағы рекурсияТіл мен әдебиеттегі рекурсия Шексіз рекурсияның классикалық мысалы болып табылады бір-біріне қарама-қарсы орналасқан екі айна: оларда айналардың өшіп қалуынан екі дәліз пайда болады. Шексіз рекурсияның тағы бір мысалы электронды күшейту тізбектеріндегі өздігінен қозу эффектісі (оң кері байланыс)., шығыс сигналы кіріске жеткенде, күшейтіледі, қайтадан тізбектің кірісіне жетеді және қайтадан күшейтіледі. Бұл жұмыс режимі стандартты болып табылатын күшейткіштер өздігінен осцилляторлар деп аталады. Рекурсивті сөздік жазбасының мысалы: «Діни қызметкердің иті бар еді...» - типтік рекурсия Станислав Лемнің бірнеше әңгімелері шексіз рекурсиялы оқиғаларға арналған: қабірлер туралы әңгіме («Тыныш Джонның жұлдызды күнделіктері»), онда кейіпкер қорымдар туралы мақаладан қабір туралы мақалаға, одан кейін тағы да «сепулкария» мақаласына сілтеме бар қабір туралы мақалаға ауысады. Берілген мәселені шешу үшін ұқсас машинаны құрастыруға және оған шешімді сеніп тапсыруға жеткілікті интеллект пен жалқаулыққа ие интеллектуалды машина туралы әңгіме (нәтижесі шексіз рекурсия болды. жаңа көлікөзіне ұқсасты салып, тапсырманы оған тапсырды). Бағдарламалаудағы рекурсия – оның құрамдас операторларының орындалуы кезінде процедура немесе функция өзіне сілтеме жасайтын есептеу процесін ұйымдастыру тәсілі. Мұндай шақыру шексіз болмауы үшін ішкі бағдарламаның мәтіні шартты қамтуы керек, оған жеткенде одан әрі шақыру болмайды. осылайша, рекурсивті шақыру тек ішкі бағдарламаның тармақтарының біріне енгізілуі мүмкін. Мысал. Натурал санның факториалын есептеу n санының факториалын келесідей есептейтін рекурсивті функцияны құрыңыз: f функциясы (n: integer): longint; басталса, n = 1 болса, f:= 1 басқа f:= n * f(n -1); (f функциясы өзін шақырады)Рекурсияны қолданатын Паскаль бағдарламасының соңы: Var n: бүтін; а: ұзындық; функция факториалды (n: integer): longint; басталса, n = 1 болса, онда факторлық:= 1 басқа факторлық:= n * факторлық (n -1); Соңы;

Begin Write(‘n=’); Readln(n); A:= факторлық(n); Write(‘n!=’,a); Readln; Соңы.

Леонардо Пиза Фибоначчи

Фибоначчи сандары сандар тізбегінің элементтері болып табылады Айнымалылардың сипаттамасы: n – қатар элементтерінің саны; a, b – қатардың соңғы екі элементінің мәндері; c – буфер («қосалқы») айнымалы; i – есептегіш. Есепті шешу алгоритмі: 1. n мәнін алыңыз. 2. a және b мәндерін сәйкесінше 0 және 1 тағайындаңыз (бұл Фибоначчи сериясының бірінші сандары). Оларды экранда көрсетіңіз. 3. 3-ші элементтен n-ге дейін: а) a және b қосындысын көрсету, б) в айнымалысының мәнін с ішінде сақтау, б) а мен b қосындысын b-ға жазу, г) а мәнін тағайындау. с. Итерацияны қолданатын Паскаль бағдарламасы: Fibonacci бағдарламасы; var a,b,c,i,n: бүтін; БАСТА write("n = "); readln(n); a:= 0; жазу(a," "); b:= 1; жазу(b," "); i:=3 үшін n басталады жазу(a+b," "); c:= b; b:= a + b; a:=c; Соңы; readln; Соңы. Рекурсияны қолданатын Паскаль бағдарламасы:Фибоначчи сандарын есептеудің рекурсивті анықтамасы келесідей: Фибоначчи сандарының бұл анықтамасын рекурсивті функцияға оңай түрлендіруге болады: function f(n: Integer) : longint; бастау Егер n<= 1 Then f:= n else f:= f(n– 1) + f(n - 2); end; Program chislaFibonacci; var n,i: integer; a: longint; function fib (n: integer): longint; begin If n <= 1 Then fib:= n else fib:= fib(n– 1) + fib(n - 2); End; begin write(‘n=’); readln(n); for i:=0 to n do begin A:= fib (n); write (‘ ’,a); end; readln; end. Домашнее задание Написать программу нахождения НОД двух натуральных чисел, используя алгоритм Евклида и рекурсию Даны два натуральных числа АЖәне б.Егер А= б,содан кейін түйін ( А,б)=а.Егер А>б,содан кейін түйін ( А,б)=түйін ( а -б,б).Егер А< б,содан кейін түйін ( А,б)=түйін ( А,б-а). Бағдарлама noddvyxchisel; var a,b: longint; функция nod(a,b:longint): longint; бастау Егер a = b Содан кейін бас иеді:= a else if a>b болса, онда бас иеді:= бас изеді(a-b,b) басқаша:= бас изеді(a,b-a) End; жазуды бастау('a='); readln(a); write('b='); readln(b); A:= бас изеу(a,b); write(‘nod=’,a); readln; Соңы.

  • Ханой мұнаралары туралы мәселе. Бұл жағдайда келесі ережелерді қатаң сақтау керек:
  • Бір уақытта тек бір дискіні жылжытуға болады;
  • үлкенірек дискіні кішірек дискіге қою мүмкін емес;
  • жойылған дискіні басқа диск шығарар алдында кез келген түйреуішке қою керек.

Еңбекқор будда монахтары дискілерді күндіз-түні шпильден шпильге дейін алып жүреді. Аңыз бойынша, монахтар жұмысын аяқтаған кезде, ақырзаман келеді. 64 дискі бар мәселені шешу үшін 264–1 қозғалыс қажет болатынын есептеуге болады. Демек, ақырзаманға келетін болсақ, егер бір диск бір секундта қозғалатынын ескерсек, ол бес миллиард ғасырдан кейін болады. Дегенмен, мәселені де, оның аңызын да 1883 жылы Сент-Луи колледжінен математик Эдуард Лукас ойлап тапты.

Тапсырма. Дискілер саны n-ге тең (n = 1, 2, ...) Ханой мұнаралары туралы жоғарыда қойылған мәселені шешетін рекурсивті бағдарлама жасаңыз. Шешім. Шпалар үшін атауларды енгізейік: a, b, c . Болсынханой(n,a,b,c) а- дискілердің қозғалыс ретін қайтаратын қажетті функция бқосулы вқолдану а- дискілердің қозғалыс ретін қайтаратын қажетті функция бжоғарыда сипатталған ережелерге сәйкес. n=1 болғанда біз есепті шешу жолын білеміз. Сізге тек «жылжыту» әрекетін орындау керек а- дискілердің қозғалыс ретін қайтаратын қажетті функция « n – 1 дискілер үшін бұл мәселені шешуге болады деп есептейік. n–1 дискіні жылжытыңызбірге а- дискілердің қозғалыс ретін қайтаратын қажетті функция б. Содан кейін қалған бір дискіні жылжытыңыз вжәне соңында n–1 дискіні жылжытыңыз б. қосулыДеректерді енгізу : a тіректі дискілер саны;Шығару : реттілік; Step0:(айнымалы типті анықтау); 1-қадам: (әрекеттер реттілігін көрсететін ханой процедурасының сипаттамасы); 1.1-қадам:((n-1) дискілерді a қазығынан b ілгегіне жылжытыңыз); 1.2-қадам:(n-ші дискіні а-дан в-ге жылжыту); 1.3-қадам:((n-1) дискіні b-ден c-ге жылжыту); (1.2-1.3 қадамдар рекурсивті орындалады); 2-қадам:(негізгі бағдарлама); 2.1-қадам:(дискілердің санын енгізіңіз); 2.2-қадам: (ханой процедурасын шақыру). Паскаль бағдарламасында мәселені шешу bahnya; var n: integer; a,b,c: char; procedure hanoi(n: integer;a,b,c: char); егер n>0 басталса, онда ханой басталады(n-1,a,c,b); writeln («Переместит диск со стержня «,а,» на стержен» ",б); ханой(n-1,c,b,a); соңы; соңы; Жазуды бастау («Vvedite naturalnoe chislo n»); readln ( n) a:="a"; hanoi (n,a,c,b); X Көрсеткіш

  • Кімге
  • Егер k=0 болса, онда дәреже(k,x)=1, Әйтпесе дәреже(k,x)= x· дәреже(k-1,x) Program stepen; var y: нақты; n:бүтін; функция қадамы(k:integer, x:real): нақты; бастау Егер k = 0 Содан кейін қадам:= 1 басқа қадам:= x * қадам(k-1,x) Аяқтау; begin write(‘vvedite osnovanie stepeni x=’); readln(y); write(‘vvedite pokazatel stepeni k=’); Readln(n); write(‘x v stepeni k=’,step(n,y)); readln; Соңы.
  • Өздік жұмыс
  • Санның цифрларының қосындысын табыңыз
  • Берілген натурал санның жай сан екенін анықтаңыз
  • Санның бірінші цифрын табыңыз
  • Ондық бөлшектен натурал санды түрлендіру. екілік 20 элементтен тұратын бүтін массив элементтерінің қосындысын табыңызЕкі бүтін санның мәндерін ауыстырыңыз
  • Үш айнымалының мәндерін реттеңіз a, b, cөсу ретімен
  • Цифрлар санын табыңыз
  • Төрт A, B, C, D арасындағы оң сандардың санын табыңыз
No2 өзіндік жұмыстың жауаптары Бағдарлама қарапайым; var n, m, s: бүтін; функция prost(m, n:integer): логикалық; бастау Егер n = m Онда prost:= true else prost:= (n mod m<>0) және прост (m+1, n); Соңы;

бастау жазу('n='); Readln(n); М:=2; Егер prost(m,n) болса, онда (n,’prostoechislo’) жазыңыз (n,’sostavnoe’); readln; Соңы.

бағдарламаны аудару;

procedure dvd(n:longint);

Егер n >1 болса, онда dvd (n div 2);

жазу (n мод 2);

8 сынып. ABC Pascal тілінде программалау


  • Орал қаласы НЗМ физика-математика пәнінің информатика пәнінің мұғалімі Зеленов Борис Александрович
  • Оқушылар есептерді шешу үшін процедуралар мен функцияларды пайдаланады

  • Оқушылар үлкен есептерді кішігірім есептерге бөлу арқылы шешуге үйренеді

  • Бағдарламалау тіліндегі процедуралар мен функциялар туралы түсінікті құрастырыңыз.

Студенттер «процедуралар» және «функциялар» ұғымдарын біледі, формалды және нақты параметрлерді анықтайды

Күтілетін нәтижелер - Дескрипторлар:

1. «Тәртіптің» анықтамасын біледі

2. «Функция» анықтамасын біледі

3.Нақты және формальды параметрлерді анықтайды

4.Мән және айнымалы параметрлерді ажыратады



5. Бағдарлама кодындағы процедураға немесе функцияға шақыруды табады

Эльвираның стандартты жоспары

1. Қағаздарды алып тастаңыз

2. Гүлдерді суарыңыз

3. Үстелдерді жуыңыз

4. Әйнекті сүртіңіз

Алгоритмнің соңы




Бұл процесті ұйымдастыруды қалай жақсартуға болады?

Сабақтың тақырыбы


Ішкі бағдарламалар:

Ишки багдарлама

Ішкі бағдарлама

Ішкі бағдарлама

Процедура

Параметрлер

Пайдалы сөйлемдер:

Процедураға (функцияға) айнымалы мәндерді беру үшін нақты параметрлер қолданылады...


Процедураны сипаттау үшін алдымен..., содан кейін...

Ішкі программа туралы түсінік

Ішкі бағдарламаАнықтама

- Бұл бағдарламаның жеке функционалды тәуелсіз бөлігі.

Ішкі бағдарламалар


  • Процедуралар
  • бағдарлама мәтінінде ұқсас фрагменттерді бірнеше рет қайталау қажеттілігін жою;
  • түсінуді жеңілдете отырып, бағдарлама құрылымын жақсарту;

  • бағдарламалау қателеріне және бағдарламаны өзгерту кезінде күтпеген салдарға төзімділікті арттыру.

Бағдарламалау тілін пайдаланып қоршау сызыңыз


  • Бұл тапсырмада сіз бір фрагментті (пикет қоршауын) салу алгоритмін орындайтын процедураны жасай аласыз, содан кейін қаламның бастапқы орнын өзгерте отырып, осы процедураға үнемі сілтеме жасай аласыз.

  • Бағдарламалау ортасында шыршаны қалай тиімді салу керектігін сипаттаңыз

Олар арнайы түрде жасалған және өз атауы бар бағдарламалардың тәуелсіз фрагменттері.



Негізгі программа мен ішкі программаның өзара әрекеттесуі

  • Блок-схема

Ішкі бағдарлама (процедура немесе функция) шақыру блогы


Негізгі программа мен ішкі программаның өзара әрекеттесуі


Процедураның сипаттамасы келесідей:

процедураатауы (формальды параметрлер тізімі); сипаттамалар бөлімі БАСТАоператорлар Соңы ;


Функцияның сипаттамасы келесідей көрінеді:

функциясыатауы (формальды параметрлер тізімі): қайтару түрі;

сипаттамалар бөлімі БАСТАоператорлар Соңы ;


Бағдарламадағы орын

Бағдарлама ...;

//Сипаттамасы бөлімі Uses, Const, Var, ...

процедура А ;

БАСТА ....... Соңы ;

процедура Б ;

БАСТА ........ Соңы ;

C функциясы ;

БАСТА ........ Соңы ;

//Негізгі бағдарлама

БАСТА ........ Соңы .


  • Функцияның процедурадан айырмашылығы функция денесін құрайтын операторларды орындау нәтижесі әрқашан бір мән болып табылады, сондықтан функцияны шақыруды айнымалылар мен тұрақтылармен бірге сәйкес өрнектерде қолдануға болады.

Процедуралар

Функциялар

Бірнеше нәтиже болуы немесе кейбір әрекетті орындауы мүмкін

Бір ғана нәтиже бар, оның түрі функцияны жариялау кезінде бөлек көрсетіледі.

Нәтижелер кез келген түрдегі мәндер болуы мүмкін - массивтер, жолдар, сандар және т.б.

Нәтиже тек real, integer немесе char түріндегі мән болуы мүмкін.

Процедураны шақыру пәрмені дербес қолдануға болатын жеке команда болып табылады

Функция шақыруын тек сәйкес түрдегі өрнектің құрамдас бөлігі ретінде пайдалануға болады.

Функция денесінің сол жағында функция атауы бар кемінде бір тағайындау операторы болуы керек.


b онда max:=a басқа max:=b; MaxNumber:= max; соңы;" ені="640"

Процедура немесе функция?

MaxNumber(a,b: integer): бүтін;

var max: бүтін;

MaxNumber:= max;


b онда max:=a басқа max:=b; соңы;" ені="640"

Процедура немесе функция?

MaxNumber(a,b: integer; var max: integer);

егер ab онда max:=a басқа max:=b;


Процедура немесе функция?

ChangeColor(C1, C2: Word);

TextBackGround(C2)


Процедура немесе функция?

Add(X, Y: Integer): Integer;


Нақты

  • Бағдарламаның негізгі бөлімінде көрсетілген

Ресми

  • Ішкі бағдарламада көрсетілген
  • Ішкі бағдарламада көрсетілген

Процедура келесі форматтағы оператор арқылы шақырылады:

процедура атауы (нақты параметрлер тізімі);

  • Нақты параметрлер тізімі- бұл олардың үтірмен бөлінген тізімі.

  • Паскаль тілінің стандартында параметрлерді екі жолмен беруге болады – мән бойынша және сілтеме бойынша. Мән бойынша берілген параметрлер шақырылады параметрлер-мәндер, сілтеме арқылы беріледі - параметрлер-айнымалылар. Соңғысы процедураның (функцияның) тақырыбында олардың алдында var қызметтік сөзінің тұруымен ерекшеленеді.

Өткізу параметрлері. Формальды параметрлер

Айнымалылар

Құндылықтар

Мән бойынша параметрлер

Формальды параметрлер

Айнымалылар


Формальды параметрлер

Мән бойынша параметрлер

  • Бірінші әдісте (мән бойынша өту) нақты параметрлердің мәндері сәйкес формалды параметрлерге көшіріледі.

Ішкі бағдарлама

Процедураның атауы (a, b: бүтін сан);

Негізгі бағдарлама

Процедураны (функцияны) орындау кезінде бұл мәндерді өзгерту кезінде бастапқы деректер (нақты параметрлер) өзгермейді.


Var c, d: бүтін;

  • Анықтама бойынша өту кезінде формальды параметрлері бар процедураның (функцияның) денесінде орын алатын барлық өзгерістер сәйкес нақты параметрлерде дереу ұқсас өзгерістерге әкеледі.

Ішкі бағдарлама

Процедураның атауы (a, b: integer, Var c: real);

Негізгі бағдарлама

Өзгерістер шақырушы блоктың айнымалы мәндерінде болады, сондықтан шығыс параметрлері сілтеме арқылы беріледі. Шақырылған кезде олардың сәйкес нақты параметрлері тек айнымалы болуы мүмкін.


Сіз жазасыз:

1.Нақты параметрлер___________

Procedure Kvad(R: real; var S: real);

2. Формальды параметрлер ___________

3. Формальды параметрлер-мәндер__________

5. Процедураның атауы ___________

6. Бағдарламадан процедураға кіру _____________________


Интерактивті тапсырма

http://www.bzfar.net/load/podprogrammy_procedury_i_funkcii_parametry/23-1-0-498


Эльвира - сынып жетекшісі. Ол сыныпта жалпы тазалық жоспарын құруы керек: қағаздарды алып тастау, гүлдерді суару, үстелдерді жуу, әйнекті сүрту. Ол жұмысын қалай жақсы ұйымдастыра алады? Эльвираға көмектес.


Эльвираның жетілдірілген жоспары

Сабақтың тақырыбы

Арсен - қағаздарды қояды

Мила - гүлдерді суару

Виталий – парталарды жуады

Индира – әйнекті сүрту

1. Арсенді өлтіріңіз

2. Миланы іске қосыңыз

3. Виталийді орындаңыз

4. Индираны іске қосыңыз

4. Әйнекті сүртіңіз


  • Біз бүгін қандай жаңа бағдарламалау тілінің құрылымдарын кездестірдік?
  • Зерттелетін параметрлерді атаңыз
  • Параметрлер процедураға қалай беріледі?

  • Сабақты қорытындылау
  • Анықтамаларды табыңыз: «Жергілікті айнымалылар» және «Жаһандық айнымалылар»
  • Процедураларды немесе функцияларды пайдалануға болатын екі тапсырманы құрастырыңыз.

  • Сабақтың тақырыбын қалай анықтар едің? (өз атыңызды ойлап табыңыз)
  • Келесі сабақта нені үйрену керек деп ойлайсыз?

Кездесейік

келесі сабақ!